操作系统小组实验
组长 杨晓军 16281272
组员 巫 勐 16281271
王昊飞 16281269
张天悦 16281153
孙睿 16281079
mission1
一、环境配置
1.安装bochs
指令:
Install bochs
$ tar zxvf bochs-2.4.5.tar.gz
$ cd bochs-2.4.5
$./configure --enable-gdb-stub • $ make
$ sudo make install
详解:
Bochs和pintos下载到ubuntu系统下的home/qing(变成你的用户名)
打开终端(应用程序—附件—终端),输入命令:sudo passwd root,系统提示你输入root用户的新密码,输入两次后成功激活root用户,以后你就可以用root用户登陆了。
通过终端进入bochs所在的位置:cd /home/qing(最前面加/,表示绝对路径)
解压bochs:tar zxvf bochs-2.4.5.tar.gz
解压后,从位置–计算机----file system—home----qing,可以看到文件已经被解压成为文件夹
2.下面安装和运行pintos
指令
Install and run Pintos
$ tar zxvf pintos2011.tar.gz
$ cd pintos/src/threads
•$ make
•$cd build
$ …/…/utils/pintos – run alarm-multiple
详解:
首先和bochs一样,进入所在的位置,解压
解压后进入pintos/src/threads,编译
编译后,进入build目录,运行测试用例alarm-multiple
3.用gdb来调试pintos
指令
$ cd /pintos/src/threads/build
$ …/…/utils/pintos --gdb -s – run alarm-multiple
详解:
输入如下命令:…/…/utils/pintos --gdb -s – run alarm-multiple(注意run和前面的横杠之间有空格)(配置好环境变量后可直接用pintos命令)
终端中显示等待连接。
这时候,我们打开另一个终端,进入pintos的build目录,输入命令:gdb kernel.o(注意是英文字母o,不是数字0)
这样我们就进入了gdb
输入命令:targetremote localhost:1234,连接刚刚开启的程序(注意冒号后有空格)
然后输入:continue
4.安装完成
二、任务要求
重新实现timer_sleep函数
最后目标就是在threads/中跑make check的时候, 27个test全pass。
三、函数实现
实现思路:
调用timer_sleep的时候直接把线程阻塞掉,然后给线程结构体加一个成员ticks_blocked来记录这个线程被sleep了多少时间, 然后利用操作系统自身的时钟中断(每个tick会执行一次)加入对线程状态的检测, 每次检测将ticks_blocked减1, 如果减到0就唤醒这个线程。
具体代码
/* Sleeps for approximately TICKS timer ticks. Interrupts must
be turned on. */
void
timer_sleep (int64_t ticks)
{
if (ticks <= 0)
{
return;
}
ASSERT (intr_get_level () == INTR_ON);
enum intr_level old_level = intr_disable ();
s