《操作系统》基本课程实验指导书-2014

发布时间 : 星期三 文章《操作系统》基本课程实验指导书-2014更新完毕开始阅读

}

MODULE_DESCRIPTION(“clock module for gettimeofday of proc.”); EXPORT_NO_SYMBOLS;

? 加载内核模块

在系统root用户下运行用户态模块命令装载内核模块 #insmod clock.o ? 测试

测试源代码gettime.c #include #include #include int main(void) {

gettimeofday(&getSystemTime,NULL); infile = open(\len = read(infile,procClockTime,256); close(infile);

procClockTime[len] = '\\0'; struct timeval getSystemTime; char procClockTime[256]; int infile,len;

printf(\

getSystemTime.tv_sec ,

getSystemTime.tv_usec, procClockTime);

sleep(1);

}

? 卸载内核模块

在系统root用户下运行用户态模块命令卸载内核模块 #rmmod clock.o

3.4 实验2.4 系统调用

1、实验目的

向现有Linux内核加入一个新的系统调用从而在内核空间中实现对用户空间的读写。 例如,设计并实现一个新的内核函数mycall( ),此函数通过一个引用参数的调用返回当前系统时间,功能上基本与gettimeofday( )相同。

也可以实现具有其它功能的系统调用。

2、实验内容与步骤

1. 添加新调用的源代码

在/usr/src/linux-2.4.7-10/kernel/sys.c中添加相应的调用代码

asmlinkage int sys_mycall(struct timeval *tv) { struct timeval ktv;

MOD_INC_USE_COUNT;

do_gettimeofday(&ktv);

if (copy_to_user(tv,&ktv,sizeof(ktv))){ MOD_DEC_USE_COUNT; return -EFAULT; }

MOD_DEC_USE_COUNT;

return 0; }

2. 连接系统调用

a、修改/usr/src/linux-2.4.7-10/include/asm-i386/unistd.h,

在系统调用列表后面相应位置添加一行

#define _NR_mycall 222

新增加的调用号位222

b、修改/usr/src/linux-2.4.7-10/arch/i386/kernel/entry.S 在sys_call_table[]清单最后添加一行 .long SYMBOL_NAME(sys_mycall)

3. 重建新的Linux内核

cd /usr/src/linux-2.4.7-10/ make mrproper

make oldconfig made dep make clean make bzImage make modules

make modules_install

make install

4. 重建引导信息

a、在/boot/grub/grub.conf中自己添加一条新的启动选项,并使该选项指向

vimlinuz-2.4.7-10custom b、重新安装grub

5. 重新引导从新的内核进入

6. 修改/usr/lib/bcc/include/unistd.h,在系统调用列表后面相应位置添加一行

#define _NR_mycall 222

7.编写程序测试test.c:

#include #include

_syscall1(int,mycall,struct timeval *,thetime) main() { }

struct timeval gettime; struct timeval mycalltime; gettimeofday(&gettime,NULL); mycall(&mycalltime);

printf(\printf(\

4 进程管理实验

4.1 实验3.1 进程行为观察

1、实验目的

通过本实验了解并掌握Linux主要的进程管理命令。

2、实验内容

1. 在Linux下,分别用snice、skill、top 等命令和/proc中的有关目录、文件观察系统中进程运行情况和CPU工作情况。 2. 在Linux下,用ptrace()、gdb跟踪一个进程的运行情况,用strace工具跟踪 fork() 过

程,用ltrace工具跟踪 execl() 过程。观察并分析跟踪信息。

4.2 实验3.2 代码分析

1、实验目的

通过本实验了解Linux内核代码结构,掌握代码分析能力和技巧。

2、实验内容

实验内容为:选取 Linux内核中的进程建立模块、进程撤销模块、进程调度模块、系统调用总入口模块,阅读分析源代码,了解进程的创建、执行、等待、退出等过程。写出代码分析报告。

4.3 实验3.3 Shell编程

1、实验目的

通过编写shell程序,了解子进程的创建和父进程与子进程间的协同,获得多进程程序的编程经验。

2、实验内容1

设计一个简单的shell解释程序,能实现基本的bsh功能。

(1)设计思想:

将每一条命令分子段压入argv栈。然后再子进程中调用execvp()来实现该命令的功能。

联系合同范文客服:xxxxx#qq.com(#替换为@)