freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

操作系統(tǒng)第9章(參考版)

2025-08-07 16:44本頁面
  

【正文】 用戶可以利用各種系統(tǒng)調(diào)用來使用文件系統(tǒng)所提供的各種功能。在對(duì)文件進(jìn)行操作時(shí),系統(tǒng)必須通過給定的路徑名搜索到所要操作文件所對(duì)應(yīng)的內(nèi)存 i節(jié)點(diǎn),還介紹了該搜索算法 namei。然后介紹了 UNIX System Ⅴ 的磁盤塊分配與回收算法、存放文件說明信息的 i節(jié)點(diǎn)的分配與釋放算法。 本 章 小 結(jié) ? 本章介紹了 UNIX中三個(gè)緊密聯(lián)系又相互獨(dú)立的部分,文件系統(tǒng)、中斷和陷阱總控以及設(shè)備管理。而 ttclose則關(guān)閉終端機(jī)。然后,它把字符復(fù)制到用戶地址空間,直到收到了回車符或達(dá)到了系統(tǒng)調(diào)用 read中所給定的計(jì)數(shù)值。當(dāng)一個(gè)讀進(jìn)程執(zhí)行時(shí), ttread調(diào)用行規(guī)則程序從原始輸入緩沖隊(duì)列中移出字符,并進(jìn)行加工后將其放入標(biāo)準(zhǔn)輸入緩沖隊(duì)列。當(dāng)數(shù)據(jù)被輸入時(shí),終端中斷處理程序把數(shù)據(jù)放入原始輸入緩沖隊(duì)列的同時(shí),把數(shù)據(jù)放入輸出緩沖隊(duì)列以便回波到顯示器。這是因?yàn)樾幸?guī)則程序無法知道用戶準(zhǔn)備敲入多少個(gè)字符。它把原始輸入緩沖隊(duì)列加工成標(biāo)準(zhǔn)輸入緩沖隊(duì)列之后再送到用戶區(qū)。當(dāng)輸出緩沖隊(duì)列中的字符數(shù)小于某個(gè)下限,例如 0時(shí),則喚醒有關(guān)睡眠進(jìn)程繼續(xù)寫操作。首先,行規(guī)則程序從用戶地址空間把欲輸出的數(shù)據(jù)放入輸出緩沖隊(duì)列,并對(duì)其進(jìn)行加工處理。與之相對(duì)應(yīng),字符設(shè)備開關(guān)表中所確定的過程分別為 ttwrite, ttread, ttopen, ttclose和 ttioctl。 ? 2. 標(biāo)準(zhǔn)方式下的終端驅(qū)動(dòng)程序 ? 與終端驅(qū)動(dòng)程序?qū)?yīng)的 I/O緩沖隊(duì)列有三個(gè):一個(gè)用來存放輸出數(shù)據(jù);一個(gè)用來存放原始輸入數(shù)據(jù),這是由終端中斷處理程序放入的;一個(gè)用來存放已加工的輸入數(shù)據(jù),這是經(jīng)過行加工程序處理過的輸入數(shù)據(jù)。 ? (7) 允許不做格式變換的原始方式。 ? (5) 把輸入的字符回送到顯示屏上。 ? (3) 處理刪除行的字符,從而使得在當(dāng)前行上敲入的所有字符無效。 ? 行規(guī)則程序的功能是 : ? (1) 通過分析將輸入字符串變成行。同樣,它把進(jìn)程輸出的原始數(shù)據(jù)變換成用戶所期望的格式。行規(guī)則程序有兩種工作方式,即標(biāo)準(zhǔn)方式和原始方式。為了使用戶交互式的使用 UNIX系統(tǒng),終端驅(qū)動(dòng)程序包含一個(gè)與行規(guī)則程序的內(nèi)部接口。這里以終端驅(qū)動(dòng)程序?yàn)槔齺砻枋鲎址O(shè)備驅(qū)動(dòng)過程的基本原理。圖 圖 I/O緩沖隊(duì)列中取走 n個(gè)字符前和后的例子。 getcb和 putcb分別取出 I/O緩沖隊(duì)列中的頭一個(gè)字符緩沖區(qū)和往 I/O緩沖隊(duì)列的末尾鏈入一個(gè)裝有字符的緩沖區(qū)。在釋放空緩沖區(qū)時(shí),如果有進(jìn)程因等待空緩沖而睡眠的話,則喚醒該進(jìn)程。其中,getcf用來申請(qǐng)一空緩沖區(qū) 。 ? 這些操作由 8個(gè)過程完成。 ? (5) 從 I/O緩沖隊(duì)列中每次移走一個(gè)緩沖區(qū)中的所有字符或 n(n1)個(gè)字符。 ? (3) 從 I/O緩沖隊(duì)列中提取一個(gè)字符,并調(diào)整該 I/O緩沖隊(duì)列的字符計(jì)數(shù)。這些操作共有 6種,即 : ? (1) 從空閑緩沖隊(duì)列分配一個(gè)緩沖區(qū)給驅(qū)動(dòng)程序。 ? 字符設(shè)備管理程序使用上述數(shù)據(jù)結(jié)構(gòu)進(jìn)行字符設(shè)備的管理。 clist包括 I/O緩沖隊(duì)列中可用字符數(shù),隊(duì)首字符緩沖區(qū)指針,隊(duì)尾字符緩沖區(qū)指針三項(xiàng)。 圖 字符緩沖區(qū)結(jié)構(gòu) ? 分配給各種設(shè)備使用的字符緩沖區(qū)構(gòu)成不同的 I/O緩沖隊(duì)列。與塊設(shè)備的緩沖區(qū)管理時(shí)不同,系統(tǒng)分配和釋放空閑緩沖區(qū)都在隊(duì)首進(jìn)行。字符緩沖區(qū)由鏈指針,該緩沖區(qū)中第一個(gè)字符的位置,該緩沖區(qū)中最后一個(gè)字符的位置以及字符區(qū)組成,如圖 。 ? 與塊設(shè)備相似,系統(tǒng)為字符設(shè)備的 I/O傳輸設(shè)置了字符緩沖池。 數(shù)據(jù)結(jié)構(gòu) ? 字符設(shè)備管理用到的數(shù)據(jù)結(jié)構(gòu)主要有緩沖區(qū)結(jié)構(gòu)、緩沖隊(duì)列的控制結(jié)構(gòu)、字符設(shè)備開關(guān)表等。與塊設(shè)備一樣, i節(jié)點(diǎn)中的文件類型指明該 i節(jié)點(diǎn)所說明的是一個(gè)字符文件,用戶可以用與塊設(shè)備相同的方式打開,關(guān)閉和讀寫特別字符文件。 字符設(shè)備驅(qū)動(dòng) ? 字符設(shè)備是指在 I/O傳輸過程中以字符為單位進(jìn)行傳輸?shù)脑O(shè)備,例如鍵盤、打印機(jī)等。在傳輸完成時(shí)還要接受中斷信號(hào)并完成相應(yīng)的中斷處理。當(dāng)某個(gè)外設(shè),例如 tty07發(fā)出中斷之后,系統(tǒng)將利用中斷機(jī)構(gòu)傳遞來的參數(shù)確定發(fā)出中斷的次設(shè)備號(hào)并調(diào)用 ttyintro過程處理中斷。一般來說,中斷向量所對(duì)應(yīng)的中斷處理程序都是針對(duì)一類設(shè)備的,系統(tǒng)在調(diào)用設(shè)備中斷處理程序時(shí)必須將設(shè)備號(hào)和其他有關(guān)參數(shù)傳遞給它,以便識(shí)別引起中斷的特定設(shè)備單元。在數(shù)據(jù)緩沖寄存器的數(shù)據(jù)發(fā)送完畢之后,狀態(tài)控制器將會(huì)通過總線發(fā)出傳輸完成中斷信號(hào),從而引起系統(tǒng)執(zhí)行一個(gè)中斷處理程序。 ? 設(shè)備與驅(qū)動(dòng)程序的通信方法依賴于硬件。 strategy過程打開相應(yīng)的磁盤啟動(dòng)程序并調(diào)用過程 _start啟動(dòng)磁盤控制器和利用過程 _addr將磁盤物理塊號(hào)轉(zhuǎn)換為物理地址。 ? 關(guān)閉一個(gè)設(shè)備文件相當(dāng)于釋放一個(gè)進(jìn)程所占有的設(shè)備。 ? 系統(tǒng)調(diào)用 close斷開用戶進(jìn)程與一個(gè)設(shè)備的連接。 ? 打開一個(gè)設(shè)備相當(dāng)于為一個(gè)進(jìn)程分配一個(gè)設(shè)備。該驅(qū)動(dòng)程序使調(diào)用進(jìn)程和被打開設(shè)備之間建立聯(lián)系,并初始化其他驅(qū)動(dòng)程序用的數(shù)據(jù)結(jié)構(gòu)。從 i節(jié)點(diǎn)信息中,可以檢查文件類型,從 i節(jié)點(diǎn)中抽出主設(shè)備號(hào)和次設(shè)備號(hào)并使用主設(shè)備號(hào)作為索引表項(xiàng)進(jìn)入開關(guān)表和調(diào)用到適當(dāng)?shù)尿?qū)動(dòng)程序。 圖 驅(qū)動(dòng)程序及其接口 ? 塊設(shè)備開關(guān)表和字符設(shè)備開關(guān)表如圖 。當(dāng)一個(gè)設(shè)備控制器發(fā)出中斷請(qǐng)求時(shí),系統(tǒng)識(shí)別發(fā)出中斷請(qǐng)求的設(shè)備,并調(diào)用適當(dāng)?shù)闹袛嗵幚沓绦?。每一種設(shè)備類型在表中有若干表項(xiàng),這些表項(xiàng)在文件系統(tǒng)的有關(guān)系統(tǒng)調(diào)用被調(diào)用時(shí)引導(dǎo)系統(tǒng)轉(zhuǎn)向適當(dāng)?shù)尿?qū)動(dòng)程序入口。驅(qū)動(dòng)程序有兩個(gè)接口,和文件系統(tǒng)的接口以及與硬件的接口。在 UNIX系統(tǒng)中,主設(shè)備號(hào)指示一種設(shè)備類型,而次設(shè)備號(hào)則表示該類設(shè)備的一個(gè)單元。 mknod命令要求管理員提供文件名,文件類型 (塊設(shè)備或字符設(shè)備 )和主設(shè)備號(hào),次設(shè)備號(hào)。第三種辦法是自定義設(shè)備允許系統(tǒng)知道哪些設(shè)備被安裝上了,從而填寫自身的配置表。這個(gè)文件在生成核心代碼時(shí)被編譯和聯(lián)接。第一種辦法是由管理員把配置數(shù)據(jù)寫入文件。一個(gè)新設(shè)備和系統(tǒng)的聯(lián)接只能依靠系統(tǒng)管理員在系統(tǒng)允許的范圍內(nèi)進(jìn)行系統(tǒng)配置和使用相應(yīng)的命令,例如 mknod來建立特殊文件。而且,每一個(gè)設(shè)備都有自己唯一的設(shè)備名,并能像文件那樣對(duì)其進(jìn)行存取操作。下面,分別介紹驅(qū)動(dòng)程序與系統(tǒng)管理員的接口,與文件系統(tǒng)的接口以及驅(qū)動(dòng)程序的動(dòng)作原理等。由于省去了緩沖區(qū)介入,從而具有高的數(shù)據(jù)傳輸速率。 ? 本節(jié)將介紹設(shè)備驅(qū)動(dòng)程序和調(diào)用它們的方法。在交換系統(tǒng)中, UNIX系統(tǒng)設(shè)置有專用的數(shù)據(jù)結(jié)構(gòu)和管理程序,它們?cè)诠δ苌鲜桥c用作文件系統(tǒng)或字符設(shè)備相獨(dú)立。本節(jié)主要介紹 UNIX系統(tǒng)的塊設(shè)備驅(qū)動(dòng)原理。 I/O子系統(tǒng)控制完成進(jìn)程與外設(shè)之間的通信任務(wù)。 塊設(shè)備驅(qū)動(dòng) ? UNIX系統(tǒng)中的設(shè)備可塊設(shè)備和字符設(shè)備。但反過來,由于延遲寫沒有立即把數(shù)據(jù)寫入磁盤,當(dāng)系統(tǒng)發(fā)生癱瘓等時(shí)將產(chǎn)生磁盤數(shù)據(jù)錯(cuò)誤。標(biāo)志了延遲寫的緩沖區(qū)要等到 bwrite時(shí)啟動(dòng)傳輸設(shè)備而寫到磁盤上。 bawrite的輸入是緩沖區(qū)指針。算法 bwrite可描述如下 : bwrite : 輸入 : 緩沖區(qū)指針 begin 啟動(dòng)磁盤寫 if 緩沖區(qū)標(biāo)志寫是同步進(jìn)行 then 等待傳輸完成后釋放緩沖區(qū) fi if 緩沖區(qū)標(biāo)志延遲寫 then 將該緩沖區(qū)放入空閑 av隊(duì)列 fi end ? bawrite的功能是異步寫一塊。如果寫是同步的,則調(diào)用者進(jìn)程因等待寫操作完成而進(jìn)入睡眠,且當(dāng)寫操作完成后再釋放緩沖區(qū)。 ? 把一個(gè)緩沖區(qū)的內(nèi)容寫到磁盤塊上去的方法與讀時(shí)類似。然后返回立即讀的邏輯塊所對(duì)應(yīng)的緩沖區(qū)的指針。 breada的輸出則是裝有立即讀邏輯塊號(hào)所對(duì)應(yīng)數(shù)據(jù)塊的緩沖區(qū)指針。否則,經(jīng)設(shè)備驅(qū)動(dòng)程序啟動(dòng)磁盤讀,且調(diào)用 bread的進(jìn)程因等待讀盤完成而進(jìn)入睡眠狀態(tài),待到讀盤完成后返回緩沖區(qū)指針。首先, bread調(diào)用算法 getblk得到對(duì)應(yīng)的緩沖區(qū)。一種被稱為一般讀 (bread),另一種稱為預(yù)先讀 (breada)。由于緩沖區(qū)和內(nèi)存用戶區(qū)同在內(nèi)存,因此,緩沖區(qū)和內(nèi)存用戶區(qū)之間的數(shù)據(jù)流動(dòng)不會(huì)出現(xiàn)速度不匹配問題。這些算法之間的關(guān)系如圖 。第一是從磁盤塊到緩沖區(qū)的讀寫,第二是從緩沖區(qū)到內(nèi)存用戶區(qū)的數(shù)據(jù)流動(dòng)。當(dāng)系統(tǒng)釋放一個(gè)緩沖區(qū)之后,它喚醒那些因?yàn)榭臻e av隊(duì)列空而睡眠的進(jìn)程。 geteblk算法用來把空閑 av隊(duì)列中的緩沖區(qū)鏈入設(shè)備 b鏈隊(duì)列。首先檢查空閑 av隊(duì)列是否為空,若為空時(shí)睡眠等待。 ? (5) 系統(tǒng)在散列隊(duì)列中找到了對(duì)應(yīng)的數(shù)據(jù)塊的緩沖區(qū),但此時(shí)該緩沖區(qū)已被鎖定,系統(tǒng)仍進(jìn)入睡眠狀態(tài)等待該緩沖區(qū)變?yōu)榭臻e。即 : ? (1) 該數(shù)據(jù)塊在設(shè)備 b鏈的散列隊(duì)列中,且緩沖區(qū)是空閑的; ? (2) 設(shè)備 b鏈的散列隊(duì)列中不存在對(duì)應(yīng)的緩沖區(qū),因此,從空閑 av鏈?zhǔn)兹∫粋€(gè)緩沖區(qū)分配給該磁盤塊; ? (3) 在處理上述 (2)時(shí), 如果空閑 av鏈的鏈?zhǔn)拙彌_區(qū)是一個(gè)標(biāo)上了“延遲寫” (后述 )標(biāo)記的緩沖區(qū),則系統(tǒng)必須將該緩沖區(qū)的內(nèi)容寫到磁盤上,并分配下一個(gè)緩沖區(qū)后返回。 getblk被用來分配緩沖區(qū)。 ? 當(dāng)文件系統(tǒng)試圖檢索某一個(gè)數(shù)據(jù)塊時(shí),它首先判定所要存取的邏輯設(shè)備號(hào)和邏輯塊號(hào),然后,檢查該數(shù)據(jù)塊是否在緩沖池中。 ? 設(shè)備 I/O請(qǐng)求隊(duì)列為單向隊(duì)列。每個(gè)物理塊設(shè)備都有一個(gè) I/O請(qǐng)求隊(duì)列,設(shè)備 I/O請(qǐng)求隊(duì)列中的緩沖區(qū)屬于設(shè)備 b鏈,但不屬于空閑 av隊(duì)列。這樣,系統(tǒng)就可從設(shè)備 b鏈中搜索到所有使用過的,但未被改寫的特定緩沖區(qū)。如果該塊不在 b鏈中,則從空閑 av鏈中按最近最少使用算法,摘下一空閑緩沖區(qū),改寫緩沖控制塊中的塊號(hào)之后掛入對(duì)應(yīng)的散列隊(duì)列,如果該塊已在 b鏈中,則系統(tǒng)不必啟動(dòng)磁盤。而且,每個(gè)散列隊(duì)列頭標(biāo)對(duì)應(yīng)著一個(gè)塊號(hào)以 64取模后的余數(shù)所組成的緩沖區(qū)隊(duì)列,這些緩沖區(qū)既可能是空閑的,也可能正在被使用。設(shè)備 b鏈的結(jié)構(gòu)如圖 。每類設(shè)備都有自己的設(shè)備 b鏈,每類設(shè)備的設(shè)備 b鏈按散列算法組成 64個(gè)隊(duì)列,每個(gè)隊(duì)列頭部都有自己的頭標(biāo)。 圖 空閑緩沖隊(duì)列結(jié)構(gòu) ? 設(shè)備緩沖區(qū)隊(duì)列又稱設(shè)備 b鏈。當(dāng)文件系統(tǒng)申請(qǐng)一個(gè)緩沖區(qū)時(shí),從空閑 av隊(duì)列首部取下一個(gè)緩沖區(qū),而一個(gè)緩沖區(qū)被釋放時(shí)則掛入空閑 av隊(duì)列末尾。 ? 空閑緩沖隊(duì)列又稱空閑 av隊(duì)列,它是系統(tǒng)所擁有的所有空閑緩沖區(qū)資源。另外,一個(gè)磁盤塊在同一時(shí)間內(nèi)也不能映射到多個(gè)緩沖區(qū)上;否則,系統(tǒng)將會(huì)不知道哪一個(gè)緩沖區(qū)中包含著當(dāng)前數(shù)據(jù)而產(chǎn)生讀寫錯(cuò)誤。以及一個(gè)進(jìn)程是否正在等待該緩沖區(qū)變?yōu)殚_鎖等。系統(tǒng)在把該緩沖區(qū)分配出去之前是否必須把緩沖區(qū)中內(nèi)容寫到磁盤上 (延遲寫 )。緩沖區(qū)當(dāng)前為“上鎖”或“開鎖”狀態(tài) 。再者,緩沖控制塊中的狀態(tài)部分指明該緩沖區(qū)當(dāng)前所處的狀態(tài)。另外,緩沖控制塊除了包含有指向緩沖數(shù)據(jù)區(qū)的指針之外,還包含有兩組用來構(gòu)成不同緩沖隊(duì)列結(jié)構(gòu)的指針。緩沖控制塊的構(gòu)成如圖 。二是緩沖區(qū)的隊(duì)列構(gòu)造,利用這些構(gòu)造,可以方便地對(duì)緩沖區(qū)進(jìn)行操作。對(duì)緩沖區(qū)的分配,搜索和存取都是通過緩沖控制塊實(shí)行。用于存放數(shù)據(jù)的區(qū)域被稱為緩沖數(shù)據(jù)區(qū)。每個(gè)緩沖區(qū)的長(zhǎng)度可以是 512字節(jié)或 1024字節(jié)。本節(jié)主要介紹塊設(shè)備緩沖區(qū)的實(shí)現(xiàn)原理。為了調(diào)節(jié)文件系統(tǒng)的讀寫和系統(tǒng)處理之間的速度不匹配的問題,以及為了減少啟動(dòng)磁盤設(shè)備的次數(shù), UNIX系統(tǒng)設(shè)置了一個(gè)稱為數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)結(jié)構(gòu)。 緩沖區(qū)管理 ? 由于文件系統(tǒng)的物質(zhì)基礎(chǔ)是磁盤或磁帶,因此,對(duì)文件系統(tǒng)的一切存取操作,實(shí)質(zhì)上都是通過對(duì)塊設(shè)備的讀和寫來實(shí)現(xiàn)的。 ? (7) 返回。 ? (5) 若需重新調(diào)度,則執(zhí)行調(diào)度程序,選擇優(yōu)先級(jí)高的進(jìn)程執(zhí)行。 ? 與系統(tǒng)調(diào)用號(hào) i相對(duì)應(yīng),系統(tǒng)內(nèi)有一張稱為系統(tǒng)調(diào)用表的數(shù)據(jù)結(jié)構(gòu)表 system,該數(shù)據(jù)結(jié)構(gòu)除了指出系統(tǒng)調(diào)用所需要的參數(shù)變量個(gè)數(shù)以及經(jīng)寄存器傳送的參數(shù)變量個(gè)數(shù)之外,還包含了該系統(tǒng)調(diào)用所對(duì)應(yīng)的處理程序入口地址。當(dāng)陷阱發(fā)生時(shí),系統(tǒng)將裝有這些參數(shù)變量表地址的通用寄存器壓入用戶核心棧,并將有關(guān)寄存器地址賦給 user結(jié)構(gòu)中的 ,從而將參數(shù)變量表中內(nèi)容傳送到 user結(jié)構(gòu)的 ,使得系統(tǒng)調(diào)用處理程序可以使用它們。 ? (2) 傳遞參數(shù)到 user結(jié)構(gòu)中。 ? 系統(tǒng)調(diào)用序號(hào) i由下式確定 : i = code amp。 ? 圖 。在 System Ⅴ 早期版本中,由于未采用請(qǐng)求調(diào)頁技術(shù),即進(jìn)程在執(zhí)行前將所需頁面全部調(diào)入內(nèi)存,從而產(chǎn)生轉(zhuǎn)換無效的原因只能是用戶棧滿引起的。圖 SEGFLT的處理是針對(duì) System Ⅴ 早期版本的。 ? 在圖 ,除了 SYSCALL和 SEGFLT(地址轉(zhuǎn)換無效 )和 RESCHED(進(jìn)程調(diào)度 )三種陷阱之外,其他 9種陷阱都已轉(zhuǎn)換成軟中斷方式處理。其調(diào)用形式為 : trap(sp, type, code, pc, ps) ? 其中, sp為發(fā)生陷阱的進(jìn)程用戶棧指針, type指明陷阱類型, code是確定系統(tǒng)調(diào)用序號(hào)的代碼操作數(shù),pc為程序計(jì)數(shù)器的內(nèi)容, ps為處理機(jī)狀態(tài)長(zhǎng)字。 ? 用戶態(tài)下的陷阱處理可進(jìn)一步分為三種情況,即系統(tǒng)調(diào)用、地址轉(zhuǎn)換無效和用戶自定義處理 (軟中斷處理 )方式。 ? 由于 UNIX系統(tǒng)規(guī)定,核心程序不使用系統(tǒng)調(diào)用,以及 UNIX System Ⅴ 的核心程序不搞請(qǐng)求調(diào)頁,即所有的核心代碼全部在內(nèi)存,從而上述各
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1