1.一个read()系统调用的过程
1.文件系统接收到 read 请求之后,判断出文件的前 4096 个字节位于磁盘的1000号逻辑扇区到1007号逻辑扇区。
2.然后文件系统向磁盘驱动发出一个读取逻辑扇区为 1000 号开始的8个扇区请求
3.磁盘驱动程序收到这个请求以后就向磁盘发出硬件命令
4.向硬件发送IO命令的方式有很多,其中最为常见的一种就是通过读写 IO 端口寄存器来实现。
在 x86 平台上,共 65535 个硬件端口寄存器,不同的硬件被分配到了不同的 IO 端口地址。
CPU 提供了2条专门的指令 "in" 和 "out" 来实现对硬件端口的读和写.
2.信号量
对于允许多个线程并发访问的资源,多元信号量简称信号量。
3.互斥量
互斥量和二元信号量很类似,资源仅同时允许一个线程访问,但和信号量不同的是,信号量在整个系统可以被任意线程获取并释放。
也就是说,同一个信号量可以被系统中的一个线程获取之后由另外一个线程释放。而互斥量则要求哪个线程获取了互斥量,哪个线程就
要负责释放整个锁,其他线程是无法释放互斥量的。
4.临界区
临界区与互斥量,信号量的区别在于,互斥量和信号量在系统中的任何进程里都是可见的,也就是说,一个进程创建了一个互斥量或者信号量,
另外一个进程视图去获取该锁是合法的。然后,临界区的作用范围仅限于本进程,其他的进程无法获取该锁。除此之外,临界区具有和回来相同的性质。
5.读写锁
致力于更加特定的场合
6.条件变量
1.从hello,world 说起