文章目录
进程
一、进程的定义
程序:就是一个指令序列
为了方便操作系统管理,完成各程序并发执行,引入了进程、进程实体的概念。
系统为每个运行的程序配置了一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码的存放位置)。
程序段、数据段、PCB三部分组成了进程实体(进程映像),一般来说我们把进程实体称为进程。
PCB是进程存在为唯一标志。
进程是具有独立功能的程序在数据集合上的运行过程,它是系统进行资源分配和调度的一个独立单位
进程实体是静态的,进程是动态的。
进程控制块(PCB,进程存在的唯一标志)
进程的组织(链接方式、索引方式)
进程的特征(动态性、并发性、独立性、异步性、结构性)
总结
二、进程的状态
进程程序的一次执行,在这个执行过程中,有时候进程正在被CPU处理,有时又需要等待CPU服务,可见,进程的状态会有各种变化,为了方便对各个进程的管理,操作系统需要将进程合理划分为几种状态。
五种基本状态(运行、就绪、阻塞、创建、终止)
- 运行态:占用CPU,并在CPU上运行
- 就绪态:已经具备运行条件,但是由于没有空闲CPU,而暂时不能运行
- 阻塞态:因等待某一事件而暂时不能运行。
进程状态的转换
小结
三、进程控制(创建进程、撤销进程、实现进程状态转换)
进程控制的主要功能就是对系统中的所有进行实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。
简单理解即进程控制就是实现进程状态转换。
1、如何实现进程控制?
如果状态改变了,在把PCB放入相应的队列的时候被中断了。这就会产生问题,所以引入了原语。
原语:用原语实现进程控制,原语的特点是执行期间不允许中断,只能一气呵成,这种不可被中断的操作即原子操作。
原语采用“关中断指令”和“开中断指令”实现
虽然,关/开中断的权限非常大,必然是只允许在核心态下执行的特权指令。
进程切换过程
- 1、保存处理机上下文,包括程序计数器和其他寄存器
- 2、更新PCB信息
- 3、把进程PCB移入相应的队列,如就绪、在某时间阻塞等队列
- 4、选择另外一个进程执行,应更新其PCB
- 5、更新内存管理的数据结构
- 6、恢复处理机上下文
2、进程控制相关的原语
进程控制会导致进程状态的转换。无论哪个原语,要做的无非三类事情:
- 1、更新PCB中的信息
a、所有的进程控制原语一定都会修改进程状态标志
b、剥夺当前运行进程的CPU使用权必然需要保存其运行环境
c、某进程开始运行前必然要恢复运行环境 - 2、将PCB插入合适的队列
- 3、分配/回收资源
总结
四、进程通信
顾名思义:进程通信就是指进程之间的信息交换。
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。
为了保证安全,一个进程不能直接访问另一个进程的地址空间。
但是进程之间的信息交换又是必须实现的,为了保证进程之间的安全通信,操作系统提供了一些方法。
操作系统提供的进程通信(进程间信息交换,共享存储、消息传递、管道通信)
进程通信是指进程之间的信息交换,PV操作是低级通信,高级通信是指以较高的效率传输大量数据的通信方式。
- 共享存储
- 消息传递
- 管道通信
共享存储
进程1往共享空间写数据的时候进程2是不允许访问共享空间的
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换,在对共享空间进行写/读操作的时候,需要使用同步互斥工具(如PV操作),对共享空间的读写进行控制,共享存储分为两种:低级的是基于数据结构的共享,高级的是基于存储区的共享。
管道通信
消息传递(进程间的数据交换以格式化的消息为单位)
进程间的数据交换以格式化的消息为单位,进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
总结
五、线程
线程是一个基本的CPU执行单元,也是程序执行流的最小单位。进程是除CPU之外的系统资源的分配单元
进程是资源分配的基本单位,线程是调度的基本单位。
传统的进程并发,需要切换进程的运行环境,系统开销比较大,引入线程之后,如果是同一进程内的线程切换,不需要切换进程环境,系统开销小。 不需要PCB换入换出。
线程的实现方式(用户级线程、内核级线程)
在用户级线程中,用户级线程切换可以在用户态下即可完成,无需操作系统的干预。
在用户看来,是有多个线程,但是在操作系统看来,并意识不到线程的存在,用户级线程对用户不透明,对操作系统透明。
可以这么理解,“用户级线程”就是“从用户视角能看到的线程。”
内核级线程的管理工作由操作系统内核完成,线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
可以这样理解,“内核级线程”就是“从操作系统内核视角看能看到的线程”。
多对一的时候,只需要用户级线程的切换,且只需要在用户空间即可完成,不需要切换到核心态。
一对一这种模型的唯一缺点是,创建一个用户线程就要创建一个相应的内核线程。由于创建内核线程的开销会影响应用程序的性能
总结
内核级线程才是处理机分配的单位。
进程和线程的比较
- 1、线程是cpu调度的基本单位,进程是拥有资源的基本单位,但是线程可以访问其所属的进程的资源。在同一个进程中,线程的切换不会引起进程的切换。在不同进程中进行线程切换,如从一个进程内的线程切换到另外一个进程中的线程时,会引起进程切换。
- 2、不仅进程之间可以并发,线程也可以并发执行,从而使得操作系统有更好的并发性,提高了系统吞吐量。
- 3、系统开销,创建进程的开销远大于创建或者撤销线程时候的开销。
- 4、进程间通信需要同步或者互斥手段的辅助,以保证数据的一致,而进程间可以直接读写进程数据段(如共享变量)来进行通信。