日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

【系统架构师修炼之道】(13):操作系统基础知识——进程基础知识

發(fā)布時(shí)間:2025/6/15 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【系统架构师修炼之道】(13):操作系统基础知识——进程基础知识 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

進(jìn)程分類(性質(zhì))

  • 系統(tǒng)進(jìn)程
    windows常見的有

    • dllhost.exe(DCOM DLL Host進(jìn)程支持基于COM對象支持DLL以運(yùn)行Windows程序)

    • kernel32.dll(Windows殼進(jìn)程用于管理多線程、內(nèi)存和資源)

    • mprexe.exe(Windows路由進(jìn)程包括向適當(dāng)?shù)木W(wǎng)絡(luò)部分發(fā)出網(wǎng)絡(luò)請求)

    • snmp.exe(Windows簡單的網(wǎng)絡(luò)協(xié)議代理(SNMP)用于監(jiān)聽和發(fā)送請求到適當(dāng)?shù)木W(wǎng)絡(luò)部分)

    • system(Microsoft Windows系統(tǒng)進(jìn)程)

    • tcpsvcs.exe(TCP/IP Services Application支持透過TCP/IP連接局域網(wǎng)和Internet)

  • 用戶進(jìn)程

  • 父進(jìn)程
    已創(chuàng)建一個(gè)或多個(gè)子進(jìn)程的進(jìn)程(Linux 中調(diào)用fork創(chuàng)建新進(jìn)程的進(jìn)程即為父進(jìn)程)

  • 子進(jìn)程
    另一進(jìn)程所創(chuàng)建的進(jìn)程,子進(jìn)程繼承了對應(yīng)的父進(jìn)程的大部分屬性,如文件描述符。在Unix中,子進(jìn)程通常為系統(tǒng)調(diào)用fork的產(chǎn)物。在此情況下,子進(jìn)程一開始就是父進(jìn)程的副本,某一進(jìn)程沒有父進(jìn)程,則可知該進(jìn)程很可能由內(nèi)核直接生成,進(jìn)程ID為1的進(jìn)程(即init進(jìn)程)是在系統(tǒng)引導(dǎo)階段由內(nèi)核直接創(chuàng)建的。無父進(jìn)程的進(jìn)程,在對應(yīng)的父進(jìn)程結(jié)束執(zhí)行后,進(jìn)程就會(huì)變成孤兒進(jìn)程,但之后會(huì)立即由init進(jìn)程“收養(yǎng)”為其子進(jìn)程。當(dāng)某一子進(jìn)程結(jié)束、中斷或恢復(fù)執(zhí)行時(shí),內(nèi)核會(huì)發(fā)送SIGCHLD信號(hào)予其父進(jìn)程。在默認(rèn)情況下,父進(jìn)程會(huì)以SIG_IGN函數(shù)忽略之

  • 進(jìn)程的狀態(tài)

    三態(tài)模型

    就緒,運(yùn)行,阻塞

    • 就緒狀態(tài):當(dāng)進(jìn)程已分配到除CPU以外的所有必要的資源,只要獲得處理機(jī)便可立即執(zhí)行

    • 運(yùn)行狀態(tài):進(jìn)程已獲得處理機(jī),其程序正在處理機(jī)上執(zhí)行

    • 阻塞狀態(tài):由于等待某個(gè)事件發(fā)生而無法執(zhí)行時(shí),便放棄處理機(jī)而處于阻塞狀態(tài)(等待I/O完成、申請緩沖區(qū)不能滿足、等待信件)

    調(diào)度:時(shí)間片已經(jīng)用完,讓出處理器

    五態(tài)模型

    進(jìn)程狀態(tài)轉(zhuǎn)化

    進(jìn)程的控制機(jī)構(gòu)是由操作系統(tǒng)內(nèi)核實(shí)現(xiàn),具體是通過控制原語。

    原語

    若干條指令組成的,用于完成一定功能的一個(gè)過程,不可分割性.即原語的執(zhí)行必須是連續(xù)的。
    原語必須在管態(tài)下(cpu的特權(quán)態(tài),執(zhí)行指令系統(tǒng)的全集)執(zhí)行,指令可以在目態(tài)(cpu的用戶態(tài),不能使用特權(quán)指令,不能直接取用系統(tǒng)資源與改變機(jī)器狀態(tài),并且只允許用戶程序訪問自己的存儲(chǔ)區(qū)域)執(zhí)行

    包含

    • 創(chuàng)建原語

    實(shí)際系統(tǒng)中創(chuàng)建一個(gè)進(jìn)程有兩種方法:一是由操作系統(tǒng)建立,0#進(jìn)程就是由操作系統(tǒng)建立的;二是由其他進(jìn)程創(chuàng)建一個(gè)新的進(jìn)程,創(chuàng)建進(jìn)程原語總是先為新建進(jìn)程申請一空白PCB,并為之分配唯一的數(shù)字表示符,使之獲得PCB的內(nèi)部名稱,若該進(jìn)程所對應(yīng)的程序不在內(nèi)存中,則應(yīng)將它從外存儲(chǔ)器調(diào)入內(nèi)存,并將該進(jìn)程有關(guān)信息填入PCB中,然后置該進(jìn)程為就緒狀態(tài),并將它排入就緒隊(duì)列和進(jìn)程家族隊(duì)列中,具體過程:1.從PCB集合種索取一個(gè)空白PCB,并獲得該P(yáng)CB的內(nèi)部標(biāo)識(shí)符i 2.把調(diào)用者提供的參數(shù),以及從執(zhí)行過程EP中獲得的調(diào)用者內(nèi)部標(biāo)識(shí)j ,填入該P(yáng)CB,設(shè)置記帳數(shù)據(jù),置新進(jìn)程為“靜止就緒”狀態(tài) 3.PCB分別插入就緒隊(duì)列RQ和進(jìn)程家族中

    Procedure Create(n,S0,k0,M0,R0,acc) begin i:=get Internal Name(n);//獲得內(nèi)部名 i.id:=n; //填外部名 i.Priority:=k0; //填優(yōu)先表 i.cpu state:=S0; //填cpu初始狀態(tài) i.mainstore:=M0; //填寫主存區(qū)域 i.resource:=R0; //填寫資源清單 i.status:='Readys'; //填寫進(jìn)程狀態(tài) j:=EP; //獲取調(diào)用者內(nèi)部標(biāo)識(shí) i.Parent:=j; //填入i進(jìn)程的父進(jìn)程j i.progeny:=null; //i的家庭指針為空 j.progeny:=i; //把i填入其父進(jìn)程pcb中的家庭指針處 i.state:=RQ; //i所在狀態(tài)隊(duì)列首指針 Insert(RQ,i); //把i進(jìn)程插入RQ隊(duì)尾 continue; end
    • 撤銷原語

    撤消進(jìn)程的實(shí)質(zhì)是撤消進(jìn)程存在標(biāo)志——進(jìn)程控制塊PCB。一旦PCB被撤消,進(jìn)程就消亡了,撤消進(jìn)程的實(shí)質(zhì)是撤消進(jìn)程存在標(biāo)志——進(jìn)程控制塊PCB。一旦PCB被撤消,進(jìn)程就消亡了。撤消原語的操作過程大致如下:以調(diào)用者提供的標(biāo)志符n為索引,從該進(jìn)程所在的隊(duì)列,將它從該隊(duì)列中消去,并撤消屬于該進(jìn)程的一切“子孫進(jìn)程”,若有父進(jìn)程則從父進(jìn)程PCB中刪除指向該進(jìn)程的指針,并釋放撤消進(jìn)程所占用的全部資源,或則將其歸還給其父進(jìn)程,或則歸還給系統(tǒng)。若被撤消的進(jìn)程處于執(zhí)行狀態(tài),應(yīng)立即中斷該進(jìn)程的執(zhí)行,并設(shè)置調(diào)度標(biāo)志為真,以指示該進(jìn)程被撤消后系統(tǒng)應(yīng)重新調(diào)度,撤銷原語在撤銷指定進(jìn)程的同時(shí)也應(yīng)該撤銷所指示的子孫進(jìn)程, 所以用kill()遞歸算法撤銷子孫進(jìn)程。引起進(jìn)程終止事件可分三類:正常結(jié)束、異常結(jié)束、外界干預(yù)。

    Procedure destroy(n) Begin Sched:=false; i:=getinternal name(n);//獲取n進(jìn)程的內(nèi)部名 kill(i); if sched then scheduler else continue;//假如Schde為真,則轉(zhuǎn)調(diào)度程序,否則繼續(xù) end procedure kill(i) begin if i.stata(i)=”executing” then begin stop(i); sched:=true end; remove (i.stata,i); //將被撤消進(jìn)程從i.state所指示的隊(duì)列中除去 for all S∈i.progeny do kill(s); for all r∈(i.main store ∪i.resources) do if owned(r) then insert (r.semaphore,r.date);//屬于父進(jìn)程的資源歸還且插入父進(jìn)程資源清單 for all ∈created resources(i) do remove descriptor (R);//撤消自己的資源清單歸還系統(tǒng) remove process control block (i); end
    • 阻塞原語

    阻塞原語的大致工作過程如下:開始時(shí),進(jìn)程正處于執(zhí)行狀態(tài),因此首先應(yīng)中斷CPU執(zhí)行,并保存該進(jìn)程的CPU現(xiàn)場,然后把阻塞狀態(tài)賦予該進(jìn)程,并將它插入到具有相同實(shí)體的阻塞隊(duì)列中,引起阻塞和喚醒的事件可分四類:一、請求系統(tǒng)服務(wù)。二、啟動(dòng)某種操作(同步由int將該進(jìn)程喚醒)三、新數(shù)據(jù)尚未到達(dá)時(shí)。四、無新工作可做。

    Procedure block Begin i:=EP; //從執(zhí)行進(jìn)程EP獲得調(diào)用者內(nèi)部標(biāo)識(shí)符 stop(i); i.status:=”blockda”; i.stata=WQ(r);//填寫阻塞隊(duì)列指針 insert(WQ(r),i); //把i插入WQ隊(duì)尾 scheduler //轉(zhuǎn)調(diào)度程序 end
    • 喚醒原語

    進(jìn)程因?yàn)榈却录陌l(fā)生而處于阻塞狀態(tài),當(dāng)?shù)却氖录瓿珊?#xff0c;進(jìn)程又具有了繼續(xù)執(zhí)行的條件,這時(shí)就要把該進(jìn)程從阻塞狀態(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)。這個(gè)工作由喚醒原語來完成。喚醒原語執(zhí)行的操作有:先把被喚醒進(jìn)程從阻塞隊(duì)列中移出,設(shè)置該進(jìn)程當(dāng)前狀態(tài)為就緒狀態(tài),然后再將該進(jìn)程插入到就緒隊(duì)列中。

    Procedure wakeup(n) Begin i :=getinternal name(n); remove (WQ(r),i); //把i進(jìn)程從等待r而受阻塞隊(duì)列中摘除 i.status:=”ready”; //置i進(jìn)程為“就緒”狀態(tài) i.sdata:=RQ; //把i進(jìn)程插入到就緒隊(duì)列 insert(RQ,i); continue end
    • 掛起原語

    讓某些進(jìn)程暫時(shí)不參與資源競爭,掛起的方式有三類:一、把掛起原語調(diào)用者本身掛起,即自己掛起自己。二、掛起某個(gè)標(biāo)識(shí)符的進(jìn)程。三、將某個(gè)指定的標(biāo)志符及其全部或部分子孫掛起用的保存n進(jìn)程的pcb副本的內(nèi)存區(qū)。

    Procedure suspend(n,a) Begin i:=getinternal name(n); s:=i.status; if s=”executing” then stop(i); a:=copy PCB(i); i.status:=if s=”blockeda” then “blockeds” else readys; if s=”executing” then scheduler else continue; end
    • 激活原語

    激活指定標(biāo)志符的進(jìn)程或激活某進(jìn)程及其子孫進(jìn)程

    Procedure active(n) Begin i:=getinternal name(n) i.status:=if i.status=”readys” then “readya” else blockeda; if i.status=”readys” then scheduler;//當(dāng)激活后的進(jìn)程處于“readys”狀態(tài)針,將引起重新調(diào)度 else continue end

    分類

    • 請求(Req)型

    高層向低層請求某種業(yè)務(wù)

    • 證實(shí)(Cfm)型

    提供業(yè)務(wù)的層證實(shí)某個(gè)動(dòng)作已經(jīng)完成

    • 指示(Ind)型

    提供業(yè)務(wù)的層向高層報(bào)告一個(gè)與特定業(yè)務(wù)相關(guān)的動(dòng)作

    • 響應(yīng)(Res)型

    用于應(yīng)答,表示來自高層的指示原語已收到


    感謝您的耐心閱讀,如果您發(fā)現(xiàn)文章中有一些沒表述清楚的,或者是不對的地方,請給我留言,你的鼓勵(lì)是作者寫作最大的動(dòng)力,
    如果您認(rèn)為本文質(zhì)量不錯(cuò),讀后覺得收獲很大,不妨小額贊助我一下,讓我更有動(dòng)力繼續(xù)寫出高質(zhì)量的文章。

    • 支付寶

    • 微信

    作 者 : @mousycoder

    原文出處 : http://mousycoder.com/2015/10/14/the-pragmatic-sa-13/

    創(chuàng)作時(shí)間:2015-9-1

    更新時(shí)間:2015-10-16

    總結(jié)

    以上是生活随笔為你收集整理的【系统架构师修炼之道】(13):操作系统基础知识——进程基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。