码迷,mamicode.com
首页 > 其他好文 > 详细

pintos project (2) Project 1 Thread Explanation

时间:2015-05-26 17:50:49      阅读:1002      评论:0      收藏:0      [点我收藏+]

标签:

一 开篇

  这篇博客开始介绍pintos project的第一个任务:

  • Project 1 Threads 

  

  操作系统这门课对我个人而言算是比较有难度很有挑战的一门课,但是我非常的喜欢,关于一些算法性质的东西,在课上的时候可能不是很了解,但是通过pintos这个实验,很多东西自然而然的就明白了。

  实验一从一开始我参考了这篇博客 Pintos-斯坦福大学操作系统Project详解-Project1 原博客的博主对于实验一讲解的非常细致,对于一些函数基本上也是一个个的讲解,所以如果觉得我这篇博客写的不是很好的朋友,请移步原博,希望你能有所收获。

  之所以在原博客已经存在的情况下再写一篇这样的博客,是因为我觉得,在同一个实验中每个人的收获是不同的,比如一些地方的修改可能使你豁然开朗,有些函数该如何调用,有些变量如何使用,很多程度上让我觉得,这个实验让我学到了很多的东西。

  OK,闲话不多说,开始任务。

二 任务分解

  Project thread 的主要实验目标是使我们make check的时候,27个test全部pass。在不进行任何修改的情况下,make check 得到的结果是这样的:

技术分享

  pintos project 1 thread 可具体的划分成三个子任务

  • Mission 1  重新实现 timer_sleep()函数。
  • Mission 2 实现优先级调度
  • Mission 3 实现多级反馈调度

Mission 1:

  重新实现timer_sleep()函数

  pintos系统使用的是busy waiting的方式实现,即: 线程在不停的循环,寻求进入CPU的机会,直至时间片耗尽,进程被饿死。我们需要做的就是更改timer_sleep()的实现。

  timer_sleep()函数在src/devices/timer.c中。

    技术分享

   我们可以看到 int64_t start = timer_ticks(); 这一行,调用了timer_tick()函数,让我们找到这个函数:

    技术分享

   在这个函数里面使用了一个枚举类型 intr_lever,让我们找到这个枚举值。在interrupt.h中,我们可以看到: 

    技术分享

 

   很明显的我们可以知道,这个枚举值是一个控制中断的值,当INTR_OFF的时候,禁止中断,当INTR_ON的时候,允许中断。

   在timer_ticks()中我们看到了intr_disable()函数,继续找到intr_disable(),在interrupt.c中:

    技术分享

   通过注释我们可以得知,这个函数的作用是,在调用的时候,禁止中断并且放回上一个中断状态。

   而在这里我们看到了一个intr_get_level()函数,虽然通过名字我们基本上已经判断出来它的作用,但是我们还是要看一下实现:

    技术分享

  intr_get_level()的作用是: 返回当前中断的状态。(具体的实现使用了汇编,然而我并没有学过汇编,因此放在一边,我们只需要明白它的作用就好,具体的汇编实现我们并不需要去了解。如果有兴趣了解的,请寻找相关资料。)

 

pintos project (2) Project 1 Thread Explanation

标签:

原文地址:http://www.cnblogs.com/crayygy/p/pintos-project-1-thread-explanation.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!