欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      操作系統(tǒng)課程設(shè)計(jì)[精選多篇]

      時(shí)間:2019-05-13 04:11:04下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《操作系統(tǒng)課程設(shè)計(jì)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《操作系統(tǒng)課程設(shè)計(jì)》。

      第一篇:操作系統(tǒng)課程設(shè)計(jì)

      課程實(shí)驗(yàn)報(bào)告

      課程名稱:

      操作系統(tǒng)原理課程設(shè)計(jì)

      專業(yè)班級: 學(xué)

      號: 姓

      名 指導(dǎo)教師: 報(bào)告日期:

      計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院

      目錄

      1.實(shí)驗(yàn)?zāi)康?...........................................................................................................................4 2.實(shí)驗(yàn)環(huán)境..........................................................................................................................4 3.實(shí)驗(yàn)內(nèi)容..........................................................................................................................4 3.1 實(shí)驗(yàn)一....................................................................................................................4 3.2 實(shí)驗(yàn)二....................................................................................................................4 3.3 實(shí)驗(yàn)三....................................................................................................................5 3.4 實(shí)驗(yàn)四....................................................................................................................5 4.實(shí)驗(yàn)設(shè)計(jì)..........................................................................................................................5 4.1 實(shí)驗(yàn)一....................................................................................................................5 4.1.1 文件拷貝......................................................................................................5 4.1.2 并發(fā)進(jìn)程分窗口顯示....................................................................................5 4.2 實(shí)驗(yàn)二....................................................................................................................6.....................................................................................................................................6 4.3 實(shí)驗(yàn)三....................................................................................................................6 4.4 實(shí)驗(yàn)四....................................................................................................................7 5.實(shí)驗(yàn)步驟..........................................................................................................................8 5.1 實(shí)驗(yàn)一.............................................................................................................8 5.1.1 文件拷貝......................................................................................................8 5.1.2 并發(fā)進(jìn)程分窗口顯示....................................................................................9 5.2 實(shí)驗(yàn)二..................................................................................................................14 5.3 實(shí)驗(yàn)三..................................................................................................................15 2 5.4 實(shí)驗(yàn)四..................................................................................................................17 6.調(diào)試記錄........................................................................................................................19 7.心得體會........................................................................................................................21 8.程序清單........................................................................................................................22 8.1實(shí)驗(yàn)一...................................................................................................................22 8.1.1 文件拷貝....................................................................................................22 8.1.2并發(fā)進(jìn)程窗口顯示......................................................................................23 8.2實(shí)驗(yàn)二...................................................................................................................33 8.3實(shí)驗(yàn)三...................................................................................................................34 8.4實(shí)驗(yàn)四...................................................................................................................38

      1.實(shí)驗(yàn)?zāi)康?/p>

      (1)掌握Linux操作系統(tǒng)的使用方法;(2)了解Linux系統(tǒng)內(nèi)核代碼結(jié)構(gòu);(3)掌握實(shí)例操作系統(tǒng)的實(shí)現(xiàn)方法。

      2.實(shí)驗(yàn)環(huán)境

      本次課程設(shè)計(jì)采用的操作系統(tǒng)環(huán)境是Windows7、Ubuntu雙系統(tǒng),Ubuntu系統(tǒng)版本為15.04,內(nèi)核版本是Linux 3.19。

      3.實(shí)驗(yàn)內(nèi)容

      3.1 實(shí)驗(yàn)一

      1)編寫一個(gè)C程序,用fread、fwrite等庫函數(shù)實(shí)現(xiàn)文件拷貝功能。

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

      3.2 實(shí)驗(yàn)二

      采用編譯內(nèi)核的方法,添加一個(gè)新的系統(tǒng)調(diào)用實(shí)現(xiàn)文件拷貝功能 編寫一個(gè)應(yīng)用程序,測試新加的系統(tǒng)調(diào)用

      3.3 實(shí)驗(yàn)三

      采用模塊方法,添加一個(gè)新的字符設(shè)備的驅(qū)動程序,實(shí)現(xiàn)打開/關(guān)閉、讀/寫等基本操作,編寫一個(gè)應(yīng)用程序,測試添加的驅(qū)動程序。

      3.4 實(shí)驗(yàn)四

      1)了解/proc文件的特點(diǎn)和使用方法。2)監(jiān)控系統(tǒng)狀態(tài),顯示系統(tǒng)部件的使用情況。

      3)用圖形界面監(jiān)控系統(tǒng)狀態(tài),包括CPU和內(nèi)存利用率、所有進(jìn)程信息等(可自己補(bǔ)充、添加其他功能)。

      4.實(shí)驗(yàn)設(shè)計(jì)

      4.1 實(shí)驗(yàn)一

      4.1.1 文件拷貝

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

      使用圖形界面GTK實(shí)現(xiàn)窗口的顯示,使用fork()創(chuàng)建三個(gè)并發(fā)進(jìn)程: pid=fork():創(chuàng)建子進(jìn)程。

      返回值:0

      從子進(jìn)程返回 >0

      從父進(jìn)程返回

      exit進(jìn)程自我終止,進(jìn)入僵死狀態(tài) wait()等待進(jìn)程終止(由父進(jìn)程調(diào)用)exec()執(zhí)行一個(gè)可執(zhí)行程序(文件)。

      4.2 實(shí)驗(yàn)二

      不同的Linux內(nèi)核版本編譯內(nèi)核和添加系統(tǒng)調(diào)用的方法不盡相同,在網(wǎng)上查閱了資料之后找到適合3.19版本內(nèi)核的編譯方法。

      所謂系統(tǒng)調(diào)用,即Linux內(nèi)核中設(shè)置了一組用于實(shí)現(xiàn)各種系統(tǒng)功能的子程序,稱為系統(tǒng)調(diào)用,用戶可以通過系統(tǒng)調(diào)用命令在自己的應(yīng)用程序中調(diào)用它們。其調(diào)用機(jī)制為:使用寄存器中適當(dāng)?shù)闹堤D(zhuǎn)到內(nèi)核中事先定義好的代碼中執(zhí)行:跳轉(zhuǎn)到系統(tǒng)調(diào)用的總?cè)肟趕ystem_call,檢查系統(tǒng)調(diào)用號,再查找系統(tǒng)調(diào)用表sys_call_table,調(diào)用內(nèi)核函數(shù),最后返回。

      實(shí)驗(yàn)二目的是更改內(nèi)核中系統(tǒng)調(diào)用模塊,增加自定義函數(shù)實(shí)現(xiàn)文件拷貝功能。

      4.3 實(shí)驗(yàn)三

      Linux設(shè)備驅(qū)動程序是一組常駐內(nèi)存的具有特權(quán)的共享庫,是低級硬件處理例程,每個(gè)設(shè)備文件有兩個(gè)設(shè)備號,主設(shè)備號標(biāo)識驅(qū)動程序,從設(shè)備號表示使用 6 同一個(gè)設(shè)備驅(qū)動程序的不同硬件設(shè)備。

      設(shè)備驅(qū)動程序的功能包括:對設(shè)備初始化和釋放,把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù),讀取應(yīng)用程序傳給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請求的數(shù)據(jù),檢測和處理設(shè)備出現(xiàn)的錯(cuò)誤。

      Linux支持的設(shè)備包括三種:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。添加設(shè)備驅(qū)動程序大致需要以下幾個(gè)步驟:

      1.注冊設(shè)備 2.定義功能函數(shù) 3.卸載設(shè)備

      4.4 實(shí)驗(yàn)四

      proc文件系統(tǒng)特點(diǎn):

      1.進(jìn)程文件系統(tǒng)和內(nèi)核文件系統(tǒng)組成的復(fù)合體

      2.將內(nèi)核數(shù)據(jù)對象化為文件形式進(jìn)行存取的一種內(nèi)存文件系統(tǒng)

      3.監(jiān)控內(nèi)核的一種用戶接口,擁有一些特殊的純文本文件,從中可以獲取系統(tǒng)狀態(tài)信息

      4.系統(tǒng)信息:與進(jìn)程無關(guān),隨系統(tǒng)配置的不同而不同 5.進(jìn)程信息:系統(tǒng)中正在運(yùn)行的每一個(gè)用戶級進(jìn)程的信息 其中各個(gè)文件保存的信息如下: /proc/cmd/line: 內(nèi)核啟動的命令行 /proc/cpuinfo: CPU信息

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

      /proc/meminfo: 內(nèi)存狀態(tài)的有關(guān)信息

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

      5.實(shí)驗(yàn)步驟

      5.1 實(shí)驗(yàn)一

      5.1.1 文件拷貝

      文件拷貝主要是利用文件指針操作,在源文件和目的文件之間進(jìn)行字符的復(fù)制,拷貝之前要判斷源文件是否存在以及能否打開,這需要設(shè)置一個(gè)判斷語句,同時(shí)也要設(shè)置判斷語句判斷目的文件是否存在,若不存在需要能夠創(chuàng)建一個(gè)目的文件,最后執(zhí)行循環(huán)拷貝。

      步驟如下:

      1.在Linux終端使用編譯命令:gcc mycopy.c-o mycopy產(chǎn)生可執(zhí)行文件。2.創(chuàng)建源文件wangzihao目的文件shaochongjun。3.編輯源文件:

      4.打開可執(zhí)行程序:./mycopy wangzihao shaochongjun 5.查看目的文件發(fā)現(xiàn)已經(jīng)實(shí)現(xiàn)拷貝:

      6.若源文件不存在會報(bào)錯(cuò):

      5.1.2 并發(fā)進(jìn)程分窗口顯示

      1.使用fork()函數(shù)創(chuàng)建三個(gè)進(jìn)程,使用exec函數(shù)族實(shí)現(xiàn)程序的調(diào)用:

      2.調(diào)用創(chuàng)建窗口函數(shù)init_window(),將進(jìn)程中的信息在窗口中顯示:

      3.分別創(chuàng)建三個(gè)程序?qū)崿F(xiàn)顯示系統(tǒng)時(shí)間、CPU利用率、累加求和功能:

      4.運(yùn)行結(jié)果如下:

      5.2 實(shí)驗(yàn)二

      原內(nèi)核版本:3.19.0 編譯新內(nèi)核版本:3.19.8 1.下載內(nèi)核并解壓

      2.系統(tǒng)調(diào)用函數(shù)實(shí)現(xiàn):修改kernel/sys.c文件,在文件的最后添加新的系統(tǒng)調(diào)用函數(shù):sys_mycall(char* sourceFile,char* destFile)3.設(shè)置系統(tǒng)調(diào)用號:修改arch/x86/syscalls/syscall_32.tbl,在最后一行添加新的系統(tǒng)調(diào)用號

      4.添加系統(tǒng)調(diào)用聲明到頭文件 :~$ 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.配置內(nèi)核:make menuconfig 7.編譯內(nèi)核:make-j4 8.安裝內(nèi)核:make modules_install make install 9.重啟進(jìn)入新的內(nèi)核

      10.編寫測試程序測試新的系統(tǒng)調(diào)用:

      測試結(jié)果如下:

      5.3 實(shí)驗(yàn)三

      1.編寫Makefile文件:

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

      3.設(shè)備加載:make clean make

      加載模塊:insmod wzhdriver.ko

      輸入 cat /proc/devices得 設(shè)備驅(qū)動的主設(shè)備號為:

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

      更改操作權(quán)限:chmod 666 /dev/wzhdriver 4.運(yùn)行測試程序,結(jié)果:

      5.4 實(shí)驗(yàn)四

      1系統(tǒng)信息頁:

      2進(jìn)程信息頁:

      3內(nèi)存資源頁:

      6.調(diào)試記錄

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

      3.由于一開始沒有加入刷新函數(shù),導(dǎo)致實(shí)驗(yàn)一顯示窗口數(shù)據(jù)不變化,在同學(xué)幫助下改正。

      4.編譯內(nèi)核占用大量時(shí)間后來發(fā)現(xiàn)在make后添加-j4可以大大提升速度。

      7.心得體會

      本次課程設(shè)計(jì)主要目的是熟悉Linux系統(tǒng),掌握Linux操作系統(tǒng)的使用方法,了解Linux系統(tǒng)內(nèi)核代碼結(jié)構(gòu),掌握實(shí)例操作系統(tǒng)的實(shí)現(xiàn)方法。由于剛開始接觸Linux,實(shí)驗(yàn)的開始遇到了不少困難,GTK的安裝和使用花費(fèi)了我不少時(shí)間,并行程序是操作系統(tǒng)課程學(xué)過的內(nèi)容,主要難點(diǎn)是圖形化界面的設(shè)計(jì)。

      實(shí)驗(yàn)二是耗費(fèi)時(shí)間最多的,由于每個(gè)版本的內(nèi)核編譯方式不同,耗費(fèi)了大量時(shí)間查找編譯內(nèi)核的方法,同時(shí)編譯一次內(nèi)核需要一個(gè)小時(shí)以上,不過皇天不負(fù)有心人最后我成功添加了系統(tǒng)調(diào)用。

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

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

      8.程序清單

      8.1實(shí)驗(yàn)一

      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并發(fā)進(jìn)程窗口顯示

      主函數(shù):

      #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);

      }

      }

      }

      } 系統(tǒng)時(shí)間:

      #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;

      //定義一個(gè)組裝盒;

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

      gtk_init(&argc, &argv);

      /*這里生成了一個(gè)窗口構(gòu)件——GtkWindow,GTK_WINDOW_TOPLEVEL包含窗口的標(biāo)題欄和邊框,同意用窗口管理器來進(jìn)行管理*/

      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]='