西电计算机操作系统课程设计pintos-pro1

2020-04-17 00:21

西安电子科技大学 操作系统课程设计

(2016年度)

实 验 报 告

实验名称:Alarm-Clock 班级: 姓名: 学号:

西安电子科技大学《操作系统课程设计》实验报告 2016年度

一、实验内容

重新实现timer_sleep()函数,避免“忙等待”的发生 二、分析及设计 Timer_sleep 函数原型:

Void timer_sleep (int64_t ticks) { //ticks为等待的时间长度 int64_t start = timer_ticks (); //记录开始时的系统时间 ASSERT (intr_get_level () == INTR_ON);

while(timer_elapsed(start) =ticks时就返回。 thread_yield (); //否则将持续占用 cpu。 }

Timer_sleep函数使用忙等待的方法,用一个while循环不断地请求CPU来判断是否经过了足够的时间长度。如果elapse足够的时间长度后则返回。 timer_interrupt 函数原型 static void

timer_interrupt (struct intr_frame *args UNUSED){//UNUSED是一个宏,表示参数没用 enum intr_level old_level; //和先前一样,记录原来的中断状态 old_level=intr_disable(); //forreach函数要求关中断。 ticks++;

thread_foreach (block_check, 0); intr_set_level (old_level); //恢复中断

thread_tick (); //交给操作系统出发中断并且调度新的线程进驻 cpu。 }

西安电子科技大学《操作系统课程设计》实验报告 2016年度

pintos在每次时间中断时(即每一个时间单位(ticks))调用一次timer_interrupt,将 cpu强制交换操作系统,即返还内核状态。

timer_sleep()中执行while()循环实现,当前时间若不满足挂起的时间要求,则调用thread_yield()函数继续循环,如果满足则直接压入就绪队列。实际上只存在两个态,Running和Ready,并没有真正意义上的睡眠与唤醒 如图:

由于在 while() 循环中, 不断的进行 thread_yield() 操作。通过查看源代码中 thread_yield()函数注释:

/* Yields the CPU. The current thread is not put to sleep and may be scheduled again immediately at the scheduler's whim. */

这也验证上面所说的线程并没有真正进入睡眠,且该线程有可能又一次立即被调度,这样 的结果就是产生了忙等待。

解决:在 timer_sleep()函数中使线程进入 Block(阻塞) 态。系统运行一段时间后,睡眠时间到,再对该线程进行唤醒,从 Block 态转入 Ready 态。改造后的机制为如图。 即在 timer_sleep(函数中让该进程暂时阻塞(调用 thread_block()),然后过了 ticks 个时间段后再把它加回到 ready queue 中。因为每一次时间中断的时候恰好是 ticks 加一 的时候,因此我们可以改进 timer_interrup()函数,使得系统每次调用他的时候都检查一 下我的这个进程是否已经等待了足够长得时间了。如果还没有够,则不管它,如果已经足 够长了,则调用 thread_unblock()函数将它召唤回 ready_queue 中。

Running Ready 西安电子科技大学《操作系统课程设计》实验报告 2016年度

Running Block Ready

三、详细实现

1、修改thread.h,在struct_thread结构体中添加一个新的成员变量ticks_blocked用来记录 thread被阻塞了多久

2、修改thread.c,修改 thread_create函数,使得ticks_blocked初始化为0。

3、打开 timer.c文件,修改 timer_sleep 函数和 timer_interrup 函数

西安电子科技大学《操作系统课程设计》实验报告 2016年度

修改时钟中断处理函数, 加入线程sleep时间的检测

4、在 thread.c 文件中添加上面 timer_interrupt 函数中用到的函数checkInvokd 函数,并在thread.h中添加相关声明,检查调用情况。

四、实验结果

西安电子科技大学《操作系统课程设计》实验报告 2016年度

共有7个测试通过。 五、心得体会

在原本的方案中,是只有两个状态,后来自己添加的阻塞状态,和在操作系统课中学到的三种基本状态运用到实际中,运行、阻塞、就绪机制的配合,让系统真正实现管理机制,防止一直占用进程,提高系统的利用率。 参考文献

[1]斯坦福大学教学课程,pintos操作系统project详解


西电计算机操作系统课程设计pintos-pro1.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:国际商法参考题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: