下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、OS Homework 29117020 王繼偉一、目的這次作業的目標是修改 linux 的 kernel,由我們自行新增 system cal,l 來操作一個 printflag 的開與關。並修改 schedule,r 在每次進行 context switch的時候,會去檢查這個 flag,如果這個 flag 被打開了的話,就去把剛剛正在進行的 process的 pid 和 process name印出來,否則的話就不 印。然後另外寫一支 user program,透過新增的 system cal,l 把這個 flag 打開 10秒鐘後再關閉。 如此一來,在 flag 被打開的十秒鐘內, s
2、cheduler便會在進行 context switch時,把資訊印出來 了。此外,作業還要求要計算在這段時間內,總共進行了幾次context switch。、步驟0.Principle由於 printflag必須給 scheduler去檢查,又必須給 system call去操作,所以必須 以全域變數的方式宣告。但是要宣告在那裡呢其實那裡都可以,因為是全域變數 麻,我的選擇是放在 myservices.h裡面。要注意的是,雖然是全域變數,但在編譯的 過程中,當 scheduler看到 flag 的時候還沒有經過宣告,所以我們需要以 extern int printflag的方式來 expos
3、e該 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去得知累加的結果。所以我還需要一個全域變數 c
4、ount,以及一個 system cal,l 去取得 count的值:int getcount(void)因此全部要要增加的東西有三個 system call以及兩個全域變數。1. Adding system calls:The following steps are performed with current directory : /usr/src/linuxa) add these three lines in arch/i386/kernel/entry.S:.long sys_setflag 289.long sys_getflag 290.long sys_getcount 29
5、1b) edit include/asm/unistd.h , add these three lines#define _NR_setflag2 89#define _NR_getflag2 90#define _NR_getcount 291and edit #define NR_syscall to 292c) edit include/linux/myservices.h#ifndef _MYSERVICES_#define _MYSERVICES_#include <linux/linkage.h>int printflag, count;#endifd) edit ke
6、rnel/myservices.casmlinkage void sys_setflag( int f ) printflag = f; asmlinkage int sys_getflag( void ) return printflag; asmlinkage int sys_getcount( void ) return count; 2. Edit scheduler:edit kernel/sched.ca) in the beginning, addextern int printflag;extern int count;b) in the beginning of schedu
7、le(), addstatic int prevflagif( printflag )if( prevflag = 0 ) count = 0;printk( “Current proces's s pid : %dn” , current->pid ); printk( “Current proces's s name : %s”n , current->comm ); count+prevflag = printflag;3. Edit user program :#include <linux/unistd.h>#include <stdli
8、b.h>#include <stdio.h>_syscall0(int, getflag, int );_syscall0(int, getcount );_syscall1(void, setflag, int, f);int main()printf( “before : %d”, getflag() );setflag( 1 );printf( “after setflag(1) : %d”, getflag() );sleep(10);setflag( 0 );printf( “Final : %d” , getflag() );printf( “count : %d” , count );return 0;4. rebuild kernel and compile user program四、心得這次作業讓我了解到 system call的運作方式與實作方法,對 scheduler以及 context switch 的運作也有了一些認識。如果等以後學到更多 OS 方面的知識,或許可以把 system call的功能與 以加強,扁成類似工作管理的程式。比較麻煩的地方是, sched在計算 count時不能單純每次進 行 context switch就把 count+1,這樣就違反了”只計算十秒內”的條件,所以我用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年耳勺行业分析报告及未来发展趋势报告
- 2026年寿司料理套件行业分析报告及未来发展趋势报告
- 2026年倒顺开关行业分析报告及未来发展趋势报告
- 2026年农业信息化行业分析报告及未来发展趋势报告
- 2026甘肃平凉工业园区管委会招聘工作人员考试备考题库及答案解析
- 2026年其他铁路运输设备制造行业分析报告及未来发展趋势报告
- 2026江苏无锡市梁溪科技城发展集团有限公司建工板块招聘5人考试备考题库及答案解析
- 2026年金融云服务行业分析报告及未来发展趋势报告
- 2026山东烟台崆峒胜境招聘备考题库及答案详解一套
- 2026江西水利电力大学高层次人才招聘7人(第一批)考试备考题库及答案解析
- 2026届高考政治一轮复习:统编版必修1~4+选择性必修1~3全7册必背考点提纲汇编
- 国家级零碳园区建设咨询服务方案投标文件(技术方案)
- 《测定匀变速直线运动的加速度》教学设计1
- 角色重构破局转型-2025年中国美妆实体零售发展新图景报告
- 四氢噻吩管理办法
- 广州吸烟管理办法
- 消防维修应急服务方案(3篇)
- 产前诊断管理管理办法
- 2025年广东省人教版中考英语答题策略及规范要求+
- 中医适宜技术妇产科课件
- T/CSPSTC 124-2023钢箱梁步履式顶推施工技术规程
评论
0/150
提交评论