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

正文內(nèi)容

操作系統(tǒng)教程第4章-資料下載頁(yè)

2024-10-04 23:59本頁(yè)面
  

【正文】 建,并且也不是誰(shuí)都有權(quán)來(lái)創(chuàng)建。如果要?jiǎng)?chuàng)建一個(gè)新的特殊文件,則應(yīng)該由系統(tǒng)管理員通過(guò)系統(tǒng)調(diào)用 mknod來(lái)完成。它的使用格式是: mknod( pathname, mode, dev); 其中,參數(shù) pathname是文件的路徑名, mode指出文件的類(lèi)型( B表示塊設(shè)備, C表示字符設(shè)備), dev是主設(shè)備號(hào)和次設(shè)備號(hào)的組合。比如有如下命令: mknod( /dev/tty12, C, 2 12); 表示要在根目錄的子目錄 dev下,創(chuàng)建一個(gè)名為tty12的文件(由于它建立在子目錄 dev下,因此它是一個(gè)特殊文件),由于 mode=“C”,因此是一個(gè)字符設(shè)備文件,該設(shè)備的主設(shè)備號(hào)是 2,次設(shè)備號(hào)是 12。 UNIX對(duì)塊設(shè)備的管理 UNIX在塊設(shè)備和內(nèi)存之間安放了緩沖區(qū) , 通過(guò)它使塊設(shè)備與內(nèi)存間的數(shù)據(jù)流動(dòng)在速度上能夠匹配 , 從而達(dá)到減少內(nèi) 、 外存?zhèn)鬏敶螖?shù)的目的 。 如圖 721 所示 。 對(duì)于寫(xiě)操作 , 先是把內(nèi)存用戶(hù)區(qū)中的數(shù)據(jù)拷貝到緩沖區(qū) , 再?gòu)木彌_區(qū)輸出到設(shè)備;對(duì)于讀操作 , 先從設(shè)備接收數(shù)據(jù)到緩沖區(qū) , 再將緩沖區(qū)中的數(shù)據(jù)拷貝到指定的內(nèi)存用戶(hù)區(qū) 。 塊設(shè)備的每一個(gè)緩沖區(qū)長(zhǎng)度為 512個(gè)字節(jié)或 1024個(gè)字節(jié) , 這要由文件系統(tǒng)來(lái)確定 。 由一個(gè)個(gè)緩沖區(qū) , 組成了供塊設(shè)備輸入 /輸出使用的緩沖池 。 為了便于管理 ,UNIX把緩沖池中的每個(gè)緩沖區(qū)分成兩個(gè)部分:一個(gè)是真正用于存放數(shù)據(jù)的部分 , 一個(gè)是用于管理的部分 。前者仍稱(chēng)為 “ 緩沖區(qū) ” , 后者稱(chēng)為 “ 緩沖區(qū)控制塊 ” ,并在緩沖區(qū)和緩沖區(qū)控制塊之間保持一一對(duì)應(yīng)的關(guān)系 。圖 722給出了緩沖區(qū)控制塊的內(nèi)容和它與緩沖區(qū)的對(duì)應(yīng)關(guān)系 。 1. 空閑緩沖區(qū)隊(duì)列 為了構(gòu)成系統(tǒng)中空閑緩沖區(qū)隊(duì)列 , UNIX設(shè)置了一個(gè)名為 bfreelist的控制塊 , 它的結(jié)構(gòu)與緩沖區(qū)控制塊相同 , 里面的 av_forw和 av_back就是塊設(shè)備空閑緩沖區(qū)隊(duì)列的首指針和尾指針 , 如圖 723所示 。 對(duì)于空閑緩沖區(qū)隊(duì)列 , 有兩點(diǎn)要說(shuō)明:第一 , 這個(gè)由緩沖區(qū)控制塊構(gòu)成的隊(duì)列是一個(gè)雙向鏈表 , 它們通過(guò)各自的前向指針 av_forw和后向指針 av_back鏈接在一起 , 形成隊(duì)列 。 第二 , UNIX對(duì)這個(gè)隊(duì)列采用先進(jìn)先出 ( FIFO) 的管理算法 。 即當(dāng)釋放一個(gè)緩沖區(qū)時(shí) ,與之對(duì)應(yīng)的緩沖區(qū)控制塊就被鏈入到空閑緩沖區(qū)隊(duì)列之尾;當(dāng)申請(qǐng)一個(gè)緩沖區(qū)時(shí) , 就把空閑緩沖區(qū)隊(duì)列之首的那個(gè)緩沖區(qū)控制塊摘下分配出去 , 這也就意味著是把這個(gè)緩沖區(qū)控制塊所對(duì)應(yīng)的緩沖區(qū)分配出去 。 2.輸入 /輸出請(qǐng)求隊(duì)列 當(dāng)用戶(hù)對(duì)塊設(shè)備提出輸入 /輸出請(qǐng)求時(shí),首先要申請(qǐng)一個(gè)空閑的緩沖區(qū)控制塊(注意:申請(qǐng)到空閑的緩沖區(qū)控制塊,就意味著申請(qǐng)到了存放數(shù)據(jù)的緩沖區(qū),因?yàn)樗鼈兪且灰粚?duì)應(yīng)的),并把這次輸入 /輸出請(qǐng)求具體要完成的任務(wù)填入到緩沖區(qū)控制塊中(數(shù)據(jù)源的地址、目的地址、傳輸?shù)膫€(gè)數(shù)等等)。因此, UNIX把向主設(shè)備號(hào)相同的設(shè)備提出的 I/O請(qǐng)求所對(duì)應(yīng)的緩沖區(qū)控制塊鏈接在一起,形成對(duì)這個(gè)設(shè)備的輸入 /輸出請(qǐng)求隊(duì)列。該隊(duì)列的首指針就是這個(gè)設(shè)備的設(shè)備表里的d_actf,尾指針是 d_actl。如圖 724所示。 對(duì)于塊設(shè)備的輸入 /輸出請(qǐng)求隊(duì)列有三點(diǎn)說(shuō)明:第一,它是一個(gè)單鏈表,不像圖 723所示的空閑緩沖區(qū)隊(duì)列,那里給出的是一個(gè)雙向鏈表。第二,由于一個(gè)緩沖區(qū)控制塊不可能同時(shí)在空閑緩沖區(qū)隊(duì)列和輸入 /輸出請(qǐng)求隊(duì)列,因此,在輸入 /輸出請(qǐng)求隊(duì)列中,就借用緩沖區(qū)控制塊中的 av_forw指針來(lái)構(gòu)成單鏈表(這個(gè)指針在空閑緩沖區(qū)隊(duì)列里是前向指針)。第三, UNIX對(duì)這個(gè)隊(duì)列采用先進(jìn)先出( FIFO)的管理算法。即后到的輸入 /輸出請(qǐng)求所對(duì)應(yīng)的緩沖區(qū)控制塊被排在隊(duì)尾,設(shè)備總是為排在隊(duì)首的那個(gè)緩沖區(qū)控制塊中所記錄的請(qǐng)求服務(wù)。服務(wù)完一個(gè)后,就把它從隊(duì)首摘下,然后再為下一個(gè)請(qǐng)求服務(wù)。 3.設(shè)備緩沖區(qū)隊(duì)列 這是由緩沖區(qū)控制塊組成的第三種隊(duì)列,是 UNIX對(duì)緩沖區(qū)管理的一大特色。下面來(lái)說(shuō)明這是一個(gè)什么隊(duì)列,為什么要組成它。 緩沖池中的緩沖區(qū)資源是有限的,為了能夠?qū)λ鼈兂浞值丶右岳茫约皩?duì)它們里面存放的數(shù)據(jù)信息最大限度地加以利用, UNIX提出了這樣的設(shè)想:一個(gè)已經(jīng)在空閑緩沖區(qū)隊(duì)列中的緩沖區(qū)控制塊,在它未被挪為它用之前,它對(duì)應(yīng)的緩沖區(qū)中保存的仍然是磁盤(pán)上某塊中的數(shù)據(jù)信息。如果這時(shí)根據(jù)需要又要對(duì)該磁盤(pán)塊進(jìn)行操作,那么大可不必去通過(guò)啟動(dòng) I/O獲得盤(pán)塊上的數(shù)據(jù),這些數(shù)據(jù)還在原來(lái)的緩沖區(qū)中完好無(wú)損地保存著,只要拿來(lái)就可以使用。這樣做的結(jié)果是減少了 I/O次數(shù),大大提高了系統(tǒng)的工作效率。 出自于這些考慮, UNIX一方面仍然是讓被釋放緩沖區(qū)所對(duì)應(yīng)的緩沖區(qū)控制塊鏈入到空閑緩沖區(qū)隊(duì)列之尾,以便能夠它用。另一方面又設(shè)置了一個(gè)新的隊(duì)列:設(shè)備緩沖區(qū)隊(duì)列,即把為某個(gè)設(shè)備服務(wù)的緩沖區(qū)所對(duì)應(yīng)的緩沖區(qū)控制塊全都匯集在一起,形成了這個(gè)設(shè)備的設(shè)備緩沖區(qū)隊(duì)列。 一個(gè)設(shè)備的設(shè)備緩沖區(qū)隊(duì)列由緩沖區(qū)控制塊中的d_forw和 d_back指針進(jìn)行鏈接,前者為前向指針,后者為后向指針。該隊(duì)列的首、尾指針是設(shè)備表中的d_forw和 d_back。整個(gè)隊(duì)列如圖 725所示。 對(duì)于設(shè)備緩沖區(qū)隊(duì)列 , 有如下四點(diǎn)要說(shuō)明 。 ( 1) 這個(gè)由緩沖區(qū)控制塊構(gòu)成的隊(duì)列是一個(gè)雙向鏈表 , 它們通過(guò)各自的前向指針 b_forw和后向指針b_back鏈接在一起 , 形成隊(duì)列 。 ( 2) 當(dāng)一個(gè)緩沖區(qū)被分配給某個(gè)塊設(shè)備做輸入 /輸出用時(shí) , 它所對(duì)應(yīng)的緩沖區(qū)控制塊就從隊(duì)首插入到隊(duì)列里 。 ( 3)當(dāng)一個(gè)緩沖區(qū)控制塊插入到一個(gè)設(shè)備的設(shè)備緩沖區(qū)隊(duì)列中之后,即便該緩沖區(qū)被釋放,它也仍然在這個(gè)隊(duì)列中排著。這就是說(shuō),在任何時(shí)刻, UNIX中的任何一個(gè)緩沖區(qū)控制塊,總會(huì)在空閑緩沖區(qū)隊(duì)列、設(shè)備緩沖區(qū)隊(duì)列以及設(shè)備輸入 /輸出隊(duì)列這三個(gè)隊(duì)列中的兩個(gè)里排隊(duì),或是在空閑緩沖區(qū)隊(duì)列、設(shè)備緩沖區(qū)隊(duì)列里面排著,或是在設(shè)備緩沖區(qū)隊(duì)列、設(shè)備輸入 /輸出隊(duì)列里面排著。 ( 4)只有當(dāng)一個(gè)緩沖區(qū)的服務(wù)對(duì)象改變(比如原來(lái)被分配給磁盤(pán) 1使用,現(xiàn)在被分配給磁盤(pán) 2使用了)時(shí),該緩沖區(qū)所對(duì)應(yīng)的緩沖區(qū)控制塊才會(huì)從一個(gè)設(shè)備緩沖區(qū)隊(duì)列上摘下,進(jìn)入到另一個(gè)設(shè)備緩沖區(qū)隊(duì)列中;否則即便緩沖區(qū)被釋放,它仍然保持在原來(lái)的設(shè)備緩沖區(qū)隊(duì)列中。 UNIX對(duì)字符設(shè)備的管理 字符設(shè)備的特點(diǎn)是:工作速度慢;每次傳輸?shù)臄?shù)量雖然不定 , 但總的來(lái)說(shuō)較少;各種設(shè)備之間的物理差異很大 。 UNIX為它們的輸入 /輸出采用了較為容易管理的字符緩沖技術(shù) 。 字符設(shè)備輸入 /輸出所使用的緩沖池 , 由一個(gè)個(gè)緩沖區(qū)組成 , 每個(gè)緩沖區(qū)既含數(shù)據(jù)存放部分又含管理控制部分 , 這與塊設(shè)備緩沖區(qū)兩者分開(kāi)的管理辦法不同 。圖 726給出了字符緩沖區(qū)的結(jié)構(gòu)示意 。 下面對(duì)字符緩沖區(qū)中的各項(xiàng)內(nèi)容做一些必要的說(shuō)明: ? c_next(緩沖區(qū)指針) ——這是一個(gè)指向下一個(gè)字符緩沖區(qū)的指針,由它可以形成字符緩沖區(qū)的各種隊(duì)列。 ? c_first(本緩沖區(qū)首字符位置) ——它總是指明當(dāng)前本緩沖區(qū)中存放的第 1個(gè)可用字符所在的位置。 ? c_last(本緩沖區(qū)尾字符位置) ——它總是指明當(dāng)前本緩沖區(qū)中存放的最后一個(gè)可用字符所在的位置。 在這三個(gè)信息的后面 , 緊跟著一個(gè) 64字節(jié)大小的緩沖數(shù)據(jù)區(qū) 。 對(duì)于字符緩沖區(qū) , 只有空閑緩沖區(qū)隊(duì)列和設(shè)備的輸入 /輸出隊(duì)列 。 它們分別如圖 727(a)、 圖 727(b)所示 。 1.空閑緩沖區(qū)隊(duì)列 為了形成空閑緩沖區(qū)隊(duì)列, UNIX設(shè)置了一個(gè)隊(duì)列首指針 cfreelist,它總是指向該隊(duì)列的第 1個(gè)空閑緩沖區(qū),在隊(duì)列中的所有緩沖區(qū),通過(guò)自己的 c_next指向下一個(gè)緩沖區(qū),成為一個(gè)單鏈表。最后一個(gè)緩沖區(qū)的c_next=NULL,表示隊(duì)列末尾。 UNIX把空閑緩沖區(qū)隊(duì)列視為一個(gè)棧來(lái)管理,進(jìn)隊(duì)列和出隊(duì)列都是在隊(duì)首進(jìn)行。也就是說(shuō),申請(qǐng)一個(gè)字符緩沖區(qū)時(shí),就把該隊(duì)列中的第 1個(gè)緩沖區(qū)摘下分配出去;釋放一個(gè)緩沖區(qū)時(shí),就把它插入到隊(duì)首。 2.輸入 /輸出請(qǐng)求隊(duì)列 每一個(gè)字符設(shè)備都有自己的設(shè)備表,該表中有兩個(gè)指針: c_cf和 c_cl,前者總是指向該設(shè)備輸入 /輸出請(qǐng)求隊(duì)列之首的那個(gè)緩沖區(qū),后者總是指向該設(shè)備輸入 /輸出請(qǐng)求隊(duì)列之尾的那個(gè)緩沖區(qū)。 對(duì)于一個(gè)字符緩沖區(qū), c_first是從緩沖區(qū)取字符的指針, c_last是往緩沖區(qū)中存字符的指針。比如圖 728(a)表示某個(gè)字符設(shè)備的輸入 /輸出請(qǐng)求隊(duì)列初態(tài)。可以看出,此時(shí)隊(duì)列中只有一個(gè)緩沖區(qū),該緩沖區(qū)中現(xiàn)在還有 5個(gè)字符, c_first指向當(dāng)前的第 1個(gè)字符“ a”,c_last指向當(dāng)前的最后一個(gè)字符“ e”。如果現(xiàn)在要從緩沖區(qū)中取一個(gè)字符,于是根據(jù) c_first的指點(diǎn),把字符“ a”取出,調(diào)整指針 c_first指向字符“ b”,如圖 728(b)所示。如果這時(shí)需要輸入一個(gè)字符“ f”,因?yàn)楝F(xiàn)在c_last已經(jīng)指向緩沖區(qū)的最后了,故應(yīng)該申請(qǐng)一個(gè)新的緩沖區(qū),按照指針 c_first的指點(diǎn)把字符“ f”存入,并鏈入輸入 /輸出隊(duì)列之尾。這樣就從圖 728(b)變成了圖 728(c)。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1