山东大学操作系统课程设计实验报告
# 一、摘要
# 实验一 Nachos 系统的安装与调试
## 工作总结
1、完成了 Nachos 和 GCC 的安装和调试。
2、利用 gdb 工具跟踪 Nachos 的执行过程以及跟踪上下文切换函数 SWITCH()及函数 ThreadRoot()的执行过程。
# 实验三 利用信号量实现线程同步
## 工作总结
1、分析了 main.cc system.cc utility.cc interrupt.h timer.h threads.h
switch.s scheduler.h synch.h ring.h Threadtest prodcons.cc 等文件中的代码。
2、在 prodcons.cc 中加入 ProdCons() Producer() Consumer()实现了生产者消费者模型。利用信号量实现线程同步。完成了相关调试工作。
# 实验四 实验五 Nachos 的文件系统
## 工作总结
1、分析了 mian.cc disk.h synchDisk.h bitmap.h filehdr.h openfile.h directory.h filesys.h fstest.cc 等文件中的代码。
2、通过修改 OpenFile 类 FileSystem 类 FileHeader 类实现了文件的大小可扩展性。可实现写入过程中文件大小的增长。实现了 ap nap hap 等 shell 命令。
3、通过修改 DirectoryEntry 类 FileSystem 类 Directory 类 fstest.cc main.cc,增加 CurDir 类实现多级目录。实现相对路径和绝对路径的处理。实现了当前路径的变更。实现了级联删除。实现了 cd pwd ls mkdir cat rm rmdir cp rmdir-r 等 shell 命令。
4、完成了相关调试工作。
## 特色
1、实现了文件的大小可扩展性。可实现写入过程中文件大小的增长。
2、实现了 ap nap hap 等 shell 命令。
3、实现了多级目录。
4、实现相对路径和绝对路径的处理。
5、实现了当前路径的变更。
6、实现了级联删除。
7、实现了 cd pwd ls mkdir cat rm rmdir cp rmdir-r 等 shell 命令。
# 实验六 实验七 实验八 Nachos 用户程序与系统调用
## 工作总结
1、分析了 machine.h translate.h noff.h mipssim.h addrSpace.h thread.h schedule.h syscall.h start.s progtest.cc exception.cc 等文件中的代码。
2、通过 AddrSpace 类添加 Print()方法实现进程页表打印。
3、通过修改 system.cc AddrSpace 类实现进程地址空间扩展,实现多道程序。
4、通过修改 AddrSpace 类 progtest.cc exception.cc,增加 Pcb 类实现 Exec()系统调用。
5、通过修改 Pcb 类 AddrSpace 类 List 类 Scheduler 类 Thread 类 system.cc exception.cc 实现 Join() Exit()系统调用。
6、通过修改 exception.cc 实现 Yield()系统调用。
7、shell 脚本除运行 noff 可执行文件外,还实现了 ls 等 shell 命令。
8、通过修改 Pcb 类 exception.cc 实现 Create() Open() Write() Read() Close()系统调用。主要实现了进程打开文件表。
9、编写 sh.noff read.noff exec.noff yiel.noff halt.noff 作为测试文件,拷贝到 Nachos 文件系统中。
10、完成了相关调试工作。
## 特色
1、实现了 Halt() Exec() Join() Exit() Yield() Create() Open() Write() Read() Close()系统调用。
2、编写 sh.noff read.noff exec.noff yiel.noff halt.noff 作为测试文件,实现了上述系统调用的全面测试。
3、noff 文件拷贝到 Nachos 文件系统中。在 Nachos 文件系统多级目录中完成调试工作。
4、sh.noff 作为 shell 脚本程序,除运行 noff 可执行文件外,还实现了 ls 等 shell 命令。
5、Pcb 类的加入使进程的概念更加清晰、整体。
6、实现了进程打开文件表、进程文件描述符。
# 二、正文
## 1 实验一 Nachos 系统的安装与调试
### 1.1 Nachos 系统的安装与调试过程
#### 1.1.1 检查系统是否支持多架构
![](https://www.writebug.com/myres/static/uploads/2022/1/10/96c080fe364573ed3ef4194cc7073dbb.writebug)
#### 1.1.2 安装 32 位编译环境与支持库
如果未安装 gcc 及 g++ 编译器,请提前安装它们
sudo apt-get install build-essential g++-multilib gcc-multilib
#### 1.1.3 解压 Nachos 源码
将 nachos-3.4-SDU-64-.tar.gz 文件复制到你所希望的目录中
tar -xzvf nachos-3.4-SDU-64.tar.gz
#### 1.1.4 进入目录 ../nachos-3.4-SDU/code/threads 进行测试
cd nachos-3.4-SDU-64/code/threads
Make clean
![](https://www.writebug.com/myres/static/uploads/2022/1/10/a6558c33c0d201d8d139b7abefbcd0ca.writebug)
Make
![](https://www.writebug.com/myres/static/uploads/2022/1/10/b6c0f85ef4e172aec7666aa0d260c452.writebug)
./nachos
![](https://www.writebug.com/myres/static/uploads/2022/1/10/8ab99df56a9f0e2f81b67fceef88e40f.writebug)
#### 1.1.5
在../code/filesys,以及../code/userprog 目录下采用同样的方法测试 Nachos 的相关代码是否正常运行。
![](https://www.writebug.com/myres/static/uploads/2022/1/10/776dcf4ec2580b8322dedade5ffdf0ab.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/10/c862aca11a30a44dae7685183b2f09d8.writebug)
#### 1.1.6 测试../code/test
将交叉编译器 gcc-2.8.1-mips.tar.gz 复制到/usr/local 目录中并解压;
进入../code/test,在命令终端中依次运行下述命令
make clean
![](https://www.writebug.com/myres/static/uploads/2022/1/10/8317823a0b90ef56e4826e6a3c38c8be.writebug)
Make
![](https://www.writebug.com/myres/static/uploads/2022/1/10/4bbf90de1bac3892118aebd0fe659647.writebug)
#### 1.1.7 测试生成的 Nachos 可执行程序 noff
./nachos -x ../test/halt.noff
![](https://www.writebug.com/myres/static/uploads/2022/1/10/29302d97290fd82e754f50238e8b7e2c.writebug)
./nachos -x ../test/shell.noff
对于 shell.c、sort.c、matmult.c 等几个应用程序,由于它们调用了 Nachos 的几个系统调用(如 Exec、Join、Exit);这些系统调用目前尚未实现,需要你们实现;因此无法正常运行。如 shell.noff 输出信息如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/10/84c4e9de67faa08138256ed2884f0a53.writebug)
### 1.2 Nachos 系统的安装与调试过程中的思考
#### 1.2.1 为什么 gcc-2.8.1-mips.tar.gz 一定要安装在/usr/local 目录中
打开 code/Makefile.dep,在大约 38 行左右,查看变量 GCCDIR 的值,会得到答案:GCCDIR = /usr/local/mips/bin/decstation-ultrix-。
#### 1.2.2 交叉编译器用于将../test 目录下的 Nachos 应用程序(如 halt.c)编译成 coff 格式文件,经转换后会生成 Nachos 可执行的文件 halt.noff
.noff 可执行文件中的指令基于 MIPS 架构,Nachos 模拟的 CPU 执行 MIPS 架构的指令。
#### 1.2.3 在你所生成的 Nachos 系统中,下述函数的地址是多少?并说明找到这些函数地址的过程及方法。
i. InterruptEnable()
ii. SimpleThread()
iii. ThreadFinish()
iv. ThreadRoot()
gdb 自带命令可以查看某个函数的地址空间,指令为 p 函数名借此可以查看题目给出的四个函数在内存中的地址空间
![](https://www.writebug.com/myres/static/uploads/2022/1/10/d22c7a0bb3430401b367a2c3e7f4c37b.writebug)
#### 1.2.4 下述线程对象的地址是多少?并说明找到这些对象地址的过程及方法。
要想找到两个线程的地址空间,我们首先应该对源码进行分析,然后确定好断点要打的位置。i.通过分析,我们发现在位于 system.cc 中的 Initialize 函数有这样的代码:而根据 Initialize 函数在 main 函数中十分靠前的位置,我们可以确定,这里就是主线程的初始处。因此,我们只需要给 Initialize 函数打断点,进入后执行到 currentThread 设置状态的部分,然后查看其内存地址即可,效果如下:如图所示,其内存地址为 0x8053a88。
![](https://www.writebug.com/myres/static/uploads/2022/1/10/7c3b1adf0ea66a5c306aa7b14e49faba.writebug)
通过分析源码,我们知道主线程 Fork 子线程的地方在 threadtest.cc 的 ThreadTest1 函数中:因此我们只需要在 ThreadTest1 函数�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
实验一 Nachos 系统的安装与调试 实验三 利用信号量实现线程同步 实验四 Nachos 的文件系统 实验五 Nachos 的文件系统扩展 实验六 Nachos 用户程序与系统调用 实验七 地址空间的扩展 实验八 系统调用 1、操作系统课程设计和理论课程相得益彰。通过本次课程设计,我强化了对操作系统相关知识的理解,锻炼了编程能力。 2、通过实验三,我在 Nachos 上利用信号量实现了线程同步。阅读源码和理论课程相结合,对线程调度、线程切换、线程同步、生产者消费者模型等概念有了更深入的理解。 3、通过实验四和实验五,我在 Nachos 实现了具有多级目录和文件大小扩展的文件系统。对 Nachos 文件系统的源码进行阅读,并与理论课程相结合,对 FCB、打开文件表、文件描述符、目录、inode、磁盘读写、驱动程序、IO 中断等概念有了更加深刻的理解。 4、通过实验六、实验七和实验八,我在 Nachos 上实现了运行用户程序、运行 shell 脚本、地址空间扩展、PCB 整合、系统调用。对 Nachos 模拟 CPU 和执行用户进程的源码进行阅读,并与理论课程相结合,对 PCB、中断、异常、系统调用、进程映射内核线程、进程打开文件表、pid 等概念有了更加深刻的理解。 5、通过对 Nachos 的学习,对操作系统有了更深刻更具体的认识,课本上的知识不再是空中楼阁。操作系统是计算机科学中的基础课程,操作系统课程中学习的知识使我对计算机有了更加系统性的认识。
资源推荐
资源详情
资源评论
收起资源包目录
基于C++进行操作系统课程设计实验【100013085】 (611个子文件)
big 608B
big 340B
execute.c 11KB
coff2noff.c 7KB
out.c 6KB
coff2flat.c 4KB
d.c 4KB
disasm.c 4KB
main.c 4KB
system.c 3KB
read.c 2KB
sh.c 1KB
opstrings.c 1KB
sort.c 1KB
matmult.c 1KB
join.c 1004B
writ.c 952B
halt.c 946B
my.c 934B
exec.c 924B
crea.c 902B
open.c 900B
yiel.c 878B
shel.c 536B
filesys.cc 28KB
filesys.cc 28KB
mipssim.cc 18KB
thread.cc 18KB
fstest.cc 18KB
fstest.cc 18KB
sysdep.cc 15KB
thread.cc 15KB
interrupt.cc 13KB
disk.cc 12KB
disk.cc 12KB
disk.cc 12KB
post.cc 12KB
exception.cc 11KB
addrspace.cc 10KB
synch.cc 10KB
directory.cc 9KB
directory.cc 9KB
addrspace.cc 9KB
synch.cc 9KB
translate.cc 8KB
list.cc 8KB
openfile.cc 7KB
openfile.cc 7KB
machine.cc 7KB
main.cc 7KB
main.cc 7KB
main.cc 7KB
filehdr.cc 7KB
filehdr.cc 7KB
system.cc 7KB
inheritstack.cc 6KB
scheduler.cc 6KB
prodcons++.cc 6KB
system.cc 6KB
prodcons++.cc 6KB
prodcons++.cc 5KB
bitmap.cc 5KB
bitmap.cc 5KB
bitmap.cc 5KB
bitmap.cc 5KB
network.cc 5KB
scheduler.cc 5KB
main.cc 5KB
main.cc 5KB
main.cc 5KB
main.cc 5KB
console.cc 5KB
synchtest.cc 4KB
synchdisk.cc 4KB
synchdisk.cc 4KB
templatestack.cc 4KB
ring.cc 4KB
list.cc 4KB
stack.cc 4KB
progtest.cc 3KB
timer.cc 3KB
progtest.cc 3KB
synchlist.cc 3KB
ring.cc 3KB
ring.cc 3KB
exception.cc 2KB
nettest.cc 2KB
utility.cc 2KB
stats.cc 2KB
threadtest.cc 1KB
pcb.cc 1KB
sh.coff 4KB
matmult.coff 4KB
read.coff 4KB
sort.coff 4KB
shel.coff 3KB
writ.coff 3KB
exec.coff 3KB
join.coff 3KB
crea.coff 3KB
共 611 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
神仙别闹
- 粉丝: 2672
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功