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

正文內(nèi)容

unixlinux操作系統(tǒng)內(nèi)核結(jié)構(gòu)(編輯修改稿)

2025-06-15 19:42 本頁面
 

【文章內(nèi)容簡介】 因為一個進(jìn)程在一個時間片內(nèi)可能讀寫不完所需內(nèi)容,需要在下一個時間片繼續(xù)從上一個時間片結(jié)束時的讀寫位置開始讀寫,故在進(jìn)程生存期間應(yīng)保持一讀寫指針。 此外 file表中還存放被打開文件的 動態(tài)信息 :如文件狀態(tài)、引用計數(shù)( 當(dāng)前使用該文件的進(jìn)程數(shù) )等。 A進(jìn)程 B進(jìn)程 file表 活動 inode表 用戶打開文件表 系統(tǒng)打開文件表 活動 i節(jié)點表 為什么要單獨設(shè)立一個 file表來存放讀寫指針呢? 由于可能有多個進(jìn)程要共享一個被打開文件的inode,而每個進(jìn)程的 讀寫指針都不相同 ,故不能放在 inode表中。 另一方面,要使不同進(jìn)程的打開文件指針(文件描述符)或同一進(jìn)程的不同打開文件指針能夠 共享一個打開文件指針 (協(xié)同操作),就不能把讀寫指針放進(jìn)某一個進(jìn)程的用戶打開文件表中。 因此只能在用戶打開文件表和活動 inode表之外再建立一個系統(tǒng)打開文件表( file表)來存放讀寫指針。 UNIX操作系統(tǒng)中共享活動文件的方法 : 在內(nèi)存中 某個活動文件的副本只有一個 ,不同的進(jìn)程采用不同的指針指向這文件的副本。 由于任一時刻只有一個進(jìn)程在運行(微觀上看),故該文件也只要求內(nèi)存中有一個副本即可 ,只是各個進(jìn)程有自己的讀寫指針而已。這是在 UNIX系統(tǒng)中共享文件(包括用戶文件和系統(tǒng)文件)的主要方法。對其它資源的共享采用的是與之相似的另外幾種方法。 進(jìn)程 相關(guān)概念: 映像 —— 程序以及與 動態(tài)執(zhí)行 該程序有關(guān)的 各種信息的集合(類似于歷史檔案 )。它包括存儲器映象、通用寄存器映像,地址映射空間、打開文件狀態(tài)等。 進(jìn)程 —— 對映像的執(zhí)行 。對映像的執(zhí)行也就是一個程序在虛擬機(jī)上動態(tài)執(zhí)行的過程。 1. 可執(zhí)行文件的構(gòu)成: 進(jìn)程是可執(zhí)行文件的一次執(zhí)行實例,高級語言程序經(jīng)過編譯或匯編語言程序經(jīng)過匯編后所產(chǎn)生的、缺省名為 部分 : 文件頭 正文段 數(shù)據(jù)標(biāo)識段 其它信息段 文件頭 —— 文件的幻數(shù)( magic number) 編譯器的版本號 機(jī)器類型 正文段、數(shù)據(jù)標(biāo)識段、其它信息段的大小 程序入口點 正文段 —— 程序的功能代碼 數(shù)據(jù)標(biāo)識段 —— 標(biāo)識未初始化的數(shù)據(jù)要占用的空間大小 其它信息段 —— 主要用于存放符號表 2. 程序的執(zhí)行 一個進(jìn)程在執(zhí)行系統(tǒng)調(diào)用 exec時,把可執(zhí)行文件裝入本進(jìn)程的三個區(qū)域中: 正文區(qū) :對應(yīng)可執(zhí)行文件的正文段 數(shù)據(jù)區(qū) :對應(yīng)可執(zhí)行文件的數(shù)據(jù)標(biāo)識段 堆棧區(qū) :新建立的進(jìn)程工作區(qū) 堆棧主要用于 傳遞參數(shù),保護(hù)現(xiàn)場,存放返回地址以及為局部動態(tài)變量 提供存儲區(qū)。 進(jìn)程在核心態(tài)下運行時的工作區(qū)為核心棧,在用戶態(tài)下運行時的工作區(qū)為用戶棧。核心棧和用戶棧不能交叉使用。 堆棧使用舉例。有如下程序,在主程序中調(diào)用函數(shù),并進(jìn)行參數(shù)傳遞: main (int argc, char *argv[ ]) { char buf[1024]。 int number。 … readfile (buf, number)。 … } readfile (char buffer[ ], int line) { char *pointer。 int temp。 … } 空 棧 棧頂指針 棧底指針 低地址 高地址 用戶棧 進(jìn)入主程序時的堆棧狀況 棧頂指針 棧底指針 低地址 高地址 調(diào)用 main()時 argc, argv 本程序返回地址 棧底指針暫存處 buf, number 棧頂指針 棧底指針 低地址 高地址 調(diào)用 readfile時 argc, argv 本程序返回地址 棧底指針暫存處 buf, number buffer, line readfile的返回地址 棧底指針暫存處 pointer, temp 3. 進(jìn)程的標(biāo)識 進(jìn)程由其進(jìn)程標(biāo)識號 PID來識別。 0進(jìn)程 是由機(jī)器上電時“手工”創(chuàng)建的,調(diào)用 fork創(chuàng)建了1進(jìn)程后,成為 對換進(jìn)程( swap)。 1進(jìn)程 init進(jìn)程 ,由它來創(chuàng)建系統(tǒng)初始化過程中所需的其它所有的進(jìn)程。 父進(jìn)程 調(diào)用 fork系統(tǒng)調(diào)用的進(jìn)程 子進(jìn)程 由系統(tǒng)調(diào)用 fork產(chǎn)生的進(jìn)程 除 0進(jìn)程外,其它所有進(jìn)程都是另一個進(jìn)程調(diào)用 fork后產(chǎn)生的。 4. 進(jìn)程狀態(tài)及狀態(tài)轉(zhuǎn)換 ①運行狀態(tài) 此時進(jìn)程正在占用處理機(jī),進(jìn)程的 全部映像 駐在內(nèi)存中。 ②就緒狀態(tài) 此時進(jìn)程基本具備了運行條件,正在等待使用處理機(jī)。 ③睡眠狀態(tài) 進(jìn)程不具備運行條件,需等待某種事件的發(fā)生,無法繼續(xù)執(zhí)行下去。 運行 睡眠 就緒 喚醒 中斷 5. 在 UNIX環(huán)境下,進(jìn)程有如下特征: ① 每個進(jìn)程在 核心進(jìn)程表 ( proc數(shù)組)都占有一項,在其中保留相應(yīng)的狀態(tài)信息。 ② 每個進(jìn)程都有一個“每進(jìn)程數(shù)據(jù)區(qū)( per process data areappda)”保留相應(yīng)進(jìn)程更多的信息和核心棧; ③ 處理機(jī)的全部工作就是在某個時候執(zhí)行某個進(jìn)程 ④ 一個進(jìn)程可生成或消滅另一進(jìn)程 ⑤ 一個進(jìn)程中可申請并占有資源 ⑥ 一個進(jìn)程只沿著一個特定的指令序列運行,不會跳轉(zhuǎn)到另一個進(jìn)程的指令序列中去,也不能訪問別的進(jìn)程的數(shù)據(jù)和堆棧。(抗病毒傳播的重要原因之一) 第三章 數(shù)據(jù)緩沖區(qū)高速緩沖 硬件緩存( cache) 由一種高速寄存器( register)組成,主要解決 CPU與 RAM之間的 速度差 問題。 數(shù)據(jù)緩沖區(qū)高速緩沖( buffer) 由軟件實現(xiàn)的解決 文件系統(tǒng)和物理硬盤 之間的數(shù)據(jù)同步 的一種方法。 數(shù)據(jù)緩沖區(qū)高速緩沖是 UNIX特有的對數(shù)據(jù) 并發(fā)訪問 的一種控制機(jī)制。 問題的提出 : 磁盤機(jī)械運行速度大大低于處理機(jī)的運行速度; 多進(jìn)程并發(fā)運行,少量的磁盤(通道)I/O成為瓶頸; 數(shù)據(jù)訪問的隨機(jī)性,磁盤忙閑不均 解決辦法 : 建立一個被稱為數(shù)據(jù)緩沖區(qū)高速緩沖(簡稱高速緩沖)的內(nèi)部數(shù)據(jù)緩沖區(qū)池( buffer pool)來存放要用的數(shù)據(jù); 寫數(shù)據(jù)時 把數(shù)據(jù)盡量多地盡量長時間地保存在緩沖池中 延遲寫 出到磁盤上 以備后續(xù)進(jìn)程使用 讀數(shù)據(jù)時 先在緩沖池中查找已有的數(shù)據(jù) 如沒有,再從磁盤讀取,并保存在緩沖池中 事先預(yù)讀數(shù)據(jù)到緩沖池中 緩沖區(qū)及緩沖區(qū)首部 緩沖區(qū)池由若干個緩沖區(qū)組成,每一個緩沖區(qū)又由兩部分組成:一個實際存放數(shù)據(jù)的存儲區(qū)和一個標(biāo)識該緩沖區(qū)的緩沖區(qū)首部。 存 儲 區(qū) 因為緩沖區(qū)首部與數(shù)據(jù)存儲區(qū)之間有一一對應(yīng)的關(guān)系,所以通常把兩者統(tǒng)稱為緩沖區(qū)。 緩沖區(qū)是緩沖區(qū)池中數(shù)據(jù)存儲的基本單位。 緩沖區(qū)首部 緩沖區(qū)首部的定義 : struct buf { 緩沖區(qū)標(biāo)志 標(biāo)識緩沖區(qū)狀態(tài) 緩沖區(qū)鏈接指針 向前向后串成鏈表 空閑緩沖區(qū)鏈表指針 聯(lián)結(jié)空閑緩沖區(qū) 設(shè)備號 標(biāo)識緩沖區(qū) 塊號 union{ 緩沖區(qū)中的數(shù)據(jù)類型 數(shù)據(jù)塊 超級塊 柱面塊 i節(jié)點塊 }b_un 其它控制信息 } 緩沖池的結(jié)構(gòu) 最近最少使用( LRU)算法: Least Recently Used ① 程序設(shè)計采用模塊化和層次化結(jié)構(gòu),盡量避免使用 goto語句,程序跳轉(zhuǎn)少,適應(yīng)“流水線( pipeline)”體系結(jié)構(gòu)的系統(tǒng); ② 特定時間段內(nèi),程序在一個相對集中空間(代碼段)內(nèi)運行,涉及的數(shù)據(jù)(廣義的:文件名、變量、指針和數(shù)組等)的個數(shù)相對較少; ③ 當(dāng)前使用過的數(shù)據(jù),馬上還要使用的可能性最大,較長時間未用過的數(shù)據(jù),即將使用的可能性最小。 緩沖池設(shè)計基本原則: ① 存放有剛使用過的數(shù)據(jù)盡量長時間地保留在內(nèi)存中,以便馬上還要使用時能在內(nèi)存中找到; ② 需要騰出內(nèi)存空間時,把很久都未使用過(即最近最少使用)的數(shù)據(jù)交換到磁盤上去。這些數(shù)據(jù)馬上還要使用的可能性最小。 空閑緩沖區(qū)鏈表 核心維護(hù)了一個空閑緩沖區(qū)鏈表,它按照 最近被使用的先后次序排列 ??臻e鏈表是一個以空閑緩沖區(qū)鏈表頭開始的“ 雙向循環(huán)鏈表 ”。鏈表的開始和結(jié)束都以鏈表頭為標(biāo)志。 鏈 表 頭 空 閑 緩 沖 區(qū) 1 空 閑 緩 沖 區(qū) 2 空 閑 緩 沖 區(qū) 3 空 閑 緩 沖 區(qū) n 空閑緩沖區(qū)鏈表操作 ① 取用任意空閑緩沖區(qū) 從空閑緩沖區(qū)鏈表的表頭位置取下一個空閑緩沖區(qū),后面的空閑緩沖區(qū)依次向前移動。 ② 釋放一個空閑緩沖區(qū) 把這個裝有數(shù)據(jù)的空閑緩沖區(qū)附加到空閑鏈表的鏈尾。只有當(dāng)該空閑緩沖區(qū)所裝數(shù)據(jù)出錯時才掛到鏈頭。 ③ 取用裝有指定內(nèi)容的空閑緩沖區(qū) 從鏈表頭開始查找,找到后取下使用,用完后放到鏈尾。 當(dāng)系統(tǒng)不斷從鏈頭取用空閑緩沖區(qū),又把使用過的(裝有數(shù)據(jù)的)緩沖區(qū)掛到鏈尾,一個裝有有效數(shù)據(jù)的緩沖區(qū)就會逐漸向鏈表頭移動。在鏈表頭位置的就是“最近最少使用”的空閑緩沖區(qū)。 空閑緩沖區(qū)分類 系統(tǒng)中共設(shè)置了四個空閑緩沖區(qū)鏈表,根據(jù)緩沖區(qū)的不同用途而把它的放入不同的空閑緩沖區(qū)鏈表中。避免在取用空閑緩沖區(qū)時,逐個判斷緩沖區(qū)中的內(nèi)容。這四個空閑鏈表是: 0空閑緩沖區(qū)鏈表 ——存放文件系統(tǒng)超級塊 1空閑緩沖區(qū)鏈表 ——存放通常使用的數(shù)據(jù)塊 2空閑緩沖區(qū)鏈表 ——存放延遲寫、無效數(shù)據(jù)或錯誤內(nèi)容 3空閑緩沖區(qū)鏈表 ——存放沒有對應(yīng)存儲空間的緩沖區(qū)首部 如果某種類型的空閑緩沖區(qū)不夠用時,核心也從其它空閑緩沖區(qū)鏈表中取用空閑緩沖區(qū)。 緩沖區(qū)設(shè)置 當(dāng)核心需有一個空閑緩沖區(qū)時,它根據(jù)要裝入的數(shù)據(jù)類型,從相應(yīng)的空閑緩沖區(qū)鏈表的表頭位置取下一個空閑緩沖區(qū),裝入一個磁盤數(shù)據(jù)塊; 根據(jù)該數(shù)據(jù)塊所對應(yīng)的 設(shè)備號和塊號數(shù)據(jù)對 計算其 hashno(散列、雜湊)值,根據(jù)其 hashno 的值放入到相應(yīng) hash 鏈表的鏈頭。 hashno = ((diskno + blkno) / RND) % BUFHSZ diskno: 設(shè)備號 blkno: 塊號 BUFHSZ: 最大 hash值,通常為 63。 RND: 隨機(jī)數(shù),其值為: RND=MAXBSIZE / DEV_BSIZE MAXBSIZE: 最大文件系統(tǒng)塊的大小 DEV_BSIZE: 物理設(shè)備塊大小 hashno 的取值范圍: 0 ~ 62 緩沖池的結(jié)構(gòu) 具有相同 hashno 的緩沖區(qū)鏈接在同一個 hash鏈表中,因此系統(tǒng)中共有 63 個 hash 鏈表,分別鏈接 hashno 為 0 ~ 62 的緩沖區(qū)。 每一個 hash 鏈表都是一個由鏈表頭指向的 雙向循環(huán)鏈表 ,查找某一個指定 hashno 值的緩沖區(qū)時,也是從相應(yīng)的 hash鏈表的表頭位置開始向表尾方向進(jìn)行查找。
點擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1