定义
是程序的一次执行过程
是一个程序及其数据在处理机上顺序执行时所发生的活动
进程是一个具有独立功能的程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个基本单位
为了使参与并发执行的程序能够独立的运行,必须为之配置一个专门的数据结构(PCB,Process Control Block).
系统利用PCB来描述进程的基本信息和运行状态,进而控制进和管理进程
相应的由程序段,相关数据段和PCB三部分构成了进程映像(进程实体)。dyld->mmap
所谓的创建进程就是创建进程映像中的PCB,而撤销进程则是撤销进程的PCB
PCB是进程存在的唯一标志
在引入进程实体的之后,它可以重新定义为进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位(标准答案)
进程的特征动态性: 进程是程序的一次运行过程,它有着创建,活动,暂停,终止等过程,具有一定的生命周期,是动态产生,变化和消亡的,动态性是进程最基本的特征。 类比MainActivity/AppDelegate,他们的部分状态也是基于进程的状态得来的。
并发性: 多个进程实体同时存在于内存并发执行
独立性: 进程实体是一个能独立运行,独立获得资源和独立接受调度的基本单位,需要创建PCB。
异步性: 由于进程之间是互相制约的,使得进程的执行具有间断性,进程按各自独立的不可预知的速度向前推进,异步会导致执行结果的不可预见性,为此操作系统必须配置相应的进程同步机制。
结构性:每个进程都有一块PCB对齐进行描述,从结构上来看进程是有程序段数据段和进程控制块三部分组成
通过Windows任务管理器或者Mac的活动监视器可以看到进程信息
进程的状态与转换运行态: 进程正在运行,在单处理机环境下,每个时刻最多只有一个进程处于运行状态
就绪态: 进程获得了除处理机意外的一切所需资源,一旦得到了处理机,便可以立即运行.系统中通常会有多个进程处理就绪态,将他们拍成一个队列,称作为就绪队列。
阻塞态: 又称等待态,进程正在等待某一件事情而暂停运行,如果等待某资源为可以用(不包括处理机)或等待输入/输出完成,即使在空闲时间,该进程也不能运行。
创建态: 进程正在被创建,尚未赚到就绪状态,创建线程通常需要多个步骤,首先申请一个空白的PCB,并向PCB中写一些控制和管理进程的信息,然后由系统分配运行时所必须的资源,最后把进程设置为就绪状态。
结束态: 进程正在从系统中消息,可以是正常结束或者是其它原因中断退出运行。进程需要结束时,系统首先必须设置该进程为结束状态,然后在进一步处理资源释放和回收工作。
注意区分就绪态和等待态,就绪态只是缺少处理机,等待态可能是缺少资源
进程控制主要功能: 对系统中的进程实施有效的管理,是它具有创建新进程,撤销已有进程,实现进程状态转换功能,在操作系统中一般把进程控制用的程序段成为原语。
进程的创建
为新进程分配一个唯一的进程标示号,并申请一个空白的PCB(PCB是有限的)。失败则返回创建失败。
为进程申请资源,为新进程的程序和数据以及用户栈分配必要的内存空间(在PCB中体现),若资源不足(如内存空间)则返回阻塞状态,而不是就绪状态,等待内存资源
初始化PCB:主要包括初始化标志信息,初始化处理机状态信息和初始化的处理机控制信息(标记,状态,处理机控制信息),以及进程的优先级等。
若进程就绪队列能够接纳新的进程,则将进程插入就绪队列,等待被调度运行。
进程终止
引起进程终止的原因有很多,常见的有 数组越界,保护错,非法指令,特权指令,运行超时,算数运算错,I/O故障等,外界干预,父亲进程请求终止,用户关闭
终止过程如下
根据被终止的进程标示符,检索PCB,从中读取该进程的状态。
若被终止的进程处于执行状态,立刻终止该进程的执行,并剥夺其处理机资源分配给其它进程。
若该进程还有子进程,则终止其所有的子进程
将该进程所拥有的全部资源,或归还给其父进程,或归还给操作系统
将该PCB从所在队列(链表)中删除。
进程的阻塞和唤醒
阻塞原语
进程标示号 -> PCB
若进程处于运行(类似上一篇文章提到的中断)保护现场,将其转化为阻塞状态,停止运行
把该PCB插入相应的事件队列,将处理机资源调度给其它的就绪进程
唤醒原语
进程标示号 -> 事件等待队列 -> PCB
将该PCB移除事件等待队列,并设置其状态为就绪状态
将PCB再插入到就绪对垒等待调度程序调度
阻塞和唤醒原语的最大区别: 阻塞是立即清除,唤醒是插入到队列后等待调度
进程的切换
保存处理机上下文(Context),包括程序计数器和其它寄存器
更新PCB信息
把PCB移动到相应的队列,如在就绪,在某事件阻塞等待队列
选择另一个进程执行,并更新其PCB,
更新内存管理的数据结构
恢复处理机上下文
> 关键字: 上下文,数据管理结构,计数器,寄存器