2.1进程
操作系统W5的课睡过去了…
2.1.4 进程状态与转换
2.1.5 进程的实现
进程控制块
- 记录进程相关信息
进程表
- 操作系统维护一个结构体数组
- 数组元素(进程表项),对应于一个进程块。kernel 维护
中断处理
- 中断时,将当前进程相关信息进行保存,为中断处理程序作准备。
- 中断对应中断号,中断号对应中断服务程序。
- 发生中断后,原先有些进程被改变,分析一些等待队列。
- 用 汇编语言程序进行进程的上下文切换。
2.1.6 线程和实现
定义
一个进程在一个地址空间里有多个控制流。
引入目的
减少并发和执行的开销
进程间通讯v.s.线程间通讯
进程间通讯:data共享
线程间通讯:data不共享
而多线程的一个坏处也是因为共享而存在对变量执行的竞争;
具体例子
Web 服务器
实现方式
内核线程 (操作系统的维护)
调度:从就绪队列取
而阻塞时会将之移动到组赛的队列中。
对于内核线程而言,线程是调度的单位,一个进程中的几个线程对于操作系统而言也是可见的,而其中一个线程阻塞时,不会导致整个操作系统阻塞。
而对比用户线程,用户线程阻塞时可能会导致整个系统的暂停。
用户态/空间的线程
此时操作系统就不知道了。
好处:轻量化;
坏处:配合不好时可能会造成CPU的阻塞。
混合方案(Solaris)
并行化
多进程
内核线程
用户线程
线程和进程的比较
2.2进程间通讯
如何便捷通讯?
如何保证时序来通讯?
进程/线程通讯原理一样,不对线程赘述。
竞争条件
- 程序执行最后的结果取决于进程运行的精确时序。
- 而操作系统又无法保证两次执行时的时序是一样的。
假脱机打印(共享变量的修改不加以限定)
奇怪现象:同时对in变量操作。即进程A和B同时需要读和更新;A写的会把B写的覆盖掉了。
临界区(critical region)
- 对共享内存进行访问的程序片段(是这段代码)称作临界区
- 避免竞争条件:
- 任何两个进程不能同时处于临界区
- 不应对CPU的速度和数目作任何假设
- 临界区外的进程不得阻塞其他进程
- 不得使进程在临界区外无休止地等待