没有合适的资源?快使用搜索试试~ 我知道了~
这次作业的目标是修改linux的kernel.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 20 浏览量
2022-07-06
00:35:00
上传
评论
收藏 22KB DOC 举报
温馨提示
试读
3页
这次作业的目标是修改linux的kernel.doc
资源推荐
资源详情
资源评论
.
WORD.
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。
二、步驟
0.Principle
由於 printflag 必須給 scheduler 去檢查,又必須給 system call 去操作,所以必
須以全域變數的方式宣告。但是要宣告在那裡呢﹖其實那裡都可以,因為是全域變數
麻,我的選擇是放在 myservices.h 裡面。要注意的是,雖然是全域變數,但在編譯
的過程中,當 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 的值:
int getcount(void)
因此全部要要增加的東西有三個 system call 以及兩個全域變數。
1.Adding system calls:
资源评论
智慧安全方案
- 粉丝: 3650
- 资源: 59万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功