第一篇:操作系統課程設計
課程實驗報告
課程名稱:
操作系統原理課程設計
專業班級: 學
號: 姓
名 指導教師: 報告日期:
計算機科學與技術學院
目錄
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
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
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 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 } 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无码免费高潮求绕|
国产日产精品一区二区三区四区的特点|
国产成人拍拍拍高潮尖叫|
无码人妻精品一区二区蜜桃网站|