MIT 6.S081 操作系统课程系列1 Utilities
课程主页:https://pdos.csail.mit.edu/6.828/2020/schedule.html
课程目的
- 理解操作系统的设计和实现
- 能动手扩展一个小型os
- 能动手实现系统应用
这是mit的一套本科课程,希望能快速过一遍,扩展知识,查漏补缺。
RISC-V
- RISC(Reduced Instruction Set Computer)精简指令集计算机。
- CISC(Complex Instruction Set Computer)复杂指令集计算机。
- 可参考 https://zhuanlan.zhihu.com/p/49176102
先有复杂指令集。越来越庞大、暴露各种缺点,就有了精简指令集。
risc不断进化,到了第五代,就是RISC-V。
RISC-V是开源的。人们可以在它基础上设计开发cpu。
xv6
- https://pdos.csail.mit.edu/6.828/2020/xv6.html
- xv6是mit开发的一个教学级别的操作系统,受Unix V6影响。作者都是业界大佬级别,质量有保证。
- 本课程就用这个操作系统,会深入其代码。一共就五十几个代码文件。
- 因为linux目前代码量巨大,很多层面上无从下手,那么从一个小而精的系统入手也是个很好的选择。
完成后希望能掌握一个os核心的框架。 - xv6的手册:https://pdos.csail.mit.edu/6.828/2020/xv6/book-riscv-rev1.pdf
环境安装
虚拟机里起ubuntu20.04
安装调试和模拟工具
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu下载课程代码
git clone git://g.csail.mit.edu/xv6-labs-2020
实验流程
切换到此次lab的分支git checkout util
。
本次实验需要实现几个常用的shell命令。
需要参考user文件夹下已实现的命令。
1. sleep
判断一下参数。把第一个参数转成int。再调sleep(system call)即可。
改好代码后运行
make qemu
即可编译并运行xv6内核。如果编译有错会报错并停止。
内核运行起来后就会进入命令行界面,跟一般linux相似,但是很简陋,缺少各种功能。ctrl-a
再按x
退出内核。
1 | #include "kernel/types.h" |
2. pingpong
- 起两个pipe。fork。父子进程收发一下消息即可。
1 | #include "kernel/types.h" |
3. primes
4. find
- 直接抄ls.c。把文件夹的分支改成递归find即可。
- fmtname里把空格填充去掉可得到干净的文件名。
1 | #include "kernel/types.h" |
5. xargs
- 有很多细节。
- 得把find.c的输出写到stdout的1。之前输入到stderr的2了,半天取不到数据。
- 管道传参数时,xargs从stdin的0取数据。碰到空格或\n时形成一个参数。
- fork一下,子进程里exec执行即可。
- 拼装exec的argv时最后要有一项0。否则执行不了。
1 | #include "kernel/types.h" |