版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講14.3進(jìn)程控制2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講2附:中斷及原語(yǔ)的概念中斷的概念及其重要性中斷的分類(lèi)原語(yǔ)的概念:
原語(yǔ)是指在執(zhí)行過(guò)程中不允許中斷,它屬于操作系統(tǒng)內(nèi)核的一部分,以系統(tǒng)調(diào)用的形式提供給用戶(hù)和操作系統(tǒng)使用。
2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講34.3進(jìn)程控制與進(jìn)程控制相關(guān)的基本操作:進(jìn)程創(chuàng)建進(jìn)程撤銷(xiāo)進(jìn)程睡眠進(jìn)程喚醒針對(duì)每種控制操作的三個(gè)問(wèn)題:1:使用或執(zhí)行該操作的時(shí)機(jī)??2:執(zhí)行該操作原語(yǔ)時(shí)操作系統(tǒng)完成的具體工作??3:Linux操作系統(tǒng)中實(shí)現(xiàn)的方法??2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講44.3.2進(jìn)程創(chuàng)建與撤銷(xiāo)(創(chuàng)建)1.進(jìn)程創(chuàng)建的時(shí)機(jī) 在系統(tǒng)生成需要進(jìn)程承擔(dān)資源分配及管理工作——系統(tǒng)進(jìn)程; 用戶(hù)作業(yè)的執(zhí)行需創(chuàng)建子進(jìn)程,或作業(yè)中完成某項(xiàng)具體的任務(wù)時(shí)——用戶(hù)進(jìn)程。2:進(jìn)程創(chuàng)建時(shí)操作系統(tǒng)完成的工作分配進(jìn)程標(biāo)識(shí)及空白PCB,并在系統(tǒng)進(jìn)程表中增加一個(gè)表目。為進(jìn)程分配內(nèi)存空間(程序、數(shù)據(jù)、用戶(hù)棧等),復(fù)制父進(jìn)程內(nèi)存空間的內(nèi)容到該進(jìn)程內(nèi)存空間中。初始化PCB。置該進(jìn)程的狀態(tài)為就緒,插入就緒隊(duì)列。生成其它相關(guān)的數(shù)據(jù)結(jié)構(gòu)。2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講5Linux操作系統(tǒng)啟動(dòng)過(guò)程(了解)3.Linux中終端用戶(hù)進(jìn)程的創(chuàng)建與調(diào)度執(zhí)行2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講63.Linux中終端用戶(hù)進(jìn)程的創(chuàng)建與調(diào)度執(zhí)行Linux操作系統(tǒng)中用戶(hù)進(jìn)程的創(chuàng)建過(guò)程:當(dāng)用戶(hù)在鍵盤(pán)上鍵入一個(gè)用戶(hù)可執(zhí)行文件名時(shí),操作系統(tǒng)就為該文件創(chuàng)建一個(gè)相應(yīng)的用戶(hù)進(jìn)程并投入運(yùn)行。如編譯一程序后可執(zhí)行文件名為:a.out在當(dāng)前目錄下:./a.out,操作系統(tǒng)將創(chuàng)建一進(jìn)程運(yùn)行該程序(由終端程序使用fork()創(chuàng)建)。2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講74.Linux中用戶(hù)子進(jìn)程的創(chuàng)建與調(diào)度執(zhí)行Linux提供的創(chuàng)建子進(jìn)程的系統(tǒng)調(diào)用為fork()。格式:intfork()返回值:=0 創(chuàng)建成功,從子進(jìn)程返回;
>0 創(chuàng)建成功,從父進(jìn)程返回,其值為子進(jìn)程的PID號(hào);
=-1 創(chuàng)建失敗。2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講84.Linux中用戶(hù)子進(jìn)程的創(chuàng)建與調(diào)度執(zhí)行Linux中子進(jìn)程創(chuàng)建時(shí)操作系統(tǒng)完成的工作:(了解)檢查同時(shí)運(yùn)行的進(jìn)程數(shù)目,若超過(guò)系統(tǒng)設(shè)定值則創(chuàng)建失敗,返回-1;為子進(jìn)程分配進(jìn)程控制塊task_struct結(jié)構(gòu),并賦予唯一進(jìn)程標(biāo)識(shí)符pid;子進(jìn)程繼承父進(jìn)程打開(kāi)的所有文件及資源,對(duì)父進(jìn)程的當(dāng)前目錄和所有已打開(kāi)系統(tǒng)文件表項(xiàng)中的引用記數(shù)加1;為子進(jìn)程創(chuàng)建進(jìn)程映像:創(chuàng)建子進(jìn)程映像靜態(tài)部分:復(fù)制父進(jìn)程映像靜態(tài)部分創(chuàng)建子進(jìn)程映像動(dòng)態(tài)部分:初始化task_struct結(jié)構(gòu)結(jié)束創(chuàng)建,置子進(jìn)程為內(nèi)存就緒狀態(tài),插入就緒隊(duì)列,作為一個(gè)獨(dú)立的進(jìn)程被系統(tǒng)調(diào)度。若調(diào)用進(jìn)程(父進(jìn)程)返回,則返回創(chuàng)建的子進(jìn)程標(biāo)識(shí)符pid值(此時(shí)返回值>0);若子進(jìn)程被調(diào)度執(zhí)行,則將其U區(qū)計(jì)時(shí)字段初始化然后返回(此時(shí)返回值=0)。2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講9使用fork創(chuàng)建進(jìn)程時(shí)的應(yīng)用程序的框架結(jié)構(gòu):main(){ intp; //存放子進(jìn)程pid號(hào)
while((p=fork())==-1); //創(chuàng)建子進(jìn)程直到成功為止
if(p==0) //返回值=0表示子進(jìn)程返回
{ /*此處插入子進(jìn)程程序段*/ } else //返回值>0表示父進(jìn)程返回
{ /*此處插入父進(jìn)程程序段*/ }}4.Linux中用戶(hù)子進(jìn)程的創(chuàng)建與調(diào)度執(zhí)行2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講10#include<stdio.h>main(){intp1;
printf("Processbegin\n");
while((p1=fork())==-1);
if(p1==0)printf("Iamchild\n"); elseprintf("Iamfather\n");
printf("processend\n");}思考題:以下兩程序運(yùn)行后的結(jié)果是什么??并分析其原因。
#include<stdio.h>main(){intp1;
printf("Processbegin");
while((p1=fork())==-1);
if(p1==0)printf("Iamchild\n"); elseprintf("Iamfather\n");
printf("processend\n");
}2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講11[例3-3]父進(jìn)程創(chuàng)建子進(jìn)程P1、P2,父子進(jìn)程分別輸出字符a、b和c。假設(shè)文件名為3-3.c#include<stdio.h>main(){ intp1,p2; while((p1=fork())==-1); //創(chuàng)建子進(jìn)程1,直至創(chuàng)建成功
if(p1==0) //子進(jìn)程P1返回輸出’b’ putchar('b'); else //父進(jìn)程返回
{ while((p2=fork())==-1); //創(chuàng)建子進(jìn)程2
if(p2==0) //子進(jìn)程P2返回輸出’c’ putchar('c'); else putchar('a'); //父進(jìn)程返回輸出’a’ }}2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講12該程序多次運(yùn)行后,輸出的結(jié)果可能會(huì)是:abc、acb、bca、cba、bac或cab等隨機(jī)結(jié)果中的任意一種。每次運(yùn)行后都會(huì)產(chǎn)生父子3個(gè)進(jìn)程,所以有3個(gè)字符輸出。2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講13子進(jìn)程映像與父進(jìn)程映像是存儲(chǔ)在兩個(gè)不同的地址空間中內(nèi)容相同的程序副本;因?yàn)楦缸佑诚裼懈髯缘拇鎯?chǔ)空間,雙方都感覺(jué)不到對(duì)方的行為;父子進(jìn)程各自的PC指針都指向fork結(jié)束后的下一條指令地址;操作系統(tǒng)對(duì)于父子進(jìn)程的調(diào)度執(zhí)行具有隨機(jī)性。使用fork()創(chuàng)建進(jìn)程的特點(diǎn):2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講144.3.2進(jìn)程創(chuàng)建與撤銷(xiāo)(撤銷(xiāo))1.進(jìn)程撤銷(xiāo)的時(shí)機(jī)當(dāng)一個(gè)進(jìn)程已經(jīng)完成所需完成的工作時(shí),可以調(diào)用進(jìn)程撤銷(xiāo)原語(yǔ)自我撤銷(xiāo),進(jìn)程終止,最后消亡。2:進(jìn)程撤銷(xiāo)時(shí),操作系統(tǒng)完成的任務(wù):釋放進(jìn)程所占資源;將該進(jìn)程從系統(tǒng)進(jìn)程表中刪除,釋放該進(jìn)程的PCB。CPU被釋放,進(jìn)行進(jìn)程調(diào)度。2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講154.3.2進(jìn)程創(chuàng)建與撤銷(xiāo)(撤銷(xiāo))3.Linux中進(jìn)程的撤銷(xiāo)Linux中提供的撤銷(xiāo)進(jìn)程系統(tǒng)調(diào)用為exit():格式:voidexit(intstatus)參數(shù):intstatus:子進(jìn)程向父進(jìn)程發(fā)送的終止信息,父進(jìn)程可通過(guò)wait()系統(tǒng)調(diào)用獲取。返回值:無(wú)。頭文件:#include<stdlib.h>2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講164.3.2進(jìn)程創(chuàng)建與撤銷(xiāo)(撤銷(xiāo))Linux中子進(jìn)程終止時(shí)操作系統(tǒng)完成的工作:(了解)關(guān)閉軟中斷:因?yàn)檫M(jìn)程即將終止而不再處理任何軟中斷信號(hào);回收資源:關(guān)閉所有已打開(kāi)文件,釋放進(jìn)程所有的區(qū)及相應(yīng)內(nèi)存,釋放當(dāng)前目錄及修改根目錄的索引節(jié)點(diǎn);寫(xiě)記帳信息:將進(jìn)程在運(yùn)行過(guò)程中所產(chǎn)生的記帳數(shù)據(jù)(其中包括進(jìn)程運(yùn)行時(shí)的各種統(tǒng)計(jì)信息)記錄到一個(gè)全局記帳文件中;置該進(jìn)程為僵死狀態(tài):向父進(jìn)程發(fā)送子進(jìn)程死的軟中斷信號(hào),將終止信息status送到指定的存儲(chǔ)單元中;轉(zhuǎn)進(jìn)程調(diào)度:因?yàn)榇藭r(shí)CPU已經(jīng)被釋放,需要由進(jìn)程調(diào)度進(jìn)行CPU再分配。2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講174.3.3進(jìn)程阻塞與喚醒(阻塞)1.進(jìn)程阻塞的時(shí)機(jī) 當(dāng)一個(gè)進(jìn)程因?yàn)槟撤N執(zhí)行條件暫不滿(mǎn)足或者等待某個(gè)事件的發(fā)生時(shí)。以下皆是引起進(jìn)程阻塞的事件:進(jìn)程請(qǐng)求I/O;進(jìn)程請(qǐng)求系統(tǒng)資源時(shí)需要排隊(duì)或暫時(shí)得不到滿(mǎn)足;進(jìn)程請(qǐng)求的同步或互斥信號(hào)沒(méi)有滿(mǎn)足或等待的同步消息沒(méi)有到來(lái);進(jìn)程請(qǐng)求延時(shí)。2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講184.3.3進(jìn)程阻塞與喚醒(阻塞)2:進(jìn)程睡眠原語(yǔ)執(zhí)行后,操作系統(tǒng)需完成的工作:⑴.將當(dāng)前需要睡眠的進(jìn)程運(yùn)行現(xiàn)場(chǎng)保護(hù)到其PCB中;⑵.置進(jìn)程的狀態(tài)為阻塞態(tài);⑶.將該進(jìn)程插入引起睡眠的chan的等待隊(duì)列(假設(shè)引起睡眠的原因?yàn)閏han,);⑷.CPU空閑,進(jìn)行進(jìn)程調(diào)度,以調(diào)度另一個(gè)進(jìn)程投入運(yùn)行。2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講194.3.3進(jìn)程阻塞與喚醒(阻塞)3.Linux中進(jìn)程的睡眠1)當(dāng)進(jìn)程使用了某個(gè)系統(tǒng)調(diào)用后,申請(qǐng)的某個(gè)條件或I/O服務(wù)未得到滿(mǎn)足時(shí),該進(jìn)程會(huì)自動(dòng)進(jìn)入睡眠;2)Linux為用戶(hù)提供了多種直接導(dǎo)致進(jìn)程睡眠或等待的系統(tǒng)調(diào)用。sleep系統(tǒng)調(diào)用,將進(jìn)程睡眠n秒:格式:sleep(n)其中:n表示延時(shí)的秒數(shù)。2023/2/4操作系統(tǒng)與實(shí)驗(yàn)教程第3章第3講20
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 濰坊理工學(xué)院《中學(xué)英語(yǔ)解題教學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 抵押車(chē)回購(gòu)合同范例
- 居委會(huì)遺失物業(yè)合同范例
- 租房協(xié)議拆遷合同范例
- 汽車(chē)出賣(mài)合同范例
- 制定合同范例通知范例
- 工地收購(gòu)樹(shù)苗合同范例
- 委托布展合同范例
- 清砂合同范例
- 職場(chǎng)白領(lǐng)兼職合同范例
- 2024-2025學(xué)年高二上學(xué)期期末數(shù)學(xué)試卷(基礎(chǔ)篇)(含答案)
- 直系親屬股權(quán)無(wú)償轉(zhuǎn)讓合同(2篇)
- 2023-2024學(xué)年廣東省廣州市白云區(qū)九年級(jí)(上)期末語(yǔ)文試卷
- 汽車(chē)吊籃使用專(zhuān)項(xiàng)施工方案
- 2024年典型事故案例警示教育手冊(cè)15例
- 中秋國(guó)慶慰問(wèn)品采購(gòu)?fù)稑?biāo)方案
- 110kV變電站及110kV輸電線路運(yùn)維投標(biāo)技術(shù)方案(第二部分)
- 新高處安裝維護(hù)拆除作業(yè)專(zhuān)題培訓(xùn)課件
- 300td高強(qiáng)瓦楞原紙廢紙制漿工段工藝設(shè)計(jì)
- MSD(濕敏器件防護(hù))控制技術(shù)規(guī)范
- 【打印版】2021年上海市浦東新區(qū)中考一模數(shù)學(xué)試卷及解析
評(píng)論
0/150
提交評(píng)論