第三次作业答案_第1页
第三次作业答案_第2页
第三次作业答案_第3页
第三次作业答案_第4页
第三次作业答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2.1比较程序次序执行和并发执行。答:程序次序执行程序并发执行次序性:处理机操作严格按照程序所要求次序执行间断性:共享系统资源,程序之间形成了相互制约关系封闭性:程序一旦开始执行,执行结果不受外界原因影响失去封闭性:多个程序共享系统中各种资源,这些资源状态将由多个程序来改变,致使程序失去封闭性。可再现性:只要程序执行时环境和初始条件相同,都将取得相同结果。不可再现性:程序失去封闭性,计算结果与并发程序执行速度关于。程序经过数次执行后,即使他们执行时环境和初始条件相同,不过结果却不相同。2.2比较程序和进程。答:1)进程是一个动态概念,而程序则是一个静态概念。程序是指令有序集合,没有任何执行含义,而进程则强调执行过程,它动态地被创建,并被调度执行后消亡。2)进程具备并行特征,而程序没有。进程具备并行特征两个方面,即独立性和异步性。也就是说,在不考虑资源共享情况下,各进程执行是独立,它们之间不存在逻辑上制约关系,各进程是异步。因为程序不反应执行过程,所以不具备并行特征。3)进程是系统中独立存在实体,是竞争资源基本单位。进程对应特殊描述结构并有申请、使用、释放资源资格。因为系统中存在多个进程,系统资源有限性必定造成多个进程对资源共享和竞争,从而使进程并行性受到系统制约。4)进程存在必定需要程序存在,但进程和程序不是一一对应。因为进程是程序执行过程,所以程序是进程一个组成部分。处于静止状态程序并不对应于任何进程。当程序被处理机执行时,它一定属于某一个或者多个进程。属于进程程序能够是一个,也能够是多个。不一样进程能够包含同一个程序,只要该程序所对应数据集不一样。2.3试对进程状态及状态转换进行总结,注意状态转换物理含义及转化条件。答:处于就绪状态进程,在调度程序为之分配了处理机之后,该进程便可执行,对应地,它就由就绪状态转变为运行状态。正在执行进程也称为当前进程,假如分配给它时间片已完而被暂停执行时,该进程便由执行状态又回复到就绪状态;假如因发生某事件而使进程执行受阻,使之无法继续执行,该进程将由执行状态转变为阻塞状态。引入挂起状态后,又增加了从挂起状态到非挂起状态之间转换,当进程处于未被挂起就绪状态时,用挂起原语Suspend将该进程挂起后,该进程便转变成为静止就绪状态,此时进程不再被调度执行。当进程处于未被挂起阻塞状态时,用Suspend原语将它挂起后,进程便转变为静止阻塞状态,处于该状态进程在其所期待事件出现后,将从静止阻塞状态变成静止就绪。处于活动就绪状态进程,若用激活原语Active激活后,该进程将转变为挂起就绪状态。处于活动阻塞状态进程,若用激活原语Active激活后,将转变为阻塞挂起状态。2.4试举例说明引发进程创建、撤消、阻塞或被唤醒主要事件分别有哪些?答:引发进程创建,如用户登录;作业调度;提供服务;应用请求。进程撤消,当一个进程抵达了自然结束点,或时出现了无法克服错误,或是被操作系统所中介,或是被其余有终止权进程所终止,都会引发进程撤消。进程阻塞,请求系统服务,不能立刻满足;开启某种操作,且必须在该操作完成之后才能继续执行;新数据还未抵达,相互合作进程一方需首先取得另一进程数据才能继续;无新工作可做,特定功效系统进程当完成任务且暂无任务。进程被唤醒,系统服务满足;操作完成;数据抵达;新任务出现。2.5试依照你自己了解,采取类C语言设计和描述操作系统关于进程控制块数据结构、组织方式及管理机制。在此基础上,给出进程创建、终止、阻塞、唤醒、挂起与激活等函数原型及函数代码。注意,对于过于复杂功效或你无法处理细节可采取指定功效函数模块如处理机调度scheduler()来代替。答:进程控制块数据结构:

Structtask_struct{longstate;/*任务运行状态(-1不可运行,0可运行(就绪),>0已停顿)*/longcounter;/*运行时间片计数器(递减)*/longpriority;/*优先级*/longsignal;/*信号*/struct

sigactionsigaction[32];/*信号执行属性结构,对应信号将要执行操作和标志信息*/longblocked;/*bitmapofmaskedsignals*//*variousfields*/int

exit_code;/*任务执行停顿退出码*/unsignedlongstart_code,end_code,end_data,brk,start_stack;/*代码段地址代码长度(字节数)代码长度+数据长度(字节数)总长度堆栈段地址*/

longpid,father,pgrp,session,leader;/*进程标识号(进程号)父进程号父进程组号会话号会话首领*/unsignedshortuid,euid,suid;/*用户标识号(用户id)有效用户id保留用户id*/unsignedshortgid,egid,sgid;/*组标识号(组id)有效组id保留组id*/longalarm;/*报警定时值*/longutime,stime,cutime,cstime,start_time;/*用户态运行时间内核态运行时间子进程用户态运行时间子进程内核态运行时间进程开始运行时刻*/unsignedshortused_math;/*标志:是否使用协处理器*//*filesysteminfo*/inttty;/*-1ifnotty,soitmustbesigned*/unsignedshort

umask;/*文件创建属性屏蔽位*/struct

m_inode*pwd;/*当前工作目录i节点结构*/struct

m_inode*root;/*根目录i节点结构*/struct

m_inode*executable;/*执行文件i节点结构*/unsignedlongclose_on_exec;/*执行时关闭文件句柄位图标志*/struct

file*filp[NR_OPEN];/*进程使用文件表结构*//*ldtforthistask0-zero1-cs2-ds&ss*/struct

desc_structldt[3];/*本任务局部描述符表。0-空,1-代码段cs,2-数据和堆栈段ds&ss*//*tssforthistask*/Struct

tss_structtss;/*本进程任务状态段信息结构*/};

组织方式:Typedefstruct

LNode{ElemType

data;//存放pcb块数据信息structLnode

*next;

//指针域

}LNode,*LinkList;

(结构指针)

链表查找方式:StatusGetElem_L(LinkListL,inti,ElemType&e){

//

L是带头结点链表头指针,以e返回第i个元素p=L->next;

j=1;

//p指向第一个结点,j为计数器while(p&&j<i)

{p=p->next;

++j;

}

//

顺指针向后查找,直到p指向第i个元素或p为空if(!p||j>i)

return

ERROR;

//

第i个元素不存在e=p->data;

//

取得第i个元素returnOK;}//GetElem_L

算法复杂度为:O(ListLength(L))

系统建立几张索引表。每个索引表表目中,统计具备对应状态某个PCB在PCB表中地址。当指针查找索引表,找出PCB地址,再经过指针找对应该地址PCB块。平均查找长度:=(n/s+s)/2+1

n为表长度s为表中统计个数

进程管理机制:用户使用应用程序,应用程序要访问系统调用接口,产生中止,而系统调用接口需要查询中止向量表,cpu依照中止向量号跳转到所需服务中,即系统调用服务程序。系统服务程序会调用内核函数(create,terminate,block,wakeup,suspend,active)进程创建与终止:创建:Boolfret=BoolCreateProcess(LPCTSTRlpApplivationName,

//全部或部分地指明包含可执行代码EXE文件文件名LPCTSTRlpApplivationName,

//向可执行文件发送参数LPCTSTRlpApplivationName,

//返回进程句柄安全属性.主要指明这一句柄是否应该由其余子进程所继承LPSECURIITY_ATTRIBUTESlpThreadAttributes,

//返回进程根本程句柄安全属性BOOLbInheritHandle,

//一个标志,告诉系统允许新进程继承创建者进程句柄DWORDdwCreationFlage,//特殊创建标志(如CREATE_SUSPENDED)位标识LPVOIDlpEnvironment,

//向新进程发送一套环境变量;如为null值则发送调用者环境LPCTSTRlpCurrentDirectory,//新进程开启目录STARTUPINFOlpStartupInfo,//STARTUPINFO结构,包含新进程输入和输出配置详情LPPROCESS_INFORMATIONlpProcessInformation//调用结果块;发送新应用程序进程和根本程句柄和ID);

终止:

If(m_hPro){

//假如句柄正当

if(!TerminateProcess(m_hPro,0)){

//依照句柄,终止刚才创建进程

AfxMessageBox(“关闭进程出现错误!”);

Exit(0)}

else

{AfxMessageBox("TerminateProcess成功");

}}原语:被创建进程外部标识符n、初始CPU状态S0,进程优先数K0、初始内存M0以及所需资源清单R0等、某进程运行中间结果acc。创建:从PCB集合种索取一个空白PCB,并取得该PCB内部标识符i;然后,把调用者提供参数,以及从执行过程EP中取得调用者内部标识j,填入该PCB,设置记帐数据,置新进程为“静止就绪”状态;最终,把此PCB分别插入就绪队列RQ和进程家族中。

ProcedureCreate(n,S0,k0,M0,R0,acc)begini:=getInternalName(n);//取得内部名i.id:=n;

//填外部名i.Priority:=k0;

//填优先表i.cpustate:=S0;

//填cpu初始状态i.mainstore:=M0;

//填写主存区域i.resource:=R0;

//填写资源清单i.status:='Readys';

//填写进程状态j:=EP;

//获取调用者内部标识i.Parent:=j;

//填入i进程父进程j

geny:=null;

//i家庭指针为空geny:=i;

//把i填入其父进程pcb中家庭指针处i.state:=RQ;

//i所在状态队列首指针Insert(RQ,i);

//把i进程插入RQ队尾continue;end

终止:Procedure

destroy(n)BeginSched:=false;i:=getinternalname(n);//获取n进程内部名kill(i);ifschedthenschedulerelsecontinue;//假如Schde为真,则转调度程序,不然继续endprocedurekill(i)beginifi.stata(i)=”executing”thenbeginstop(i);sched:=true

end;remove(i.stata,i);

//将被撤消进程从i.state所指示队列中除去forallS∈genydokill(s);forallr∈(i.mainstore∪i.resources)doifowned(r)theninsert(r.semaphore,r.date);//属于父进程资源偿还且插入父进程资源清单forall∈createdresources(i)doremovedescriptor(R);//撤消自己资源清单偿还系统removeprocesscontrolblock(i);end阻塞:

Procedure

block

//阻塞执行进程中某个进程EP进程号iBegini:=EP;

//从执行进程EP取得调用者内部标识符Stop(i);i.status:=”blockda”;i.stata=WQ(r);//填写阻塞队列指针insert(WQ(r),i);//把i插入WQ队尾scheduler

//转调度程序}

唤醒:Procedurewakeup(n)Begini:=getinternalname(n);remove(WQ(r),i);

//把i进程从等候r而受阻塞队列中摘除i.status:=”ready”;//置i进程为“就绪”状态i.sdata:=RQ;

//把i进程插入到就绪队列insert(RQ,i);continueend挂起:Proceduresuspend(n,a)Begini:=getinternalname(n);s:=i.status;ifs=”executing”thenstop(i);a:=copyPCB(i);i.status:=ifs=”blockeda”then“blockeds”elsereadys;ifs=”executing”thenschedulerelsecontinue;end

激活:Procedure

active(n)Begini:=getinternalname(n)i.status:=ifi.status=”readys”then“readya”elseblockeda;ifi.status=”readys”thenscheduler;//当激活后进程处于“readys”状态针,将引发重新调度elsecontinueend

2.1什么是临界区?引入临界区目标是什么?答:临界区:每个进程中访问临界资源那段代码称为临界区。目标:假如共享该临界资源每个进程能互斥进入自己临界区,就能确保对临界资源互斥访问。2.2统计型信号量物理意义。答:统计型信号量初值表示系统中某类资源数目,因而又被称为资源信号量。当值为正(n)时,表示当前n个临界资源可用,或者最多还可允许n进程进入该资源对应临界区;当值为0时表示临界资源已经全部被占用;当值为负(-n)时其绝对值表示等候使用该资源进程数。2.3信号量(整型和统计型)不用原语能否实现进程互斥?各举一反例说明。答:整型:不能。S=1process1:begin单独执行每个程序都是正确,因为每个程序都能实现一个进程进入临界区。不过,当程序并发执行时候P1:whiles<=0dono_ops=1单独执行每个程序都是正确,因为每个程序都能实现一个进程进入临界区。不过,当程序并发执行时候P1:whiles<=0dono_ops=1没进入循环P2:whiles<=0dono_ops=1没进入循环P1:s=s-1s=0进入临界区P2:s=s-1s=-1进入临界区两个进程可能同时进入临界区whiles<=0dono_op s=s-1N=N-1;//访问临界资源s=s+1untilfalse;endprocess2:beginrepeatwhiles<=0dono_op s=s-1N=N+1;s=s+1untilfalse;endP1:s=1-1=0P2P1:s=1-1=0P2:s=0-1=-1P1:blockP2:block死锁,两个进程都无

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论