读书笔记系列深入理解计算机系统之并发

进程

程序计数器

多个进程并发时,多个逻辑程序计数器切换装载到物理程序计数器

进程的创建

进程的终止

进程的状态

进程内容

每个进程都有一个地址空间,父进程和子进程有各自不同的地址空间,不可写的内存区域是共享的,可写的内存是不能被共享的

进程实现

通过维护一张进程表,包括程序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号和调度信息,以及其他在进程由运行态转换到就绪态或阻塞态时所必须保存的信息,从而保证该进程随后能再次启动,就像从未被中断过一样

进程切换

硬件压入堆栈程序计数器等–》硬件从中断向量装入新的程序计数器–》汇编语言过程保存寄存器的值–》汇编语言过程设置新的堆栈–》 –》C 中断服务器运行(典型的读和缓存写入)–》调度器决定下面哪个程序先运行–》C 过程返回至汇编代码–》汇编语言过程开始运行新的当前进程

线程

线程会包含有一些进程的属性,所以线程被称为轻量的进程(lightweight processes)

为什么要有线程

线程的状态

和进程一样,多了终止状态

线程内容

独立的 程序计数器,寄存器,堆栈,状态

线程的,终止

线程调用库函数创建新线程,线程完成工作调用exit函数终止,还有join,yeild操作

POSIX 线程是可移植线程的标准实现。有如下系统调用:

线程实现

进程用于把资源集中在一起,而线程则是 CPU 上调度执行的实体

现代操作系统提供三种基本构造并发程序的方法

每个线程都有自己的线程上下文,包括唯一的整数线程ID,栈,栈指针,程序计数器,寄存器,条件码,同时共享统一进程下的整个虚拟地址空间

每个进程开始都是单一线程,称为主线程,某一时刻,主线程创建一个对等线程,cpu时间片在线程间切换,线程上下文切换开销小于进程上下文切换的,而且不像进程那样有严格的父子层次关系,所有跟一个进程有关的线程组成一个对等线程池,独立于其他线程创建的线程。一个线程可以杀死他任何的对等线程,或等待它的任意对等线程终止。对等线程读写相同共享数据

任何一个时间点上,线程是可结合或可分离的,一个可结合的线程能够被其他线程收回和杀死,分离的线程不能被其他现场回收或杀死,内存资源只有在它终止时系统自动释放。

进程间通信

三个问题

共享变量的互斥操作通常使用信号量来进行

因为S信号量值总为0或1,这种依靠信号量保护共享变量的叫做二元信号量。P操作进行互斥锁加锁,V操作进行互斥锁解锁

信号量另外一个作用是调度共享资源的访问,比如生产者-消费者,读-写问题

线程不安全函数