版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
以下是我自己写的,人格担保!计算机科学与技术学院实验报告实验题目:OverviewandProcesses学号:剑阁惊起日期:2013/12/10班级:姓名:宋三毛Emai1:*******@实验目的:在这个附加的作业中,我需要做的是回答一系列问题。这些问题是与我刚刚完成的前八个实验有关的,是关于进程和线程的概念,以及他们是如何在nachos系统中实现的。需要认真的读实验指导和nachos源代码,总结学到的。问题:A:ProcessConcept什么是进程?可能造成进程一下改变的原因是什么?A:fromstateRunningtostateWaitingfromstateRunningtostateReadyfromstateWaitingtostateReadyfromstateReadytostateRunning答:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。造成A的原因往往是等待外部设备、内存资源的分配或者是人手工的输入所引起,例如,等待键盘的输入信息等等;//beforenow(forexample,inThread::Finish()),becauseuptothis//point,wewerestillrunningontheoldthreadJsstack!if(threadToBeDestroyed!=NULL){deletethreadToBeDestroyed;threadToBeDestroyed=NULL;}结论分析与体会:这次实验虽是回答下列问题,但是所涉及的都是关于在Unix和nachos系统下的进程和线程的比拟问题,从他们的建立,执行、调度、中断、上下文切换等等,深入剖析了其中的异同点,对我理解和把握nachos系统有了更进一步的帮助。造成B的原因往往不是由于自身的原因,而是由于外部的干扰,例如系统规定的时间片用完,或者是更高级别的进程进来抢占内存造成的;造成C的原因往往是等待的条件已经满足,例如等待的内存资源已经分配下来了,或者是外部设备的输入已经完成了,进程只需要分配到处理器中就可以运行了;造成D的原因往往是系统按照某种调度策略选中就绪队列中的一个进程,将其调度到CPU中运行。B:ProcessScheduling什么是调度?OS中为什么需要调度?答:按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。常用的调度有长期调度、中期调度、短期调度;短期调度是选择进程到CPU中运行,常用的算法有FCFS、最短优先、轮转法等;引起进程调度的原因正在执行的进程执行完毕或因发生某事件而不能再继续执行;执行中的进程因提出I/O请求而暂停执行;在进程通信或同步过程中执行了某种原语操作如P操作、阻塞、挂起原语等;在可剥夺式调度中,有比当前进程优先权更高的进程进入就绪队列;在时间片轮转法中,时间片完;os中需要一种策略来选择下一个要执行的进程,这样才能防止拥塞和杂乱的进程执行,提高OS的性能,使之更加高效和便捷;Nachos中短期调度实现:voidScheduler::ReadyToRun(Thread*thread)DEBUG('t',"Puttingthread%sonreadylist.\n〃,thread->getName());thread->setStatus(READY);readyList->Append((void*)thread);iThread*Scheduler::FindNextToRun()1return(Thread*)readyList->Remove();}C:ProcessCreationandTermination1、描述一下UNIX中怎样创立一个新的进程?答:在UNIX系统中,用户创立一个新进程的唯一方法就是调用系统调用forko调用fork的进程称为父进程,而新创立的进程叫做子进稔。系统调用的语法格式:pid二fork。;在从系统调用fork中返回时,两个进程除了返回值pid不同外,具有完全一样的用户级上下文。在子进程中,pid的值为零。在系统启动时由核心内部地创立的进程0是唯一不通过系统调用fork而创立的进程。Fork之后用exec来执行新进程的代码。2、描述一下nachos中怎样创立一个线程?答:Thread::Thread(char*threadName)(name=threadName;stackTop=NULL;stack=NULL;status=JUSTCREATED;ttifdefUSER_PROGRAMspace=NULL;ttendif1voidThread::Fork(VoidFunctionPtrfunc,_intarg){ttifdefHOST_ALPHADEBUG(JV,,,Forkingthread\,,%s\,/withfunc=Ox%lx,arg二%ld\n,z,name,(long)func,arg);#elseDEBUG('t',"Forkingthread\〃%s\〃withfunc=Ox%x,arg=%d\n〃,name,(int)func,arg);#endifStackAllocate(func,arg);IntStatusoldLevel=interrupt->SetLevel(IntOff);scheduler->ReadyToRun(this);//ReadyToRunassumesthatinterrupts//aredisabled!(void)interrupt->SetLevel(oldLevel);13、描述一'下nachos中怎样终止一'个线程?答:在nachos中,一般通过以下方法来终止一个正在运行或者运行完,亦或是在等待的进程:voidThread::Finish()!(void)interrupt->SetLevel(IntOff);ASSERT(this==currentThread);DEBUG(?V,''FinishingthreadgetName());threadToBeDestroyed=currentThread;Sleep();//invokesSWITCH一个进程不能自己终止自己,他需要通过调用它的进程来实现对自己的终止。D:ContextSwitch实现进程A和进程B上下文切换,什么必须完成?上下文切换(ContextSwitch)或者环境切换;多任务系统中,上下文切换是指CPU的控制权由运行任务转移到另外一个就绪任务时所发生的事件。在操作系统中,CPU切换到另一个进程需要保存当前进程的状态并恢复另一个进程的状态:当前运行任务转为就绪(或者挂起、删除)状态,另一个被选定的就绪任务成为当前任务。上下文切换包括保存当前任务的运行环境,恢复将要运行任务的运行环境。进程上下文用进程的PCB(进程控制块,也称为PCB,即任务控制块)表示,它包括进程状态,CPU寄存器的值等。通常通过执行一个状态保存来保存CPU当前状态,然后执行一个状态恢复重新开始运行。描述一下nachos中怎样实现线程的上下文切换的?答:Switch的汇编源文件,实现线程的切换:SWITCH:movl%eax,_eax_save#savethevalueofeaxmovl4(%esp),%eax#movepointertotlintoeax#saveregisters#savestackpointer#getthesavedvalueofeaxmovl%ebx,_EAX(%eax)#storeitmovl0(%esp),%ebx#getreturnaddressfromstackintoebxmovl%ebx,PC(%eax)#saveitintothepcstoragemovl8(%esp),%eax#movepointertot2intoeaxmovl_EAX(%eax),%ebx#getnewvalueforeaxintoebxmovl#saveregisters#savestackpointer#getthesavedvalueofeaxmovl%ebx,_EAX(%eax)#storeitmovl0(%esp),%ebx#getreturnaddressfromstackintoebxmovl%ebx,PC(%eax)#saveitintothepcstoragemovl8(%esp),%eax#movepointertot2intoeaxmovl_EAX(%eax),%ebx#getnewvalueforeaxintoebxmovl%ecx,_ECX(%eax)movl%edx,_EDX(%eax)movl%esi,ESI(%eax)movl%edi,_EDI(%eax)movl%ebp,EBP(%eax)movl%esp,ESP(%eax)movl_eax_save,%ebx#saveit#retoreoldregistersmovl%ebx,_eax_savemovl_EBX(%eax),#saveit#retoreoldregistersmovl_ECX(%eax),%ecxmovl_EDX(%eax),%edxmovlESI(%eax),%esimovlEDI(%eax),%edimovl_ESP(%eax),%esp#restorestackpointermovlPC(%eax),%eax#restorereturnaddressintoeaxmovl%eax,4(%esp)#copyovertheretaddressonthestackmovleaxsave,%eaxret用的是Scheduler中的Run来实现:voidScheduler::Run(Thread*nextThread)(Thread*oldThread=currentThread;#ifdefUSERPROGRAM//ignoreuntilrunninguserprogramsif(currentThread->space!=NULL){//ifthisthreadisauserprogram,currentThread->SaveUserState();//savetheuser'sCPUregisterscurrentThread->space->SaveState();ttendifoldThread->CheckOverflow();//checkiftheoldthread//hadanundetectedstackoverflowcurrentThread=nextThread;//switchtothenextthreadcurrentThread->setStatus(RUNNING);//nextThreadisnowrunningDEBUG。t',"Switchingfromthread\〃%s\〃tothread'级s\〃\n〃,oldThread->getName(),nextThread->getName());//Thisisamachine-dependentassemblylanguageroutinedefined//inswitch,s.Youmayhavetothink//abittofigureoutwhathappensafterthis,bothfromthepoint//ofviewo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广告行业的技术创新与应用趋势分析考核试卷
- 化工仪器与自动化装置考核试卷
- 电力仪表的智能电网技术演进考核试卷
- 智能厨房课件教学课件
- 服装店新员工培训
- 生命生态课件教学课件
- 淮阴工学院《工程施工1》2023-2024学年第一学期期末试卷
- 致未来课件教学课件
- 光盘盘片相关行业投资规划报告
- 苏教版科学四下《物体形状改变以后》教案
- 九年级语文上册其中知识点复习
- 2024年江苏省泰州市保安员理论考试题库及答案(完整)
- 糖尿病酮症酸中毒
- 人教版(2024新版)七年级上册数学期中模拟试卷(无答案)
- 2024-2030年全球及中国浏览器行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 2024秋期国家开放大学《公共行政学》一平台在线形考(形考任务一至三)试题及答案
- 2024年通信电子计算机技能考试-通信电力机务员考试近5年真题附答案
- 2024年应急指示灯具:消防应急灯合作协议书
- 《喜迎建队日 争做好少年》主题班会教案3篇
- 北京市初一上学期期中道德与法治试卷与参考答案
- 高盛-比亚迪:全球汽车市场上的新兴领先企业-2024-10-企业研究
评论
0/150
提交评论