操作系统实验6:Introduction to OS161

实验目的 1.Be familiar with Subversion (SVN) and GDB (the GNU Debugger) 2.Setup your account to work on OS161 3.Understand the source code structure of OS161 4.Know how to build the OS161 kernel from source 5.Learn how to modify the OS161 kernel by adding debugging statements and system calls

实验内容 1.Install OS/161, Sys/161 and the toolchain 2.Learn how to modify it, build it, run it, and debug it 3.Customize the Kernel Boot Output 4.Add a Kernel Menu Command

实验环境 Environment:Ubuntu 14.04
Compiler: GCC MIPS Cross-Compiler GDB for Use with OS/161 bmake for use with OS/161

实验报告 1.细节说明 此次实验资料来自于哈佛大学CS350 操作系统课程,OS161是Harvard开发的专门用于学习和练习的简易操作系统,OS161分为两部分,kernel和user两层 在安装文件夹里,kernel文件夹里面的是OS的核心文件,不在kernel里面的就是公共文件。在安装目录下make会编译所有的公共信息,包括测试程序等等,基本都是用户层的东西。而在kernel/ASSTX/compile里面make则会重新编译整个OS161,不过相对的,如果要在kernel里添加文件,则需要在kernel/conf里面的修改设定,然后才能正确的编译。 (We use a simulator in CS350 because it allows everyone to have a private machine on which to test their operating system. In addition, debugging and testing the operating system on the simulator is easier than it would be on real hardware. The System/161 machine simulator has been found to be an excellent platform for rapid development of operating system code, while still retaining a high degree of realism. Apart from floating point support and certain issues relating to RAM cache management, it provides an accurate emulation of a MIPS R3000 processor.)

2.实验思路 Sys161 kernel中所涉及到的源文件分别是kprintf.c, main.c ,menu.c ,和lib.h, 文件都位于os161-1.99/kern/startup 的目录下。 1) 分析main文件发现,在主函数中的输出部分,有个kprintf函数用于输出显示信息在标准输出中,将其中的“Put-your-group-name…”改为自己的用户名即可。 2) 第二个实验要求设置一个新的函数dth,使得DOS界面中可以输出给定线程的调试信息。这个函数dth是显示在sub_menu的选择界面中。分析menu.c文件可以发现,可以参考已有的cmd函数系列,自己写一个关于dth的函数,并在cmdtable中建立对应的选择界面。 3) 根据ASST0中的说明,我们需要这个dth函数能够the output of debugging messages of type DB_THREADS,这个debug信息来自于一个kernel中的全局变量 dbflags, 该变量定义了哪种debug信息可以在内核运行的情况下输出(defines which types of debugging messages should be displayed when the kernel runs)。该变量的缺省值为0 查找发现在lib.h文件中定义DB_THREADS为0x0010,自此我们可以知道,在dth函数中将dbflags赋DB_THREADS的值,即可达到要求。

3.实验结果 1)在menu中添加dth命令选项

2)menu中自定义的cmd_dth函数

3)最终结果输出

4.遇到的问题及解决方案 本次实验最大的问题不在于添加命令函数,而在于安装和配置环境。 1) 安装Step5中GDB安装报错Error2 经大家相互交流发现,是因为原先的电脑中没有安装libncurses-devel library,按照指导上面的操作还是失败,所以直接google一下后下载好了需要的文件。

2) 安装Step7中对应的bin文件没有相应的文件,且执行ln命令时bmake未定义报错。 经过一番查找尝试发现,指导书上的sh语句总共有两行,而两行间没有说明,容易使人误会为两条命令,也导致了echo语句一直无法执行。全部的正确执行语句如下: sh –cs 'for i in mips-*; do ln -s $HOME/sys161/tools/bin/$i $HOME/sys161/bin/cs350-echo $i | cut -d- -f4-; done'

3) 关闭终端之后再执行语句报错:sys161语句未定义 讨论之后发现,按照指导书上的命令,在Step3配置环境变量和PATH的时候,我们只是将该命令路径添加在了当前终端界面之中,并没有改变整个ubuntu的环境,所以当关闭终端之后,由于系统访问不到命令对应的路径,无法执行该指令。 查找发现有三种改路径的方式 直接在/etc/environment目录下添加路径。但在此次实验中,该目录权限是只读,所以无法添加路径。(当然,直接改掉environment可能会使得电脑重启之后无法登陆,一旦出错就会引发很多麻烦的问题) 在终端中直接输入export PATH=$HOME/sys161/tools/bin:$PATH,这也是指导书上要求我们去做的,这种方式变量可以立即生效,但是只适合临时变量的设置。 在etc/profile 中加入PATH设置(这样对所有的用户都有效)或者在终端gedit ~/.profile (or .bashrc),将PATH添加在此文件末尾。(只对当前用户有效) 问题解决如下图所示

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值