


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、操作系統實驗實驗二進程管理學號姓名 班級 華僑大學電子工程系實驗目的1、理解進程的概念,明確進程和程序的區別。2、理解并發執行的實質。3、掌握進程的創建、睡眠、撤銷等進程控制方法。實驗內容與要求基本要求:用C語言編寫程序,模擬實現創建新的進程;查看運行進程;換出某個進程;殺死進程等功能。實驗報告內容1、進程、進程控制塊等的基本原理。進程是現代操作系統中的一個最基本也是最重要的概念,掌握這個概念對于理解操作 系統實質,分析、設計操作系統都有其非常重要的意義。為了強調進程的并發性和動態性, 可以給進程作如下定義: 進程是可并發執行的程序在一個數據集合上的運行過程,是系統進行資源分配和調度的一個獨立
2、單位。由于多個程序并發執行, 各程序需要輪流使用 CPU,當某程序不在CPU上運行時,必 須保留其被中斷的程序的現場,包括:斷點地址、程序狀態字、通用寄存器的內容、堆棧內 容、程序當前狀態、程序的大小、運行時間等信息,以便程序再次獲得CPU時,能夠正確執行。為了保存這些內容,需要建立一個專用數據結構,我們稱這個數據結構為進程控制塊PCB ( Process Con trol Block)。進程控制塊是進程存在的惟一標志, 它跟蹤程序執行的情況, 表明了進程在當前時刻的 狀態以及與其它進程和資源的關系。 當創建一個進程時, 實際上就是為其建立一個進程控制 塊。在通常的操作系統中,PCB應包含如下
3、一些信息: 進程標識信息。為了標識系統中的各個進程,每個進程必須有惟一的標識名或標 識數。 位置信息。指出進程的程序和數據部分在內存或外存中的物理位置。 狀態信息。指出進程當前所處的狀態,作為進程調度、分配CPU的依據。 進程的優先級。一般根據進程的輕重緩急其它信息。這里給出的只是一般操作系統中 PCB所應具有的內容,不同操作系統的PCB結構是不同的,我們將在 2.8節介紹Linux系統的PCB結構。程度為進程指定一個優先級,優先級用優先數表示。 進程現場保護區。當進程狀態變化時(例如一個進程放棄使用CPU),它需要將當時的CPU現場保護到內存中,以便再次占用CPU時恢復正常運行,有的系統把要
4、保護的CPU現場放在進程的工作區中,而PCB中僅給出CPU現場保護區起始地址。 資源清單。每個進程在運行時,除了需要內存外,還需要其它資源,如I/O設備、外存、數據區等。這一部分指出資源需求、分配和控制信息。 隊列指針或鏈接字。它用于將處于同一狀態的進程鏈接成一個隊列,在該單元中存 放下一進程PCB首址。 其它信息。這里給出的只是一般操作系統中 PCB所應具有的內容,不同操作系統的PCB結構是不同的,我們將在 2.8節介紹Linux系統的PCB結構。2、程序流程圖。開始3 、程序及注釋#include<stdio.h>#include<stdlib.h>#include
5、<string.h> struct jincheng_type/ 定義表示進程信息的結構體int pid;/ 進程 IDint youxian; / 優先級int daxiao;/ 大小int zhuangtai;/ 進程的狀態,這里用 0 表示沒有建立或被殺死, 1 表示執行,2 表示換出int info;/ 內容;struct jincheng_type neicun20; / int shumu=0,guaqi=0,pid,flag=0; 程 ID ,運行標志位定義 20 個內存單位給進程使用/ 定義正在執行進程數目,被掛起進程數目,進void create()/ 函數創建一
6、個新進程if(shumu>=20)是否已滿printf("n 內存已滿,請先換出或殺死進程 n"); / 判斷內存空間elsefor(int i=0;i<20;i+)程使用if(neicuni.zhuangtai=0) break;/ 選出空著的內存單元給新進printf("n 請輸入新進程 pidn");出的內存單元scanf("%d",&(neicuni.pid);for(int j=0;j<i;j+)if(neicuni.pid=neicunj.pid)ID 相同時,顯示“該進程已存在”printf(&
7、quot;n 該進程已存在 n"); return;printf("n 請輸入新進程優先級 n");大小和內容scanf("%d",&(neicuni.youxian);printf("n 請輸入新進程大小 n");scanf("%d",&(neicuni.daxiao);printf("n 請輸入新進程內容 n"); scanf("%d",&(); neicuni.zhuangtai=1;態( zhuangtai )
8、設成“ 1”,以表示存在且未被換出 shumu+;/ 輸入新進程 ID 存至選/ 當輸入的新進程與原有進程/ 輸入新進程的優先級、/ 將新進程的內存單元狀/ 正在運行的進程數目加void run()/ 函數查看正在運行的進程for(int i=0;i<20;i+)if(neicuni.zhuangtai=1)zhuangtai=1 )的進程顯示出來,若存在這樣的程序,則將 printf("n pid=%d",neicuni.pid);printf("youxian=%d",neicuni.youxian);printf("daxiao=%
9、d",neicuni.daxiao);printf("zhuangtai=%d",neicuni.zhuangtai); printf("info=%d",);flag=1;if(!flag) printf("n 當前沒有運行進程 n");flag=0 ),則顯示“當前沒有運行進程”/ 將存在且未被掛起(即flag 設成 1/ 若當 前沒有運 行進程( 即void huanchu()if(!shumu)printf("n 當前沒有進程存在 n");/ 函數換出進程/ 判 斷 是 否
10、 無 進 程 存 在return;/ 輸 入 需 要 換 出 的 進 程printf("n 輸入喚出進程 ID 值 ");ID,scanf("%d",&pid);for(int i=0;i<20;i+)if(pid=neicuni.pid)if(neicuni.zhuangtai=1) / 若該 ID 代表的進程正 在運行,則將其掛起,即將 zhuangyai 置成 2 ,并將 guaqi 加一neicuni.zhuangtai=2;guaqi+;printf("n 已經成功換出進程 n");else if(neicun
11、i.zhuangtai=2) printf("n 要喚出的進程已被掛起 n");/ 若該 ID 代表的進程已被掛起,即 zhuangtai=2, 則顯示要喚出的進程已被 掛起'flag=1;break;if(!flag) printf("n 要喚出的進程不存在 n"); / 若進程不存在,給出顯示void kill()if(!shumu)/ 函數殺死進程/ 判斷是否無進程存在printf("n 當前沒有進程存在 n");return;printf("n 輸入殺死進程的 ID 值 ");/ 讀入要殺死的進程
12、IDscanf("%d",&pid);for(int i=0;i<20;i+)if(pid=neicuni.pid)if(neicuni.zhuangtai=1)/ 若進程正在運行則再次詢問是否要殺死,通過用戶的反饋執行不同操作printf("n 該進程正在運行,您確定要殺死嗎?n");printf("n 請輸入 1:確定; 0 :不確定n");scanf("%d",&flag);if(flag)neicuni.zhuangtai=0;/ 將 zhuangtai 置為 0 ,表示進程被殺死,并
13、將shumu自減一shumu-;elseprintf("n已經成功殺死進程 n");要殺死的進程正在運行n");else if(neicuni.zhuangtai=2)/ 若該進程已經被掛起,則直接殺死/ 若進程不存在,給出顯/ 函數喚醒進程if(!shumu)printf("n 當前沒有運行進程 n"); return;if(!guaqi)printf("n 當前沒有掛起進程 n"); return;printf("n 輸入 pidn");/ 判斷是否無進程存在/ 判斷是否無進程被掛起/ 輸入需要喚醒進
14、程 IDshumu-;printf("n 已經成功殺死進程 n");flag=1;break;if(flag=0) printf("n 要殺死的進程不存在 n"); 示void huanxing()scanf("%d",&pid);for(int i=0;i<20;i+)if(pid=neicuni.pid)flag=false;if(neicuni.zhuangtai=2) / 判斷該進程是否被掛起,若 沒有則將其喚醒并將 guaqi 自減一neicuni.zhuangtai=1;guaqi-;printf("
15、;n 已經成功喚醒進程 n");else if(neicuni.zhuangtai=2) printf("n 要喚醒的進程已被掛起 n");/ 若目標進程已被掛起,則顯示要喚醒的進程已被掛起'flag=1;break;if(!flag) printf("n 要喚醒的進程不存在 n"); / 若要喚醒的進程不存在,給出顯 示void viewall()for(int i=0;i<20;i+)/ 函數查看內存狀態/ 顯示所有 20 個內存單元的狀態printf("n pid=%d",neicuni.pid); pr
16、intf("youxian=%d",neicuni.youxian); printf("daxiao=%d",neicuni.daxiao);printf("zhuangtai=%d",neicuni.zhuangtai);void main()int n=1;int num;for(int i=0;i<20;i+)neicuni.zhuangtai=0;/ 主函數/ 先將內存 zhuangtai 位清零while(n)printf("n*n");/ 用戶操作界面printf("n);printf(
17、"n*printf("n printf("n printf("n printf("n1. 創建新的進程2. 查看運行進程n");3. 喚出某個進程4. 殺死某個進程n");5. 喚醒某個進程6. 查看內存狀態n");7. 退出進程n");進程演示系統 *n"););printf("nprintf("n 請選擇( 1-7 ) n");/ 功能選擇scanf("%d",&num);switch(num) case 1:create();bre
18、ak;case 2:run();break;case 3:huanchu();break;case 4:kill();break;case 5:hua nxin g();break;case 6:viewall();break;case 7:exit(0);default:n=0;flag=0;4、程序運行演示與截圖(1)創建新進程,依次建立進程1、2、3,圖中為建立進程2MXKMKM K M K > M HMM 4 M K M H M M K X M M M MMK < KKw*51(迪程 演 示 爭*克鼻耳捕1 創建新的進程2 查看運行咗程3 .喚出茸個逹稈4 殺死菇個咗稈喚醒
19、某個進程4查看內存狀態 7 退岀講程MM MMKMMK KXKMMMMKKKMMMMMKrfXKX HMMKMK(1-7)1請輸入新咗枉卩也2輛入壯制瞇級2請輸入新咗程大小2謹輸入新子薦內容(2)查看運行的進程與查看內存狀態程演 示系統創建新的進程2 -查看運行進程 氛喚出某個進程嗎殺死某個進程 乳喚醒某個進程 氣查看內存狀態叭退出迸程請選擇(1-?)Epid=l yo ux lain =1 dixlcto =1 z huan sfta i_ =1 ±n f n =1pid =2 youxian=2 daKiao Ehwantai info =2pid=3ouxian=3daxiao
20、 =3zhuangtai=linfo=3(2)換出進程。圖中以換出進程 3為例。J 程演 7J 系 統 xxxxwmxxH創建新的進程2-查看運彳亍進程 氛喚岀某個進程4 殺死某個進程 £ -喚醒某個進程 J查看內存狀態 臨退岀進程X it 貝!MX 且 MiJKJCiCmtiOtaiCJlCNiCMUXItiiiiiJCHKMUmtNWMlj青選擇(1-7)3輸入喚出進程5值已經成功換岀迸程(4) 此時再次查看運行的進程與查看內存狀態,可以看到進程3已不在運行的進程中,內存狀態中其zhuangtai標識等于2,表明進程3確實已被換出。1 創建新的進程 史喚出某個進程 E.喚醒某個進
21、程門退出進程氏查看運行進程 乩殺死某個進程 查看內存狀態*選擇(I-*?)rp4d=li/cuxS.an «l<lax4ao *lzhuang(ta 1=1 info "1 pzLd =2«/DuxzLan =2daxzLao =2n1iii 云 ngtsi 1=1 zLnf o =2 pid =3<juxlan =3daxlao =3zhuangta i=2 inf o=,3 pS.d =-0ouxi*n "0d3cS.ao "SzhuAngta i=0inf o =6 pJ.d=6i/ouxJ.an =OdlaxJ.ao =0z
22、huans(<;a l=0inf o=0 pzLd =G«/ouxzLan =0daxzLao =02 liu An a l=0zLnf o =B pid=Byouxian=Odaxiao=021mangtai=Binfo=B pS.d =-0</ouxi*n "Gdaxiao "Szhuangta i=0inf o =6 pid=6youxian =0ilaxiao =02huAns(tai=Oinf o=0 pld=O«;Duxlan =0daxlao =0tehuAns(t al=01nf c =6 Pid=0yo«Kiftn
23、=0dftKio=GEhu«n9ti=0info=C pid0«/ouxian "OdAxiao "QzbuAnsrai01nf o =6 pid=Gyouxian*0daxiao*0zhuAn9tal=0info=0 pld=0«oulan =0dalao =OhuAnst;al=01nf o =6 p id=Gyoux ian =Bda« iao =021)un9tA i=B info =6 pid0«/ouxian "OdAxiao "QzbuAn g ta i"6inf o =0 pid
24、=Gyouxian=0daxiao=0zhuAn9tal-0info=0 pld=Q«ouKlan =0dalao =OhuAnst;al=01nf o =fi pid=GyouKian=Bda«io=BEhuangtfii=6info=B pid0«/ouxian -OdAxiao -OzbuAng ta i"Qinf q =0(5) 喚醒進程。圖為將進程3喚醒創建新的進程趴沓看運行進程沢喚出某個進程4 殺死某個進程 皐喚醒某個進程6 查看內存狀態 叭退出進程KKaCJiC3<W>OCA<>CSCJ<MICJ<K&g
25、t;C>CKX<K>*IIA<>t»!M3<KXXIKj< 請選擇(1-7)5輸入P"3已經成功喚醛進程jOLlOOCJCJCJCjOLlOCJCJCJCJCjOLlOtJtKMtKjMIftKJBJtKMtKjMIft(6) 此時再次查看運行的進程與查看內存狀態,可以看到進程3重新出現在運行的進程中,且內存狀態中其 zhuangtai標識等于1,表明進程3已被成功喚nmwxw 丁¥呈演下系纟充KHi科首材xmiifTill1-創建新的進程洪查看運行進程 喚岀某個進程 乳殺死某個進程喚醒某個進程查看內存狀態 兀退出進程請選
26、擇(1-7)2p id =d youx ian =1dax ian-izhuangta1=1info=l pid =2youx i_an «2 dax iftu -2shuangtal"linf o 3 pld =2youix£a.n =3 djcj-ao =3zhi*£irigftal=lzlnFo 2XJtaCKKiMJfM: >E*aC>£ MIX atJCtt KMIX NX NKJt HEX XlC>f(7 )殺死進程。圖中以殺死進程 3為例,并附以殺死后運行的進程與內存狀態圖,內存狀態中進程3的zhuangtai=O ,表示進程3已被殺死。*進程嘖不系統創建新的進程 沢喚出某個進程 喚釀某入進程2 一查看運行進程 乳殺死某個進程 肛查看內存狀態7 退岀進程XKX fcfJC :MHf:MX:MXKaiXPO<liEXKXjfKWM:miiWM:XII選ft (1-7)6pid=louxian Idaxiao =lzhuangtinfo=l pid=2yvuxin *2dxidu*2i£iucLPkyit«ii ilinf u-2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產市場開發的風險管理策略
- 銅冶鎮一年級語文下冊第一單元過關試卷
- 京西生態農業創新-洞察闡釋
- 華崆峒古鎮實施崆峒國際旅游文化產業園的研究分析57P
- 為什么要弘揚廉政文化(完整版)
- 自動化產業園運營管理的背景意義及必要性
- 譯林九下教材單詞表
- 2025年版藝術品買賣合同范本示例
- 2024年臨沂市儲備招錄輔警人才筆試真題
- 2024年青海民族大學招聘緊缺碩士專任教師真題
- A類業余無線電操作證題目
- 高考復習主題班會課件
- 新世界廣場冷卻塔隔音方案
- 耳鼻咽喉科臨床診療指南
- YSJ 007-1990 有色金屬選礦廠 試驗室、化驗室及技術檢查站工藝設計標準(試行)(附條文說明)
- 北京交通大學集成直流穩壓電源的設計
- (完整word版)全國教育科學規劃課題申請書
- 新通用大學英語綜合教程2(第2冊)U3課后答案及課件(第三單元unit03)高等教育出版社
- 某區發展現代都市型農業經驗匯報材料農業項目匯報材料.doc
- 五年級下冊語文第七單元復習(人物描寫復習)(課堂PPT)
- 膠水化學品安全技術說明書(MSDS)
評論
0/150
提交評論