作系統(tǒng)實驗報告_第1頁
作系統(tǒng)實驗報告_第2頁
作系統(tǒng)實驗報告_第3頁
作系統(tǒng)實驗報告_第4頁
作系統(tǒng)實驗報告_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

作系統(tǒng)實驗報告操作系統(tǒng)實驗報告學號:姓名:指導老師:完成日期:目錄實驗一11實驗二22實驗三77實驗四10實驗五15實驗六18實驗七22

實驗一XUNIX/LINUX入門一、實驗目的了解UNIX/LINUX運行環(huán)境,熟悉UNIX/LINUX的常用基本命令,熟悉和掌握UNIX/LINUX下c語言程序的編寫、編譯、調(diào)試和運行方法。二、實驗內(nèi)容熟悉UNIX/LINUX的常用基本命令如ls、who、pwd、ps等。

練習UNIX/LINUX的文本行編輯器vi的使用方法熟悉UNIX/LINUX下c語言編譯器cc/gcc的使用方法。用vi編寫一個簡單的顯示Hello,World。c語言程序,用gcc編譯并觀察編譯后的結果,然后運行它。三、實驗要求按照要求編寫程序,放在相應的目錄中,編譯成功后執(zhí)行,并按照要求分析執(zhí)行結果,并寫出實驗報告。四、實驗程序includeintmain(){printf(HelloWorld。\n);return0;}五、實驗感想通過第一次室驗,我了解UNIX/LINUX運行環(huán)境,熟悉了UNIX/LINUX的常用基本命令,熟悉和掌握了UNIX/LINUX下c語言程序的編寫、編譯、調(diào)試和運行方法。

實驗二進程管理一、實驗目的加深對進程概念的理解,明確進程與程序的區(qū)別;進一步認識并發(fā)執(zhí)行的實質(zhì)。二、實驗內(nèi)容(1)進程創(chuàng)建編寫一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進程。當此程序運行時,在系統(tǒng)中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符:父進程顯示a;子進程分別顯示字符b和字符c。試觀察記錄屏幕上的顯示結果,并分析原因。

(2)進程控制修改已編寫的程序,將每一個進程輸出一個字符改為每一個進程輸出一句話,再觀察程序執(zhí)行時屏幕上出現(xiàn)的現(xiàn)象,并分析原因。

(3)進程的管道通信編寫程序?qū)崿F(xiàn)進程的管道通信。使用系統(tǒng)調(diào)用pipe()建立一個管道,二個子進程P1和P2分別向管道各寫一句話:

Child1issendingamessage。Child2issendingamessage。父進程從管道中讀出二個來自子進程的信息并顯示(要求先接收P1,再接收P2)。三、實驗要求按照要求編寫程序,放在相應的目錄中,編譯成功后執(zhí)行,并按照要求分析執(zhí)行結果,并寫出實驗報告。四、實驗設計1、功能設計(1)進程創(chuàng)建使用fork()創(chuàng)建兩個子進程,父進程等待兩個子進程執(zhí)行完再運行。

(2)進程控制使用fork()創(chuàng)建兩個子進程,父進程等待兩個子進程分別輸出一句話再運行。

(3)進程的管道通信先創(chuàng)建子進程1,向管道寫入一句話,子進程1結束后創(chuàng)建子進程2,向管道寫入一句話,最后父進程從管道中讀出。2、數(shù)據(jù)結構子進程和管道。3、程序框圖五、實驗程序(1)進程創(chuàng)建includeintmain(){intpid1,pid2;pid1=fork();if(pid10){printf(Fork1failed。。);}if(pid1==0){printf(b\n);exit(0);}if(pid10){wait(NULL);pid2=fork();if(pid20){printf(Fork2failed。。);}if(pid2==0){printf(c\n);exit(0);}if(pid20){wait(NULL);printf(a\n);exit(0);}}}(2)進程控制

includeintmain(){intpid1,pid2;pid1=fork();if(pid10){printf(Fork1failed。。);}if(pid1==0){printf(Thisischildb\n);exit(0);}if(pid10){wait(NULL);pid2=fork();if(pid20){printf(Fork2failed。。);}if(pid2==0){printf(Thisischildc\n);exit(0);}if(pid20){wait(NULL);printf(Thisisfathera\n);exit(0);}}}(3)進程的管道通信includeincludeintmain(){intpid1,pid2;intpfd;char*msg1=Child1issendingamessage。;char*msg2=Child2issendingamessage。;charbuf;intr,w;if(pipe(pfd)0){printf(pipecreateerror。\n);exit(1);}pid1=fork();if(pid10){printf(Fork1failed。。);}if(pid1==0){close(pfd);Linux支持的消息通信機制及其使用方法2.Linux系統(tǒng)的共享存儲區(qū)的原理及使用方法。二、實驗內(nèi)容1.消息的創(chuàng)建、發(fā)送和接收

使用消息調(diào)用msgget()、msgsnd()、msggrev()、msgctrl()編制長度為1K的消息的發(fā)送和接收程序。

2.共享存儲取得創(chuàng)建、附接和斷接使用系統(tǒng)調(diào)用shmget()、shmat()、shmctl()、shmctl(),編制一個與上述功能相同的程序。三、實驗要求按照要求編寫程序,放在相應的目錄中,編譯成功后執(zhí)行,并按照要求分析執(zhí)行結果,并寫出實驗報告。四、實驗設計1、消息的創(chuàng)建、發(fā)送和接收(1)功能設計為了實現(xiàn)進程之間消息的創(chuàng)建、發(fā)送和接收,首先應定義兩個子進程,Server進程負責發(fā)送,Client進程負責接收,父進程負責創(chuàng)建。其次需要用到msgget()、msgsnd()、msggrev()、msgctrl()等函數(shù)進行對消息的控制。題目要求消息長度為1K,那么msgsnd(id,msgp,size,flag)和msgrcv(id,msgp,size,type,flag)函數(shù)中參數(shù)size應設為1024,msgget(key,flag)中的key應為75。父進程獲得創(chuàng)建消息后,子進程Server先后發(fā)送編號為1~10的10條消息,子進程Client先后接收這10條消息,方能達到實驗目的。

(2)數(shù)據(jù)結構消息(mymsg):結構體實現(xiàn),包含的成員變量有消息類型和消息內(nèi)容,具體實現(xiàn)如下:

structmymsg{shiyan5后臺運行此程序,使用killUSR12472時,子進程接收信號,信號處理程序輸出子進程號0,并輸出信號名稱。七、實驗心得通過本次實驗,我掌握了注冊信號處理程序及signal()調(diào)用方法,并且了解了如何讓程序在后臺運行的方法。我也進一步了解了LINUX系統(tǒng)中進程同步與通信的原理。實驗六線程的創(chuàng)建一、實驗目的編寫Linux環(huán)境下的多線程程序,了解多線程的程序設計方法,掌握最常用的三個函

數(shù)pthread_create,pthread_join和pthread_exit的用法。二、實驗內(nèi)容1、主程序創(chuàng)建兩個線程myThread1和myThread2,每個線程打印一句話。使用pthread_create(id,NULL,(void*)thread,NULL)完成。2、創(chuàng)建兩個線程,分別向線程傳遞如下兩種類型的參數(shù)傳遞整型值傳遞字符三、實驗要求按照要求編寫程序,放在相應的目錄中,編譯成功后執(zhí)行,并按照要求分析執(zhí)行結果,并寫出實驗報告。四、實驗設計1、創(chuàng)建兩個進程每個進程打印一句話(1)功能設計題目要求創(chuàng)建兩個線程,每個線程打印一句話,可以認為兩個線程的功能是相同的,故只需要寫一個線程的運行函數(shù)thread(),在這個函數(shù)里有一個printf輸出一句話即可。然后在main函數(shù)里分別創(chuàng)建兩個線程,然后等待兩個線程結束。

(2)數(shù)據(jù)結構線程:使用pthread_create()創(chuàng)建。每個線程有相應的線程標示符,也有各自的屬性。線程可以和線程運行函數(shù)綁定,并可以在創(chuàng)建線程時確定該線程運行函數(shù)的參數(shù)。

(3)程序框圖2、創(chuàng)建兩個進程每個進程打印一句話分別向線程傳遞如下兩種類型的參數(shù):整型值、字符(1)功能設計題目要求創(chuàng)建兩個線程,兩個線程分別傳遞int型和char型數(shù)據(jù)給線程運行函數(shù)。所以要編寫兩個不同的線程運行函數(shù)分別接收int型和char型的數(shù)據(jù)。相應的pthread_create()函數(shù)中要給第四個參數(shù),作為形參傳進線程運行函數(shù)。

(2)數(shù)據(jù)結構線程:同1,使用pthread_create()創(chuàng)建。每個線程有相應的線程標示符,也有各自的屬性。

線程可以和線程運行函數(shù)綁定,并可以在創(chuàng)建線程時確定該線程運行函數(shù)的參數(shù)。

(3)程序框圖五、實驗程序1、創(chuàng)建兩個進程每個進程打印一句話includeincludeinclude#defineMAX10intoperand;intsize=0;sem_tsem;voidReadData1(void){FILE*fp=fopen(,r);while(。feof(fp)){fscanf(fp,%d%d,operand,operand);if(feof(fp))break;++size;sem_post(sem);}fclose(fp);}voidReadData2(void){FILE*fp=fopen(,r);while(。feof(fp)){fscanf(fp,%d%d,operand,operand);if(feof(fp))break;++size;sem_post(sem);}fclose(fp);}voidHandleData1(void){while(1){sem_wait(sem);--size;printf(Plus:%d+%d=%d\n,operand,operand,operand+operand);}}voidHandleData2(void){while(1){sem_wait(sem);--size;printf(Multiply:%d*%d=%d\n,operand,operand,operand*operand);}}intmain(void){pthread_tt1,t2,t3,t4;sem_init(sem,0,0);pthread_create(t3,NULL,(void*)ReadData1,NULL);pthread_create(t1,NULL,(void*)HandleData1,NULL);pthread_create(t4,NULL,(void*)ReadData2,NULL);pthread_create(t2,NULL,(void*)HandleData2,NULL);pthread_j

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論