



付費下載
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
操作系統課程實驗報告姓名學號系任課教師指導教師評閱教師實驗地點麗澤樓C304-2麗澤樓C304-1(請勾選實際實驗地點)實驗時間實驗課表現出勤和個人表現Q1(15+15(組長評分)=30分)得分:實驗總分(Q1+Q2+Q3+Q4)實驗完成情況Q2(45分(組長評分,教師根據實際情況微調))得分:實驗編號與實驗名稱:實驗2進程控制管理實驗目的:1)掌握進程的概念,明確進程的含義2)認識并了解并發執行的實質實驗內容及要求(詳見實驗講義與實驗指導書):1)編寫一段程序,使用系統調用fork()創建兩個子進程。當此程序運行時,在系統中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符:父進程顯示'a',子進程分別顯示字符'b'和字符'c'。試觀察記錄屏幕上的顯示結果,并分析原因。2)修改上述程序,每一個進程循環顯示一句話。子進程顯示'daughter…'及'son……',父進程顯示'parent……',觀察結果,分析原因。實驗用到的軟件(:)虛擬機VMWare/VirtualBoxfedora15實驗內容及關鍵步驟(代碼)Q3(15分)按照上一次實驗的步驟,進入后需要切換到管理員,輸入“suroot”,輸入密碼之后,可以輸入“ls”查看目錄下的文件。附加:為了熟悉上一節實驗課內容,我先創建了一個myleb2的文件夾,然后再在這個文件夾里創建一個子文件夾love,再在里面編譯。開始編寫代碼,輸入“vitest1.c”,按i開始編寫,輸入以下代碼:#include<stdio.h>intmain(){intp1,p2;while((p1=fork())==-1);/*創建子進程p1*/if(p1==0)putchar('b');else{while((p2=fork())==-1);/*創建子進程p2*/if(p2==0)putchar('c');elseputchar('a');}}然后按ESC鍵后,輸入“:wq”退出編譯。退出后,輸入“cattest1.c”可查看所輸入的代碼內容,輸入“gcctest1.c”,然后輸入“ls”查看,發現有a.out這個文件,然后運行它,輸入“./a.out”,可看到輸出的結果為“acb”。再創建一個編譯,輸入“vitest2.c”,輸入以下代碼:#include<stdio.h>main(){intp1,p2,i;while((p1=fork())==-1);/*創建子進程p1*/if(p1==0)for(i=0;i<10;i++)printf("daughter%d\n",i);else{while((p2=fork())==-1);/*創建子進程p2*/if(p2==0)for(i=0;i<10;i++)printf("son%d\n",i);elsefor(i=0;i<10;i++)printf("parent%d\n",i);}}退出后,用同樣方法查看此文件的代碼內容。查看無問題后,輸入“gcc–otest2test2.c”,修改運行文件名,然后查看該文件夾下的所有文件,能看到“test2”運行文件。運行“test2”文件,輸入“./test2”,可查看運行結果為“daughter0,daughter1,daughter2,daughter3…..daughter9”。觀察其他同學的輸出結果,會發現有不一樣的地方,例如:前一個程序運行結果有的是“bca”或者“bac”,后面這個結果也有許多不同之處。在思考和與同學討論之后,分析這個結果的原因。實驗過程中遇到的問題解決辦法與實驗體會Q4(10分)得分:思考題:有一個系統調用可以用來創建進程:fork。這個系統調用會創建一個與調用進程相同的副本。調用后,父進程和子進程擁有相同的儲存映像、同樣的環境字符串和同樣的打開文件。系統調用格式:pid=fork()fork()返回值意義如下:0:在子進程中,pid變量保存的fork()返回值為0,表示當前進程是子進程。>0:在父進程中,pid變量保存的fork()返回值為子進程的id值(進程唯一標識符)。-1:創建失敗。如果fork()調用成功,它向父進程返回子進程的PID,并向子進程返回0。fork()要完成這些操作:(1)為新進程分配一進程表項和進程標識符(2)檢查同時運行的進程數目(3)拷貝進程表項中的數據(4)子進程繼承父進程的所有文件(5)為子進程創建進程上、下文(6)子進程執行。因為如果fork()調用成功,它向父進程返回子進程的PID,并向子進程返回0,即fork()被調用了一次,但返回了兩次。所以,所建的新進程的入口就是是調用的fork()父進程的副本。首先是讀入文件內容,再次是看文件有沒有指定程序運行,如果有則運行,如果沒有則輸出出錯的信息。實驗中的問題及解決辦法:這次的實驗主要是讓我們從輸出結果中分析問題。1.首先是第一個程序,用c語言編寫的代碼,代碼本身是沒什么問題的,但奇怪的是輸出結果卻是三個都輸出了。這是因為每個進程被創建后都有一個程序計數器,資源集一樣,如:while((p1=fork())==-1);/*創建子進程p1*/while((p2=fork())==-1);/*創建子進程p2*/對父進程而言,除了創建2個子進程之外,還要輸出a,它和子進程的關系是競爭關系,同時需要使用CPU,當前獲得什么進程,就輸出什么進程。輸出的結果為acb意為:先運行父進程,并輸出,然后子進程被創建后,成為就緒隊列,父進程可以運行,然后再開始創建子進程。所以總的來說,就是從進程并發執行來看,各種情況都有可能。上面的三個進程沒有同步措施,所以父進程與子進程的輸出內容會疊加在一起。輸出次序帶有隨機性。2.然后是第二個程序,因為在有3個進程時,不同的電腦操作系統的調度算法是不一樣的,因此也會有其他輸出的次序,但3個程序都會輸出。但是也有可能輸出不了,而輸出不了的,則說明它已經被掛起了。比如這個程序,隨著循環次數的不同,有例如“parent輸出n次后,開始輸出別的,再輸出parent,即循環
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國PH電極儀數據監測研究報告
- 2025年中國LED白光照明用驅動IC數據監測研究報告
- 2025年中國DV手持減震器數據監測報告
- 2025年中國AL2O3制品數據監測報告
- 2025至2030年中國除塵整流變壓器市場分析及競爭策略研究報告
- 2025至2030年中國鐵皮楓斗茶市場分析及競爭策略研究報告
- 2025至2030年中國輕型臥式帶鋸床市場分析及競爭策略研究報告
- 2025至2030年中國航空空氣清新劑市場分析及競爭策略研究報告
- 2025至2030年中國線切割專用高級乳化油市場分析及競爭策略研究報告
- 2025至2030年中國真空單向閥市場分析及競爭策略研究報告
- 2025年河南省中考道德與法治真題含答案
- 2025年人教版小學五年級語文(下冊)期末試卷附答案
- 中國人民警察學院面試內容與回答
- 2025年事業單位公開招聘考試《綜合應用能力(E類)西醫臨床》新版真題卷(附詳細解析)
- 2023-2024學年福建省廈門市高二下學期期末質量檢測數學試題(解析版)
- 中醫藥艾灸課件視頻教學
- 2025至2030年中國液壓行業市場動態分析及發展趨向研判報告
- 2025年上海市中考語文真題試卷含答案
- 2025年高考數學全國二卷試題真題解讀及答案詳解
- 廣東省廣州市海珠區2024-2025學年八年級下學期期末 歷史自編練習試卷(含解析)
- 高校“十五五”發展規劃編制應著重考慮的關鍵任務
評論
0/150
提交評論