操作系统课设
PAGE
PAGE 2
操作系统课程设计报告
姓名:
学号:
班级:
2010
目录
TOC \o "1-3" \h \u 一、 试验实现 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 ~/kernel
# make dep
# make
3.2. 制作目标机的启动软盘
把系统内核镜像文件Image写入到软盘。
# cd ~/kernel
# dd if=Image of=/dev/fd0
3.3. 对目标机的硬盘分区
[root@(none) kernel]# fdisk /dev/hdb
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/hdb1
3.6. 测试目标机
试验四、Hello World!
4.1. 目标
在目标机启动时打印出你的学号。
4.2. 步骤
编辑内核源文件~/kernel/init/main.cc,main.cc定义了系统的入口:main函数,在main函数中找到如下两行代码:
int main()
{
.….
printf("Total Memory Size is %d Meg\n", nphysmeg);
i386init(); /* setup gdt,idt,cr0 */
…..
}
在这两行之间插入打印学