1 / 2
文档名称:

这次作业的目标是修改linux的.docx

格式:docx   大小:13KB   页数:2页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

这次作业的目标是修改linux的.docx

上传人:前程似锦教育 2022/7/3 文件大小:13 KB

下载得到文件列表

这次作业的目标是修改linux的.docx

相关文档

文档介绍

文档介绍:OS Homework 2
9117020 王继伟
一、目的
这次作业的目标是修改 linux 的 kernel,由我们自行新增 system call,来操作一个 printflag 的开与关。并修
OS Homework 2
9117020 王继伟
一、目的
这次作业的目标是修改 linux 的 kernel,由我们自行新增 system call,来操作一个 printflag 的开与关。并修
改 scheduler,在每次进行 context switch 的时候,会去检查这个 flag ,如果这个 flag 被打开了的话,就去把刚刚
正在进行的 process的 pid 和 process name印出来,否则的话就不印。然後另外写一支 user program,透过新增的
system call,把这个 flag 打开 10 秒钟後再关闭。如此一来,在 flag 被打开的十秒钟内, scheduler便会在进行
context switch 时,把资讯印出来了。此外,作业还要求要计算在这段时间内,总共进行了几次 context switch。
二、步骤
由於 printflag 必须给 scheduler去检查,又必须给 system call 去操作,所以必须以全域变数的方
式宣告。但是要宣告在那里呢﹖其实那里都可以,因为是全域变数麻,我的选择是放在里面。要注
意的是,虽然是全域变数,但在编译的过程中,当 scheduler看到 flag 的时候还没有经过宣告,所以
我们需要以 extern int printflag 的方式来 expose该 flag(除非直接把 flag 宣告在 scheduler里面,但这样
system calls 也一样要以 extern 的方式去 expose它 )。
为了对该 flag 进行操作,所以我打算新增两个 system call :
void setflag(int) 与 int getflag(void)
除了 printflag 这个全域变数之外,因为要得知进行了多少次 context switch,那一定是在进行
context switch 的 scheduler 里面进行累加,而外部的 user program 势必又要靠 system call 去得知累加的
结果。所以我还需要一个全域变数 count,以及一个 system call,去取得 count 的值:
i nt getcount(void)
因此全部要要增加的东西有三个 system call 以及两个全域变数。
system calls:
add these three lines in arch/i386/kernel/:
.long sys_setflag 289
.long sys_getflag 290
.long sys_getcount 291
b) edit include/asm/ , add these three lines
#define __NR_setf