1、进程的概念
程序和进程的区别
程序:是静态的,就是个存放在磁盘里的可执行文件,如:QQ.exe。
进程:是动态的,是程序的一次执行过程,如:可同时启动多次QQ程序。
同一个程序多次执行会对应多个进程。
如下图,我们可以通过QQ.exe打开多个程序,但每一个QQ程序都对应着唯一的进程。
2、进程的组成
进程由PCB、程序段和数据段组成。PCB是给操作系统用的,程序段、数据段是给进程自己用的。
程序段、数据段、PCB三部分组成了进程实体(进程映像),引入进程实体的概念后,可把进程定义为:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
注:进程是动态的,进程实体(进程映像)是静态的。
PCB(Process Control Block):进程控制块
思考:操作系统作为进程的管理者,要怎么区分各个进程呢?
当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的“身份证 号”—— PID(Process ID,进程ID)
操作系统要记录PID、进程所属用户ID(UID),还要记录给进程分配了哪些资源(如:分配了多少内存、正在使用哪些I/O设备、正在使用哪些文件),并且记录进程的运行情况(如:CPU使用时间、磁盘使用情况、网络流量使用情况等)。
这些信息都被保存在PCB 中,操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中。
PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收其PCB 。
程序段
包含程序指令。
数据段
包含运行过程中产生的各种数据。
3、进程的特征
-
动态性(动态性是进程最基本的特征):进程是程序的一次执行过程,是动态产生、变化和消亡的。
-
并发性:内存中有多个进程实体,各个进程可并发执行。
-
独立性:进程是能独立运行、独立获得资源、独立接受调度的基本单位。
-
异步性:各进程按各自独立的、不可预知的速度向前推进,操作系统要提供“进程同步机制”来解决异步问题。
-
结构性:每个进程都会配置一个PCB。结构上看,进程由程序段、数据段、PCB组成。
4、进程的状态与转换
-
进程正在被创建时,它的状态是“创建态”,在这个阶段操作系统会为进程分配资源、初始化PCB。
-
当进程创建完成后,便进入“就绪态”, 处于就绪态的进程已经具备运行条件,但由于没有空闲CPU,就暂时不能运行。
- 当CPU空闲时,又会选择另一个“就绪态”进程上CPU运行。
-
如果一个进程此时在CPU上运行,那么这个进程处于“运行态”。
-
在进程运行的过程中,可能会请求等待某个事件的发生(如等待某种系统资源的分配,或者等待其他进程的响应)。在这个事件发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU,并让它进入“阻塞态 ”。
-
一个进程可以执行 exit 系统调用,请求操作系统终止该进程。 此时该进程会进入“终止态”,操作系统会让该进程下CPU ,并回收内存空间等资源,最后还要回收该进程的PCB。当终止进程的工作完成之后,这个进程就彻底消失了。
Q1:那如何区分上述这五种状态呢?
A1:进程PCB中,会有一个变量 state 来表示进程的当前状态。如:1表示创建态、2表示就绪态、3表示运行态… 为了对同一个状态下的各个进程进行统一的管理,操作系统会将各个进程的PCB组织起来。
补充说明:运行态—>阻塞态是进程主动选择的行为。
而阻塞态—>就绪态不是进程自主能控制的,是一种被动行为
5、进程控制
定义
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。
进而言之,就是要实现进程状态转换。
如何实现进程控制?
使用“原语”来实现。
原语是一种特殊的程序, 它的执行具有原子性。也就是说,这段程序的运行必须一气呵成,不可中断。
进程控制相关的原语
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
无论哪个进程控制原语,要做的无非三类事情:
1、更新PCB中的信息
2、将PCB插入合适的队列
3、分配/回收资源
6、进程通信(IPC)
什么是进程通信?
进程间通信 ( Inter-Process Communication,IPC ) 是指两个进程之间产生数据交互。
为什么进程通信需要操作系统支持?
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。
共享存储
-
基于数据结构的共享:比如共享空间里只能放 一个长度为10的数组。这种共享方式速度慢、 限制多,是一种低级通信方式。
-
基于存储区的共享:操作系统在内存中划出一 块共享存储区,数据的形式、存放位置都由通 信进程控制,而不是操作系统。这种共享方式速度很快,是一种高级通信方式。
消息传递(间接通信方式)
进程间的数据交换以格式化的消息 ( Message) 为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
管道通信
进程通信——管道通信“管道”是一个特殊的共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的内存缓冲区
-
管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信, 则需要设置两个管道。
-
各进程要互斥地访问管道(由操作系统实现)
-
当管道写满时 ,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。
-
当管道读空时 ,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。
-
管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:①一个管道允许多个写进程, 一个读进程 (2014年408真题高教社官方答案);②允 许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据 (Linux 的方案 ) 。
醒读进程。 -
管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:①一个管道允许多个写进程, 一个读进程 (2014年408真题高教社官方答案);②允 许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据 (Linux 的方案 ) 。