HIT操作系统实验环境搭建与实验过程

哈工大李治军老师的操作系统课程讲的非常不错,并且提供了配套的8个实验。链接:https://www.icourse163.org/course/HIT-1002531008

环境搭建

我这里采用Ubuntu 22.04系统,首先我们要先安装gcc3.4和as86汇编器。

wget http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/pool/universe/g/gcc-3.4/cpp-3.4_3.4.6-6ubuntu3_amd64.deb
wget http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/pool/universe/g/gcc-3.4/gcc-3.4-base_3.4.6-6ubuntu3_amd64.deb
wget http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/pool/universe/g/gcc-3.4/gcc-3.4_3.4.6-6ubuntu3_amd64.deb

sudo dpkg -i *.deb
sudo apt --fix-broken install
sudo apt install make gcc
sudo apt install gcc-multilib
sudo apt install bochs
sudo apt install lib32z1 libsm-dev:i386 libx11-6:i386 libxpm4:i386 libstdc++6:i386
sudo apt-get install libsm6:i386
sudo apt install bin86

实验环境下载:https://pan.baidu.com/s/1rP0Bc1_DUVCL-7_g_YJHeQ 提取码: u3nb

实验指导:https://www.lanqiao.cn/courses/115/learning,懒得配环境可以到这里去下载,同时测试脚本也可以在上面下载(由于不开会员不能保存,我这里用我自己的机器进行实验,只需要到上面下载测试脚本就行了)。

操作系统的引导

跟着实验指导就行了,写得很详细。

系统调用

我们执行oslab中的mount-hdc脚本,挂载硬盘,在hdc/usr/root中导入测试脚本并编写iam.cwhoiam.c

代码(建议完成编写后再对照)



然后修改hdc/usr/include/unistd.h,增加两个宏定义:

#define __NR_iam   72
#define __NR_whoami    73

之后就可以解挂hdc了。

然后修改linux0.11/kernel/system_call.s

nr_system_calls = 74 #我们增加了两个系统调用,所以从72改到74

然后在linux0.11/include/linux/sys.h里面加上:

extern int sys_iam();
extern int sys_whoami();

...,sys_iam,sys_whoami};

然后自己编写linux0.11/kernel/who.c,需要注意的是,内核态无法直接访问用户态的内存,所以我们要使用asm/segment.h中的get_fs_byte,put_fs_byte之类的函数。

代码(建议完成编写后再对照)

里面有一些坑,比如for(i=0;i<strlen(s);i++)会出错。


编写完成后,修改linux0.11/kernel/Makefile

OBJS  = sched.o system_call.o traps.o asm.o fork.o \
        panic.o printk.o vsprintf.o sys.o exit.o \
        signal.o mktime.o who.o  #后面追加who.o
### Dependencies:      
who.s who.o: who.c ../include/linux/kernel.h ../include/unistd.h#新增一行

运行结果:

进程运行轨迹的跟踪与统计

待更新

知识共享许可协议
Text is available under CC BY-NC-SA 4.0 unless otherwise stated.

除非特殊声明,本站所有内容均以 CC BY-NC-SA 4.0协议授权。
上一篇