计算机操作系统实验指导-基于RISC-V代理内核 课件 第五章实验3:进程管理_第1页
计算机操作系统实验指导-基于RISC-V代理内核 课件 第五章实验3:进程管理_第2页
计算机操作系统实验指导-基于RISC-V代理内核 课件 第五章实验3:进程管理_第3页
计算机操作系统实验指导-基于RISC-V代理内核 课件 第五章实验3:进程管理_第4页
计算机操作系统实验指导-基于RISC-V代理内核 课件 第五章实验3:进程管理_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

基于RISC-V代理内核的操作系统课程实验与课程设计第五章.实验3:进程管理目录实验3的基础知识多任务环境下进程的封装进程的换入与换出就绪进程的管理与调度实验内容lab3_1进程创建(fork)lab3_2进程yieldlab3_3循环轮转调度实验3的基础知识多任务环境下进程的封装实验三的PKE操作系统将需要支持多个进程的执行。操作系统定义了进程池(processprocs[NPROC];)。并对进程的结构进行了扩充,加入以下成员:mapped_info;//pointstoapagethatcontainsmapped_regionstotal_mapped_region;

//nextfreemappedregioninmapped_infouint64pid;//processid,intstatus;//processstatus,structprocess*parent;//parentprocess,structprocess*queue_next;//nextqueueelement;多任务环境下进程的封装进程可能拥有的段分为以下几个类型:enumsegment_type{CODE_SEGMENT,//ELFsegmentDATA_SEGMENT,//ELFsegmentSTACK_SEGMENT,//runtimesegmentCONTEXT_SEGMENT,//trapframesegmentSYSTEM_SEGMENT,//systemsegment};进程具有以下几种状态:enumproc_status{FREE,//unusedstateREADY,//readystateRUNNING,//currentlyrunningBLOCKED,//waitingforsomethingZOMBIE,//terminatedbutnotreclaimedyet};进程的启动进程启动的步骤:一、调用alloc_process()函数:找到一个空的进程结构体为新创建的进程建立了KERN_BASE以上逻辑地址的映射将映射信息保存到进程结构中二、调用load_bincode_from_host_elf()函数载入给定应用对应的ELF文件的各个段三、调用的elf_load()函数在载入段后,将对被载入的段进行判断,以记录它们的虚地址映射,此时将形成用户进程的虚地址空间结构。四、通过switch_to()函数将所构造的进程投入执行;进程的终止进程的终止通过exit系统调用实现:一、调用free_process(current):将进程设为ZOMBIE状态,而不会将进程所占用的资源全部释放。该函数被调用时操作系统是在S模式下运行,而按照PKE的设计思想,S态的运行将使用当前进程的用户系统栈。此时,如果将当前进程的内存空间进行释放,将导致操作系统本身的崩溃。二、调用schedule()函数:选择系统中可能存在的其他处于就绪状态的进程投入运行。就绪进程的管理与调度PKE的操作系统设计了一个非常简单的就绪队列管理。将一个进程加入就绪队列,可以调用insert_to_ready_queue()函数:若就绪队列为空,将本进程作为就绪队列头。若就绪队列非空,则将本进程加入就绪队尾。PKE内核通过调用schedule()函数来完成进程的选择和换入:若就绪队列空,检查是否存在未结束的进程。如果有,等待期执行结束;如果无,则启动关机程序。若就绪队列非空,将就绪队列队首的进程换入执行。目录实验3的基础知识多任务环境下进程的封装进程的换入与换出就绪进程的管理与调度实验内容lab3_1进程创建(fork)lab3_2进程yieldlab3_3循环轮转调度lab3_1进程创建(fork)给定应用预期输出lab3_1进程创建(fork)实验内容:主进程调用fork()函数试图创建一个子进程,但是应用程序的fork动作并未将子进程给创建出来并投入运行。修改kernel/process.c文件中的do_fork()函数。对于父进程的代码段,通过映射的办法,将子进程中对应的逻辑地址空间映射到其父进程中装载代码段的物理页面。lab3_2进程yield给定应用预期输出lab3_2进程yield实验内容:yield()函数功能未完善导致使得进程无法让出执行权。完善yield()函数实现进程执行过程中的主动释放CPU的动作:将当前进程置为就绪状态(READY);将当前进程加入到就绪队列的队尾;转进程调度。lab3_3循环轮转调度给定应用预期输出lab3_3循环轮转调度实验内容:两个进程在执行各自循环体时,都没有主动释放CPU的动作。这样的设计会导致某个进程长期占据CPU,而另一个进程无法得到执行。通过利用时钟中断来实现进程的循环轮转调度,避免由于一个进程的执行体过长,导致系统中其他进程无法得到调度的问题!lab3_challenge1进程等待和数据段复制给定应用预期输出lab3_challenge1进程等待和数据段复制实验内容:通过修改PKE内核和系统调用,为用户程序提供wait函数的功能,wait函数接受一个参数pid:当pid为-1时,父进程等待任意一个子进程退出即返回子进程的pid;当pid大于0时,父进程等待进程号为pid的子进程退出即返回子进程的pid;如果pid不合法或pid大于0且pid对应的进程不是当前进程的子进程,返回-1。补充do_fork函数,实验3_1实现了代码段的复制,你需要继续实现数据段的复制并保证fork后父子进程的数据段相互独立。lab3_challenge2实现信号量给定应用预期输出……lab3_challenge2实现信号量实验内容:以上程序通过信号量的增减,控制主进程和两个子进程的输出按主进程,第一个子进程,第二个子进程,主进程,第一个子进程,第二个子进程……这样的顺序轮流输出。为了实现进程同步功能,你需要实现信号量的分配、释放和PV操作。lab3_challenge3写时复制(CopyOnWrite)给定应用预期输出……lab3_challenge3写时复制(CopyOnWrite)实验内容:以上程序执行如下操作:在父进程的堆上申请一片区域,并输出其

温馨提示

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

评论

0/150

提交评论