久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

操作系統課程設計[精選多篇]

時間:2019-05-13 04:11:04下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《操作系統課程設計》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《操作系統課程設計》。

第一篇:操作系統課程設計

課程實驗報告

課程名稱:

操作系統原理課程設計

專業班級: 學

號: 姓

名 指導教師: 報告日期:

計算機科學與技術學院

目錄

1.實驗目的............................................................................................................................4 2.實驗環境..........................................................................................................................4 3.實驗內容..........................................................................................................................4 3.1 實驗一....................................................................................................................4 3.2 實驗二....................................................................................................................4 3.3 實驗三....................................................................................................................5 3.4 實驗四....................................................................................................................5 4.實驗設計..........................................................................................................................5 4.1 實驗一....................................................................................................................5 4.1.1 文件拷貝......................................................................................................5 4.1.2 并發進程分窗口顯示....................................................................................5 4.2 實驗二....................................................................................................................6.....................................................................................................................................6 4.3 實驗三....................................................................................................................6 4.4 實驗四....................................................................................................................7 5.實驗步驟..........................................................................................................................8 5.1 實驗一.............................................................................................................8 5.1.1 文件拷貝......................................................................................................8 5.1.2 并發進程分窗口顯示....................................................................................9 5.2 實驗二..................................................................................................................14 5.3 實驗三..................................................................................................................15 2 5.4 實驗四..................................................................................................................17 6.調試記錄........................................................................................................................19 7.心得體會........................................................................................................................21 8.程序清單........................................................................................................................22 8.1實驗一...................................................................................................................22 8.1.1 文件拷貝....................................................................................................22 8.1.2并發進程窗口顯示......................................................................................23 8.2實驗二...................................................................................................................33 8.3實驗三...................................................................................................................34 8.4實驗四...................................................................................................................38

1.實驗目的

(1)掌握Linux操作系統的使用方法;(2)了解Linux系統內核代碼結構;(3)掌握實例操作系統的實現方法。

2.實驗環境

本次課程設計采用的操作系統環境是Windows7、Ubuntu雙系統,Ubuntu系統版本為15.04,內核版本是Linux 3.19。

3.實驗內容

3.1 實驗一

1)編寫一個C程序,用fread、fwrite等庫函數實現文件拷貝功能。

2)編寫一個C程序,使用基于文本的終端圖形編程庫(curses)或圖形界面(QT/GTK),分窗口顯示三個并發進程的運行(一個窗口實時顯示當前時間,一個窗口實時監測CPU的利用率,一個窗口做1到100的累加求和,刷新周期分別為1秒,2秒和3秒)。

3.2 實驗二

采用編譯內核的方法,添加一個新的系統調用實現文件拷貝功能 編寫一個應用程序,測試新加的系統調用

3.3 實驗三

采用模塊方法,添加一個新的字符設備的驅動程序,實現打開/關閉、讀/寫等基本操作,編寫一個應用程序,測試添加的驅動程序。

3.4 實驗四

1)了解/proc文件的特點和使用方法。2)監控系統狀態,顯示系統部件的使用情況。

3)用圖形界面監控系統狀態,包括CPU和內存利用率、所有進程信息等(可自己補充、添加其他功能)。

4.實驗設計

4.1 實驗一

4.1.1 文件拷貝

實現文件拷貝功能需要使用的函數是fopen、fgetc、fputc,由命令行參數獲取2個文件名,根據其文件名和路徑分別打開該2個文件,設置循環,使用fgetc和fputc函數每次從源文件復制1個字節到目的文件,直到源文件指針到文件尾,實現文件拷貝操作。4.1.2 并發進程分窗口顯示

使用圖形界面GTK實現窗口的顯示,使用fork()創建三個并發進程: pid=fork():創建子進程。

返回值:0

從子進程返回 >0

從父進程返回

exit進程自我終止,進入僵死狀態 wait()等待進程終止(由父進程調用)exec()執行一個可執行程序(文件)。

4.2 實驗二

不同的Linux內核版本編譯內核和添加系統調用的方法不盡相同,在網上查閱了資料之后找到適合3.19版本內核的編譯方法。

所謂系統調用,即Linux內核中設置了一組用于實現各種系統功能的子程序,稱為系統調用,用戶可以通過系統調用命令在自己的應用程序中調用它們。其調用機制為:使用寄存器中適當的值跳轉到內核中事先定義好的代碼中執行:跳轉到系統調用的總入口system_call,檢查系統調用號,再查找系統調用表sys_call_table,調用內核函數,最后返回。

實驗二目的是更改內核中系統調用模塊,增加自定義函數實現文件拷貝功能。

4.3 實驗三

Linux設備驅動程序是一組常駐內存的具有特權的共享庫,是低級硬件處理例程,每個設備文件有兩個設備號,主設備號標識驅動程序,從設備號表示使用 6 同一個設備驅動程序的不同硬件設備。

設備驅動程序的功能包括:對設備初始化和釋放,把數據從內核傳送到硬件和從硬件讀取數據,讀取應用程序傳給設備文件的數據和回送應用程序請求的數據,檢測和處理設備出現的錯誤。

Linux支持的設備包括三種:字符設備、塊設備和網絡設備。添加設備驅動程序大致需要以下幾個步驟:

1.注冊設備 2.定義功能函數 3.卸載設備

4.4 實驗四

proc文件系統特點:

1.進程文件系統和內核文件系統組成的復合體

2.將內核數據對象化為文件形式進行存取的一種內存文件系統

3.監控內核的一種用戶接口,擁有一些特殊的純文本文件,從中可以獲取系統狀態信息

4.系統信息:與進程無關,隨系統配置的不同而不同 5.進程信息:系統中正在運行的每一個用戶級進程的信息 其中各個文件保存的信息如下: /proc/cmd/line: 內核啟動的命令行 /proc/cpuinfo: CPU信息

/proc/stat: CPU的使用情況、磁盤、頁面、交換、所有的中斷、最后一次的啟動 7 時間等

/proc/meminfo: 內存狀態的有關信息

利用/proc文件獲取系統狀態信息,并通過GTK圖形化編程將系統信息以及通過這些信息計算得出的如CPU利用率、內存使用等通過窗口顯示出來。

5.實驗步驟

5.1 實驗一

5.1.1 文件拷貝

文件拷貝主要是利用文件指針操作,在源文件和目的文件之間進行字符的復制,拷貝之前要判斷源文件是否存在以及能否打開,這需要設置一個判斷語句,同時也要設置判斷語句判斷目的文件是否存在,若不存在需要能夠創建一個目的文件,最后執行循環拷貝。

步驟如下:

1.在Linux終端使用編譯命令:gcc mycopy.c-o mycopy產生可執行文件。2.創建源文件wangzihao目的文件shaochongjun。3.編輯源文件:

4.打開可執行程序:./mycopy wangzihao shaochongjun 5.查看目的文件發現已經實現拷貝:

6.若源文件不存在會報錯:

5.1.2 并發進程分窗口顯示

1.使用fork()函數創建三個進程,使用exec函數族實現程序的調用:

2.調用創建窗口函數init_window(),將進程中的信息在窗口中顯示:

3.分別創建三個程序實現顯示系統時間、CPU利用率、累加求和功能:

4.運行結果如下:

5.2 實驗二

原內核版本:3.19.0 編譯新內核版本:3.19.8 1.下載內核并解壓

2.系統調用函數實現:修改kernel/sys.c文件,在文件的最后添加新的系統調用函數:sys_mycall(char* sourceFile,char* destFile)3.設置系統調用號:修改arch/x86/syscalls/syscall_32.tbl,在最后一行添加新的系統調用號

4.添加系統調用聲明到頭文件 :~$ vi include/asm-generic/syscalls.h 在#endif前添

#ifndef sys_mycall asmlinkage long sys_mycall(long number);#endif

5.安裝基本編譯套件:apt-get install build-essential kernal-package libncurses5-dev fakeroot 6.配置內核:make menuconfig 7.編譯內核:make-j4 8.安裝內核:make modules_install make install 9.重啟進入新的內核

10.編寫測試程序測試新的系統調用:

測試結果如下:

5.3 實驗三

1.編寫Makefile文件:

2.編寫設備功能函數:(見程序清單)

3.設備加載:make clean make

加載模塊:insmod wzhdriver.ko

輸入 cat /proc/devices得 設備驅動的主設備號為:

加載 設備,分配設備號:mknod /dev/wzhdriver c 248 0

更改操作權限:chmod 666 /dev/wzhdriver 4.運行測試程序,結果:

5.4 實驗四

1系統信息頁:

2進程信息頁:

3內存資源頁:

6.調試記錄

1.在編譯gtk程序時,需要添加` pkg-config --cflags--libs gtk+-3.0`.參數。2.實驗一程序過于簡單,健壯性不大。

3.由于一開始沒有加入刷新函數,導致實驗一顯示窗口數據不變化,在同學幫助下改正。

4.編譯內核占用大量時間后來發現在make后添加-j4可以大大提升速度。

7.心得體會

本次課程設計主要目的是熟悉Linux系統,掌握Linux操作系統的使用方法,了解Linux系統內核代碼結構,掌握實例操作系統的實現方法。由于剛開始接觸Linux,實驗的開始遇到了不少困難,GTK的安裝和使用花費了我不少時間,并行程序是操作系統課程學過的內容,主要難點是圖形化界面的設計。

實驗二是耗費時間最多的,由于每個版本的內核編譯方式不同,耗費了大量時間查找編譯內核的方法,同時編譯一次內核需要一個小時以上,不過皇天不負有心人最后我成功添加了系統調用。

添加設備驅動比較簡單,主要是了解了Linux設備驅動的原理,熟悉設備驅動的安裝過程。

分析/proc文件主要是搭建圖形化界面,在借鑒了網上資源設計的窗口之后,我設計了簡單的監控系統圖形界面,其中CPU利用率以及占用曲線等需要計算。通過本次實驗我學到了很多東西,熟悉了Linux系統的使用方法,對Linux系統內核代碼結構有了大致的了解,掌握了圖形化界面GTK的使用,總而言之本次試驗我獲益匪淺。

8.程序清單

8.1實驗一

8.1.1 文件拷貝 #include int main(int argc,char *argv[]){

if(argc!=3)

{ printf(“Error in argc!n”);return 0;

}

FILE * fsource=NULL;

FILE * ftarget=NULL;

if((fsource=fopen(argv[1],“rb”))==NULL)

{ printf(“Fail to open source file!n”);return 0;

}

if((ftarget=fopen(argv[2],“wb”))==NULL)

{ printf(“Fail to open target file!n”);22 return 0;

}

int c;

while((c=fgetc(fsource))!=EOF)

{ fputc(c,ftarget);

}

fclose(fsource);

fclose(ftarget);

return 0;} 8.1.2并發進程窗口顯示

主函數:

#include #include #include int main(){ pid_t time;pid_t cpu;pid_t sum;23

if((time=fork())==-1){

}

if(time==0){ execlp(“./time”,0);printf(“fork errorn”);return-1;}else {

if((cpu=fork())==-1)//create cpu {

} if(cpu==0){ execlp(“./cpu”,0);printf(“fork errorn”);return-1;}else 24

{ if((sum=fork())==-1)//create sum

{

printf(“fork errorn”);

return-1;

}

if(sum==0)

{

execlp(“./sum”,0);

}else //father process

{

wait(&time);

wait(&cpu);

wait(&sum);

}

}

}

} 系統時間:

#include #include #include #include

char t[50];GtkWidget *label;gettime(){

time_t timep;

time(&timep);

sprintf(t,“%s”,ctime(&timep));} void *thread(void * argc){

while(1){

gettime();

gtk_label_set_text(GTK_LABEL(label),t);

sleep(1);}

}

int main(int argc, char *argv[]){

pthread_t id;

int i,ret;

ret=pthread_create(&id,NULL,(void *)thread,NULL);26

GtkWidget *vbox;

GtkWidget *window;

//定義一個組裝盒;

/*初始化整個GTK+程序,是每一個GTK+程序必不可少的部分*/

gtk_init(&argc, &argv);

/*這里生成了一個窗口構件——GtkWindow,GTK_WINDOW_TOPLEVEL包含窗口的標題欄和邊框,同意用窗口管理器來進行管理*/

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_window_set_title(GTK_WINDOW(window), “time”);

gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);

gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

label = gtk_label_new(t);

gtk_container_add(GTK_CONTAINER(window), label);

gtk_widget_show(label);

/*開始顯示窗口*/

gtk_widget_show(window);

gtk_main();

return 0;} CPU利用率: #include #include

#include GtkWidget* label;//the use rate of cpu char c[5];float cpu();void* thread(void* arg){

} float cpu(){

FILE* fp;char buf[128];char cpu[5];long int user,nice,sys,idle,iowait,irq,softirq;float usage;while(1){

} sleep(2);usage=cpu();sprintf(c,“the usage of cpu is %f %%”,usage);gtk_label_set_text(GTK_LABEL(label), c);28

fp=fopen(“/proc/stat”,“r”);if(fp==NULL)printf(“errorn”);long int all1,all2,idle1,idle2;float usage;fgets(buf,sizeof(buf),fp);

sscanf(buf,“%s%ld%ld%ld%ld%ld%ld%ld”,cpu,&user,&nice,&sys,&idle,&iowait,&irq,&softirq);

sscanf(buf,“%s%ld%ld%ld%ld%ld%ld%ld”,cpu,&user,&nice,&sys,&idle,&iall1=user+nice+sys+idle+iowait+irq+softirq;idle1=idle;rewind(fp);//second sleep(1);memset(buf,0,sizeof(buf));cpu[0]='

主站蜘蛛池模板: 少妇被c?黄?在线网站| 无码国模国产在线观看| 无码吃奶揉捏奶头高潮视频| 国产男女免费完整视频| 中国精学生妹品射精久久| 久久久中文久久久无码| 国产高潮刺激叫喊视频| 3atv精品不卡视频| 丝袜老师办公室里做好紧好爽| 国产精品沙发午睡系列| 日韩欧美在线综合网另类| 摸进她的内裤里疯狂揉她动图视频| 中文字幕无码av激情不卡| 亚洲欧美中文字幕高清在线| 无码国产欧美一区二区三区不卡| 内射夜晚在线观看| 天天拍夜夜添久久精品| 国产精品水嫩水嫩| 欧洲成人一区二区三区| 日本亚洲欧美在线视观看| 色一情一乱一伦一视频免费看| 中文幕无线码中文字夫妻| 亚洲综合天堂av网站在线观看| 精品人伦一区二区三区蜜桃免费| 女人爽得直叫免费视频| 欧美日韩国产专区一区二区| 国产乱码字幕精品高清av| 精品久久久久久无码专区不卡| 日韩经典午夜福利发布| 国产精品亚洲专区无码web| 午夜成人鲁丝片午夜精品| 人妻精品久久久久中文字幕| 亚洲熟少妇在线播放999| 大地资源网第二页免费观看| 精品无人区一区二区三区| 夜先锋av资源网站| 色一情一乱一伦一区二区三区小说| 成在人线av无码免费高潮求绕| 国产日产精品一区二区三区四区的特点| 国产成人拍拍拍高潮尖叫| 无码人妻精品一区二区蜜桃网站|