Pintos Project1:Thread 实验报告
Pintos Project1:Thread 实验报告
github地址:https://github.com/RebekahYuuu/OS_Experiments_Pintos_01
一、Pintos简介
Pintos是80x86架构的简单操作系统框架。它支持内核线程,加载和运行用户程序以及文件系统,但它以非常简单的方式实现所有这些。
实验环境为:Ubuntu 16.04 bochs-2.6.6
二、Ubuntu下安装Pintos
1、安装bochs
- sudo su获取root用户权限
- 解压bochs压缩包
进入你的bochs压缩包所在的目录输入命令:tar zxvf bochs-2.6.6.tar.gz - 安装一些必要的软件包
进入解压后的bochs文件夹
sudo apt-get install aptitude
sudo aptitude install build-essential
sudo apt-get install libx11-dev
sudo apt-get install xserver-xorg-dev
sudo apt-get install xorg-dev - 配置bochs
./configure - - enable-gdb-stub - 编译bochs 命令:make
- 安装 命令:sudo make install
2、安装Pintos
- 进入pintos压缩包所在目录
- 解压pintos 命令:tar zxvf pintos.tar.gz
- 进入解压后的pintos文件夹下的pintos/src/threads目录
- 编译 命令:make
3、配置环境变量
- 进入home目录,打开文本编辑器软件 命令:gedit
- 点选编辑器上的”open”,然后到/home/…(你的用户名)目录下找到文件”.bashrc”,默认情况你是看不到的,要右键你的用户名文件夹,勾选上“显示隐藏文件”才能看到
- 在“.bashrc”文件的最后新增一行,输入以下内容并保存:
export PATH=”$PATH:/home/用户名/pintos/src/utils” - 在该目录下输入以下命令:bash
- 进入root目录,修改root下的.bashrc文件,操作和修改/home/用户名下的.bashrc文件是一样的,新添的内容也是完全一样的
- 在root目录下输入以下命令:bash
4、修改调试器文件
- 进入pintos/src/utils目录,打开文本编辑器 命令:gedit
- 找到并打开pintos-gdb文件,在第4行修改如下并保存:
GDBMACROS=/home/用户名/pintos/src/misc/gdb-macros - 再进入pintos下的/threads目录编译 命令:cd …/threads,回车后再输入:make
5、测试
三、实验步骤
Mission1.重新实现timer_sleep()函数
1、分析
(1). timer_sleep()函数
暂停执行调用线程,直到时间提前至少x个计时器滴答。除非系统处于空闲状态,否则线程不需要在x个刻度之后唤醒。在等待适当的时间后,将它放在就绪队列中。
timer_sleep() 对于实时操作的线程非常有用,例如每秒闪烁一次光标。
参数to timer_sleep()以计时器刻度表示,而不是以毫秒或任何其他单位表示。TIMER_FREQ每秒有计时器滴答,其中TIMER_FREQ是定义的宏 devices/timer.h。
(2). 目标
timer_sleep函数使用忙等的方法,用一个while循环不断向cpu发出请求,判断是否过了足够时间长度,有忙等成分。通过修改pintos的线程休眠函数来保证pintos不会在一个线程休眠时忙等待。
(3). 分析过程
查看源码可知,intr_get_level()函数可以返回当前中断处于