深入理解Linux内核-内核同步
内核基本的同步机制:
抢占内核的主要特点:一个在内核态运行的进程,可能在执行内核函数期间被另外一个进程取代。
内核抢占:Linux 2.6允许用户在编译内核的时候配置十分启用
进程临界区:每个进程中访问临界资源(一次仅允许一个进程使用的共享资源)的那段代码称为临界区。
优化屏障:保证编译程序不会混淆放在原语操作之前的汇编指令和放在原语之后的汇编指令。
内存屏障:确保原语之后的操作开始执行之前,原语之前的操作已经完成。
自旋锁:在多处理器环境中工作的一种特殊的锁。如果内核控制路径发现锁由运行在另一个CPU上的内核控制路径锁着,就在周围‘旋转’,反复执行,直到锁呗释放。因为内核资源很多只锁1毫秒的时间片段,所以不会浪费太多时间。
顺序锁:自旋锁的读写具有相同的优先级。顺序锁中,写被赋予了更高的优先级。即使正在读对时候,也允许写;好处是写者不用等待读者,缺点时读者反复读取多次数据,对比相同,才能确认有效。
信号量:1、内核信号量,由内核控制路径使用;2、System V IPC 信号量,由用户态进程使用。
内核信号量:和自旋锁类似,内核信号量保护大资源内核控制路径不能访问,并且相应的进程被挂起。另外,1、只有可睡眠待函数才能获取内核信号量;2、中断处理程序和可延迟函数都不能使用内核信号量。
系统的高并发度取决于:
1、同时运行的I/O设备数
2、进行有效工作多CPU数
大内核锁: