qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          操作系統(tǒng):進程管理和IO控制

           一、進程管理
            進程管理包括進程控制,進程調(diào)度,進程同步與通信,死鎖控制四個內(nèi)容。
            (一)進程控制
            進程是操作系統(tǒng)中運行的基本單位,包括程序段,數(shù)據(jù)段和進程控制段。操作系統(tǒng)通過進程控制塊(PCB)管理進程。每一個PCB唯一標(biāo)示一個進程。它存儲進程的PID,UID,當(dāng)前狀態(tài)等信息,以及進程執(zhí)行某一時刻的寄存器值,并且指向進程的數(shù)據(jù)段和程序段。OS把所有PCB鏈接為一個鏈表。
            進程在剛剛被創(chuàng)建時出于new狀態(tài)。OS負責(zé)申請一塊存儲空間作為該進程的PCB,在其中填上進程的信息,標(biāo)示為ready,鏈接到PCB隊列和就緒隊列中,此時進程進入"就緒"態(tài)。進程調(diào)度程序在未來某一時刻將其分配給處理機執(zhí)行,該進程出于"執(zhí)行"態(tài),OS將根據(jù)PCB中的內(nèi)容初始化處理機的各個寄存器值,之后進入用戶態(tài)執(zhí)行;進程請求I/O或系統(tǒng)調(diào)用時將放棄處理機,進入"活動阻塞"態(tài),進程調(diào)度程序?qū)?dāng)前處理機各寄存器值壓棧(存入PCB中,或存入核心棧),將該進程PCB運行隊列中移入阻塞隊列;當(dāng)系統(tǒng)調(diào)用或I/O完成時被喚醒再次進入活動就緒態(tài),即PCB由阻塞隊列鏈入就緒隊列(操作系統(tǒng)如何實現(xiàn)喚醒進程??)。如果在系統(tǒng)調(diào)用完成之前,進程被換到外存,相應(yīng)內(nèi)存空間被釋放,則進程進入"靜止阻塞態(tài)",這里中級調(diào)度程序?qū)⒑痛疟P驅(qū)動程序一起,把相應(yīng)內(nèi)容拷貝到對換空間,同時釋放內(nèi)存;系統(tǒng)調(diào)用完成時若仍在外存中而為未被換入,則出于"靜止就緒"態(tài),之后被換入內(nèi)存可直接進入執(zhí)行態(tài),或動態(tài)就緒態(tài)。進程執(zhí)行完畢后進入"僵死"態(tài),系統(tǒng)將釋放內(nèi)存空間,回收所有資源。
            UNIX系統(tǒng)中提供的系統(tǒng)調(diào)用中,fork產(chǎn)生一個與父進程完全相同的子進程,在子進程的地址空間中運行;spawn則從文件中裝入一個文件作為子進程,在其地址空間運行;exec則從文件中裝一個進程到當(dāng)前進程地址空間,覆蓋當(dāng)前進程執(zhí)行。
            (二)進程調(diào)度
            這里說的進程調(diào)度主要指低級調(diào)度,即由調(diào)度程序負責(zé)完成的,在內(nèi)存和處理機之間的調(diào)度。在文件和內(nèi)存之間的調(diào)度成為高級調(diào)度,又叫作業(yè)調(diào)度,在內(nèi)存和對換空間的調(diào)度稱為中級調(diào)度,又稱對換。低級調(diào)度算法主要有:先來先服務(wù)FIFO;.短作業(yè)優(yōu)先SJF;.時間片輪轉(zhuǎn)Round Robin;靜態(tài)優(yōu)先級調(diào)度;多級隊列反饋輪轉(zhuǎn)調(diào)度。UNIX系統(tǒng)中采用的動態(tài)優(yōu)先級+多級隊列反饋輪轉(zhuǎn)調(diào)度。具體內(nèi)容可參見前面的文章
            (三)進程通信
            進程通信有直接通信和間接通信,直接通信是兩進程直接交換數(shù)據(jù)或發(fā)送信息,間接通信則是把信息發(fā)送到一個中間實體中。根據(jù)同步方式,可分為:1.發(fā)送進程阻塞,接受進程不阻塞;2.發(fā)送進程不阻塞,接受進程阻塞;3.發(fā)送進程和接收進程都阻塞。
            進程通信也分為高級通信和低級通信。
            高級通信通常傳輸數(shù)據(jù)量較大,包括:消息機制,共享存儲區(qū),管道。
            1、消息機制:
            在消息機制里值得注意的是消息緩沖隊列方式。發(fā)送進程首先申請一塊緩沖區(qū),把消息內(nèi)容和消息首部填入其中,之后調(diào)用send系統(tǒng)調(diào)用。send將把該進程的消息內(nèi)容拷貝到消息緩沖隊列中;接受進程首先申請接受緩沖區(qū),之后調(diào)用receive系統(tǒng)調(diào)用,OS負責(zé)把消息緩沖隊列中的消息拷貝到該進程空間的緩沖區(qū)中。
            2、管道通信:
            相當(dāng)于一個隊列形式的一個進程在管道尾寫,另一個進程在管道頭取,管道分為無名管道和有名管道。無名管道是用pipe函數(shù)創(chuàng)建的,只能用于子進程之間的通信,有名管道用mkfifo函數(shù)創(chuàng)建用于任意兩個進程之間通信,對管道的操作相當(dāng)于對文件的操作比如open函數(shù)打開管道close函數(shù)關(guān)閉管道等。
            低級通信包括同步和互斥兩種,通過信號量實現(xiàn),主要針對臨界區(qū)問題。臨界區(qū)的互斥訪問要遵循4個原則:空閑讓進,忙則等待,有限等待,讓權(quán)等待。主要信號量分為0/1信號量,整型信號量,記錄型信號量,AND型信號量和信號量集。經(jīng)典同步問題有生產(chǎn)者-消費者問題,讀者-寫者問題,哲學(xué)家進餐問題。
            信號量:信號量是操作系統(tǒng)提供的管理公有資源的手段,即PV操作。對于獨享設(shè)備有驅(qū)動程序做PV操作。
            p操作的過程是:s=s-1;if(s<0){進入等待隊列,自己阻塞進程}
            v操作的過程是:s=s+1;if(s<0){從等待隊列取一個進程;取出的進程進入就緒隊列,當(dāng)前進程該干嘛干嘛}
            pv原語不能次序錯誤,而且必須成對出現(xiàn)。信號量的定義是semaphore mutex;經(jīng)典同步問題有生產(chǎn)者-消費者問題;讀者-寫者問題;哲學(xué)家進餐問題。
            (四)死鎖控制
            由于進程競爭資源或推進順序非法,可能會造成進程死鎖。死鎖有四個必要條件:互斥訪問,請求保持,非剝奪,環(huán)路等待。打破其中任何一個都可以不出現(xiàn)死鎖。對于死鎖的處理有三類方法:
            1.死鎖預(yù)防:主要是打破死鎖必要條件中的一個。打破請求保持條件,則要求進程在執(zhí)行之前一次性請求到所有資源才可以執(zhí)行;打破非剝奪條件,要求進程執(zhí)行過程中因為缺少資源無法執(zhí)行時,剝奪所有資源,將其阻塞;打破環(huán)路等待條件,則給資源編號,要求進程請求資源的順序依照編號由高到低進行。
            2.死鎖避免:指Dijkstra的銀行家算法;
            3.死鎖檢測消除:指在發(fā)生死鎖時檢測資源分配圖中是否有子環(huán),然后將一個或多個進程掛起,消除死鎖;檢測算法是NP完全問題,CPU代價較大。
            二、輸入輸出(I/O)管理
            (一)   I/O管理概述
            1.  I/O管理功能
            (1)   動態(tài)的紀錄各種設(shè)備的狀態(tài)
            (2)   設(shè)備分配與回收
            (3)   實施設(shè)備驅(qū)動和中段處理的工作
            2.  I/O應(yīng)用接口
            (1)  設(shè)備和設(shè)備控制器的接口:設(shè)備和cpu之間不是直接通信的而是夾著一個設(shè)備控制器,設(shè)備與設(shè)備控制器是靠三根線相連的,數(shù)據(jù)信號線,控制信號線和狀態(tài)信號線,數(shù)據(jù)信號線用于在設(shè)備和設(shè)備控制器之間傳送數(shù)據(jù)信號,控制信號線傳送由設(shè)備控制器向I/O設(shè)備發(fā)送控制信號,狀態(tài)信號線用于傳送設(shè)備當(dāng)前狀態(tài)的信號。
            (2)  設(shè)備控制器:控制一個或多個I/O設(shè)備,其基本功能有接收和識別(cpu發(fā)的)命令,數(shù)據(jù)交換(與cpu或與設(shè)備數(shù)據(jù)交換),標(biāo)示和報告設(shè)備的狀態(tài)(給cpu發(fā))地址識別,數(shù)據(jù)緩沖,差錯控制。
            (3)  設(shè)備控制器由三部分組成:設(shè)備控制器與處理器的接口(由數(shù)據(jù)線連接DMR和控制狀態(tài)寄存器,控制線,和地址線組成),設(shè)備控制器與設(shè)備的接口(多個設(shè)備接口,每個設(shè)備接口由數(shù)據(jù)控制和狀態(tài)三種信號),I/O邏輯(當(dāng)cpu啟動一個設(shè)備時,將啟動命令發(fā)給I/O邏輯同時通過地址線給I/O邏輯由它進行譯碼。。譯出命令后對所選設(shè)備進行控制。所以地址線和控制線是直接跟I/O邏輯相連的。

            3.  I/O通道
            I/O通道是特殊的處理機。它具有執(zhí)行I/O指令的能力,并通過執(zhí)行通道程序來控制I/O操作,它的指令單一主要與I/O操作相關(guān)的指令,通道沒有自己的內(nèi)存,它和CPU共享內(nèi)存。通道又分為字節(jié)多路通道,數(shù)組選擇通道,和數(shù)組多路通道。
            (1)  數(shù)組選擇通道:又稱告訴通道,在物理上可以連接多個設(shè)備,但某一段時間內(nèi)通道只能選擇一個設(shè)備進行工作
            (2)  數(shù)組多路通道:當(dāng)某設(shè)備進行數(shù)據(jù)傳送時,通道只為該設(shè)備服務(wù),當(dāng)設(shè)備在執(zhí)行尋址等控制性動作時,通道掛起該設(shè)備的通道程序,去為其他設(shè)備服務(wù)。
            (3)  字節(jié)多路通道:用于大量低速設(shè)備,與設(shè)備之間數(shù)據(jù)傳送的基本單位是字節(jié),為一個設(shè)備傳送一個字節(jié)后,又可以為另個設(shè)備傳送一個字節(jié)。數(shù)組多路通道傳輸?shù)幕締挝皇菈K。而且一次只能有一個設(shè)備在傳輸數(shù)據(jù)。
            4.  I/O控制方式
            (1)  程序I/O方式:忙等方式。
            (2)  中段驅(qū)動I/O方式:當(dāng)某進程要啟動某個I/O設(shè)備工作時,便由cpu向相應(yīng)的設(shè)備控制器發(fā)出一條I/O命令,然后立即返回繼續(xù)執(zhí)行原來的任務(wù),此時,CPU和 I/O設(shè)備并行操作。以字節(jié)為單位進行I/O。
            (3)  DMA I/O方式:直接存儲器訪問方式數(shù)據(jù)傳輸?shù)膯挝皇菈K,數(shù)據(jù)之間在設(shè)備和內(nèi)存中進行交換,僅塊傳輸?shù)拈_始和結(jié)束時才需要CPU干預(yù)。(替代了設(shè)備控制 器)。DMA控制器中有四類寄存器:命令寄存器(存cpu發(fā)的控制命令或設(shè)備的狀態(tài)),內(nèi)存地址寄存器,數(shù)據(jù)寄存器(緩沖數(shù)據(jù)作用),數(shù)據(jù)計數(shù)器(存本次要讀的字節(jié)數(shù))。
            (4)  I/O通道控制方式:通道是通過執(zhí)行通道程序,并與設(shè)備控制器共同實現(xiàn)對I/O設(shè)備的控制的。通道指令格式為命令
            1)操作碼:規(guī)定了指令所執(zhí)行的操作。
            2)內(nèi)存地址:標(biāo)明讀操作和寫操作時的內(nèi)存首址
            3)計數(shù):表示本條占領(lǐng)所要讀或?qū)憯?shù)據(jù)的字節(jié)數(shù)
            4)通道程序結(jié)束位P:用于表示通道程序是否結(jié)束
            5)記錄結(jié)束標(biāo)志R。
            三、設(shè)備管理
            設(shè)備管理包括:緩沖管理,設(shè)備分配和設(shè)備處理三個內(nèi)容。
            進程I/O一共有四種方式:程序查詢方式,程序中斷方式,DMA方式,通道控制方式。通道處理器也是一個處理機,但是與CPU相比,它指令較為單一,沒有獨立的存儲空間(使用內(nèi)存空間)。通道分為字節(jié)多路通道,數(shù)組多路通道和數(shù)組選擇通道。
            (一)緩沖管理
            緩沖管理包括單緩沖,雙緩沖,循環(huán)緩沖和緩沖池。這里需要注意的是緩沖池。它包括輸入隊列,輸出隊列和空閑隊列,有四種工作方式:
            1.收容輸入方式:進程請求向緩沖區(qū)輸入,從空閑緩沖隊列中申請一個緩沖區(qū)輸入,將之鏈接在輸入隊列尾;
            2.提取輸入方式:進程要從緩沖區(qū)中提取輸入,則從輸入隊列尾部緩沖區(qū)中拷貝信息,同時釋放空間,將之重新鏈入空閑隊列中;
            3.收入輸出方式:進程要想緩沖區(qū)輸出,從空閑緩沖區(qū)隊列中申請一個緩沖區(qū)輸出,將之鏈接在輸出隊列尾;
            4.提取輸出方式:進程要想緩沖區(qū)提取輸出,則從輸出隊列尾部緩沖區(qū)中拷貝信息,同時釋放空間,將之重新鏈入空閑隊列中。
            (二)設(shè)備分配
            操作系統(tǒng)為實現(xiàn)設(shè)備分配需要配備的數(shù)據(jù)結(jié)構(gòu)有:設(shè)備使用表,控制器使用表,通道使用表,系統(tǒng)設(shè)備表。利用設(shè)備獨立性的思想分配設(shè)備。所謂設(shè)備獨立性,是指使用邏輯設(shè)備名稱來請求某種設(shè)備,而系統(tǒng)通過某種名稱轉(zhuǎn)換方式將其轉(zhuǎn)換成物理設(shè)備名稱進行分配。實現(xiàn)設(shè)備獨立性需要再驅(qū)動程序之上再增加一層設(shè)備獨立性軟件,負責(zé)實現(xiàn)名稱和地址的轉(zhuǎn)換,這種轉(zhuǎn)換信息使用邏輯設(shè)備表LUT實現(xiàn),每一個表項存儲邏輯設(shè)備名,物理設(shè)備名,驅(qū)動程序入口地址。使用設(shè)備獨立性方法實現(xiàn)設(shè)備分配,具有靈活性和易于設(shè)備重定向。
            SPOOLing是設(shè)備分配的一個重要例子。它實現(xiàn)了獨占設(shè)備的共享。SPOOLing系統(tǒng)包括輸入井,輸出井,輸入緩沖,輸出緩沖,輸入進程和輸出進程。進程在請求獨占設(shè)備輸出時,OS要求它先把要輸出的內(nèi)容輸入到輸入緩沖,之后有輸入進程將其輸入到輸入井中,此時如果處理機要處理這些數(shù)據(jù),則從輸入井中取數(shù)據(jù);獨占設(shè)備要輸出時,由輸出進程將輸出井中的信息送至輸出緩沖,由輸出設(shè)備輸出。這種方式實現(xiàn)了獨占設(shè)備的共享,如網(wǎng)絡(luò)打印機。
            (三)設(shè)備處理
            設(shè)備處理指的是一系列驅(qū)動程序。它們是OS與外設(shè)的接口,把OS進程發(fā)來的抽象的要求轉(zhuǎn)化為對硬件的具體的控制命令,如設(shè)置命令控制字,讀取設(shè)備狀態(tài)信息,啟動設(shè)備等。它們對操作系統(tǒng)提供統(tǒng)一的接口,方便用戶調(diào)用。

          posted on 2014-06-20 13:24 順其自然EVO 閱讀(672) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          <2014年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 临漳县| 花莲县| 乌拉特中旗| 金坛市| 海晏县| 东辽县| 会泽县| 会宁县| 靖远县| 镶黄旗| 连平县| 治多县| 洛阳市| 明星| 哈密市| 元朗区| 吴堡县| 施甸县| 龙门县| 祁阳县| 沅陵县| 青阳县| 锡林浩特市| 定州市| 弥勒县| 鄂伦春自治旗| 大理市| 克东县| 长寿区| 黎城县| 美姑县| 松滋市| 神木县| 兴安盟| 当阳市| 祁东县| 綦江县| 高陵县| SHOW| 苏尼特左旗| 定陶县|