操作系统课程设计报告(含源代码)
操作系统课程设计报告
姓名:
学号:
班级:
2010年6月25日
目录
一、 试验实现3
试验三、生成目标机3
3.1. 编译unixlite内核3
3.2. 制作目标机的启动软盘3
3.3. 对目标机的硬盘分区3
3.4. 格式化目标机的硬盘4
3.5.?安装目标机的文件系统4
3.6. 测试目标机5
试验四、Hello World!5
4.1. 目标5
4.2. 步骤5
试验五、系统调用的原理6
5.1. 目标6
5.2. 步骤7
试验七、 实现信号灯操作的系统调用9
7.1. 增加四个系统调用:9
7.2. 编写四个测试程序:13
7.3. 运行测试程序15
试验八、 实现进程间通信的系统调用16
8.1. 增加四个系统调用:16
8.2. 编写四个测试程序:20
8.3. 运行测试程序22
二、 心得体会23
第一部分 试验实现
试验三、生成目标机
3.1. 编译unixlite内核
生成系统内核可执行文件kernel.target和系统内核镜像文件Image
# cd ~/ker
# make dep
# make
3.2. 制作目标机的启动软盘
把系统内核镜像文件Image写入到软盘。
# cd ~/kernel
# dd if=Image of=/dev/fd0
3.3. 对目标机的硬盘分区
Command (m for help): m // 帮助
Command (m for help): p打印当前分区表
Command (m for help): n创建新的分区
Command action
e extended
p primary partition (1-4)
p 分区类型是主分区
Partition number (1-4): 1 第一主分区
First cylinder (1-4, default 1): 输入回车,使用缺省值
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-4, default 4): 输入回车,使用缺省值
Using default value 4
Command (m for help): p 打印当前分区表
Command (m for help): t 改变分区类型
Selected partition 1
Hex code(Type L to list codes): 81 输入minix分区代码:81
Command (m for help): p打印当前分区表
Command (m for help): w 存盘退出3.4. 格式化目标机的硬盘# mkfs.minix -v -n30 /dev/hdb1
3.5.?安装目标机的文件系统
挂载目标机的硬盘
# mount /dev/hdb1 /mnt/hdb1
安装基本的文件系统
# tar zxvf rootfs.tar.gz -C /mnt/hdb1
卸载目标机的硬盘
# umount /mnt/hdb13.6. 测试目标机
Hello World!
4.1. 目标
在目标机启动时打印出你的学号。
4.2. 步骤
编辑内核源文件~/kerl/init/main.cc,main.cc定义了系统的入口:main函数,在main函数中找到如下两行代码:
int main()
{….
printf("Total Memory Size is %d Meg\n", nphysmeg);
i386init(); /* setup gdt,idt,cr0 */
…..
}
在这两行之间插入打印学号的代码,变为:
printf("Total Memory Size is %d Meg\n", nphysmeg);
printf("This is student:n");
i386init(); /* setup gdt,idt,cr0 */
在~/kerl目录下使用make命令重新编译内核,生成内核镜像文件Image:
# cd ~/kernel
# make把系统内核镜像文件Image写入到软盘:
# cd ~/kernel
# dd if=Image of=/dev/fd0
在windows下启动目标机,查看目标机启动时是否打印出你的学号。
试验五、系统调用的原理
5.1. 目标
通过为unixlite开发一个简单的系统调用了解系统调用的原理,要增加的系统调用原型是:int add(int a, int b);
add的功能是返回参数a、参数b两者