UNIXLinux操作系統(tǒng)內(nèi)核結(jié)構(gòu)課件_第1頁
UNIXLinux操作系統(tǒng)內(nèi)核結(jié)構(gòu)課件_第2頁
UNIXLinux操作系統(tǒng)內(nèi)核結(jié)構(gòu)課件_第3頁
UNIXLinux操作系統(tǒng)內(nèi)核結(jié)構(gòu)課件_第4頁
UNIXLinux操作系統(tǒng)內(nèi)核結(jié)構(gòu)課件_第5頁
已閱讀5頁,還剩389頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

UNIX_Linux操作系統(tǒng)內(nèi)核結(jié)構(gòu)電子科技大學(xué)信軟學(xué)院12/20/2022UNIX_Linux電子科技大學(xué)信軟學(xué)院12/16/20221教師介紹劉玓教授大型主機(jī)教學(xué)團(tuán)隊主任大型主機(jī)與網(wǎng)絡(luò)安全工程系主任Email:liudi@主要研究方向:操作系統(tǒng)、大型主機(jī)、網(wǎng)絡(luò)應(yīng)用教師介紹2課程概述一.課程內(nèi)容簡介1、講授范圍具體的技術(shù)系統(tǒng)及其算法和實(shí)現(xiàn)流程,而不是操作系統(tǒng)基本原理;2、通用操作系統(tǒng)的現(xiàn)狀和分類DOS類----結(jié)構(gòu)簡單、使用方便、效率低、安全性低UNIX類----運(yùn)行高效、結(jié)構(gòu)通用、安全可靠、適應(yīng)能力強(qiáng)、系統(tǒng)較復(fù)雜MVS類----功能強(qiáng)大、處理能力巨大、系統(tǒng)復(fù)雜、較封閉課程概述3大巨型機(jī)+z/OS小中型機(jī)+UNIX微型機(jī)+Windows功能強(qiáng)大簡單易用大巨型機(jī)+z/OS小中型機(jī)+UNIX微型機(jī)+Wi43、根本特點(diǎn)

分時多用戶、開放性分時多用戶:多個用戶多個進(jìn)程同時在一個系統(tǒng)中運(yùn)行系統(tǒng)資源高度共享、有效協(xié)調(diào)開放性:標(biāo)準(zhǔn)化——結(jié)構(gòu)上的一致性可移植性——應(yīng)用軟件的編碼及系統(tǒng)應(yīng)用接口可互操作性——可保持用戶原來的使用習(xí)慣異種機(jī)之間的互操作4、教學(xué)難點(diǎn)多用戶多進(jìn)程——同步/互斥、數(shù)據(jù)一致性、訪問安全性開放性——硬件依賴性、結(jié)構(gòu)伸縮性、廣泛適應(yīng)性3、根本特點(diǎn)5二、教學(xué)目的

1、了解主流操作系統(tǒng)的發(fā)展方向低端操作系統(tǒng)VS高端操作系統(tǒng)2、掌握UNIX類操作系統(tǒng)的內(nèi)部結(jié)構(gòu)和主要算法文件、文件系統(tǒng)、進(jìn)程、時鐘、輸入輸出3、學(xué)習(xí)大型程序設(shè)計的方法和理念系統(tǒng)結(jié)構(gòu)、功能流程、數(shù)據(jù)安全、思維模式4、奠定系統(tǒng)開發(fā)和應(yīng)用開發(fā)的基礎(chǔ)功能選擇、層次劃分、應(yīng)用系統(tǒng)模式的確定二、教學(xué)目的6三、教材《UNIX操作系統(tǒng)設(shè)計》(TheDesignoftheUNIXOperatingSystem)(美)MauriceJ.Bach著陳葆玨

王旭柳純錄馮雪山譯機(jī)械工業(yè)出版社2005年10月出版四、考核說明本課程為“考查”,請以選“考試”的同學(xué)進(jìn)行更正。成績構(gòu)成:平時成績+期末報告三、教材7第一章系統(tǒng)概貌1.1發(fā)展?fàn)顩r1、發(fā)展歷史及版本v.01970年KenThompson和DennisRitchiePDP-7匯編語言UNICSv.11971年P(guān)DP-11匯編語言UNIX

v.21972年增加管道功能第一章系統(tǒng)概貌1.1發(fā)展?fàn)顩r8v.51973年DennisRitchieBlanguage----Clanguage

重寫UNIX第一個高級語言O(shè)Sv.61975年對外發(fā)表UNIX大學(xué)和科研單位應(yīng)用v.71978年第一個商業(yè)版本我國開始深入研究應(yīng)用的最早版本SystemIII1981年完全轉(zhuǎn)向?yàn)樯鐣峁┑纳唐奋浖.51973年9

SystemV1983年系統(tǒng)功能穩(wěn)定完善公布號:1.0、2.0、2.3、3.5、4.0、4.2、4.3現(xiàn)在最后版本為SystemVRelease4(SVR4)SystemV102、主要分支和兼容版本BSD

加州大學(xué)伯克利分校XENIX/OpenServerMicrosoft、SCO公司HP-UXHP公司AIXIBMSolarisSUN公司IRIX

SGI公司UltrixDEC公司Linux開放源代碼2、主要分支和兼容版本113、基本功能特征交互式分時多用戶人機(jī)間實(shí)時交互數(shù)據(jù)多個用戶可同時使用一臺機(jī)器每個用戶可同時執(zhí)行多個任務(wù)軟件復(fù)用每個程序模塊完成單一的功能程序模塊可按需任意組合較高的系統(tǒng)和應(yīng)用開發(fā)效率可移植性強(qiáng)數(shù)千行匯編碼,數(shù)十萬行C語言代碼3、基本功能特征12配置靈活,適應(yīng)性強(qiáng)小內(nèi)核,參數(shù)靈活可調(diào)核外應(yīng)用系統(tǒng),任意裁減限制規(guī)則很少界面方便高效內(nèi)部:系統(tǒng)調(diào)用豐富高效外部:shell命令靈活方便可編程應(yīng)用:GUI清晰直觀功能強(qiáng)大安全機(jī)制完善口令、權(quán)限、加密等措施完善抗病毒結(jié)構(gòu)誤操作的局限和自動恢復(fù)功能

配置靈活,適應(yīng)性強(qiáng)13多國語言支持支持全世界現(xiàn)有的幾十種主要語言網(wǎng)絡(luò)和資源共享內(nèi)部:多進(jìn)程結(jié)構(gòu)易于資源共享外部:支持多種網(wǎng)絡(luò)協(xié)議說明:1、其它操作系統(tǒng)可能包含部分上述UNIX的特征,但非全部(如NT就有部分多用戶系統(tǒng)特征)2、這些特征有些是核心直接實(shí)現(xiàn)的,有些是由核心提供實(shí)現(xiàn)這種特征的方便性和可能性,而由使用者來實(shí)現(xiàn)的。多國語言支持141.2系統(tǒng)結(jié)構(gòu)

硬件內(nèi)核kernelshwhodatewcvigrepdatea.outlsapp_1app_2app_nUNIX操作系統(tǒng)的整體結(jié)構(gòu)

1.2系統(tǒng)結(jié)構(gòu)硬件內(nèi)核kernelshwhodatewc15系統(tǒng)調(diào)用(systemcall)以函數(shù)形式提供給核外的命令和上層應(yīng)用系統(tǒng)使用的一組程序,涵蓋操作系統(tǒng)的所有功能。是應(yīng)用程序請求操作系統(tǒng)服務(wù)的唯一通道。內(nèi)核(kernel)系統(tǒng)調(diào)用的集合及實(shí)現(xiàn)系統(tǒng)調(diào)用的內(nèi)部算法就形成操作系統(tǒng)核心系統(tǒng)調(diào)用(systemcall)161.3用戶看法進(jìn)程和文件是UNIX操作系統(tǒng)中最基本的兩個概念(抽象)進(jìn)程:所有處在運(yùn)行期間的程序?qū)嵗际沁M(jìn)程一個進(jìn)程就是處在運(yùn)行期間的一個程序?qū)嵗w所有的動態(tài)概念文件:所有靜態(tài)的無形數(shù)據(jù)和有形硬件設(shè)備源程序、命令、圖片、郵件、打印機(jī)、內(nèi)存、磁盤等1.3用戶看法171.3.1文件系統(tǒng)

/binusretchometmpdevwholsbinlibrcttysstteachtty0hd02adminhwconfliuwangchenaadir2save

UNIX文件系統(tǒng)樹示例1.3.1文件系統(tǒng)18UNIX文件系統(tǒng)的特征:1、樹狀層次結(jié)構(gòu)樹根、樹枝、樹葉、路徑2、對文件數(shù)據(jù)的一致對待文件為有序無格式的字節(jié)流,邏輯意義由使用者解釋3、文件管理建立、刪除、修改、備份、移動、替換存儲空間的分配和釋放4、文件的訪問和保護(hù)索引節(jié)點(diǎn)(inode)、文件描述符(fd)用戶分組、權(quán)限劃分5、設(shè)備文件管理統(tǒng)一各外部設(shè)備的訪問模式UNIX文件系統(tǒng)的特征:19charbuffer[2048];main(intargc,char*argv[]){ intfdold,fdnew; if(argc!=3) { printf(“need2argumentsforcopyprogram\n”); exit(1); } fdold=open(argv[1],O_RDONLY); if(fdold==-1) { printf(“cannotopenfile%s\n”,argv[1]); exit(1); } fdnew=creat(argv[2],0666); if(fdnew==-1) { printf(“cannotcreatefile%s\n”,argv[2]); exit(1); } copy(fdold,fdnew); exit(0);}copy(intold,intnew){ intcount; while((count=read(old,buffer,sizeof(buffer)))>0) write(new,buffer,count);}charbuffer[2048];201.3.2處理環(huán)境

程序:可執(zhí)行的文件

文件頭包括:·文件的幻數(shù)(magicnumber)·編譯器的版本號·機(jī)器類型·數(shù)據(jù)段、正文段、工作變量的段大小·程序入口點(diǎn)文件頭正文段數(shù)據(jù)段工作變量段BSS(符號表、重定位信息等)1.3.2處理環(huán)境文件頭正文段數(shù)據(jù)段工作變量段21進(jìn)程:程序的一次執(zhí)行實(shí)例一個程序可同時有多個實(shí)例;系統(tǒng)中可同時有多個進(jìn)程父進(jìn)程:調(diào)用系統(tǒng)調(diào)用fork的進(jìn)程子進(jìn)程:由系統(tǒng)調(diào)用fork產(chǎn)生的新進(jìn)程執(zhí)行程序:調(diào)用execl,用被執(zhí)行程序的內(nèi)容覆蓋本進(jìn)程地址空間

abc執(zhí)行abcxyz用xyz覆蓋abc執(zhí)行xyzxyz進(jìn)程:abc執(zhí)行abcxyz用xyz覆蓋abc執(zhí)行xyzxy22例子:執(zhí)行可運(yùn)行文件copy,其功能是拷貝文件,其運(yùn)行格式為:copyoldfilenewfile另一個名為cpfile的程序具體調(diào)用copy,其源程序如下: main(intargc,char*argv[]) { if(fork()==0) execl(“copy”,argv[1],argv[2]],0); wait((int*)0); printf(“copydone\n”); } UNIXLinux操作系統(tǒng)內(nèi)核結(jié)構(gòu)課件23在用戶環(huán)境下,程序的執(zhí)行通常由命令解釋器shell來完成,標(biāo)準(zhǔn)的命令格式為:cmd[-options][arguments]shell可識別的命令類型有:1、簡單命令catfile12、多條命令who;date;ps3、復(fù)合命令ps–e|grepstudent2(ls;catfile3;pwd)>run_log4、后臺命令ls–lR/home/teacher>tlist&在用戶環(huán)境下,程序的執(zhí)行通常由命令解釋器sh241.3.3構(gòu)件原語

“軟件復(fù)用”和“模塊組裝”理念

程序內(nèi)部:簡單功能劃分;純代碼設(shè)計

程序外部:使用構(gòu)件原語進(jìn)行功能重疊和組裝UNIX包含兩種構(gòu)件原語:

①輸入輸出重定向

②管道1.3.3構(gòu)件原語25I/O重定向(I/Oredirect):一個進(jìn)程通常(default)打開三個文件:標(biāo)準(zhǔn)輸入文件(fd=0)標(biāo)準(zhǔn)輸出文件(fd=1)標(biāo)準(zhǔn)錯誤輸出文件(fd=2)例如:grepabcgrepabc<file1grepabc<file1>file2grepabc<file1>file22>file3I/O重定向(I/Oredirect):26管道(pipe):

A進(jìn)程將標(biāo)準(zhǔn)輸出重新定向到管道中去;B進(jìn)程將標(biāo)準(zhǔn)輸入重新定向從管道中來。例如:

ps-e|grepstudent3|wc-l

查看當(dāng)前系統(tǒng)中與用戶student3相關(guān)的進(jìn)程有多少

A進(jìn)程的輸出B進(jìn)程的輸入管道(pipe):A進(jìn)程的輸出B進(jìn)程的輸入271.4操作系統(tǒng)服務(wù)

UNIX操作系統(tǒng)提供五種主要的服務(wù)(也是UNIX核心的五個重要組成部分):

1.進(jìn)程管理建立、終止、掛起、通信等

2.時鐘管理分時共享cpu,時間片,調(diào)度

3.存儲管理二級存貯器(內(nèi)存和對換區(qū)),分配主存

4.文件系統(tǒng)管理二級存貯結(jié)構(gòu)。分配和收回存貯區(qū)和索引節(jié)點(diǎn)

5.設(shè)備管理對I/O設(shè)備進(jìn)行有控制的存?。ǘ噙M(jìn)程系統(tǒng)的特征)1.4操作系統(tǒng)服務(wù)28內(nèi)核提供的服務(wù)的特點(diǎn):服務(wù)是透明的

①文件類型透明:用戶可不關(guān)心是普通文件還是外部設(shè)備,但O.S自己要關(guān)心文件類型!

②文件系統(tǒng)的透明:文件系統(tǒng)類型、存放的物理位置。

③存貯方式透明:文件的存放位置、存放方式、存放格式

④各用戶進(jìn)程能得到核心相同服務(wù):無論系統(tǒng)程序還是用戶程序,平等對待,分時運(yùn)行內(nèi)核提供的服務(wù)的特點(diǎn):291.5硬件假設(shè)

(假設(shè)機(jī)器硬件只支持的運(yùn)行狀態(tài))UNIX系統(tǒng)上進(jìn)程的執(zhí)行分成兩種狀態(tài):

用戶態(tài)、核心態(tài)

用戶態(tài):進(jìn)程正在執(zhí)行用戶代碼時的狀態(tài)核心態(tài):進(jìn)程正在執(zhí)行系統(tǒng)代碼(系統(tǒng)調(diào)用)時的狀態(tài)用戶態(tài)和核心態(tài)的區(qū)別:

①用戶態(tài):進(jìn)程只能存取自己的地址空間

核心態(tài):進(jìn)程可存取核心和用戶地址空間

②用戶態(tài):不能存取特權(quán)指令,只能存取自己的指令和數(shù)據(jù)

核心態(tài):除了能存取自己的指令和數(shù)據(jù)外,還可存取特權(quán)指令

1.5硬件假設(shè)30一個進(jìn)程在運(yùn)行時必須處在,而且只能處在或者核心態(tài)或者用戶態(tài)下:核心態(tài)的進(jìn)程不是與用戶進(jìn)程平行運(yùn)行的孤立的進(jìn)程集合,而是每個用戶進(jìn)程的一部分。“核心分配資源”:一個在核心狀態(tài)下執(zhí)行的進(jìn)程分配資源。一個進(jìn)程某時在“用戶態(tài)”下運(yùn)行,另一時刻又在“核心態(tài)”下運(yùn)行,在其生命周期內(nèi)可能在這兩種狀態(tài)間切換多次用戶態(tài)核心態(tài)012345timeA

|

B

|

C

|

D

|

A

|一個進(jìn)程在運(yùn)行時必須處在,而且只能處在或者31

核心——處在核心態(tài)下的進(jìn)程的相應(yīng)部分的集合硬件是按核心態(tài)和用戶態(tài)來執(zhí)行操作的,但對這兩種狀態(tài)下正在執(zhí)行程序的多個用戶是相同對待的。

readwriteopen

A進(jìn)程B進(jìn)程C進(jìn)程核心——處在核心態(tài)下的進(jìn)程的相321.5.1中斷與例外中斷(要保存上下文):來自進(jìn)程之外的事件(外設(shè)、時鐘等)引起的,發(fā)生在兩條指令執(zhí)行之間,中斷服務(wù)完畢后從下一條指令繼續(xù)執(zhí)行。(中斷服務(wù)是由核心中特殊的函數(shù),而不是特殊的進(jìn)程來執(zhí)行的)例外(不保存上下文):來自進(jìn)程內(nèi)部的非期望事件(地址越界,除數(shù)為0等),發(fā)生在一條指令執(zhí)行過程中,例外事件處理完后重新執(zhí)行該指令。1.5.1中斷與例外331.5.2處理機(jī)執(zhí)行級

用一組特權(quán)指令給處理機(jī)設(shè)置一個執(zhí)行級,以屏蔽同級和低級的中斷,最大限度地減少其它事件的干擾,使當(dāng)前任務(wù)順利執(zhí)行并盡快完成;但開放更高級的中斷,以響應(yīng)更緊迫的請求。1.5.2處理機(jī)執(zhí)行級341.5.3存儲管理

UNIX系統(tǒng)中的存儲管理原則(或特點(diǎn)):1.當(dāng)前正在執(zhí)行的進(jìn)程(全部或部分)駐留在主存中;2.核心是永遠(yuǎn)駐留在主存中的(是永遠(yuǎn)活動的?。?;3.編譯程序產(chǎn)生的指令地址是虛地址(邏輯地址);4.程序運(yùn)行時核心與硬件(存儲管理部件MMU)一起建立虛地址到物理地址的映射。

核心永遠(yuǎn)是活躍的普通進(jìn)程具有特定的生命周期(除非人為設(shè)定為無限循環(huán))1.5.3存儲管理35

readwriteopenclose...核心代碼段A進(jìn)程B進(jìn)程openreadreadwrite映射映射只是用戶進(jìn)程中的核心態(tài)下運(yùn)行的代碼段常駐內(nèi)存,而非整個用戶進(jìn)程常駐內(nèi)存。這些代碼段是“可再入段”(或純代碼段、可共享代碼段),被各用戶進(jìn)程段共享,為提高運(yùn)行速度,避免頻煩訪問磁盤,故常駐內(nèi)存,這些代碼段的集合就是OS的內(nèi)核。readwriteopenclose.核心代碼段A進(jìn)程B進(jìn)36第二章核心導(dǎo)言2.1UNIX操作系統(tǒng)的體系結(jié)構(gòu)“文件”和“進(jìn)程”是UNIX系統(tǒng)的兩個最基本實(shí)體和中心概念,UNIX系統(tǒng)的所有操作都是以這兩者為基礎(chǔ)的。整個系統(tǒng)核心由以下五個部分組成:

①文件系統(tǒng):文件管理和存儲空間管理(節(jié)點(diǎn)和空間管理)

②I/O設(shè)備管理:核心→緩沖→塊設(shè)備(隨機(jī)存取設(shè)備)核心→原始設(shè)備(raw設(shè)備,字符設(shè)備,裸設(shè)備)

③進(jìn)程控制:進(jìn)程的調(diào)度、同步和通訊

④存貯管理:在主存與二級存儲之間對程序進(jìn)行搬遷

⑤時鐘管理:把cpu的時間分配給當(dāng)前最高優(yōu)先權(quán)的進(jìn)程。第二章核心導(dǎo)言2.1UNIX操作系統(tǒng)的體系結(jié)構(gòu)37

硬件硬件控制字符設(shè)備

塊設(shè)備設(shè)備驅(qū)動程序高速緩沖文件子系統(tǒng)系統(tǒng)調(diào)用界面程序庫進(jìn)程控制子系統(tǒng)進(jìn)程間通訊調(diào)度程序存儲管理用戶程序用戶級核心級核心級硬件級陷入硬件硬件控制字符設(shè)備382.2系統(tǒng)概念2.2.1文件系統(tǒng)概貌

1.索引節(jié)點(diǎn)(indexnode——inode)

inode特征:文件的內(nèi)部名稱(或代號),方便機(jī)器操作;每個文件都有一個且只有一個inode與之對應(yīng);inode存放文件的靜態(tài)參數(shù):存放地點(diǎn)、所有者、文件類型、存取權(quán)限、文件大小等;每個文件都可以有多個名字,但都映射到同一個inode上;各inode之間以inode號相區(qū)別;2.2系統(tǒng)概念392.鏈結(jié)(link)——對應(yīng)命令名ln文件i節(jié)點(diǎn)abcxyz文件名·一個文件可有多個名字,多個名字都對應(yīng)同一個文件i節(jié)點(diǎn),每個名字就是該文件節(jié)點(diǎn)的一個鏈結(jié);.一個普通文件的名字個數(shù),就是該文件的鏈結(jié)數(shù);·每個鏈接名可以放在不同的目錄下(同一個文件系統(tǒng)下);·刪除一個鏈接名時,文件鏈接數(shù)減一。如鏈接數(shù)不為零,則文件(節(jié)點(diǎn))仍然存在。2.鏈結(jié)(link)——對應(yīng)命令名ln文件i節(jié)點(diǎn)40使用文件鏈結(jié)的目的:①方便用戶的使用習(xí)慣,如“列目錄”,可用ls、dir、list、lc等;②誤刪文件時可補(bǔ)救,又不多占空間。abc和xyz具有相同的i結(jié)點(diǎn)號;③減少移植應(yīng)用程序時,因使用指定位置的文件,而拷貝該文件到指定位置去的麻煩。UNIXLinux操作系統(tǒng)內(nèi)核結(jié)構(gòu)課件413.符號鏈結(jié)(symbollink)——對應(yīng)命令名ln-s文件i節(jié)點(diǎn)abcxyz文件名

給文件的名字再取一個名字,而不是給文件節(jié)點(diǎn)再取一個名字。鏈接的是“符號”而不是文件,因此“符號”可以是不存在的文件,即無意義的字符串。

abc和xyz具有不同的inode號,xyz的內(nèi)容是它所指向的名字的字符串,大小是字符串長度為3字節(jié)?!捌胀ㄦ溄Y(jié)”中各名字必須在同一文件系統(tǒng)中,“符號鏈結(jié)”可在不同的文件系統(tǒng)中。3.符號鏈結(jié)(symbollink)文件i節(jié)點(diǎn)abcxyz424.活動i節(jié)點(diǎn)表(索引節(jié)點(diǎn)表)——inode表

在內(nèi)存中存放當(dāng)前要使用的文件inode的表(或稱為活動i節(jié)點(diǎn)表),表中的每一個表項對應(yīng)一個當(dāng)前正被使用的文件的狀態(tài)信息。這樣要使用(打開)同一個文件的進(jìn)程不必再到盤上去尋找了,(共享?。?.活動i節(jié)點(diǎn)表(索引節(jié)點(diǎn)表)——inode表435.用戶打開文件表(或稱用戶文件描述符表)在系統(tǒng)中每一個進(jìn)程都有一個描述該進(jìn)程的數(shù)據(jù)結(jié)構(gòu)user(類似于描述文件的i節(jié)點(diǎn)),在user中有一個數(shù)組,存放一組指針指向系統(tǒng)打開文件表中該進(jìn)程打開的文件所對應(yīng)的表項。structfile*u_ofile[NOFILE]NOFILE為每個進(jìn)程最多可同時打開的文件數(shù),這與系統(tǒng)中的進(jìn)程數(shù)和內(nèi)存大小以及交換區(qū)大小等有關(guān)系,一般為20~100。這個u_ofile數(shù)組就是該進(jìn)程的用戶打開文件表。5.用戶打開文件表(或稱用戶文件描述符表)446.系統(tǒng)打開文件表(file表)

系統(tǒng)打開文件表主要存放被打開文件的讀寫指針。因?yàn)橐粋€進(jìn)程在一個時間片內(nèi)可能讀寫不完所需內(nèi)容,需要在下一個時間片繼續(xù)從上一個時間片結(jié)束時的讀寫位置開始讀寫,故在進(jìn)程生存期間應(yīng)保持一讀寫指針。此外file表中還存放被打開文件的動態(tài)信息:如文件狀態(tài)、引用計數(shù)(當(dāng)前使用該文件的進(jìn)程數(shù))等。6.系統(tǒng)打開文件表(file表)45A進(jìn)程B進(jìn)程file表活動inode表用戶打開文件表系統(tǒng)打開文件表活動i節(jié)點(diǎn)表A進(jìn)程B進(jìn)程file表活動inode表用戶打開文件表系統(tǒng)打開46為什么要單獨(dú)設(shè)立一個file表來存放讀寫指針呢?由于可能有多個進(jìn)程要共享一個被打開文件的inode,而每個進(jìn)程的讀寫指針都不相同,故不能放在inode表中。

另一方面,要使不同進(jìn)程的打開文件指針(文件描述符)或同一進(jìn)程的不同打開文件指針能夠共享一個打開文件指針(協(xié)同操作),就不能把讀寫指針放進(jìn)某一個進(jìn)程的用戶打開文件表中。

因此只能在用戶打開文件表和活動inode表之外再建立一個系統(tǒng)打開文件表(file表)來存放讀寫指針。為什么要單獨(dú)設(shè)立一個file表來存放讀寫指針呢?47

UNIX操作系統(tǒng)中共享活動文件的方法:

在內(nèi)存中某個活動文件的副本只有一個,不同的進(jìn)程采用不同的指針指向這文件的副本。由于任一時刻只有一個進(jìn)程在運(yùn)行(微觀上看),故該文件也只要求內(nèi)存中有一個副本即可,只是各個進(jìn)程有自己的讀寫指針而已。這是在UNIX系統(tǒng)中共享文件(包括用戶文件和系統(tǒng)文件)的主要方法。對其它資源的共享采用的是與之相似的另外幾種方法。UNIX操作系統(tǒng)中共享活動文件的方法:482.2.2進(jìn)程相關(guān)概念:映像——

程序以及與動態(tài)執(zhí)行該程序有關(guān)的各種信息的集合(類似于歷史檔案)。它包括存儲器映象、通用寄存器映像,地址映射空間、打開文件狀態(tài)等。進(jìn)程——

對映像的執(zhí)行。對映像的執(zhí)行也就是一個程序在虛擬機(jī)上動態(tài)執(zhí)行的過程。2.2.2進(jìn)程49可執(zhí)行文件的構(gòu)成:

進(jìn)程是可執(zhí)行文件的一次執(zhí)行實(shí)例,高級語言程序經(jīng)過編譯或匯編語言程序經(jīng)過匯編后所產(chǎn)生的、缺省名為a.out的可執(zhí)行文件的結(jié)構(gòu)包括圖示四個部分:

文件頭正文段數(shù)據(jù)標(biāo)識段其它信息段可執(zhí)行文件的構(gòu)成:文件頭正文段數(shù)據(jù)標(biāo)識段其它信息段50文件頭——·文件的幻數(shù)(magicnumber)·編譯器的版本號·機(jī)器類型·正文段、數(shù)據(jù)標(biāo)識段、其它信息段的大小·程序入口點(diǎn)正文段——程序的功能代碼數(shù)據(jù)標(biāo)識段——標(biāo)識未初始化的數(shù)據(jù)要占用的空間大小其它信息段——主要用于存放符號表文件頭——51程序的執(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)下運(yùn)行時的工作區(qū)為核心棧,在用戶態(tài)下運(yùn)行時的工作區(qū)為用戶棧。核心棧和用戶棧不能交叉使用。程序的執(zhí)行52堆棧使用舉例。有如下程序,在主程序中調(diào)用函數(shù),并進(jìn)行參數(shù)傳遞:main(intargc,char*argv[]){charbuf[1024];intnumber;

…readfile(buf,number);

…}readfile(charbuffer[],intline){char*pointer;inttemp;

…}堆棧使用舉例。有如下程序,在主程序中調(diào)用函數(shù),并進(jìn)行參數(shù)傳遞53空棧棧頂指針棧底指針低地址高地址用戶棧進(jìn)入主程序時的堆棧狀況空棧頂指針棧底指針低地址高地址用戶棧進(jìn)入主程序時的堆棧狀況54棧頂指針棧底指針低地址高地址調(diào)用main()時argc,argv本程序返回地址棧底指針暫存處buf,number棧頂指針棧底指針低地址高地址調(diào)用main()時argc,a55棧頂指針棧底指針低地址高地址調(diào)用readfile時argc,argv本程序返回地址棧底指針暫存處buf,numberbuffer,linereadfile的返回地址棧底指針暫存處pointer,temp棧頂指針棧底指針低地址高地址調(diào)用readfile時argc,563.進(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)生的。3.進(jìn)程的標(biāo)識57進(jìn)程狀態(tài)及狀態(tài)轉(zhuǎn)換①運(yùn)行狀態(tài)此時進(jìn)程正在占用處理機(jī),進(jìn)程的全部映像駐在內(nèi)存中。②就緒狀態(tài)此時進(jìn)程基本具備了運(yùn)行條件,正在等待使用處理機(jī)。③睡眠狀態(tài)進(jìn)程不具備運(yùn)行條件,需等待某種事件的發(fā)生,無法繼續(xù)執(zhí)行下去。進(jìn)程狀態(tài)及狀態(tài)轉(zhuǎn)換58

運(yùn)行睡眠就緒調(diào)度調(diào)度睡眠喚醒中斷運(yùn)行睡眠就緒調(diào)度調(diào)度睡眠喚醒中斷595.在UNIX環(huán)境下,進(jìn)程有如下特征:

①每個進(jìn)程在核心進(jìn)程表(proc數(shù)組)都占有一項,在其中保留相應(yīng)的狀態(tài)信息。

②每個進(jìn)程都有一個“每進(jìn)程數(shù)據(jù)區(qū)(perprocessdataarea----ppda)”保留相應(yīng)進(jìn)程更多的信息和核心棧;

③處理機(jī)的全部工作就是在某個時候執(zhí)行某個進(jìn)程

④一個進(jìn)程可生成或消滅另一進(jìn)程

⑤一個進(jìn)程中可申請并占有資源

⑥一個進(jìn)程只沿著一個特定的指令序列運(yùn)行,不會跳轉(zhuǎn)到另一個進(jìn)程的指令序列中去,也不能訪問別的進(jìn)程的數(shù)據(jù)和堆棧。(抗病毒傳播的重要原因之一)5.在UNIX環(huán)境下,進(jìn)程有如下特征:60第三章數(shù)據(jù)緩沖區(qū)高速緩沖硬件緩存(cache)

由一種高速寄存器(register)組成,主要解決CPU與RAM之間的速度差問題。數(shù)據(jù)緩沖區(qū)高速緩沖(buffer)

由軟件實(shí)現(xiàn)的解決文件系統(tǒng)和物理硬盤之間的數(shù)據(jù)同步的一種方法。數(shù)據(jù)緩沖區(qū)高速緩沖是UNIX特有的對數(shù)據(jù)并發(fā)訪問的一種控制機(jī)制。第三章數(shù)據(jù)緩沖區(qū)高速緩沖硬件緩存(cache)61問題的提出:1、磁盤機(jī)械運(yùn)行速度大大低于處理機(jī)的運(yùn)行速度;2、多進(jìn)程并發(fā)運(yùn)行,少量的磁盤(通道)I/O成為瓶頸;3、數(shù)據(jù)訪問的隨機(jī)性,磁盤忙閑不均問題的提出:62解決辦法:1、建立一個被稱為數(shù)據(jù)緩沖區(qū)高速緩沖(簡稱高速緩沖)的內(nèi)部數(shù)據(jù)緩沖區(qū)池(bufferpool)來存放要用的數(shù)據(jù);2、寫數(shù)據(jù)時把數(shù)據(jù)盡量多地盡量長時間地保存在緩沖池中

延遲寫出到磁盤上以備后續(xù)進(jìn)程使用3、讀數(shù)據(jù)時先在緩沖池中查找已有的數(shù)據(jù)如沒有,再從磁盤讀取,并保存在緩沖池中事先預(yù)讀數(shù)據(jù)到緩沖池中解決辦法:633.1緩沖區(qū)及緩沖區(qū)首部

緩沖區(qū)池由若干個緩沖區(qū)組成,每一個緩沖區(qū)又由兩部分組成:一個實(shí)際存放數(shù)據(jù)的存儲區(qū)和一個標(biāo)識該緩沖區(qū)的緩沖區(qū)首部。存儲區(qū)

因?yàn)榫彌_區(qū)首部與數(shù)據(jù)存儲區(qū)之間有一一對應(yīng)的關(guān)系,所以通常把兩者統(tǒng)稱為緩沖區(qū)。緩沖區(qū)是緩沖區(qū)池中數(shù)據(jù)存儲的基本單位。緩沖區(qū)首部3.1緩沖區(qū)及緩沖區(qū)首部存儲區(qū)因?yàn)榫彌_區(qū)首64緩沖區(qū)首部的定義:structbuf{緩沖區(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é)點(diǎn)塊}b_un其它控制信息}緩沖區(qū)首部的定義:653.2緩沖池的結(jié)構(gòu)1、最近最少使用(LRU)算法:LeastRecentlyUsed程序設(shè)計采用模塊化和層次化結(jié)構(gòu),盡量避免使用goto語句,程序跳轉(zhuǎn)少,適應(yīng)“流水線(pipeline)”體系結(jié)構(gòu)的系統(tǒng);特定時間段內(nèi),程序在一個相對集中空間(代碼段)內(nèi)運(yùn)行,涉及的數(shù)據(jù)(廣義的:文件名、變量、指針和數(shù)組等)的個數(shù)相對較少;當(dāng)前使用過的數(shù)據(jù),馬上還要使用的可能性最大,較長時間未用過的數(shù)據(jù),即將使用的可能性最小。3.2緩沖池的結(jié)構(gòu)662、緩沖池設(shè)計基本原則:存放有剛使用過的數(shù)據(jù)盡量長時間地保留在內(nèi)存中,以便馬上還要使用時能在內(nèi)存中找到;需要騰出內(nèi)存空間時,把很久都未使用過(即最近最少使用)的數(shù)據(jù)交換到磁盤上去。這些數(shù)據(jù)馬上還要使用的可能性最小。2、緩沖池設(shè)計基本原則:673、空閑緩沖區(qū)鏈表核心維護(hù)了一個空閑緩沖區(qū)鏈表,它按照最近被使用的先后次序排列??臻e鏈表是一個以空閑緩沖區(qū)鏈表頭開始的“雙向循環(huán)鏈表”。鏈表的開始和結(jié)束都以鏈表頭為標(biāo)志。

鏈表頭空閑緩沖區(qū)1空閑緩沖區(qū)2空閑緩沖區(qū)3空閑緩沖區(qū)n3、空閑緩沖區(qū)鏈表鏈空空空空684、空閑緩沖區(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ū)。4、空閑緩沖區(qū)鏈表操作695、空閑緩沖區(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ū)。5、空閑緩沖區(qū)分類706、緩沖區(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~626、緩沖區(qū)設(shè)置717、緩沖池的結(jié)構(gòu)具有相同hashno的緩沖區(qū)鏈接在同一個hash鏈表中,因此系統(tǒng)中共有63個hash鏈表,分別鏈接hashno為0~62的緩沖區(qū)。每一個hash鏈表都是一個由鏈表頭指向的雙向循環(huán)鏈表,查找某一個指定hashno值的緩沖區(qū)時,也是從相應(yīng)的hash鏈表的表頭位置開始向表尾方向進(jìn)行查找。這63個hash鏈表就構(gòu)成了數(shù)據(jù)緩沖區(qū)高速緩沖的緩沖池,所有的緩沖區(qū)都存放在緩沖池中的某一個鏈表中。鏈表頭緩沖區(qū)1緩沖區(qū)2緩沖區(qū)3緩沖區(qū)nhash鏈表的結(jié)構(gòu)7、緩沖池的結(jié)構(gòu)鏈緩緩緩緩hash鏈表的結(jié)構(gòu)72緩沖區(qū)緩沖區(qū)緩沖區(qū)緩沖區(qū)緩沖區(qū)緩沖區(qū)緩沖區(qū)緩沖區(qū)緩沖區(qū)空閑鏈表頭Hash鏈表頭hashno=0hashno=1hashno=62緩沖池的結(jié)構(gòu)緩沖區(qū)緩沖區(qū)緩沖區(qū)緩沖區(qū)緩沖區(qū)緩沖區(qū)緩沖區(qū)緩沖區(qū)緩沖區(qū)空閑鏈738、緩沖區(qū)的使用如果要找特定緩沖區(qū),根據(jù)hashno從相應(yīng)的hash鏈表的表頭處開始逐個向后查找;如果找到,則直接取用,并將其移動到hash鏈的鏈頭;如果未找到,則從相應(yīng)的空閑緩沖區(qū)鏈表的表頭處取下一個空閑緩沖區(qū),填入相應(yīng)數(shù)據(jù),重新計算其hashno,并放到新的hash鏈表的表頭;釋放緩沖區(qū)時,將該緩沖區(qū)仍保留在原h(huán)ash隊列中,同時掛接到空閑緩沖區(qū)鏈表的表尾。(同時在兩個隊列中)申請緩沖區(qū)的兩個途徑:要指定緩沖區(qū)——在hash鏈表中查找要空閑緩沖區(qū)——在空閑鏈表中查找8、緩沖區(qū)的使用749、進(jìn)一步說明一個緩沖區(qū)只有當(dāng)它是空閑狀態(tài)時,它才同時處在hash鏈表和空閑鏈表中。如果不空閑,則它只能處在某一個hash鏈表中。在空閑緩沖區(qū)鏈表中的緩沖區(qū)一定在某個hash鏈表中;在hash鏈表中的緩沖區(qū)不一定在空閑鏈中。不存在脫離hash鏈表的另一個空閑的緩沖區(qū)鏈表。緩沖池中的緩沖區(qū)個數(shù)是固定不變的,每個緩沖區(qū)在不同時刻存放著不同的磁盤數(shù)據(jù)塊,具有不同的hash值,因此處在不同的hash鏈表中。緩沖區(qū)中的數(shù)據(jù)與某個磁盤數(shù)據(jù)塊一一對應(yīng),這種對應(yīng)有兩個特點(diǎn):

①一個磁盤數(shù)據(jù)塊在緩沖池中最多只能有一個副本;

②緩沖區(qū)與數(shù)據(jù)塊的對應(yīng)是動態(tài)的,LRU數(shù)據(jù)塊將被釋放。9、進(jìn)一步說明753.3緩沖區(qū)的檢索算法

在UNIX文件系統(tǒng)中的下層,即直接與邏輯存儲設(shè)備聯(lián)系的部分,包含如下基本算法:

getblk申請一個緩沖區(qū)brelse釋放一個緩沖區(qū)bread讀一個磁盤塊breada讀一個磁盤塊,預(yù)讀另一個磁盤塊bwrite寫磁盤塊3.3緩沖區(qū)的檢索算法761、申請一個緩沖區(qū)算法getblk根據(jù)緩沖池的結(jié)構(gòu),核心申請一個緩沖區(qū)分配個磁盤塊時,可能出現(xiàn)的五種典型狀況:

該塊已在hash隊列中,并且緩沖區(qū)是空閑的;

hash隊列中找不到該塊,需從空閑鏈表中分配一個緩沖區(qū);

hash隊列中找不到該塊,在從空閑鏈表中分配一個緩沖區(qū)時,發(fā)現(xiàn)該空閑緩沖區(qū)標(biāo)記有“延遲寫”,核心必須寫出緩沖區(qū)內(nèi)容到磁盤上,再重新分配一個空閑緩沖區(qū);

hash隊列中找不到該塊,并且空閑鏈表已空;

該塊已在hash隊列中,但該緩沖區(qū)目前狀態(tài)為“忙”。1、申請一個緩沖區(qū)算法getblk77UNIXLinux操作系統(tǒng)內(nèi)核結(jié)構(gòu)課件782、釋放一個緩沖區(qū)算法brelse

喚醒等待緩沖區(qū)的所有進(jìn)程提高處理機(jī)的執(zhí)行級別以封鎖同級或低級的中斷將該緩沖區(qū)放到空閑隊列的尾部(緩沖區(qū)有效)或頭部(緩沖區(qū)無效)降低處理機(jī)的執(zhí)行級別以開放中斷2、釋放一個緩沖區(qū)算法brelse79UNIXLinux操作系統(tǒng)內(nèi)核結(jié)構(gòu)課件803、讀一個磁盤塊bread由getblk算法申請一個可用的緩沖區(qū)如果緩沖區(qū)中的內(nèi)容有效,則直接返回該緩沖區(qū)如果緩沖區(qū)中的內(nèi)容無效,則啟動磁盤去讀所需的數(shù)據(jù)塊等待磁盤操作完成后返回3、讀一個磁盤塊bread81算法bread輸入:文件系統(tǒng)號輸出:含有數(shù)據(jù)的緩沖區(qū){ 得到該塊的緩沖區(qū)(算法getblk); if(緩沖區(qū)數(shù)據(jù)有效) return(緩沖區(qū)); 啟動磁盤讀; sleep(等待“讀盤完成”事件); return(緩沖區(qū));}算法bread824、讀一個磁盤塊并預(yù)讀另一個磁盤塊breada

預(yù)讀的前提:程序是在一個有限的空間內(nèi)運(yùn)行,程序?qū)?shù)據(jù)的訪問是可預(yù)見的。

預(yù)讀的命中率:不一定達(dá)到100%,但良好的系統(tǒng)結(jié)構(gòu)和算法可使命中率達(dá)到較高的水平。

預(yù)讀的結(jié)果:放在緩沖池內(nèi),以免需要的時候再去啟動磁盤讀數(shù)據(jù)塊。4、讀一個磁盤塊并預(yù)讀另一個磁盤塊breada83算法breada輸入:(1)立即讀的文件系統(tǒng)塊號(2)異步讀的文件系統(tǒng)塊號輸出:含有立即讀的數(shù)據(jù)的緩沖區(qū){ if(第一塊不在高速緩沖中) { 為第一塊獲得緩沖區(qū)(getblk); if(緩沖區(qū)內(nèi)容無效) 啟動磁盤讀; } if(第二塊不在高速緩沖中) { 為第二塊獲得緩沖區(qū)(getblk); if(緩沖區(qū)數(shù)據(jù)有效) 釋放緩沖區(qū)(brelse); else 啟動磁盤讀; } if(第一塊本來就在高速緩沖中) { 讀第一塊(bread); return(緩沖區(qū)); } sleep(第一個緩沖區(qū)包含有效數(shù)據(jù)的事件); return(緩沖區(qū));}算法breada845、寫磁盤塊bwrite

啟動磁盤驅(qū)動程序的寫操作如果是“同步寫”,則本進(jìn)程睡眠等待磁盤寫操作的完成,磁盤寫操作完成后,中斷喚醒本進(jìn)程,本進(jìn)程釋放該緩沖區(qū)并返回;如果是“異步寫”,則無需等待磁盤寫操作的完成,將緩沖區(qū)放到空閑鏈表的表頭,以便隨后某個進(jìn)程申請空閑緩沖區(qū)時,將其寫到磁盤上去。本進(jìn)程不再關(guān)心該緩沖區(qū)實(shí)際被寫出的時間和結(jié)果,而直接返回去作其它事情。事實(shí)上無論是同步寫還是異步寫,其根本區(qū)別在于本進(jìn)程是否等待磁盤驅(qū)動程序完成操作后所發(fā)出的中斷信號。5、寫磁盤塊bwrite85算法bwrite輸入:緩沖區(qū)輸出:無{ 啟動磁盤讀; if(I/O同步) { sleep(等待“I/O完成”事件); 釋放緩沖區(qū)(brelse); } elseif(緩沖區(qū)標(biāo)記著延遲寫) 為緩沖區(qū)做標(biāo)記以放到空閑緩沖區(qū)鏈表頭部;}算法bwrite863.3數(shù)據(jù)緩沖區(qū)高速緩沖的優(yōu)缺點(diǎn)優(yōu)點(diǎn):提供了對磁盤塊的統(tǒng)一的存取方法消除了用戶對用戶緩沖區(qū)中數(shù)據(jù)的特殊對齊需要減少了磁盤訪問的次數(shù),提高了系統(tǒng)的整體I/O效率有助于保持文件系統(tǒng)的完整性缺點(diǎn):數(shù)據(jù)未及時寫盤而帶來的風(fēng)險額外的數(shù)據(jù)拷貝過程,大量數(shù)據(jù)傳輸時影響性能3.3數(shù)據(jù)緩沖區(qū)高速緩沖的優(yōu)缺點(diǎn)87第四章文件和文件系統(tǒng)的內(nèi)部結(jié)構(gòu)現(xiàn)代UNIX的文件系統(tǒng)通??捎扇竽K組成:①本地文件系統(tǒng)(UFS)——UserFileSystem②網(wǎng)絡(luò)文件系統(tǒng)(NFS)——NetworkFileSystem③虛擬文件系統(tǒng)(VFS)——VirtualFileSystem第四章文件和文件系統(tǒng)的內(nèi)部結(jié)構(gòu)現(xiàn)代UNIX的文件系統(tǒng)通常88本地文件系統(tǒng)(UFS)是UNIX系統(tǒng)中的基本文件系統(tǒng),它通常固定存放在本地機(jī)器的存貯設(shè)備上,任何一種結(jié)構(gòu)形式的文件系統(tǒng)都必然會直接或間接地與某個本地文件系統(tǒng)相聯(lián)系。本地文件系統(tǒng)的構(gòu)成一個根文件系統(tǒng)+若干子文件系統(tǒng)所組成根文件系統(tǒng)存放本操作系統(tǒng)的最主要和最基本的部分可獨(dú)立啟動運(yùn)行系統(tǒng)起動后,根文件系統(tǒng)就不能卸下來子文件系統(tǒng)主要存放應(yīng)用程序和用戶文件一般不能獨(dú)立啟動系統(tǒng)運(yùn)行過程中可隨時安裝和卸下本地文件系統(tǒng)(UFS)89網(wǎng)絡(luò)文件系統(tǒng)(NFS)

是本地機(jī)器上的文件系統(tǒng)和遠(yuǎn)地機(jī)器上的文件系統(tǒng)之間的介質(zhì),它管理和控制所有有關(guān)對遠(yuǎn)地文件的各種操作,給本地用戶提供一個訪問遠(yuǎn)地文件的使用方便的高層接口,避免用戶直接涉及網(wǎng)絡(luò)通訊方面的具體細(xì)節(jié)。網(wǎng)絡(luò)文件系統(tǒng)(NFS)90虛擬文件系統(tǒng)(VFS)VFS是整個操作系統(tǒng)的用戶界面,它給用戶提供一個統(tǒng)一的文件系統(tǒng)使用接口,避免用戶涉及各個子文件系統(tǒng)的特征部分。用戶感覺使用的是一個整體的,比本地機(jī)器上實(shí)際硬盤空間大得多的文件系統(tǒng)。虛構(gòu)文件系統(tǒng)接受來自用戶的操作請求,根據(jù)該操作所訪問的文件是存放在本地機(jī)器上,還是存放在遠(yuǎn)地機(jī)器上而分別把操作交給本地文件系統(tǒng)或網(wǎng)絡(luò)文件系統(tǒng);本地文件系統(tǒng)或網(wǎng)絡(luò)文件系統(tǒng)(實(shí)際上再傳給遠(yuǎn)地機(jī)器上的本地文件系統(tǒng))進(jìn)行相應(yīng)的操作后,將結(jié)果返回到虛擬文件系統(tǒng)中再傳回給用戶。虛擬文件系統(tǒng)(VFS)91網(wǎng)絡(luò)虛擬文件系統(tǒng)VFS網(wǎng)絡(luò)文件系統(tǒng)NFS本地文件系統(tǒng)UFS物理存儲介質(zhì)虛擬文件系統(tǒng)VFS網(wǎng)絡(luò)文件系統(tǒng)NFS本地文件系統(tǒng)UFS物理存儲介質(zhì)用戶用戶A機(jī)器B機(jī)器基于虛擬文件系統(tǒng)的體系結(jié)構(gòu)網(wǎng)絡(luò)虛擬924.1文件系統(tǒng)結(jié)構(gòu)

4.1.1本地文件系統(tǒng)1.文件的存貯結(jié)構(gòu)UNIX的普通文件的邏輯結(jié)構(gòu)是無格式的有序字節(jié)流,而它們的物理存貯結(jié)構(gòu)是以索引方式來組織的。每個文件都是由一個索引節(jié)點(diǎn)i節(jié)點(diǎn)來表示的,每個i節(jié)點(diǎn)由其i節(jié)點(diǎn)號來標(biāo)識。i節(jié)點(diǎn)通常以靜態(tài)的形式存放在磁盤的i節(jié)點(diǎn)表中。每個磁盤i節(jié)點(diǎn)表項是由數(shù)據(jù)結(jié)構(gòu)icommon定義的,描述對應(yīng)文件的靜態(tài)參數(shù)。4.1文件系統(tǒng)結(jié)構(gòu)93超級塊磁盤i節(jié)點(diǎn)表數(shù)據(jù)存儲區(qū)磁盤icommon表icommonicommonicommonicommonicommon文件所有者標(biāo)識(UID)用戶組標(biāo)識(GID)文件類型(FIFO、DIR、CHR、BLK、REG、LNK等)文件保護(hù)模式(存取許可權(quán))mode文件存取時間(atime,mtime,ctime)鏈接數(shù)目link文件大小size文件數(shù)據(jù)塊索引表indextable超級塊磁盤i節(jié)點(diǎn)表數(shù)據(jù)存儲區(qū)磁盤icommon表icommo94icommon與inode的關(guān)系

進(jìn)程要讀寫一個文件時,先在內(nèi)存的活動i節(jié)點(diǎn)表(即inode表)中申請一個空閑的活動i節(jié)點(diǎn),并把磁盤上i節(jié)點(diǎn)(icommon)中的各項參數(shù)讀入其中,當(dāng)核心操作完成后,如果必要,就把在內(nèi)存中的活動i節(jié)點(diǎn)寫回到磁盤上去。內(nèi)存活動i節(jié)點(diǎn)由數(shù)據(jù)結(jié)構(gòu)inode來定義,它除了包含磁盤上對應(yīng)的icommon中的各項參數(shù)外,還包含有其它的參數(shù),如該活動i節(jié)點(diǎn)的狀態(tài)、文件所在的邏輯設(shè)備號、i節(jié)點(diǎn)號、活動i節(jié)點(diǎn)鏈接指針,最近使用的i節(jié)點(diǎn)在目錄中的位置等動態(tài)信息。icommon與inode的關(guān)系95structinode{活動i節(jié)點(diǎn)鏈接指針狀態(tài)標(biāo)志設(shè)備號i節(jié)點(diǎn)號最近訪問的i節(jié)點(diǎn)在目錄中的位置空閑i節(jié)點(diǎn)鏈接指針structincommon{文件模式和類型(FIFO、DIR、CHR、BLK、REG、LNK等)文件鏈接數(shù)文件所有者標(biāo)識數(shù)(UID)文件所屬用戶組標(biāo)識數(shù)(GID)文件大小文件最近存取時間(atime,mtime,ctime)數(shù)據(jù)塊索引表其它信息}}structinode{962、數(shù)據(jù)塊索引表數(shù)據(jù)塊索引表用于檢索本文件占用的數(shù)據(jù)塊。它包含12項直接索引表目和3項間接索引表目。根據(jù)要讀寫的數(shù)據(jù)在文件中的位置可計算出該數(shù)據(jù)所在的邏輯塊號,查索引表就可找到邏輯塊所在的文件系統(tǒng)塊號。系統(tǒng)根據(jù)計算出來的邏輯塊號判斷是否包含在直接索引表中,如果是,則取出直接索引表中的文件系統(tǒng)塊號;如不是,則看是否包含在一次間接索引塊中,否則再尋找二次和三次間接索引塊。最長要存取三次間址索引塊才能找到相應(yīng)數(shù)據(jù)的文件系統(tǒng)塊號(要取出數(shù)據(jù)則要讀4次磁盤)。

2、數(shù)據(jù)塊索引表97數(shù)據(jù)塊索引表一級間址塊二級間址塊三級間址塊數(shù)據(jù)塊數(shù)據(jù)塊索引表一級間址塊二級間址塊三級間址塊數(shù)據(jù)塊983、inode表的結(jié)構(gòu)在內(nèi)存中,活動i節(jié)點(diǎn)表類似于數(shù)據(jù)緩沖區(qū)高速緩沖中的緩沖池結(jié)構(gòu)。活動i節(jié)點(diǎn)表中的每一項就是一個活動i節(jié)點(diǎn)緩沖區(qū),用來存放一個被打開文件的inode。(以下把活動i節(jié)點(diǎn)緩沖區(qū)簡稱為“活動i節(jié)點(diǎn)”)??臻e的活動i節(jié)點(diǎn)相互鏈接在一起構(gòu)成“空閑活動i節(jié)點(diǎn)鏈表”,這是一個雙向(非循環(huán))鏈表,分別由鏈頭指針和鏈尾指針指向空閑活動i節(jié)點(diǎn)鏈表的開始和結(jié)束。如下圖所示:3、inode表的結(jié)構(gòu)99鏈表頭空閑i節(jié)點(diǎn)1空閑i節(jié)點(diǎn)2空閑i節(jié)點(diǎn)3空閑i節(jié)點(diǎn)n空閑活動i節(jié)點(diǎn)鏈表為雙向(非循環(huán))鏈表,分別由鏈表頭指針和鏈表尾指針指向空閑鏈表的首尾。NULL鏈表尾鏈空空空空空閑活動i節(jié)點(diǎn)鏈表為雙向(非循環(huán))鏈表,分100活動i節(jié)點(diǎn)hash鏈表當(dāng)某個文件(即某個磁盤i節(jié)點(diǎn))被打開時,根據(jù)該i節(jié)點(diǎn)所對應(yīng)的設(shè)備號和i節(jié)點(diǎn)號計算其hash值:

hn=(devno+inumber)%64可得到0~63共64個hash值。具有相同hash值的活動i節(jié)點(diǎn)鏈接在同一個hash鏈表中,這樣內(nèi)存中就有64個hash鏈表,每個hash鏈表都是由hash鏈頭開始的雙向鏈表(與數(shù)據(jù)緩沖區(qū)鏈表不同的是此處的空閑和非空閑鏈表都是非循環(huán)的)。內(nèi)存活動i節(jié)點(diǎn)表就是由這64個hash鏈表組成。如下圖所示:活動i節(jié)點(diǎn)hash鏈表101inodeinodeinodeinodeinodeinodeinodeinodeinode空閑鏈表頭Hash鏈表頭hn=0hn=1hn=63NULL空閑鏈表尾活動inode表的結(jié)構(gòu)inodeinodeinodeinodeinodeinode1024、文件系統(tǒng)的存儲結(jié)構(gòu)

在UNIX系統(tǒng)中,一個物理磁盤通常被劃分成一個或多個邏輯文件系統(tǒng)(簡稱文件系統(tǒng)或子文件系統(tǒng)),每個邏輯文件系統(tǒng)都被當(dāng)作一個由邏輯設(shè)備號標(biāo)識的邏輯設(shè)備。UNIX的普通文件和目錄文件就保存在這樣的文件系統(tǒng)中。邏輯文件系統(tǒng)的存儲結(jié)構(gòu)可分為兩類型:

一級存儲結(jié)構(gòu)型:常用于運(yùn)行環(huán)境較小的文件系統(tǒng)中

二級存儲結(jié)構(gòu)型:常用于運(yùn)行環(huán)境較大(特別是硬盤空間較大)的文件系統(tǒng)中4、文件系統(tǒng)的存儲結(jié)構(gòu)103①、一級存儲結(jié)構(gòu)型這種類型的邏輯文件系統(tǒng)由超級塊、索引節(jié)點(diǎn)表塊和數(shù)據(jù)區(qū)組成,(如果是根文件系統(tǒng),就還包括引導(dǎo)塊)。整個存儲結(jié)構(gòu)是一維的。引導(dǎo)塊:boot程序超級塊:fs結(jié)構(gòu),存放文件系統(tǒng)的靜態(tài)參數(shù)i節(jié)點(diǎn)表塊:磁盤icommon表數(shù)據(jù)區(qū):各數(shù)據(jù)塊①、一級存儲結(jié)構(gòu)型引導(dǎo)塊:boot程序104②、兩級存儲結(jié)構(gòu)型

這種存儲結(jié)構(gòu)的文件系統(tǒng)由兩級組成:第一級由超級塊和若干個柱面組塊(cylindergroupblock)所組成(如果是根文件系統(tǒng)則還包括引導(dǎo)塊)。第二級(即柱面組塊)又是由超級塊拷貝塊、柱面組信息塊,i節(jié)點(diǎn)表塊和數(shù)據(jù)區(qū)所組成。文件系統(tǒng)的存儲結(jié)構(gòu)是二維的。目前大多數(shù)在大存儲環(huán)境下運(yùn)行的UNIX版本都采用這種存貯結(jié)構(gòu),其優(yōu)點(diǎn)是能快速定位數(shù)據(jù)塊。

第一級存儲結(jié)構(gòu)

第二級存儲結(jié)構(gòu)②、兩級存儲結(jié)構(gòu)型第一級存儲結(jié)構(gòu)第二級存儲結(jié)構(gòu)105超級塊是由fs定義的數(shù)據(jù)結(jié)構(gòu),用于存放文件系統(tǒng)的靜態(tài)參數(shù):structfs{內(nèi)存超級塊鏈接指針超級塊的磁盤地址柱面組塊的位移量最近修改時間文件系統(tǒng)大小文件系統(tǒng)塊大小柱面組數(shù)柱面組大小片大小文件系統(tǒng)標(biāo)識數(shù)文件系統(tǒng)標(biāo)志區(qū)最近訪問的柱面組號確定分配算法的參數(shù)}超級塊106超級塊拷貝塊:在每個柱面組塊中存放有一個超級塊拷貝塊,其目的是使系統(tǒng)在超級塊被意外破壞時,能從任何一個柱面組中進(jìn)行恢復(fù)而不致使整個文件系統(tǒng)陷入癱瘓。

每個柱面組中的超級塊拷貝塊的存放位置為安全起見不一定都裝在柱面組中的最前面,而是可浮動地裝在該柱面組中的任何位置。一般性的方法是:如果第n號柱面組中的超級塊拷貝塊開始于該柱面組中的第i磁道,則第n+1柱面組中的超級塊拷貝塊開始于該柱面組中的第i+1磁道。文件系統(tǒng)一旦建立后,它們的位置就是固定不變的。超級塊拷貝塊:107柱面組信息塊(cg塊)

柱面組信息塊中存放的是有關(guān)該柱面組的靜態(tài)參數(shù),它由數(shù)據(jù)結(jié)構(gòu)cg來定義:structcg{內(nèi)存中柱面組塊的鏈接指針本柱面組塊中i節(jié)點(diǎn)表大小本柱面組塊中數(shù)據(jù)區(qū)大小最近一次所用塊的位置最近一次所用片的位置最近一次所用i節(jié)點(diǎn)的位置本柱面組空閑數(shù)據(jù)塊總數(shù)i節(jié)點(diǎn)位示圖空閑塊位示圖}柱面組信息塊(cg塊)108位示圖:位示圖為一張表,其中的每一個二進(jìn)制位(bit)的值來表示某一個資源(例如數(shù)據(jù)塊或i節(jié)點(diǎn))的狀態(tài),這樣每檢測一個字節(jié)的值就可以知道八個資源的狀態(tài);每檢測一個四字節(jié)的整數(shù)的值就可以知道32個資源的狀態(tài)。系統(tǒng)只需要維護(hù)一張較小的表(位示圖)就可以快速地檢測指定資源的忙閑狀態(tài),或快速查找可用的空閑資源。位示圖:1095、文件系統(tǒng)的數(shù)據(jù)塊

在文件系統(tǒng)中,按存儲單位來劃分,由大到小可有下列層次:文件系統(tǒng)(filesystem)柱面組(cylindergroup)柱面(cylinder)磁道(track)扇區(qū)(sector)DEV_BSIZE512字節(jié)5、文件系統(tǒng)的數(shù)據(jù)塊文件系統(tǒng)(filesystem)柱110文件系統(tǒng)的邏輯塊大?。篋EV_BSIZE*2?即1k、2k、4k、8k、16k…目的:提高傳輸速度,減少overhead文件系統(tǒng)的邏輯片大?。篋EV_BSIZE*2?即1k、2k、4k、8k、16k…目的:減少文件尾的碎片浪費(fèi)。文件系統(tǒng)的邏輯塊大小:1116.目錄和目錄項在UNIX文件系統(tǒng)中,目錄的組織形式采用的是樹形結(jié)構(gòu),一個邏輯文件系統(tǒng)就是一棵目錄樹。目錄也被當(dāng)作文件進(jìn)行處理,一個目錄文件的結(jié)構(gòu)為表狀結(jié)構(gòu),其中通常包含有若干表項,稱為目錄項,這些目錄項既可以是普通文件的入口,也可以是子目錄的入口。每一個目錄項中通常包含兩部分內(nèi)容:

文件的i節(jié)點(diǎn)號文件名6.目錄和目錄項112目錄/home/student/xiaolan的路徑和目錄結(jié)構(gòu)//home/bin/home/log/home/student/home/student/xiaolan/home/student/xiaolan/src/home.student/xiaolan/bckup目錄/home/student/xiaolan的路徑和目113每個目錄項由數(shù)據(jù)結(jié)構(gòu)direct來定義:#defineMAXNAMLEN14structdirect{shortd_ino;/*目錄項i節(jié)點(diǎn)號*/chard_name[MAXNAMELEN];/*目錄項名字字符串*/}每個目錄項的長度通常是確定的,為16個字節(jié),其中前兩個字節(jié)存放文件的i節(jié)點(diǎn)號d_ino,后面14個字節(jié)存放文件名d_name。這種定長目錄項在算法實(shí)現(xiàn)方面比較簡單,在使用靈活方面都有所不便,并且可能因許多目錄項名字長度不足14字符面有空間浪費(fèi)。每個目錄項由數(shù)據(jù)結(jié)構(gòu)direct來定義:114在UNIX的每個文件系統(tǒng)中,有三個i節(jié)點(diǎn)號是有固定用途的:0號i節(jié)點(diǎn):表示空目錄項,當(dāng)某個目錄項被刪除時,該目錄項的i節(jié)點(diǎn)號被置為0。1號i節(jié)點(diǎn):表示壞塊文件,所有的磁盤壞塊都劃歸到該節(jié)點(diǎn)上;2號i節(jié)點(diǎn):固定表示該邏輯文件系統(tǒng)的根(root)目錄;3號i節(jié)點(diǎn):表示該文件系統(tǒng)中的lost+found目錄。在UNIX的每個文件系統(tǒng)中,有三個i節(jié)點(diǎn)1157、變長目錄項的目錄結(jié)構(gòu)#defineMAXNAMLEN255structdirect{longd_ino;/*目錄項i節(jié)點(diǎn)號*/shortd_reclen;/*目錄項入口長度(占用長度)*/shortd_namelen;/*目錄項名字長度*/chard_name[MAXNAMLEN+1]/*名字字符串,+1為串結(jié)束符\0*/}

由于目錄中各目錄項的長度是變化的,因此必須在目錄項中標(biāo)明本目錄項的長度。前一個目錄項釋放時,把該目錄項的空間全部合并到前一個目錄項中,形成前面一個目錄項占用空間大于實(shí)際使用的空間。

在增加新目錄時,先查看目錄中各目錄項是否占用多余空間,如有,則進(jìn)行壓縮,把釋

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論