hw2 shell
目标
hw2主要是根据xv6,学习linux的系统调用,实现一个简化版的shell.
目标可以分解为:
- 阅读源代码
- 添加执行命令的功能
- 添加IO重定向
- 添加管道功能
part1: command
命令的种类
命令参数个数
首先,一个命令的参数总数是限制的,xv6 shell规定一个命令的参数最多只能有10个.
#define MAXARGS 10
hw2主要是根据xv6,学习linux的系统调用,实现一个简化版的shell.
目标可以分解为:
- 阅读源代码
- 添加执行命令的功能
- 添加IO重定向
- 添加管道功能
首先,一个命令的参数总数是限制的,xv6 shell规定一个命令的参数最多只能有10个.
#define MAXARGS 10
<introduction to algorithms>覆盖全面,包含算法/数据结构/基本的离散数学知识;伪代码清晰简洁,适合有一定编程基础用算法实现;注重算法的推导和证明,以及对应的算法设计与分析能力;同时配套MIT课程,资料丰富.这里记录我CLRS的学习笔记,按主题章节对应分类, 以问题-答案形式总结.
算法定义/基本的算法设计/递归的复杂度/概率与随机算法
算法:
$\require{AMScd}$
\begin{CD}
input @>\text{computing procedure}>> ouput
\end{CD}
- 解决一类问题的计算过程, 一个具体问题-实例
- 算法最重要的特性: 效率
1.熟悉x86汇编语言,qemu x86模拟器,启动pc
2.分学习6.828内核的boot loader部分。
3.深入研究6.828内核JOS的初始化部分,该部分代码在kernel目录下
1 | git clone https://pdos.csail.mit.edu/6.828/2016/jos.git lab |
make qemu
现在JOS内核只有两条命令来监视内核。help和kerninfo
6.828课程包括JOS实验和xv6系统两部分,其中JOS是从xv6中抽取的学习环境,学习xv6(阅读和修改)把握操作系统的全局, 实践JOS(project)则深入os的核心构建,相互辅助.
xv6学习主要通过xv6-book以及编译xv6实现, homework1即是启动xv6系统.
1 | git clone git://github.com/mit-pdos/xv6-public.git |
1 | cd xv6 |
生成xv6.img镜像文件, 在qemu上模拟运行.
在进行os实验之前, 要求有前置的基础:
- C: 实现语言, 汇编: 阅读x86_64的汇编代码
- linux: 实验系统环境, 主要是command line下的命令操作
- git: 版本控制与代码提交
- gcc, gdb, id: 编译源代码与调试
- qemu: x86 硬件模拟器, 选择2为Bochs
1.linux: 我的环境是linux mint 18.0 serena(基于ubuntu)
2.git: linux自带, 配置连接github
1
2
3 git -h
git add/commit/push/checkout
git remote add
3.gcc, gdb安装
1
2
3
4 sudo apt-get install build-essential
sudo apt-get install gcc-multilib
gcc -h
gdb -h
在Linux下已经一套适合6.828课程的工具链, 输入如下命令进行测试
1
2
3
4
5 $ objdump -i
output: line2 elf32-i386
\
$ gcc -m32 -print-libgcc-file-name
output: /usr/lib/gcc/x86_64-linux-gnu/version/32/libgcc.a
4.qemu 安装
a. 依赖库安装:sudo apt-get install libsdl1.2-dev, libtool-bin, libglib2.0-dev, libz-dev, libpixman-1-dev.
b.由于qemu编译xv6的问题, mit对qemu进行了修改, 用git下载源码:git clone https://github.com/geofft/qemu.git -b 6.828-2.3.0
c.编译qemu
1
2
3 cd qemu
./configure --disable-kvm --target-list="i386-softmmu x86_64-softmmu"
make && make install
5.其它问题
a. Windows下可采用Cygwin或者virtualbox + ubuntu image, 但更推荐linux