操作系统——进程
进程的状态
进程的内部数据结构
进程和线程的对比
具有类似的抽象:进程共享计算机资源、线程共享进程资源。
线程的实现模型
参考链接:https://blog.csdn.net/gatieme/article/details/51892437
用户级线程
当进程分配到时间片之后,库调度器选择该进程中的一个线程执行,有关线程的创建、销毁、管理、切换都是在用户空间执行。用户级线程是不是无法做到一个进程中的线程真正的并行??
内核级线程
内核线程建立和销毁都是由操作系统负责、通过系统调用完成的。在内核的支持下运行,无论是用户进程的线程,或者是系统进程的线程,他们的创建、撤销、切换都是依靠内核实现的。
线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口. 内核为进程及其内部的每个线程维护上下文信息,调度也是在内核基于线程架构的基础上完成。图2-2(b)说明了内核级线程的实现方式。
混合模式
在一些系统中,使用组合方式的多线程实现, 线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行. 一个应用程序中的多个用户级线程被映射到一些(小于或等于用户级线程的数目)内核级线程上。
下图说明了用户级与内核级的组合实现方式, 在这种模型中,每个内核级线程有一个可以轮流使用的用户级线程集合
进程间通信
竞争条件:两个或多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序。
如何避免由竞争条件带来的不安全问题:互斥的访问共享资源。
实现互斥的几种方案
- 屏蔽中断。将时钟中断(进程的cpu时间片到了,引发进程切换)也屏蔽。
- 锁变量
- 信号量:可用于同步和互斥。 https://www.kancloud.cn/hanghanghang/os/116945