操作系统--进程与线程
进程概念
从并发开始
串行排队
分时调用
“但是并发除了会让脑子更乱以外并不会让事情变得更好”
尽管如此,并发确实可以提高CPU的利用率。当然可能会带来设备(慢操作)延迟。
C
进程就是为了“保存”和“恢复”一个程序的执行过程,以实现并发的目标
进程和程序的区别
进程和线程的区别
-
进程作为分配资源的基本单位,线程作为独立运行和独立调度的基本单位(注意:在多线程 OS 中,进程不是一个可执行的实体)
-
进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。
进程的数据结构--PCB
进程的组织
进程状态和切换
对于某一个进程: 为什么被暂停了? 为什么选它来运行? 为什么选择这个时机进行切换?
操作系统可以将会触发慢操作的状态记录下来。
“把printf的汇编代码放到自己的程序中,并且把控制休眠的指令注释掉,会不会能正常运行?”
不能。
五状态进程模型
关于进程的创建:
在一个进程被新建时它并非绝对会被调入内存,通常是分两步,首先创建该进程的PCB,并与之关联,但是此时可能面临内存不足或者操作系统限制了最大进程数导致这个进程还无法被调入进程,因此该进程被暂时留在新建态,在这个状态的进程PCB已经创建并且加载进内存,但是进程的代码和数据往往还留在外存中等待加载。
关于进程的撤销(结束)
B。进程有它的生命周期,不会一直存在于系统中,也不一定需要用户显式地撒销。进程在时间片结束时只是就绪,而不是撤销。阻塞和唤醒是进程生存期的中间状态。进程可在完成时撤销, 或在出现内存错误等时撤销。
关于进程的阻塞
阻塞态完了会进就绪队列
关于临界资源及其同步和互斥 houbb.github.io/2020/10/04/…
B 可以共享一部分资源,但不共享虚拟地址空间
C
添加了挂起状态的进程模型
A
不同操作系统中进程状态设置区别很大。
进程调度方式
现在的操作系统都是可抢占系统。
A。BC应该将优先级,D时机不合适。
此部分将在进程调度中详细介绍。
进程通信
共享存储,消息传递,管道通信
A得俩。B容量是一个页的大小(4KB)。管道是一个文件,任何两个不相关的进程当然都可以通过这个管道文件进行通信
进程和线程的设计模型
线程实现方式
ULT(User Level Thread)
需要注意的是在这种模式下调度仍是以进程为单位进行的
优势:
1.线程切换不需要内核模式特权.
2.线程调用可以是应用程序级的,根据需要可改变调度算法,但不会影响底层的操作系统调度程序.
3.ULT管理模式可以在任何操作系统中运行,不需要修改系统内核,线程库是提供应用的实用程序。
劣势:
1.系统调用(慢操作,如输入输出)会引起进程阻塞,而且进程内的所有线程都被阻塞。(内核每次分配给一个进程的仅有一个CPU,因此进程中仅有一个线程能执行)
2.不利于使用多处理器并行
KLT
优势:灵活,线程切换快
劣势:需要用户态到内核态的切换,代价高
线程库:
D.其他线程对此不可见
B只有在KLT中才会这么做
轻权进程
类似于一种折衷的方案。但是问题是太复杂