操作系统概念老师pintos实验part_第1页
操作系统概念老师pintos实验part_第2页
操作系统概念老师pintos实验part_第3页
操作系统概念老师pintos实验part_第4页
操作系统概念老师pintos实验part_第5页
已阅读5页,还剩13页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

PintosProject中山大学软件学院一 本次实验课Q&A地址 二 三 背景介绍 四 五 本周任务:Project1 背景介 六 1 2 thread数据结构 3 thread的内存分布 一、Q&A地址 有问题先看QA上面有没有解答再问哈~总会有你想要的二、实验前准备:本章我们要讲的是Pintos的Thread机制。在开始之前,希望能够提前阅读源代码,初步了解Pintos的代码架构。三、背景介绍Pintos已经实现了大多数操作系统Thread机制所需的组件,如信号量,锁,条件变量,以及优化屏障等。另外,Pintos实现了对标准IO库中printf的支持以在代码调试的时候不妨使用printf进行debug。*时刻要注意,我们现在开发的一个运行在机器(模拟的)上面的操作系统,没有了一般运行环境下面的系统支持,一切都需要自力更生。请不要有依赖IE的心理。四、本周学习内Pintos的进程切换方式 如何实现在内核态的进程切换的(汇编语言实现Pintos进程切换所采用的策略是什么(C语言实现五、本周任务:Project1alarm-本周实验需要回答问题(写到实验报告中Brieflydescribewhathappensinacalltotimer_sleep(),includingtheeffectsofthetimerinterrupthandler.Howcanyousolvetheprobleminvs.唤醒机制我们知道,假如一台计算机只有一个单核的P,也就是说实际上同一时刻只有一个进程正在占用P,那么,会不会遇到这个进程停不下来呢?确实会有这样一种情况,CPU被某进程占用了,操作系统又没有别的机制要回P,那么该进程让PU做任何操作PU应用程序将会一直霸占P,造成死机现象。为了解决这样的一个问题,计算机有一种中断机制,通过时钟(件),每隔一定的时间间隔就将PU强制交还给操作系统,即返回内核态,由操作系统重新进行PU的分配。这个机制的实现,在Pnt中使用了tier来模拟实现。我们来看看代码吧。timer.c和timer.h这是整个系统的同步部分,timer间隔一定的时间发出硬件中断使操作系统返回状态以决定下一次执行的用户态进程是什么。timer.c文件中:timer_sleep操作系统应该调用新的进程获得CPU,然而我们从原始的代码实现中可后再重新执行,并不释放CPU。上述进程的执行状态是1、检查是否可以唤醒自己(if(time_elasped(startticks2、若仍然需要继续休眠,则交还控制权给操作系统在于read队列的头部,因此即使将CPU交还给操作系统我们第一个做法是,将这种等待机制的timer_sleep变成唤醒机制的timer_sleep。先想想再看答案参考答案:(你也可以有自己的实现进程调用tierseep时进程标记为bock状态,并交还PU给操作系统,由操作系统重新选择新的进程运行,每次回到内核态时,操为此,我们需要添加一个函数以及一个变需要添加一个函数以检测被睡眠的进程是否需要唤醒,这里block0对比,看看是不是应该唤醒了。这里为ticks_blocked变量。timer_interrup函数1、打开thread.h,ticks_blocked2、打开thread.c,thread_createticks_blocked初始化为0,函数所在文件位置为:添加内容为:注意添加的位置,需要在进程t创建出来之后,thread_unblock此时timer.c文件,修timer_sleepticks_blocked减一,直到其为0时重新将其放入ready队列中。4、每次时钟中断时会调用timer_interrup函数,因此需要修改此函数,使其更新正在休眠的程序的ticks_blocked以及正在运行进程的ticks(thread_tick函数)原本只记录当前进程运行了的时间,现在需要同时修改其还需要被block的时间,这个操作在checkInvoke函数中更改后如下checkInvoke函数呢,嗯,这个就是我们需要添加任意位置都OK。5、添加checkInvoke注意在thread.h中添加同样的函数这时候,结果就出来啦离成功还差一个aarmprorty哦,剩下的那个aarprorty就需要同学们自己做啦,这个怎么做就暂时不要问我了,想下怎么做~接下去看有实现的提示,但是没有答案。实验报告要求刚开始会过几个test解释原设计有什么缺陷导致没法过这几个解释为什么原设计有缺陷的情况下仍然能够过一些你的设计是什么,用伪代码写出你的实际实现是什么,截图你的回答注意:为了防止摘抄网上答案,请截图全部27个,且不要给我全部27个都过的,否则我会认为你直接获取了网上的答案源码。另外,全部运行截图都请将用户名截下来,如下:(注意alarm-priority|---- //pintos|----学号_ //实验报压缩包命名为学号_请不要使用RAR等其他格式,方便统一解:六、alarm-priority实现提1、基本数据结构-队列的list.c&Pintos实现的是一个双向其数据结构如上图所示,其中我们需要关注一下几个操作函遍历也就是查找下一个元素的方法这样一个st所候如何将所的内容转换为具体的数据结构呢?这就需要一下一个宏定义啦:好了,既然我们需要实现alarm-priority,也就是需要根据进程的优先级thread.c2、thread数据结3、thread的内存分布我们可以看到thread调度的几个关键函数1、thread_block: 调用schedule函数让系统重新选择新的进程运行。2thread_unblock:readytorun状态并加入到ready队列中以待操作系统进行调用。3、那么schedule函数做了thread_block,thread_current的状态改变了,但是当前进程仍然是获得当前CPU的进程,只不过其中一个状态变量改变了而已(ThreadStatusBlocked),为进程切换做好了准备,并未实际进行切换,因currunning_threadthread_current,CPU时间scheduleswitch_threadCPU的进程和下一thread_priority,也就是说要按照优先级来进行调度,高优先级的进程先现有的实现机制是(我们看thread_ubblock函数),进程状态变为readtorunready队列的

温馨提示

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

评论

0/150

提交评论