- 进程: 就是一个正在运行的程序。
- 进程包含了正在运行的一个程序的所有状态信息,如下:
a.程序的代码
b.程序的数据
d. 堆(用来保存进程运行时动态分配的内存空间)
e.栈(一是用来保存运行上下文信息,二是在函数调用时,用来保存被调用函数的形参和局部变量)
f.进程所占用的一组系统资源,如打开的文件等 - 进程与程序:
程序是静态的概念:代码+数据
进程是动态的概念:程序+该程序的运行上下文 - 进程的特性: 动态性、独立性、并发性
动态性:在程序运行过程中,它的状态不断变化
独立性:一个进程是一个独立的实体,是计算机系统资源的使用单位。每个进程有“自己”的寄存器(逻辑上相对独立)和内部状态。(见补充)
并发性:从宏观上看,各个进程是同时在系统中相互独立的运行。微观上,各个进程是在一个接一个地顺序运行。 - 进程的创建(一般有4个引起进程创建的事件)
A.系统初始化时创建新进程,比如电脑开机自动启动的服务
B.一个正在运行的进程,如果执行了创建进程的系统调用,也会新建进程
C.用户发出请求,创建一个新的进程,比如打开每个文件
D.初始化一个批处理作业时,也会创建新进程 - 进程的终止:
A.正常退出(完成任务后,自愿退出)
B.错误退出(发现错误,进程主动提出退出,自愿退出)
C.致命错误(操作系统发现进程执行中的致命错误,强制踢出)
D.被其他进程所杀(Kill函数等) - 进程的状态:运行状态、就绪状态、阻塞状态
运行:指进程占有CPU,并在CPU上运行
就绪:进程已经具备了运行的条件,但CPU正忙,一旦获取CPU,就能立刻执行
阻塞(等待):进程因为等待某种事件的发生而暂时不能运行(比如等待输入数据)
*(阻塞与就绪不同,阻塞状态下即使CPU空闲,也不能立刻执行) - 进程状态的转换
(图片来自百度图片) - 进程控制块(Process Control Block,PCB)(见补充)
在操作系统中,用来描述和表示一个进程的数据结构,保存了与该进程有关的各种状态信息。
主要包括三个方面:
A. 进程管理(通用寄存器、程序状态字、程序计数器PC、进程状态、进程ID…)
B. 存储管理 (基地址寄存器的值、长度寄存器的值)
C. 文件管理 (根目录、当前工作目录、进程打开文件表) - 状态队列
由操作系统来维护一组队列,用来表示系统中所有进程的当前状态,不同的状态分别用不同的队列来表示。运行队列、就绪队列、阻塞队列。对于单CPU的计算机系统而言,在任何时刻,运行队列最多只有一个进程。
补充:
1.在物理上,CP当中只有一套寄存器,但是每一个进程都有一个属于自己的逻辑上的PC。所谓逻辑寄存器,其实就是一个个的内存变量。当一个进程要运行时,就会将其逻辑寄存器中的值装入到相应的物理寄存器中;反之,当一个进程暂时不运行时,就会把物理寄存器中的值保存在其相应的逻辑寄存器当中。这样,对于每个进程而言,好像它一直占用这物理寄存器,但实际上,大家是在轮流使用。
2.逻辑寄存器通过内存变量来实现,这些变量就是存放在进程的PCB中。
3.PCB好比是一个进程的档案,对进程的管理就是通过对其PCB的管理来实现的。进程的PCB存放在内存中,具体来说,存放在操作系统的数据区。