查字典论文网 >> 2005-2006学年第二学期《操作系统课程设计》任务书

2005-2006学年第二学期《操作系统课程设计》任务书

小编:

一、课程设计的目的

在从事本课程设计之前,学生们已经通过一个学期的系统学习,掌握了操作系统的原理,对操作系统的各个组成部分的工作原理有了一定的认识。然而由于操作系统的复杂性,使得学生对操作系统个部分的理解可能是分散的和不深入的。设置本课程设计的目的,就是让学生通过课程设计,对操作系统有进一步深入的理解,对系统工作原理有一个整体认识。

二、学生完成的任务之一

修改MINIX系统,使得系统启动时显示出你自己的班级、姓名、学号。信息格式如下:

Welcome to MyMinix! Class-?, Name-????????, Num-??

三、学生完成的任务之二

修改MINIX系统,使得MINIX为程序员提供一个新的系统功能调用getpids。Getpids的功能描述如下:

int getpids(pid_t *child, pid_t *parent);

getpids返回调用者进程和它的父进程的PID,分别放在child和parent所指向的地址中。

四、任务二的提示

(1)

修改目录/usr/include/minix/callnr.h文件,加入新系统调用编号:

#define GETPIDS 78

增加系统调用数目

#define NCALLS 79

(2)

增加_getpid2.c文件到/usr/src/lib/other子目录之下,内容为:

/* _getpid2.c */

#include <lib.h>

#define getpid2 _getpid2

#include <unistd.h>

PUBLIC pid_t getpid2(pid_t *child, pid_t *parent)

{

message m;

_syscall(MM, GETPIDS, &m);

*child = m.m_type;

*parent = m.m2_i1;

}

在同一个子目录之下,修改文件Makefile,其内容为:

OBJECTS =

$(LIBRARY)(_getpid2.o)

$(LIBRARY)(_brk.o)

$(LIBRARY)(_reboot.o)

$(LIBRARY): $(OBJECTS)

aal cr $@ *.o

rm *.o

$(LIBRARY)(_getpid2.o): _getpid2.c$(LIBRARY)(_brk.o): _brk.c

$(CC

1) _brk.c

在同样的目录下,发出make命令:

make

将新的函数_getpid2加入到函数库之中。

(3)

添加新文件getpids.s到目录/usr/src/lib/syscall之中:

.sect .text

.extern __getpid2 ! 注意,是2个下划线

.define _getpids

.align 2

_getpids:

jmp __getpid2

在同一个子目录之下,修改文件Makefile:

OBJECTS =

$(LIBRARY)(_getpids.o)

$(LIBRARY)(_exit.o)

$(LIBRARY): $(OBJECTS)

aal cr $@ *.o

rm *.o

$(LIBRARY)(_getpids.o): _getpids.s

$(CC

1) _getpids.s

$(LIBRARY)(_exit.o): _exit.s

$(CC

1) _exit.s

在同样的目录下,发出make命令:

make

将新的函数getpids加入到函数库之中。

(4)修改minix中内存管理部分,以提供系统调用

修改/usr/src/mm/table.c,在数组call_vec[ ]的最后一行之后加入语句:

do_svrctl, /* 77 = svrctl */

do_getset, /* 78 = getpids */

修改/usr/src/mm/getset.c,在语句 CASE GET_PID:之上加入代码

case GETPIDS: /* fall through */

case GETPID:

r = mproc[who].mp_pid;

rmp->reply_res2 = mproc[rmp->mp_parent].mp_pid;

break;

(5)测试系统调用是否可用

在/usr/include/中加入getpids.h

#ifndef _GETPIDS_H

#define _GETPIDS_H

#ifndef _ANSI_H

#include <ansi.h>

#endif

_PROTOTYPE (int getpids, (pid_t * child, pid_t *parent));

#endif /* _GET_PIDS_H */

编写一个用户级程序test.c来测试

#include <stdio.h>

#include <unistd.h>

#include <getpids.h>

int main(void){

int pid, ppid;

getpids(&pid, &ppid);

printf(“child = %d, parent = %dn”, child, parent);

}

cc test.c

./a.out

五、学生完成的任务之三

修改MINIX系统,使得MINIX为程序员提供系统功能调用get_cursor和set_cursor,分别返回和设置屏幕光标位置,其参数由学生自己定义。编写一个应程序,利用这两个系统调用,在屏幕固定位置每隔1秒钟显示系统当前时间。

六、要求提交的材料

课程设计报告。写出每一天的工作日记,主要步骤所涉及到的工作原理分析,程序代码分析。A4纸,5页。第18周星期一由班长收齐统一上交。

七、时间与地点

第16周作准备,查阅资料等

第17周编写程序

上机地点:微机2室 + 宿舍

上一篇:劳动者单方解除合同中关于用人单位商业秘密的保护(1)论文

下一篇:如何对幼儿进行德育教育论文 幼儿园关于德育教育之类的论文