进程的概念、组成和特征
(1)进程与程序的区别:
程序:是
静态的
,就是个存放在磁盘里的可执行文件,就是一系列的指令集合。
进程(
Process
):是
动态的
,是程序的一次执行过程。
(2)进程的组成——PCB、程序段和数据段
1.PCB
打开三次QQ,每打开一次就会创建一次进程,并为他分配独一无二的PID(进程ID)。而程序就是指QQ.exe。
同时操作系统还会为每一个进程分配内存,记录PID,用户UID等等,会把这些统一的保存到一个数据结构中,叫做进程控制块PCB。
但凡管理时所需要的信息,都会被放在
PCB
中
进程所属用户
ID
(
UID):基本的进程描述信息,可以让操作系统区分各个进程。
![](https://i-blog.csdnimg.cn/blog_migrate/505d42f3c6993f99c01f22f30dabee6d.png)
2.程序段
指程序的代码(指令序列)。
3.数据段
运行过程中的各种数据。如程序中产生的变量。
PCB
是
给操作系统用的
。
程序段、数据段
是
给进程自己用的
。
进程
是进程实体的
运行过程
,是系统进行
资源分配
和
调度
的一个独立单位。
注意:
PCB
是进程存在的唯一标志!
(3)进程的特征
动态性(是进程最基本的特征):进程是程序的一次执行过程,是动态的产生、变化和消亡的。
并发性:内存中有多个进程实体,各进程可并发执行。
独立性:进程能独立运行、独立获得资源、独立接受调度的基本单位。
异步性:各进程按各自独立的、不可预知的速度向前推进,操作系统是提供“进程同步机制”来解决异步问题。
结构性:每个进程都会配置一个PCB。从结构上看,进程由程序段、数据段、PCB组成。
总结:
进程的状态与转换
创建态:进程正在被创建时,它的状态是“
创建态
”,在这个阶段操作系统会为进程分配资源、初始化PCB
就绪态:当进程创建完成后,便进入“
就绪态”,处于就绪态的进程已经具备运行条件,但由于没有空闲CPU,就暂时不能运行。
运行态:当CPU空闲时,操作系统就会选择一个就绪进程,让它上处理机运行。
阻塞态:在进程运行的过程中,可能会
请求等待某个事件的发生(如等待某种系统资源的分配,或者等待其他进程的响应)。在这个事件发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU,并让它进入“
阻塞态”。当CPU空闲时,又会选择另一个“就绪态”进程上CPU运行
终止态:此时该进程会进入“ 终止态”,操作系统会让该进程下CPU,并回收内存空间等资源,最后还要回收该进程的PCB。当终止进程的工作完成之后,这个进程就彻底消失了。
就绪态、运行态和阻塞态是三种基本状态。
![](https://i-blog.csdnimg.cn/blog_migrate/94657cc4d011f070c3ed92df4cb39a3b.png)
进程的组织方式
操作系统运用什么样的方式将PCB组织起来进行管理。
(1)链接方式
(2)索引方式
![](https://i-blog.csdnimg.cn/blog_migrate/dafe24491e1814d9f77b8750d00a0989.png)
进程控制
进程控制是指实现进程状态转换。利用原语实现。
原语:原语是一种特殊的程序,它的执行具有原子性。也就是说,这段程序的运行必须一气呵成,不可中断。
为何要求一气呵成?
如果不能“一气呵成”,就有可能导致操作系统中的某些关键数据结构信息不统一的情况,这会影响操作系统进行别的管理工作。
如何实现原语的“原子性”?
可以用 “
关中断
指令”和“
开中断
指令”这两个
特权指令
实现
原子性。
(
内核程序,
运行在
核心态
)
正常情况:
CPU
每执行完一条指令都会例行检查是否有中断信号需要处理,如果有,则暂停运行当前这段程序,转而执行相应 的中断处理程序。
进程控制相关的原语
进程的创建:
进程的终止:
进程的阻塞和唤醒:
进程的切换:
总结:
的?
学习技巧:进程控制会导致进程状态的转换。无论哪个进程控制原语,要做的无非三类事情:
1.
更新
PCB
中的信息
a.
所有的进程控制原语一定都会修改进程状态标志
b.
剥夺当前运行进程的
CPU
使用权必然需要保存其运行环境
c.
某进程开始运行前必然要恢复期运行环境
2.
将
PCB
插入合适的队列
3.
分配
/
回收资源
的管理工
如何
进程通信
进程通信:进程通信就是指进程之间的信息交换。
进程是分配系统资源的单位(包括内存地址空间),因此
各进程
拥有的
内存地址空间相互独立
。
为了保证安全,
一个进程不能直接访问另一个进程的地址空间
。但是进程之间的信息交换又是必须实现的。为了保证进程间的安全通信,操作系统提供了一些方法。
(1)共享通信
两个进程对共享空间的
访问
必须是
互斥
的(互斥访问通过操作系统提供的工具实现)。操作系统只负责提供共享空间和同步互斥工具(如P
、
V
操作)。
基于数据结构的共享通信
基于数据结构
的共享:比如共享空间里只能放一个长度为10
的数组。这种共享方式速度慢、限制多,是一种
低级通信
方式。
基于存储区的共享:
基于存储区
的共享:在内存中画出一块共享存储区,数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,是一种
高级通信
方式。
(2)管道通信
(3)消息传递
总结:
线程的概念
在还没有引入进程之前,系统中各个程序只能串行执行。引入进程之后,程序就可以并发执行,如同时运行网易云和QQ(?这不是增加多个CPU就可以实现的吗?是指单CPU?那确实是可以实现)但是如果想用QQ同时聊天、视频和发送文件。进程是程序的一次执行,那么这些功能是无法由一个程序顺序执行而来实现的。
有的进程需要同时做很多事情,而传统的进程只能串行地执行一系列程序。为此引入了“线程”,来增加并发度。
可以把线程理解为“轻量级进程”。
线程
是一个
基本的
CPU
执行单元
,也是
程序执行流的最小单位
。引入线程之后,不仅是进程之间可以并发,进程内的
各线程之间
也可以
并发
,从而进一步
提升了系统的并发度
,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)
引入线程后,
进程
只作为
除
CPU
之外的系统资源的分配单元
(如打印机、内存地址空间等都是分配给进程的)。
线程
则作为
处理机的分配单元
。
引入线程之后,有什么变化?
![](https://i-blog.csdnimg.cn/blog_migrate/9e782fa84e5981df9d762e0c061ec3b5.png)