操作系统面试题(二)
进程控制
每一个进程都由一个程序段(包括数据)和一个进程控制块pcb组成,程序和数据描述进程应完成的功能;而进程控制块pcb则描述进程的动态特征。
PCB块的属性:
1.进程标识符:每个进程必须有唯一的标识符,可以用字符或编号标识,在创建一个进程时,由创建者给出进程的标识符。另外,为了便于系统管理,
进程还应有一个内部标识符
2.进程的当前状态status:该项说明本进程目前.处于何种状态(运行、就绪、等待),作为进程调度时分配处理机的主要依据。只有当进程处于就绪状态时,
才有可能获得处理机。当某个进程处于阻塞状态时,有时要在pcb中阻塞的原因
3.当前队列的指针:该项登记了处于同一状态的下一个pcb的地址,以此将处于同一状态的所有进程链接起来
4.总链指针:因为进程的标识符必须是唯一的,由创建者给出的被创建进程的名字是否会重名,必须先检查系统已有的进程名,但若分别在各个队列
去查询将是十分麻烦的,所以应提供一个进程总链结构。
5.程序的开始地址:该进程的程序将从地址开始执行
6.进程优先级:进程的优先级反映了进程要求CPU的紧迫程度,它通常由用户预先提出或由系统指定
7.CPU现场保护区:当进程由于某种原因释放处理机是,CPU现场信息被保存在pcb的该区域中,以便在该进程重新获得处理机后能继续执行
8.通信信息:指每个进程在运行过程中与别的进程进行通信时所记录的有关信息
9.家庭联系:有的系统允许创建一个进程创建自己的子进程,这样会组成进程家族。在pcb中必须指明本进程与家族的联系
10.占有资源清单
不同的操作系统所使用的pcb结构式不同的。对于简单操作系统,pcb结构比较小。而在一些较复杂的操作系统中,pcb所包含的内容则比较多,
比如有关于I/0、文件传输等控制信息。
进程控制原语:
1.进程创建:用户不能直接创建进程,而只能通过操作系统提供的进程创建原语,以系统请求方式向操作系统申请创建进程
必须提供的信息:进程标识符、进程优先级、进程开始地址
算法:create
输入:新进程的标识符,优先级,开始执行地址
输出:新创建进程才内部标识符 pid
{
在总链队列上查找有无同名的进程;
if(有同名进程)
return(错误码);
从pcb资源池申请一个空闲的pcb结构;
if(无空pcb结构)
return(错误码);
用入口参数设置pcb内容;
置进程为“就绪”态;
将新进程的pcb插入就绪队列;
将新进程的pcb插入总链表队列;
return(新进程的pid);
}
2.进程撤销:
算法 kill
输入:无
输出:无
{
有运行指针得到当前进程的pid;
释放本进程所占用的资源给父进程;
该进程从总链队列中摘除;
释放此pcb结构;
转进程调度;
}
3.进程阻塞:
算法:susp
输入:chan等待的事件(阻塞原因)
输出:无
{
保护现行进程的CPU现场到pcb结构中;
置该进程为“阻塞”状态;
将该进程pcb插入到等待chan的等待队列中;
转进程调度;
}
4.进程唤醒:
算法:wakeup
输入:chan等待的事件(阻塞原因)
输出:无
{
找到该阻塞原因的队列指针
for(等待该事件的进程)
{
将该进程移出此等候队列;
置进程状态为“就绪”;
将进程pcb插入就绪队列;
}
}