操作系统实验报告1 下载本文

mov ah,#0x88 int 0x15 mov [2],ax

!Print memory size mov ah,#0x03 xor bh,bh int 0x10 mov cx,#20

mov bx,#0x0007 mov bp,#msg3 mov ax,#0x1301 int 0x10 mov dx,[2] add dx,#0x0400 mov cx,#4 jmp print_hex print_hex:

mov ax,#0x0E0F rol dx,#4 and al,dl

cmp al,#0x0A jb ltA jnb nltA ltA:

add al,#0x30 jmp cntp nltA:

add al,#0x37 jmp cntp cntp: int 0x10

loop print_hex msg2:

.byte 13, 10

.ascii \ .byte 13, 10, 13, 10 msg3:

.byte 13, 10

.ascii \ .byte 13, 10, 13, 10

.text endtext: .data enddata: .bss endbss:

在目录\下执行: make boot Image

结果如图 3 所示;然后编译内核,执行: ../run

运行 Bochs 虚拟机;

四、实验截图:

实验三:系统调用

一、实验目的

1.建立对系统调用接口的深入认识; 2.掌握系统调用的基本过程; 3.能完成系统调用的全面控制; 4.为后续实验做准备。

二、实验仪器

Ubuntu 操作系统。

三、实验具体步骤

1.修改\文件,对新增系统调用增加相应的宏定义:

打开\目录,然后用\软件打开\, 在原第 131 行和第 132 行之间增加如下代码: #define __NR_iam 72 #define __NR_whoami 73

2.修改\文件,扩大系统调用函数的数量:

打开\目录,然后用\软件打开\, 将文件第 61 行改为: nr_system_calls = 74

3.修改\文件,使 0x80 号中断能调用相应的系统函数:

打开\目录,然后用\软件打开\, 在原第 72 行和第 73 行之间增加如下代码: extern int sys_iam(); extern int sys_whoami(); 4.创建\文件:

进入\目录,创建\文件,键入如图 1 所示代码; 5.修改\文件:

打开\目录,然后用\软件打开\,将文 件第 29 行修改为: signal.o mktime.o who.o

在原第 50 行和第 51 行之间增加如下代码:

who.s who.o:who.c ../include/unistd.h ../include/errno.h \\ ../include/asm/segment.h 5.编译内核; 6.挂载虚拟机硬盘,打开目录\,添加头文件\, 键入如图 2 所示代码; 7.将文件:

\(当前文件目录) 复制到以下路径:(cp 当前文件目录 复制目标目录)

\;(复制目标目录) 将文件:

\ 复制到以下路径:

\;

8.在\目录下编写程序\和\: 文件\的内容:

#include int main(int argc, char *argv[]) { if(argc>1) {if(iam(argv[1])<0) return -1;} else return -1; return 0; } 文件\的内容:

#include #include int main(void) { char str[128]; if(whoami(str, 24)<0) return -1;

else printf(\ return 0; }

9.从\拷贝文件\和\至以下路径: \

10.取消虚拟机硬盘挂载,运行虚拟机: (1)键入以下三个命令: ①

gcc –o testlab2 testlab2.c ②

gcc -o iam iam.c -Wall ③

gcc -o whoami whoami.c -Wall (2)键入以下两个命令: ①

./iam NZGHDYTY ②

./whoami 之后键入: ./testlab2

(3) 键入以下两个命令: ①

chmod +x testlab2.sh ②

./testlab2.sh 四、实验结果