标签:
一 开篇
这篇博客开始介绍pintos project的第一个任务:
操作系统这门课对我个人而言算是比较有难度很有挑战的一门课,但是我非常的喜欢,关于一些算法性质的东西,在课上的时候可能不是很了解,但是通过pintos这个实验,很多东西自然而然的就明白了。
实验一从一开始我参考了这篇博客 Pintos-斯坦福大学操作系统Project详解-Project1 原博客的博主对于实验一讲解的非常细致,对于一些函数基本上也是一个个的讲解,所以如果觉得我这篇博客写的不是很好的朋友,请移步原博,希望你能有所收获。
之所以在原博客已经存在的情况下再写一篇这样的博客,是因为我觉得,在同一个实验中每个人的收获是不同的,比如一些地方的修改可能使你豁然开朗,有些函数该如何调用,有些变量如何使用,很多程度上让我觉得,这个实验让我学到了很多的东西。
OK,闲话不多说,开始任务。
二 任务分解
Project thread 的主要实验目标是使我们make check的时候,27个test全部pass。在不进行任何修改的情况下,make check 得到的结果是这样的:
pintos project 1 thread 可具体的划分成三个子任务
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