二、操作系统之进程
前言
该篇文章主要说一些关于操作系统中进程相关的内容。主要涉及如下方面:
- 进程(进程组成和概念、进程和程序的关系、进程状态、PCB、CPU在进程间切换)
- 进程操作(创建、终止、等待)
- 进程通信(独立进程、协同进程,其中协同进程中涉及共享内存和消息传递)
一、进程
1.1 进程概念和组成
进程简单来说是执行中的程序。另一种说法是一个程序在一个数据集上的一次执行。进程由代码和当前活动组成。当前活动中包含程序计数器、堆栈、数据、堆。具体如下图:
1.2 进程和程序的关系
- 1、进程是程序的一个实例,是程序的一次执行。
- 2、一个程序可对应一个或多个进程,同样一个进程可对应一个或多个程序。
- 3、程序是进程的代码部分。
- 4、进程是活动实体,程序是静止实体。
- 5、进程在内存,程序在外存。
1.3 进程的状态
进程有就绪(等待分配处理器)、运行(指令执行中)、阻塞(等待某些事件)、新建(创建中)、终止(执行完毕)五种状态。进程的执行过程中,一直在这五种状态中切换。
1.4 进程控制块 PCB
为了管理每个进程,系统为每个进程创建进程控制块(PCB)。进程与进程控制块是一一对应的,进程通过管理PCB来管理进程。PCB内包含:进程状态、程序计数器、CPU寄存器、CPU调度信息、内存管理信息、记账信息、I/O状态信息。
1.5 CPU在进程间切换
进程一般是并发执行的。值得注意的是CPU在进程间切换的过程,需要PCB保存和恢复现场,这是一种比较大的开销。
二、进程操作
2.1 进程创建
父进程创建子进程,如此轮流下去创建进程,构成一棵进程树。每个进程都有一个唯一表示 pid ,用于唯一表示标识该进程。进程创建是原子操作。
2.2 结束进程的方式
- 进程执行最后一项并退出
- 父进程可终止子进程的执行
- 父进程可等待子进程的结束(调用wait系统函数)
三、进程通信
3.1 独立进程和协同进程概述
操作系统中的进程可以是独立进程或协同进程。独立进程是指不会影响另一个进程的执行或被另一个进程执行影响(即进程之间不存在数据共享)。协同进程是指可能影响另一个进程的执行或被另一个进程的执行影响。同独立进程相比,协同进程具有信息共享、模块化、加速运算等优点。
3.2 协同进程中的进程间通信(IPC)
进程间通信有两种方式:共享内存和消息传递。如下图,左边是消息传递,右边是共享内存。共享内存的方式能以最快的速度进行方便的通信,适用于大量数据场景;消息传递适用于交换较少数据量的场景,因为需要内核的介入消息传递消耗时间多,而共享内存的方式无需内核的介入。
3.2.1 共享内存
一块内存在多个进程间共享,一般用于大数据通信。实现手段可以是文件映射、管道、剪贴板等。最典型的共享内存方式是生产者-消费者的例子,如下图生产者进程生产信息,供消费者进程消费。
3.2.2 消息传递
消息传递是微内核中的应用。消息传递有两个操作:发送和接收消息。若P和Q通信,则需要两步:1、建立通信连接。2、通过send/receive交换消息。