1 进程的引入原因:
描述多道程序在并发系统中的执行过程。由于动态特性,即使相同的程序功能,每次运行时的动态特性不同,因此引入新的有机整体(包括程序功等能,运行时的动态信息),称这个有机整体为进程。
进程是资源分配的单位。cpu按进程分配资源。
2 unix中程序被定义为映像的执行。
映像:存储器映像+cpu映像+打开文件的状态+现行目录,可以理解为程序和动态执行该程序时产生的各种信息的整合。
cpu映像:
程序运行时各个寄存器的值
存储器映像:
进程控制块
进程执行的程序
进程运行时要使用的数据
进程运行时使用的工作区
当一个进程暂时退出处理机时,它的cpu印象就成为存储器映像的一部分,所以,提及,进程映像时一般指其存储器映像。
进程控制块:
基本控制块proc和扩充控制块user两部分
proc---记录进程状态,优先数等直接和进程调度有关的信息,常驻内存,不管对应的进程是否运行,系统都要查询和修改这些信息。
user---当进程处于运行状态时,才查询和处理这些信息,当进程不再处理机上时,该进程的user结构到可能被交换到外存,当进程被调度运行时再交换入内存。
进程执行的程序
进程执行的程序,即进程共享的正文段text(多个进程共享的可重入程序和常数)
进程运行时使用的数据
外部变量,局部变量,非共享正文段等
进程运行时使用的工作区
包括核心态下的工作区(线核心栈)和用户态下的工作区(用户栈)核心栈主要用于保护现场和中断,用户栈用于参数传递。
共享正文段text虽然也属于进程映像非常驻部分,但是否在内存中与共享它的各个进程情况有关,单独分开存储,数据栈,用户栈,核心栈存储地址连续。
进程映像的基本结构如下图:
3 进程调度信息
描述一个进程是否在内存中,是否正在使用处理机,使用处理机的程度
操作系统进行进程调度时使用proc中的进程调度信息。
过程: 首先操作系统唤醒等待事件消失的进程,被唤醒进程的proc的p-wchan(等待原因,即睡眠原因,当原因消失,唤醒因该原因而正在睡眠的进程)被置换为yes,p-stat置为ready。
然后操作系统检查所有p-stat为ready态的进程,根据进程优先数,操作系统确定最高优先权的进程运行。
选中运行进程后,根据p-flag值确定进程是否在内存,若不在内存,查看是否有足够大的空闲内存调入该进程的正文段,如果没有,则根据淘汰法调出某些正文段,直到有足够大的空闲内存,接下来操作系统根据p-addr和p-size将正文段调入,最后系统运行选中的进程。
4 进程的存储管理
核心态下的虚拟地址空间:
0·5存放unix代码,6页存放现在运行进程的ppda区,当然进程运行中还需要用到pcb,其中proc可通过ppda中的user找到
用户态下的虚拟地址空间:
逻辑上分为:共享正文段、数据段、用户栈,当然实际运行中还需要pcb其中的proc常驻内存,选择运行进程时,通过p-addr找到ppda,进程运行时ppda已经在核心态下的虚空间第6页
实际上,内存空间中各个进程映像分布如图所示,操作系统代码总是常驻内存的最低端,从0地址开始向高地址延生,而输入输出总是占用物理空间的最后1也
5 进程调度管理
运行状态:
SRUN指执行态和就绪态
p-stat=SRUN
睡眠状态:
进程等待事件的发生相当于封锁状态
暂停状态:
比较特殊的睡眠状态,用于父子进程的跟踪机构
僵尸状态:
SIDL:
父进程创建子进程时处于的特殊状态