05 2013 档案

proc文件系统
摘要:一:proc文件系统: (1)proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。(2)简要介绍其下文件:/proc/cpuinfo cpu信息/p... 阅读全文

posted @ 2013-05-31 09:49 疯子123 阅读(155) 评论(0) 推荐(0) 编辑

C++注意小知识点
摘要: 阅读全文

posted @ 2013-05-29 14:42 疯子123 阅读(80) 评论(0) 推荐(0) 编辑

shell脚本图书
摘要:《高级Bash脚本编程指南》《Linux命令行和Shell脚本编程》Linux与UNIX Shell编程指南--------------------已看!unix shell编程(第三版)Shell十三问实战LINUX+SHELL编程与服务器管理linuxsir的shell脚本赏析shell脚本学... 阅读全文

posted @ 2013-05-29 11:17 疯子123 阅读(169) 评论(0) 推荐(0) 编辑

free 与 delete
摘要:1. delete 用于释放 new 分配的空间,free 有用释放 malloc 分配的空间2. delete [] 用于释放 new [] 分配的空间3. delete 释放空间的时候会调用 相应对象的析构函数 顺便说一下new在分配空间的时候同时会调用对象的构造函数,对对象进行初始化... 阅读全文

posted @ 2013-05-24 00:34 疯子123 阅读(174) 评论(0) 推荐(0) 编辑

C++11 中值得关注的几大变化
摘要:参考:http://zh.wikipedia.org/wiki/C%2B%2B11Lambda 表达式Lambda表达式来源于函数式编程,说白就了就是在使用的地方定义函数,有的语言叫“闭包”,如果 lambda 函数没有传回值(例如 void ),其回返类型可被完全忽略。 定义在与 lambda ... 阅读全文

posted @ 2013-05-24 00:26 疯子123 阅读(107) 评论(0) 推荐(0) 编辑

C++11 多线程
摘要:[cpp] view plaincopyprint?#include #include #include #include #include #include using namespace std; map g_pages; mutex g_p... 阅读全文

posted @ 2013-05-24 00:24 疯子123 阅读(103) 评论(0) 推荐(0) 编辑

C++11 多线程
摘要:C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread(),beginthread()等,使用起来都比较复杂,C++11提供了新头文件、、、等用于支持多线程。使用C++11开启一个线程是比较简... 阅读全文

posted @ 2013-05-24 00:13 疯子123 阅读(114) 评论(0) 推荐(0) 编辑

linux core文件设置
摘要:在Linux中,一般当进程非正常退出时,会生成一个core文件,这个文件是进程猝死时内存的转储文件,也称为core dump。查看Linux脚本解析方式: echo $0 1.检验core是否打开以see/see登录 csh: limit; coredumpsize = 0 , 说... 阅读全文

posted @ 2013-05-23 09:51 疯子123 阅读(351) 评论(2) 推荐(0) 编辑

图书收集
摘要:java图书:《Java 2 核心技术》、2.《Java编程语言》、3.《Effective Java》、4.《Java解惑》、5.《Java编程思想》c语言图书:1.《C程序设计语言》、2.《C和指针》、3.《C陷阱与缺陷》、4.《C专家编程》、5.《你必须知道的495个C语言问题》C++图书:... 阅读全文

posted @ 2013-05-22 16:04 疯子123 阅读(117) 评论(0) 推荐(0) 编辑

华为内部面试题库---(22)
摘要:1、以下4种64位架构中,与其他3种不一致的是?(B)A.Intel 64B.IA64C.AMD 64D.IA32_64解析:Intel 64等同于IA32_64,和AMD64一样都是在IA32基础上通过扩展内存技术实现的64位;兼容IA32的软件。IA64是Intel安腾系列处理器的架构名称,是... 阅读全文

posted @ 2013-05-20 13:29 疯子123 阅读(300) 评论(0) 推荐(0) 编辑

华为内部面试题库---(21)
摘要:1. Linux内核引导过程,正确包括以下:ABCDA.CPU自身初始化B.BIOS加电自检C.加载内核引导程序D.加载内核与initrd解析:X86系统引导系统如下:Linux内核自上电后,正确包括:CPU自身初始化,bios加电自检,加载内核引导程序,加载内核与initrd。 2.有关Linu... 阅读全文

posted @ 2013-05-20 13:05 疯子123 阅读(199) 评论(0) 推荐(0) 编辑

华为内部面试题库---(20)
摘要:1. 最新linux内核对普通进程使用的调度算法是(C) //http://www.ibm.com/developerworks/cn/linux/l-cn-scheduler/index.htmlA O(N)B O(1)C CFSD BFS2. 下面对linux进程调度说法错误的是(A) //深... 阅读全文

posted @ 2013-05-20 13:04 疯子123 阅读(269) 评论(0) 推荐(0) 编辑

华为内部面试题库---(19)
摘要:1. 在Linux操作系统中,以Ext文件系统为例,下列那个数据结构在磁盘上没有对应的项:(《深入理解Linux内核》P461-480)A、inode;B、dentry;C、super_block;D、ext_dir_entry。答案:B。解释:dentry是Linux VFS方便查找引入的内存数... 阅读全文

posted @ 2013-05-20 11:53 疯子123 阅读(500) 评论(0) 推荐(0) 编辑

华为内部面试题库---(18)
摘要:1、关于伙伴算法,下列说法正确的是(单选):(《深入理解linux内核》P303-P313)A、伙伴算法会造成内部碎片B、alloc_pages(gfp_mask, order)返回第一个所分配页框的线性地址C、只要内存足够,可以使用伙伴算法分配任意大小的内存D、称为伙伴的两个块要求大小相同,且物... 阅读全文

posted @ 2013-05-20 11:50 疯子123 阅读(381) 评论(0) 推荐(0) 编辑

华为内部面试题库---(17)
摘要:1、分页映射是内存管理最重要的技术之一,以下说法错误有(多选):(《深入理解LINUX内核》第二章)A、通过分页映射,MMU在每次访问时都需要经过特权级、权限等检查,防止访问不该访问的内容,达到保护的作用B、通过分页映射,MMU将线性地址转换为物理地址C、通过分页映射,MMU将虚拟地址转换为线性地... 阅读全文

posted @ 2013-05-20 11:48 疯子123 阅读(409) 评论(0) 推荐(0) 编辑

华为内部面试题库---(16)
摘要:1.内核对磁盘数据的高速缓存有:(多选)A.目录项高速缓存B.页高速缓存C.索引节点高速缓存D.超级块高速缓存参考答案:ABC 分析:磁盘高速缓存有三种:目录项高速缓存,页高速缓存与索引节点高速缓存,内核会把磁盘上的超级块以读出,以VFS超级块的方式存储在内存中,不存在超级块高速缓存。 参考... 阅读全文

posted @ 2013-05-20 11:38 疯子123 阅读(250) 评论(0) 推荐(0) 编辑

华为内部面试题库---(15)
摘要:1、 以下属于内核同步机制的是(多选)A. 信号量B. spinlockC. RCUD. seqlockE. 原子操作参考答案:ABCDE 解析:Linux内核的信号量在概念和原理上与用户态的System V的IPC机制信号量是一样的,但是它绝不可能在内核之外使用。信号量在创建时需要设置一个初始... 阅读全文

posted @ 2013-05-20 11:33 疯子123 阅读(142) 评论(0) 推荐(0) 编辑

华为内部面试题库---(14)
摘要:1、 关于虚拟地址空间的说法错误的是()A. 进程地址空间是用多少分配多少,4G仅仅是最大限额B. 进程的地址空间并不一定对应实际的物理页C. 不同进程的不同虚拟地址可以映射到相同的物理页D. 不同进程的相同虚拟地址不能映射到相同的物理页解答:D 2、 关于mmap... 阅读全文

posted @ 2013-05-20 11:31 疯子123 阅读(157) 评论(0) 推荐(0) 编辑

华为内部面试题库---(13)
摘要:1.低速系统调用是可能会使进程永远阻塞的一类系统调用,包括下列哪些调用(多选):(参考:UNIX环境高级编程,第2版,第14章,高级I/O,14.2小节)A.如果某些文件类型(例如管道、终端设备和网络设备)的数据并不存在,则读操作可能会使调用者永远阻塞B.如果数据不能立即被上述同样类型的文件接受(... 阅读全文

posted @ 2013-05-20 11:29 疯子123 阅读(299) 评论(0) 推荐(0) 编辑

华为内部面试题库---(12)
摘要:1.关于可用的IO函数,说法错误的是:(参考:UNIX环境高级编程,第2版,第3章,文件I/O,3.3 3.4 3.6 3.7小节)A.调用open函数只能打开一个文件B.调用creat函数可以创建一个新文件C.可以调用lseek显式地为一个打开的文件设置其偏移量D.调用read函数从打开文件中读... 阅读全文

posted @ 2013-05-20 11:27 疯子123 阅读(149) 评论(0) 推荐(0) 编辑

华为内部面试题库---(11)
摘要:1.关于I/O的体系结构说法错误的是(单选):(参考:深入理解LINUX内核,第三版,第十三章,I/O体系结构和设备驱动程序,I/O体系结构小节)A.PC的I/O体系结构包含的硬件组织层次:I/O端口、接口和设备控制器B.在I/O端口中,可以把两个连续的8位端口看成一个16位端口,但是这必须从偶数... 阅读全文

posted @ 2013-05-20 11:25 疯子123 阅读(178) 评论(0) 推荐(0) 编辑

华为内部面试题库---(10)
摘要:1. 对于linux内核信号量,说法正确的是(多选):(参考:Linux内核设计与实现,第二版,第9章,9.4小节)A. 如果获取一个被占用的信号量,任务会睡眠,等待信号量释放之后,该任务才能重新获得调度B. 信号量可以允许任意数量的锁持有者C. 信号量保护的代码可以被抢占D. 信号量的实现也是与... 阅读全文

posted @ 2013-05-20 11:22 疯子123 阅读(253) 评论(0) 推荐(0) 编辑

华为内部面试题库---(9)
摘要:1.spinlock可通过配置选项CONFIG_DEBUG_SPINLOCK来打开内核编译选项,进行自旋锁调试,作用有(多选):(参考:Linux内核设计与实现,第二版,第9章,9.2节)A. 内核会检查是否使用了为初始化的锁B. 内核会检测潜在的死锁C. 检测是否在没有加锁的情况下对锁执行开锁操... 阅读全文

posted @ 2013-05-20 11:19 疯子123 阅读(377) 评论(0) 推荐(0) 编辑

华为内部面试题库---(8)
摘要:1、内核中有可能造成并发执行的原因(多选):(参考:Linux内核设计与实现,第二版,第8章)A、中断B、软中断和taskletC、工作队列(注意工作队列、软中断和tasklet的原理)D、睡眠以及与用户空间同步E、内核抢占F、对称多处理答案:A、B、D、E、F试题解析:在一台运行 Linux 的... 阅读全文

posted @ 2013-05-20 11:14 疯子123 阅读(832) 评论(1) 推荐(0) 编辑

华为内部面试题库---(7)
摘要:1、以下四种Cache映射方式中,哪一种是不正确的?A.直接映射B.全相联映射C.块相联映射D.组相联映射答案:Chttp://wenku.baidu.com/view/b353051e650e52ea55189811.html 2、以下关于Cache映射方式的解释,错误的是?A.全相联映射即主存... 阅读全文

posted @ 2013-05-20 11:12 疯子123 阅读(409) 评论(0) 推荐(0) 编辑

华为内部面试题库---(6)
摘要:1.在SMP体系结构中,中断亲和性是指将一个或者多个中断绑定到特定CPU core上运行,下列说法错误的是:A.每个硬件设备都会在/proc/irq下有个中断号命令的目录来标志中断亲和性B.IRQ#目录下smp_affinity文件,通过设置CPU位掩码,把相应中断绑定到不同CPU处理C.修改sm... 阅读全文

posted @ 2013-05-20 11:06 疯子123 阅读(246) 评论(0) 推荐(0) 编辑

华为内部面试题库---(5)
摘要:1、分时操作系统与实时操作系统最本质的区别是: A 处理逻辑的正确性 B 得出结果的时间的确定性 C 关注系统吞吐率,平均响应时间 D 其他答案:B试题解析:出处:http://www.360doc.com/content/11/0321/16/507289_103227092.... 阅读全文

posted @ 2013-05-20 10:57 疯子123 阅读(284) 评论(0) 推荐(0) 编辑

华为内部面试题库---(4)
摘要:1、在OSI参考模型中,实现端到端的应答、分组排序和流量控制功能的协议层是 _____ 。A.数据链路层 B.网络层 C.传输层 D.会话层答案:C 此题主要考查了ISO OSI/RM体系结构中各层的主要功能。 物理层:物理层主要是设计处理机械的、电气的和过程的接口,... 阅读全文

posted @ 2013-05-20 10:54 疯子123 阅读(537) 评论(0) 推荐(0) 编辑

华为内部面试题库---(3)
摘要:1、NUMA系统中,各个节点间的距离由下列哪个数据结构获取()A、SRATB、SLITC、e820图D、bootmem_data答:选B Linux 对 NUMA 系统的物理内存分布信息是从系统 firmware 的 ACPI 表中获得的,最重要的是 SRAT(System Resourc... 阅读全文

posted @ 2013-05-20 10:50 疯子123 阅读(323) 评论(0) 推荐(0) 编辑

华为内部面试题库---(2)
摘要:1.在分页存储管理系统中,从页号到物理块号的地址映射是通过( )实现的。A.段表 B.页表 C.PCB D.JCB答案:B 用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等,可将用户程序的某一页放在内存的一个块中。线性地... 阅读全文

posted @ 2013-05-20 10:44 疯子123 阅读(543) 评论(0) 推荐(0) 编辑

华为内部面试题库---(1)
摘要:1.启动init进程前,不需要经过()步骤。A.加载内核B.检测内存C.加载文件系统D.启动网络支持答案:DLinux启动过程可以分为以下几个步骤:1 BIOS自检。即进行所谓的POST(Power On SelfTest),然后根据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入"引导块"... 阅读全文

posted @ 2013-05-20 10:24 疯子123 阅读(1461) 评论(0) 推荐(0) 编辑

linux内核中:likely和unlikely函数
摘要:内核源码:linux-2.6.38.8.tar.bz2 参考文档:http://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/Other-Builtins.html#Other-Builtins 在Linux内核中likely和unlikel... 阅读全文

posted @ 2013-05-17 15:25 疯子123 阅读(343) 评论(0) 推荐(0) 编辑

在C/C++程序里打印调用栈信息
摘要:我们知道,GDB的backtrace命令可以查看堆栈信息。但很多时候,GDB根本用不上。比如说,在线上环境中可能没有GDB,即使有,也不太可能让我们直接在上面调试。如果能让程序自己输出调用栈,那是最好不过了。本文介绍和调用椎栈相关的几个函数。 NAME backtra... 阅读全文

posted @ 2013-05-14 16:56 疯子123 阅读(366) 评论(0) 推荐(0) 编辑

backtrace-----打印进程异常退出时的堆栈信息
摘要:#include #include "debug_trace.h" #define TRACE_SIZE 1024 static void trace_print(int signal_type) { int trace_id = -1; void *buffer[100]; c... 阅读全文

posted @ 2013-05-14 16:46 疯子123 阅读(342) 评论(0) 推荐(0) 编辑

linux内存管理概述
摘要:linux内存管理建立在基本的分页机制基础上,在linux内核中RAM的某些部分将会永久的分配给内核,并用来存放内核代码以及静态内核数据结构。RAM的其余部分称为动态内存,这不仅是进程所需的宝贵资源,也是内核本身所需的宝贵资源。实际上,整个系统的性能取决于如何有效地管理动态内存。因此,现在所有多... 阅读全文

posted @ 2013-05-14 16:15 疯子123 阅读(94) 评论(0) 推荐(0) 编辑

CFS 调度器学习笔记
摘要:http://blog.csdn.net/peimichael/article/details/5218335 阅读全文

posted @ 2013-05-14 14:46 疯子123 阅读(103) 评论(0) 推荐(0) 编辑

CFS进程调度
摘要:一、概述 linux 2.6.23中采用了一个全新的调度策略CFS(Completely Fair Scheduler)来处理非实时进程。 二、主要数据结构 1.为了和原先的实时策略更好的融合,linux在实现CFS之余,还将内核的调度策略模块化,添加了新的结构体sched_class用于管理... 阅读全文

posted @ 2013-05-14 14:43 疯子123 阅读(276) 评论(0) 推荐(0) 编辑

GCC编译之如何控制共享文件导出符号
摘要:背景 前不久在调试一个与导出符号相关的bug,问题大概如此: 模块A.so在堆上构造了一个对象即 CTest *one = new CTest; , CTest在A.so定义,后来使用one->AMemFunc();,即调用一个成员函数时崩溃。原来在另一个模块B.so(比A.so先加载)中,也... 阅读全文

posted @ 2013-05-14 11:07 疯子123 阅读(342) 评论(0) 推荐(0) 编辑

Ubuntu10.04下Linux内核编译的完整步骤
摘要:1、在http://www.kernel.org/上下载最新的内核源代码linux-2.6.33.1.tar.bz2,放在/huangcheng/Linux内核 目录下,huangcheng是Linux OS的第一个用户名。 2、进入Linux内核源码所在的目录(cd Linux内核),解压该内核... 阅读全文

posted @ 2013-05-12 03:13 疯子123 阅读(144) 评论(0) 推荐(0) 编辑

浅尝异步IO
摘要:关于异步IO 记得几年前使用MFC编程的时候,曾经使用过windows的异步socket。 当在socket句柄上设置好关心的事件(如,可读、可写)后,如果事件发生,则指定的窗口会收到一个指定的消息。 int WSAAsyncSelect(SOCKET s, HWND hWnd, unsig... 阅读全文

posted @ 2013-05-12 02:50 疯子123 阅读(117) 评论(0) 推荐(0) 编辑

linux异步IO浅析
摘要:知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上。预先知道这些数据的位置,所以预先发起异步IO读请求。等到真正需要用到这些数据的时候,再等待异步IO完成。使用了异步IO,在发起IO请求到实际使用数据这段时间内,程... 阅读全文

posted @ 2013-05-12 01:29 疯子123 阅读(163) 评论(0) 推荐(0) 编辑

LINUX内核内存屏障
摘要:================= LINUX内核内存屏障 ================= By: David Howells Paul E. McKenney ... 阅读全文

posted @ 2013-05-12 01:28 疯子123 阅读(234) 评论(0) 推荐(0) 编辑

linux内存屏障浅析
摘要:内存屏障是一个很神奇的东西,之前翻译了linux内核文档memory-barriers.txt,对内存屏障有了一定有理解。现在用自己的方式来整理一下。 在我看来,内存屏障主要解决了两个问题:单处理器下的乱序问题和多处理器下的内存同步问题。 为什么会乱序 现在的CPU一般采用流水线来执行指令。... 阅读全文

posted @ 2013-05-12 01:24 疯子123 阅读(148) 评论(0) 推荐(0) 编辑

记一个linux内核内存提权问题
摘要:前些天,linux内核曝出了一个内存提权漏洞。通过骇客的精心构造,suid程序将print的输出信息写到了自己的/proc/$pid/mem文件里面,从而修改了自己的可执行代码,为普通用户开启了一个带root权限的shell。这个过程还是挺有意思的,不得不佩服骇客们的聪明才智,故在此分享一下,... 阅读全文

posted @ 2013-05-12 01:23 疯子123 阅读(116) 评论(0) 推荐(0) 编辑

linux会话浅析
摘要:说起会话,我们经常登录到linux系统,执行各种各样的程序,这都牵涉到会话。但是,一般情况下我们又很少会去关注到会话的存在,很少会去了解它的来龙去脉。本文就对linux会话相关的信息做一些整理,看看隐藏在我们日常使用的背后,都有些什么样的逻辑。 【会话的维系】 维系一个会话,最常见的有两种方... 阅读全文

posted @ 2013-05-12 01:22 疯子123 阅读(168) 评论(0) 推荐(0) 编辑

linux内核mem_cgroup浅析
摘要:memory cgroup mem_cgroup是cgroup体系中提供的用于memory隔离的功能。 admin可以创建若干个mem_cgroup,形成一个树型结构。可以将进程加入到这些mem_cgroup中。(类似这样的管理功能都是由cgroup框架自带的。) 为了实现memory隔离,... 阅读全文

posted @ 2013-05-12 01:20 疯子123 阅读(475) 评论(0) 推荐(0) 编辑

linux内核cfs浅析
摘要:linux调度器的一般原理请参阅《linux进程调度浅析》。 之前的调度器 cfs之前的linux调度器一般使用用户设定的静态优先级,加上对于进程交互性的判断来生成动态优先级,再根据动态优先级决定进程被调度的顺序,以及调度后可以运行的时间片。 反过来,随着进程的... 阅读全文

posted @ 2013-05-12 01:19 疯子123 阅读(356) 评论(0) 推荐(0) 编辑

浅谈动态库符号的私有化与全局化
摘要:之前一篇《记一个链接库导出函数被覆盖的问题》中,描述了这样一个问题:动态库若想使用自己的符号,不受可执行程序(或其他动态库的影响),可以使用-Wl,-Bsymbolic链接参数或version_script来让动态库的符号自我解决,而不必通过全局符号表来动态解决。 之前的文章也提到,使用-Wl,... 阅读全文

posted @ 2013-05-12 01:13 疯子123 阅读(577) 评论(0) 推荐(0) 编辑

linux内核tmpfs/shmem浅析
摘要:说起共享内存,一般来说会让人想起下面一些方法: 1、多线程。线程之间的内存都是共享的。更确切的说,属于同一进程的线程使用的是同一个地址空间,而不是在不同地址空间之间进行内存共享; 2、父子进程间的内存共享。父进程以MAP_SHARED|MAP_ANONYMOUS选项mmap一块匿名内存,for... 阅读全文

posted @ 2013-05-12 01:12 疯子123 阅读(368) 评论(0) 推荐(0) 编辑

linux IPv4报文处理浅析
摘要:在《linux网络报文接收发送浅析》一文中介绍了数据链路层关于网络报文的处理。 对于接收到的报文,如果不被丢弃、不被网桥转发,会调用netif_receive_skb()提交给IP层; 而对于IP层向外发送的报文,则通过调用dev_queue_xmit()提交给数据链路层。 本文就以neti... 阅读全文

posted @ 2013-05-12 01:10 疯子123 阅读(592) 评论(0) 推荐(0) 编辑

linux memory lock浅析
摘要:linux内核提供了用于锁定内存的系统调用,如: mlock:lock一段地址范围内已map的内存 mlockall:lock进程虚拟地址空间内已map的内存,还可以选择对于此后新map的空间是否自动lock mmap+MAP_LOCKED选项:在mmap的同时,对相应地址范围进行mlo... 阅读全文

posted @ 2013-05-12 01:06 疯子123 阅读(399) 评论(0) 推荐(0) 编辑

由mmap引发的SIGBUS
摘要:一直以来都觉得使用mmap读文件是非常高效、非常优雅的做法(参见《从"read"看系统调用的耗时》)。mmap之后,就可以通过内存访问的方式访问到文件里的内容,省去了read这样的系统调用。 却不曾想过,mmap以后,如果读文件出错会发生什么…… 今晚看到一篇介绍apache bug的文章,里... 阅读全文

posted @ 2013-05-12 00:32 疯子123 阅读(512) 评论(0) 推荐(0) 编辑

linux时钟浅析
摘要:时钟的作用 尽管与CPU指令执行没有什么直接关系,时钟对于操作系统来说还是有着很重要的意义: 1、记录系统时间。很多应用程序需要知道日期和时间、由日期和时间构成的时间戳也会被打在文件上面、等等; 2、统计功能。如top之类的用户程序可以查看一段时间内的系统负载、以及各个进程占用CPU的时间... 阅读全文

posted @ 2013-05-12 00:28 疯子123 阅读(271) 评论(0) 推荐(0) 编辑

记一个链接库导出函数被覆盖的问题
摘要:链接库的一个问题 前些天遇到这样一个问题:libD.so需要用到libS.a提供的方法,于是静态链接了libS.a。而libS.a和libD.so又都会被可执行文件bin所链接。(因为libD.so还提供给其他可执行程序使用,所以链接libS.a是必须的。而libD.so对于bin来说是可选的... 阅读全文

posted @ 2013-05-12 00:27 疯子123 阅读(160) 评论(0) 推荐(0) 编辑

linux seqlock & rcu 浅析
摘要:在linux内核中,有很多同步机制。比较经典的有spin_lock(忙等待的锁即自旋锁)、mutex(互斥锁)、semaphore(信号量)等。并且它们几乎都有对应的rw_XXX(读写锁),以便在能够区分读与写的情况下,让读操作相互不互斥(读写、写写依然互斥)。而seqlock和rcu应该可以不算... 阅读全文

posted @ 2013-05-12 00:24 疯子123 阅读(135) 评论(0) 推荐(0) 编辑

在多线程程序里面fork
摘要:在多线程程序里面fork?没错,尽管这是一种很奇怪、以至于几乎不会有人使用的玩法,并且存在死锁等不确定因素。不过讨论讨论倒也挺有意思。 进程A,创建了3个线程。 $ ls /proc/A/task/ | wc -l 3 这时候,A调用fork,创建了进程B。那么B有几个线程呢? $ ls /... 阅读全文

posted @ 2013-05-12 00:22 疯子123 阅读(344) 评论(0) 推荐(0) 编辑

浅谈linux定时器模型
摘要:用户态的定时器设计 记得某段时间的工作中,经常会用到定时器。发现有些同学为了图方便,会这样实现定时器: while(1) { sleep_awhile(); while((timer = get_expired_timer())) do_timer_handle... 阅读全文

posted @ 2013-05-12 00:19 疯子123 阅读(215) 评论(0) 推荐(0) 编辑

linux网桥浅析
摘要:什么是桥接? 简单来说,桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。 交换机就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。于是,与交换机相连的若干主机就能够通过交换机的报文转发而... 阅读全文

posted @ 2013-05-12 00:17 疯子123 阅读(165) 评论(0) 推荐(0) 编辑

linux网络报文接收发送浅析
摘要:对于linux内核来说,网络报文由网络设备来进行接收。设备驱动程序从网络设备中读取报文,通过内核提供的网络接口函数,将报文传递到内核中的网络协议栈。报文经过协议栈的处理,或转发、或丢弃、或被传送给某个进程。 网络报文的发送与之相反,进程通过系统调用将数据送入网络协议栈,或者由网络协议栈自己发起报... 阅读全文

posted @ 2013-05-11 19:55 疯子123 阅读(543) 评论(0) 推荐(0) 编辑

linux文件读写浅析
摘要:在《linux内核虚拟文件系统浅析》这篇文章中,我们看到文件是如何被打开、文件的读写是如何被触发的。 对一个已打开的文件fd进行read/write系统调用时,内核中该文件所对应的file结构的f_op->read/f_op->write被调用。 本文将顺着这条路走下去,大致看看普通磁盘文件的读... 阅读全文

posted @ 2013-05-11 19:51 疯子123 阅读(243) 评论(0) 推荐(0) 编辑

linux slub分配器浅析
摘要:在《linux内存管理浅析》中提到内核管理自己使用的内存时,使用了SLAB对象池。SLAB确实是比较复杂,所以一直以来都没有深入看一看。 不过现在,linux内核中,SLAB已经被它的简化版--SLUB所代替。最近抽时间看了一下SLUB的代码,略记一些自己的理解。 尽管SLUB是在内核里面实现的... 阅读全文

posted @ 2013-05-11 19:49 疯子123 阅读(234) 评论(0) 推荐(0) 编辑

linux文件系统实现浅析
摘要:之前有两篇文章整理过linux虚拟文件系统的结构,和linux文件读写的流程。其中一些由具体文件系统类型来实现的地方并没有深入叙述,只是说这是由具体的文件系统来实现的。比如,读写文件的时候,文件的读写位置怎么对应到实际的磁盘块呢?这是由具体的文件系统来实现的;再比如,寻找一个文件路径的时候,怎么... 阅读全文

posted @ 2013-05-11 19:45 疯子123 阅读(224) 评论(0) 推荐(0) 编辑

linux虚拟文件系统浅析
摘要:虚拟文件系统(VFS) 在我看来, "虚拟"二字主要有两层含义: 1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统. VFS隐藏了它们的实现细节, 为使用者提供统一的接口; 2, 目录结构本身并不是绝对的, 每个进程可能会看到不一样的目录结构. 目录结构是由"地址空间(names... 阅读全文

posted @ 2013-05-11 19:40 疯子123 阅读(94) 评论(0) 推荐(0) 编辑

linux页面回收浅析
摘要:关于页面的使用 在之前的一些文章中,我们了解到linux内核会在很多情况下分配页面。 1、内核代码可能调用alloc_pages之类的函数,从管理物理页面的伙伴系统(管理区zone上的free_area空闲链表)上直接分配页面(见《linux内核内存管理浅析》)。比如:驱动程序可能用这种方式来... 阅读全文

posted @ 2013-05-11 19:34 疯子123 阅读(104) 评论(0) 推荐(0) 编辑

linux线程同步浅析
摘要:一个程序问题 之前写过这样一个C程序:模块维护一个工作线程、提供一组调用接口(分同步调用和异步调用)。用户调用模块提供的接口后,会向工作队列添加一个任务。然后任务由工作线程来处理。 在同步调用情况下,接口调用后调用者被阻塞,等待工作线程处理完成后,将调用者唤醒。 伪代码如下: [调用接口] ... 阅读全文

posted @ 2013-05-11 19:30 疯子123 阅读(108) 评论(0) 推荐(0) 编辑

linux内存管理浅析
摘要:[地址映射](图:左中) linux内核使用页式内存管理,应用程序给出的内存地址是虚拟地址,它需要经过若干级页表一级一级的变换,才变成真正的物理地址。 想一下,地址映射还是一件很恐怖的事情。当访问一个由虚拟地址表示的内存空间时,需要先经过若干次的内存访问,得到每一级页表... 阅读全文

posted @ 2013-05-11 19:26 疯子123 阅读(98) 评论(0) 推荐(0) 编辑

剖析一个由sendfile引发的linux内核BUG
摘要:在论坛上看到一个讲linux内核BUG的帖子,利用这个BUG,一个普通用户能够在运行某个程序之后,获得root权限。 示例的代码如下:http://www.securityfocus.com/data/vulnerabilities/exploits/36038-4.tgz 在ubuntu 9... 阅读全文

posted @ 2013-05-11 19:04 疯子123 阅读(322) 评论(0) 推荐(0) 编辑

比memcpy更快的内存拷贝
摘要:偶然间看到一个叫xmemcpy的工具,用做内存拷贝。号称在拷贝120字节以内时,比glibc提供的memcpy快10倍,并且有实验数据。 这让人感觉很诧异。一直以来都觉得memcpy是很高效的。相比于strcpy等函数的逐字节拷贝,memcpy是按照机器字长逐字进行拷贝的... 阅读全文

posted @ 2013-05-11 18:51 疯子123 阅读(925) 评论(0) 推荐(0) 编辑

linux中断处理浅析
摘要:最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着"重要的事马上做, 不重要的事推后做"的异步处理思想. 于是整理一下~ 第一阶段--获取中断号 每个CPU都有响应中断的能力, 每个CPU响应中断时都走相同的流程. 这个流程就是内核提供的中断服务程序. 在进入... 阅读全文

posted @ 2013-05-11 18:46 疯子123 阅读(172) 评论(0) 推荐(0) 编辑

linux内核SMP负载均衡浅析
摘要:需求 在《linux进程调度浅析》一文中提到,在SMP(对称多处理器)环境下,每个CPU对应一个run_queue(可执行队列)。如果一个进程处于TASK_RUNNING状态(可执行状态),则它会被加入到其中一个run_queue(且同一时刻仅会被加入到一个run_queue),以... 阅读全文

posted @ 2013-05-11 17:49 疯子123 阅读(140) 评论(0) 推荐(0) 编辑

linux组调度浅析
摘要:cgroup与组调度 linux内核实现了control group功能(cgroup,since linux 2.6.24),可以支持将进程分组,然后按组来划分各种资源。比如:group-1拥有30%的CPU和50%的磁盘IO、group-2拥有10%的CPU和20%的磁盘IO... 阅读全文

posted @ 2013-05-11 17:08 疯子123 阅读(435) 评论(0) 推荐(0) 编辑

linux线程浅析
摘要:关于linux线程 在许多经典的操作系统教科书中, 总是把进程定义为程序的执行实例, 它并不执行什么, 只是维护应用程序所需的各种资源. 而线程则是真正的执行实体. 为了让进程完成一定的工作, 进程必须至少包含一个线程. 如图1. 进程所维护的是程序所包含的资源(静... 阅读全文

posted @ 2013-05-11 16:25 疯子123 阅读(104) 评论(0) 推荐(0) 编辑

神奇的vfork
摘要:一段神奇的代码 在论坛里看到下面一段代码: int createproc(); int main() { pid_t pid=createproc(); printf("%d\n", pid); exit(0); } int createproc() { pid_t pid; if(!(pid... 阅读全文

posted @ 2013-05-11 15:54 疯子123 阅读(103) 评论(0) 推荐(0) 编辑

linux异步信号handle浅析
摘要:在初学linux编程的时候,一直觉得异步信号handle是个很神奇的东西,用户程序可以使用singal之类的系统调用为某某信号注册一个信号处理函数(handle函数)。 程序的二进制代码在内存中都有着确定的执行流程,为什么收到异步信号以后,程序会被“中断”,然后跳转到这... 阅读全文

posted @ 2013-05-11 15:43 疯子123 阅读(209) 评论(0) 推荐(0) 编辑

linux进程状态浅析
摘要:众所周知,现在的分时操作系统能够在一个CPU上运行多个程序,让这些程序表面上看起来是在同时运行的。linux就是这样的一个操作系统。 在linux系统中,每个被运行的程序实例对应一个或多个进程。linux内核需要对这些进程进行管理,以使它们在系统中“同时”运行。linu... 阅读全文

posted @ 2013-05-11 15:41 疯子123 阅读(132) 评论(0) 推荐(0) 编辑

linux进程调度浅析
摘要:操作系统要实现多进程,进程调度必不可少。 进程调度是对TASK_RUNNING状态的进程进行调度(参见《linux进程状态浅析》)。如果进程不可执行(正在睡眠或其他),那么它跟进程调度没多大关系。 所以,如果你的系统负载非常低,盼星星盼月亮才出现一个可执行状... 阅读全文

posted @ 2013-05-11 15:01 疯子123 阅读(141) 评论(0) 推荐(0) 编辑

posix多线程有感--进程调度策略(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
摘要:linux内核的三种调度策略:SCHED_OTHER 分时调度策略,(默认的)SCHED_FIFO实时调度策略,先到先服务SCHED_RR实时调度策略,时间片轮转 实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过nice和counter值决定权值,nice越小... 阅读全文

posted @ 2013-05-11 13:25 疯子123 阅读(300) 评论(0) 推荐(0) 编辑

linux 进程优先级设置
摘要:注意:一下均是非实时进程的优先级的设置 nice(1): 以指定优先级运行程序 nice [OPTION] [COMMAND [ARG]...] nice –n 1 ls renice(8): 调整运行进程的优先级 renice priority [[-p] pid ...] ... 阅读全文

posted @ 2013-05-11 12:31 疯子123 阅读(206) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(优先级有关)
摘要:今天查看了linux下的实时线程,FIFO和RR策略的调度,遇到一个问题: priority越大优先级越高呢?还是越小越高呢? 回答这个问题要明白一个问题,首先,linux2.6内核将任务优先级进行了一个划分: 0——99 实时进程 100——139 非实时进... 阅读全文

posted @ 2013-05-11 02:49 疯子123 阅读(257) 评论(0) 推荐(0) 编辑

TOP命令详解
摘要:一 概述 在终端中可以查看top命令的路径和所属软件包。 top程序对运行的系统提供一个动态的实时的监控。它能够显示系统的总体信息和一些正被Linux内核管理的任务。它所显示的系统总体信息的样式以及任务信息显示的样式,顺序和大小都是可以由用户配置,而且配置信息可以重启后永久生效。top... 阅读全文

posted @ 2013-05-11 02:46 疯子123 阅读(766) 评论(0) 推荐(0) 编辑

LINUX进程优先级实现
摘要:进程调度的目标: 高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效。加强交互性能(interactivity):在系统相当的负载下,也要保证系统的响应时间。保证公平和避免饥渴。SMP调度:调度程序必须支持多处理系统。系统必须追踪哪些进程... 阅读全文

posted @ 2013-05-11 02:42 疯子123 阅读(300) 评论(0) 推荐(0) 编辑

Linux常用性能检测命令
摘要:Linux常用性能检测命令、uptime、top、iostat、Vmstat、pstree、Numastat、sar、free、Pmap、Strace、ulimit 一、uptime Uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(loa... 阅读全文

posted @ 2013-05-11 02:37 疯子123 阅读(208) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(进程的优先级)
摘要:作为多任务的操作系统,Linux内核为每个创建的进程分配时间片并根据其优先级进行调度。当进程被创建时,其对应的task_struct里包含了四个优先级:struct task_struct { …… int prio, static_pr... 阅读全文

posted @ 2013-05-11 02:28 疯子123 阅读(234) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(线程调度以及优先级设置)
摘要:当在属性对象中设置调度策略或优先级时,必须同时设置inheritsched属性(即继承属性设置为:PTHREAD_EXPLICIT_SCHED)。linux内核的三种调度方法:SCHED_OTHER 分时调度策略SCHED_FIFO实时调度策略,先到先服务SCHED_RR实时调度策略,时间片轮转 ... 阅读全文

posted @ 2013-05-10 22:42 疯子123 阅读(542) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(线程堆栈)
摘要:先来讲说线程内存相关的东西,主要有下面几条:进程中的所有的线程共享相同的地址空间。任何声明为static/extern的变量或者堆变量可以被进程内所有的线程读写。一个线程真正拥有的唯一私有储存是处理器寄存器。线程栈可以通过暴露栈地址的方式与其它线程进行共享。 有大数据量处理的应用中,有时我... 阅读全文

posted @ 2013-05-10 21:06 疯子123 阅读(184) 评论(0) 推荐(0) 编辑

posix多线程有感—sysconf系统变量
摘要:函数sysconf( )用于返回可配置系统限制或选项的当前值。系统中定义了同线程、进程和信号量相关的多个变量和常量。下面列出了部分变量和常量。变 量名字值(Name Value)描 述_SC_THREADS_POSIX_THREADS支持线程_SC_THREAD_ATTR_STACKA... 阅读全文

posted @ 2013-05-10 19:09 疯子123 阅读(336) 评论(0) 推荐(0) 编辑

Linux基本网络设置(IP配置等,网卡驱动缓存,网卡中断)
摘要:1.简单配置 a.修改IP地址和掩码 [html] view plaincopyprint? ifconfig eth0 192.168.0.100 netmask 255.255.255.0 b.修改网关,对于多网卡多网段的机器,需要配置一个默认网关 [html] vi... 阅读全文

posted @ 2013-05-10 17:02 疯子123 阅读(1129) 评论(0) 推荐(0) 编辑

Linux环境下获取网卡连接状态
摘要:在嵌入式项目中,有时需要获取设备本身的一些运行信息,网口的连接状态就是其中之一,这还真不太好弄,网上查了一下资料,整理了一下,pIfName为网口名称,比如eth0, 返回1为连接,0为断开。 int getNetLinkStates(const char *pIfName) { int sk... 阅读全文

posted @ 2013-05-10 16:59 疯子123 阅读(618) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(均衡负载CPU绑定)
摘要:多线程、多进程的情况下。可以同过指定CPU进行负载均衡,而不是让操作系统自动进行负载均衡。因为你比操作系统更了解自己的程序,为了避免调度器愚蠢的调度你的程序,或是为了在多线程程序中避免缓存失效造成的开销。 将进程/线程与cpu绑定,最直观的好处就是提高了cpu cac... 阅读全文

posted @ 2013-05-10 16:08 疯子123 阅读(398) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(线程和fork,exec)
摘要:当多线程进程调用fork创建子进程时,Pthreads指定只有那个调用fork的线程在子进程内存在(表示子进程中只有调用线程这个线程)。尽管当从fork调用返回时,只有调用线程在子进程中存在,所有其他的Pthreads线程状态仍保留为与调用fork时相同的状态。在子进程中,线程拥有与在父... 阅读全文

posted @ 2013-05-10 10:14 疯子123 阅读(372) 评论(0) 推荐(0) 编辑

linux多线程和锁
摘要:第一部分 多线程 第二部分 互斥锁 第三部分 条件变量 第四部分 读写锁 第五部分 自旋锁 第六部分 线程壁垒 第七部分 记录锁 第一部分 多线程 Linux 线程的创建: int pthread_create ( pthread_t *tid, const pth... 阅读全文

posted @ 2013-05-09 20:21 疯子123 阅读(279) 评论(0) 推荐(0) 编辑

posix多线程有感--API
摘要:一.头文件#include 二.编译选项-lpthread三.结构体pthread_tpthread_attr_tpthread_barrier_tpthread_barrierattr_tpthread_cond_tpthread_condattr_tpthread_key_tpthread_m... 阅读全文

posted @ 2013-05-09 20:00 疯子123 阅读(242) 评论(0) 推荐(0) 编辑

posix多线程有感--自旋锁
摘要:自旋锁是SMP架构中的一种low-level的同步机制。 当线程A想要获取一把自旋锁而该锁又被其它线程锁持有时,线程A会在一个循环中自旋以检测锁是不是已经可用了。对于自选锁需要注意:由于自旋时不释放CPU,因而持有自旋锁的线程应该尽快释放自旋锁,否则等待该自旋锁的线程会一直在那里... 阅读全文

posted @ 2013-05-09 19:54 疯子123 阅读(208) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(线程内存模式)
摘要:一组并发线程运行在一个进程的上下文中,每个线程都有自己独有的线程上下文,上下文中包括线程ID,栈,栈指针,程序计数器,条件代码和通用寄存器值,每个线程与其他线程共享部分进程上下文,其中包括整个虚拟地址空间(这个空间有只读文本(代码)区),读/写数据区,堆和所有共享库代码和数据区,线程也同样共... 阅读全文

posted @ 2013-05-09 17:10 疯子123 阅读(107) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(条件变量属性)
摘要:1.条件变量的初始化int pthread_cond_init(thread_cond_t *cond,pthread_condattr_t *attr); 参数:cond 条件变量 attr 条件变量属性 成功返回0,出错返回错误编号。 注意:如果参数att... 阅读全文

posted @ 2013-05-09 15:36 疯子123 阅读(135) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(互斥量属性)(代码)
摘要:/* * mutex_attr.c * * Create a mutex using a non-default attributes object, * mutex_attr. If the implementation supports the pshared * attribute, the... 阅读全文

posted @ 2013-05-09 09:58 疯子123 阅读(168) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(互斥量属性)
摘要:互斥量具有一些属性,通过修改这些属性可以控制锁的一些行为。缺省的互斥锁属性及其值如下:pshared: PTHREAD_PROCESS_PRIVATEtype: PTHREAD_MUTEX_DEFAULTprotocol: PTHR... 阅读全文

posted @ 2013-05-09 09:51 疯子123 阅读(186) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(线程属性函数总结)(代码)
摘要:/* * thread_attr.c * * Create a thread using a non-default attributes object, * thread_attr. The thread reports its existence, and exits. The * attri... 阅读全文

posted @ 2013-05-08 11:47 疯子123 阅读(130) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(线程属性函数总结)
摘要:pthread_attr_t 的缺省属性值 属性 值 结果 scope PTHREAD_SCOPE_PROCESS 新线程与进程中的其他线程发生竞争。 detachstate PTHREAD_CREATE_JOINABLE 线程退出后,保留完成状态和线程... 阅读全文

posted @ 2013-05-07 23:34 疯子123 阅读(234) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(线程属性pthread_attr_t)---实时调度(代码)
摘要:/* * sched_attr.c * * Demonstrate use of POSIX 1003.1c-1995 thread priority * scheduling attributes, by creating an attributes object with * realtime... 阅读全文

posted @ 2013-05-07 17:20 疯子123 阅读(390) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(线程属性pthread_attr_t)---实时调度
摘要:一、系统支持的线程优先级的最大和最小值名称::sched_get_priority_maxsched_get_priority_min功能:获得系统支持的线程优先权的最大和最小值头文件:#include函数原形:int sched_get_priority_max(int policy);int ... 阅读全文

posted @ 2013-05-07 17:17 疯子123 阅读(952) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(线程属性pthread_attr_t)
摘要:1.线程属性 线程具有属性,用pthread_attr_t表示,在对该结构进行处理之前必须进行初始化,在使用后需要对其去除初始化。我们用pthread_attr_init函数对其初始化,用pthread_attr_destroy对其去除初始化。名称::pthread_attr_init... 阅读全文

posted @ 2013-05-07 16:25 疯子123 阅读(243) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(pthread_key_t)
摘要:下面说一下线程中特有的线程存储,Thread Specific Data 。线程存储有什么用了?他是什么意思了?大家都知道,在多线程程序中,所有线程共享程序中的变量。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看... 阅读全文

posted @ 2013-05-07 15:06 疯子123 阅读(151) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(pthread_once)
摘要:有时候我们需要对一些posix变量只进行一次初始化,如线程键(我下面会讲到)。如果我们进行多次初始化程序就会出现错误。 在传统的顺序编程中,一次性初始化经常通过使用布尔变量来管理。控制变量被静态初始化为0,而任何依赖于初始化的代码都能测试该变量。如果变量值仍然为0,则它能实行初始化,... 阅读全文

posted @ 2013-05-07 11:33 疯子123 阅读(227) 评论(0) 推荐(0) 编辑

内存屏障(经典)
摘要:转载:http://www.spongeliu.com/clanguage/memorybarrier/ 当你看到“内存屏障”四个字的时候,你的第一反应是什么?寄存器里取出了错误的值?ifence,sfence之类的指令?还是诸如volatile之类的关键字?好吧,我第一次看到这四个字的时... 阅读全文

posted @ 2013-05-07 10:08 疯子123 阅读(327) 评论(0) 推荐(0) 编辑

C/C++ -- 编程中的内存屏障(Memory Barriers) (2)
摘要:在前面的文章里,主要介绍了一下内存屏障的基本认识,和基本原理。本文针对之前的思路继续聊一聊该如何处理相应的问题,以及一些多线程程序编程的技巧。 1. Volatile关键字 2. Linux pthread线程锁 3. Linux gcc 4.2之... 阅读全文

posted @ 2013-05-07 09:47 疯子123 阅读(1307) 评论(1) 推荐(0) 编辑

C/C++ -- 编程中的内存屏障(Memory Barriers) (1)
摘要:明天就要transfor去做检索引擎了,今天闲下来了,更新一下博客哈。之前 @高V 同学对本人之前《代码技巧及优化(c/c++)》的文章第六条,有关cache命中和cpu流水优化比较感兴趣,也提出了一些他的看法,今天,我就细化的说一下某些编程的点 -- 内存屏障,以及内存屏障对代码的影响。 ... 阅读全文

posted @ 2013-05-07 09:45 疯子123 阅读(1445) 评论(1) 推荐(0) 编辑

优化屏障和内存屏障
摘要:优化屏障和内存屏障 优化屏障 编译器编译源代码时,会将源代码进行优化,将源代码的指令进行重排序,以适合于CPU的并行执行。然而,内核同步必须避免指令重新排序,优化屏障(Optimization barrier)避免编译器的重排序优化操作,保证编译程序时在优化屏障之前的指令不会在优化屏障之... 阅读全文

posted @ 2013-05-07 09:29 疯子123 阅读(259) 评论(0) 推荐(0) 编辑

gcc -lpthread和gcc -pthread的区别
摘要:在编译下面的代码时,碰到了undefined reference to `pthread_atfork'的错误: 代码来自《POSIX多线程程序设计》 /* * atfork.c * Demonstrate the use of "fork handlers" to prote... 阅读全文

posted @ 2013-05-04 13:44 疯子123 阅读(299) 评论(0) 推荐(0) 编辑

posix多线程有感--Ubuntu下看不见pthread_create(安装pthread线程库)
摘要:由于学习多线程编程,所以用到pthread,但是man的时候却发现没有pthread函数库的手册页,然后安装$sudo apt-get install glibc-doc 安装以后,发现还是有很多函数不全,只有一小部分pthread的函数,使用man -k pthread或apropos p... 阅读全文

posted @ 2013-05-04 13:36 疯子123 阅读(120) 评论(0) 推荐(0) 编辑

ubuntu 10.04 源
摘要:sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup gedit /etc/apt/sources.list sudo apt-get update sudo apt-get upgrade http://wik... 阅读全文

posted @ 2013-05-04 12:16 疯子123 阅读(97) 评论(0) 推荐(0) 编辑

VMware设置桥接上网
摘要:环境:主机Win7、VMware Workstation 6.5.3、虚拟机Ubuntu10.04。 一、桥接的基本原理 配置成桥接网络连接模式的虚拟机就当作主机所在以太网的一部分,虚拟系统和宿主机器的关系,就像连接在同一个Hub上的两台电脑,可以像主机一样可以访问以太网中的... 阅读全文

posted @ 2013-05-04 12:09 疯子123 阅读(154) 评论(0) 推荐(0) 编辑

VMware网络配置详解
摘要:VMware网络配置详解 安装好虚拟机以后,在网络连接里面可以看到多了两块网卡: 其中VMnet1是虚拟机Host-only模式的网络接口,VMnet8是NAT模式的网络接口,这些后面会详细介绍。 选择虚拟机网络模式方法如下,单击“Edit virtual machine setting... 阅读全文

posted @ 2013-05-04 12:07 疯子123 阅读(232) 评论(0) 推荐(0) 编辑

posix多线程有感--POSIX 线程间的内存可视性
摘要:pthreads提供了一些有关内存可视性的基本规则。你可以指望所有的标准实现都遵循以下规则:(1)当线程调用pthread_create时,它所能看到的内存值也是它建立的线程能够看到的。任何在调用pthread_create之后向内存写入的数据,可能不会被建立的线程看到,即使写操作发生在启动新线程... 阅读全文

posted @ 2013-05-03 15:13 疯子123 阅读(145) 评论(0) 推荐(0) 编辑

同步和互斥的一些问题(死锁,优先级逆转)
摘要:一、死锁 1.基本概念 死锁:死锁指的是系统中并发执行的多个线程(进程)由于无法获所需的资源而永久阻塞的状态。 死锁产生的必要条件: 排它性互斥:指的是资源在任意时刻只能由一个任务(线程或进程)使用。如果此时还有其它任务请求该资源,则请求者只能等待,直至占有资源的任务释放资源。不可抢占:指的... 阅读全文

posted @ 2013-05-03 14:44 疯子123 阅读(402) 评论(0) 推荐(0) 编辑

同步和互斥的POSIX支持(读写锁、信号量和记录锁)
摘要:一、读写锁 1.基本概念 当有一个线程已经持有互斥锁时,互斥锁将所有试图进入临界区的线程都阻塞住。但是考虑一种情形,当前持有互斥锁的线程只是要读访问共享资源,而同时有其它几个线程也想读取这个共享资源,但是由于互斥锁的排它性,所有其它线程都无法获取锁,也就无法读访问共享资源了,但是实际上多个线程... 阅读全文

posted @ 2013-05-03 14:41 疯子123 阅读(224) 评论(0) 推荐(0) 编辑

POSIX线程属性
摘要:一、属性对象 通过设置属性,可以指定一种不同于缺省行为的行为。使用 pthread_create创建线程时,或初始化同步变量时,可以指定属性对象。缺省值通常是可以满足需求的。 属性对象是不透明的,因而不能通过赋值直接进行修改。相应的系统提供了一组函数,用于初始化、配置和销毁每种对象类型。 初始化... 阅读全文

posted @ 2013-05-03 14:27 疯子123 阅读(178) 评论(0) 推荐(0) 编辑

POSIX线程
摘要:POSIX(Portable Operating System Interface of Unix)是一个操作系统接口,因而遵循(兼容)这一标准的操作系统都应该提供对POSIX线程的支持。 多线程一词可以解释为多个控制线程或多个控制流。 一、多线程的益处 在代码中实现多线程具有以下益处: 提高... 阅读全文

posted @ 2013-05-03 14:23 疯子123 阅读(164) 评论(0) 推荐(0) 编辑

进程及相关API
摘要:本文内容来主要来自于unix环境高级编程。 一、main函数 C语言总是从main函数开始执行(java,c++也是从main开始执行)。 main的原型为: [cpp] view plaincopyprint? int main(int argc, char *argv[]); ... 阅读全文

posted @ 2013-05-03 13:48 疯子123 阅读(252) 评论(0) 推荐(0) 编辑

同步和互斥
摘要:一、同步和互斥的基本概念 现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行,同时运行可能是真的同时运行(SMP架构中),也可能仅仅是操作系统提供的服务(通过将CPU时间分片,并将时间片分给不同的任务)。在多任务操作系统中,同时运行的多个任务可能 都需要访问/使用同一种资源多... 阅读全文

posted @ 2013-05-03 11:51 疯子123 阅读(183) 评论(0) 推荐(0) 编辑

POSIX 条件变量详细解析
摘要:条件锁pthread_cond_t 说明, 等待线程 1。使用pthread_cond_wait前要先加锁 2。pthread_cond_wait内部会解锁,然后等待条件变量被其它线程激活 3。pthread_cond_wait被激活后会再自动加锁 激活线程: 1。加锁(和等待线程用同一个锁)... 阅读全文

posted @ 2013-05-03 10:57 疯子123 阅读(426) 评论(0) 推荐(0) 编辑

posix多线程有感--线程高级编程(条件变量)
摘要:1.初始化条件变量pthread_cond_initint pthread_cond_init(pthread_cond_t *cv,const pthread_condattr_t *cattr);返回值:函数成功返回0;任何其他返回值都表示错误初始化一个条件变量。当参数cattr为空指针时,函... 阅读全文

posted @ 2013-05-03 10:41 疯子123 阅读(138) 评论(0) 推荐(0) 编辑

posix多线程有感--同步
摘要:1.创建和销毁互斥量pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;int pthread_mutex_init(pthread_mutex_t *mutex,pthread_mutexattr_t *attr);int pthread_mute... 阅读全文

posted @ 2013-05-02 11:47 疯子123 阅读(142) 评论(0) 推荐(0) 编辑

posix 多线程有感--线程
摘要:1.进程:资源分配单位(存储器,文件)和CPU调度(分配)单位。 线程:作为CPU调度单位,而进程只作为其资源分配单位。 (1)只拥有必不可少的资源,如:线程状态,寄存器上下文和栈。 (2)具有就绪,阻塞和执行三种基本状态。2.进程和线程的比较:(1)地址空间和其他资源(如打开文件)... 阅读全文

posted @ 2013-05-02 10:36 疯子123 阅读(96) 评论(0) 推荐(0) 编辑

linux开机关机命令
摘要:重启命令: 1、reboot 2、shutdown -r now 立刻重启(root用户使用) 3、shutdown -r 10 过10分钟自动重启(root用户使用) 4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用) 如果是通过shutdown命令设... 阅读全文

posted @ 2013-05-01 23:50 疯子123 阅读(127) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示