




已閱讀5頁(yè),還剩113頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章實(shí)例分析 MS DOS操作系統(tǒng) MS DOS是Microsoft公司為IBMPC系列微機(jī)研制的一個(gè)單用戶 單任務(wù)的磁盤(pán)操作系統(tǒng) 1981年8月 MS DOS1 0版誕生 它占據(jù)當(dāng)時(shí)機(jī)器64KB內(nèi)存中的12KB 支持5 25英寸軟盤(pán) 隨著時(shí)間的推移 MS DOS不斷地更新版本 1983年3月 推出MS DOS2 0版 1984年8月 推出MS DOS3 0版 MS DOS3 0版有很多的改進(jìn)版 比如3 1 3 2 3 3等 1988年7月 MS DOS4 0版出現(xiàn) 1991年4月發(fā)布了MS DOS5 0版 目前 可見(jiàn)MS DOS的最高版本為7 X 退出 正是由于MS DOS隨時(shí)根據(jù)市場(chǎng)的需求被不斷地完善 才使它具有如此頑強(qiáng)的生命力 才能夠獲得如此廣泛的普及與應(yīng)用 1995年8月 Microsoft公司推出了窗口操作系統(tǒng)Windows95 由于它精美的外觀 菜單式操作以及友好的界面 從而對(duì)MS DOS產(chǎn)生了極大地沖擊 但是 MS DOS的實(shí)現(xiàn)原理 設(shè)計(jì)技術(shù)和方法 仍然可以給予人們很多的啟迪和借鑒 本章著重講述四個(gè)方面的內(nèi)容 1 MS DOS的進(jìn)程控制塊 程序段前綴與環(huán)境塊 2 MS DOS對(duì)常規(guī)內(nèi)存的管理以及地址的 分段 表示法 3 MS DOS的文件分配表和樹(shù)型目錄結(jié)構(gòu) 4 MS DOS的設(shè)備頭鏈以及對(duì)塊設(shè)備 字符設(shè)備的不同管理方法 8 1MS DOS的處理機(jī)管理8 2MS DOS的存儲(chǔ)管理8 3MS DOS的文件管理8 4MS DOS的設(shè)備管理 8 1MS DOS的處理機(jī)管理 8 1 1MS DOS的基本組成MS DOS采用的是層次模塊結(jié)構(gòu) 由一個(gè)引導(dǎo)程序和三個(gè)程序模塊組成 如圖8 1所示 各部分的功能如下 BOOT 引導(dǎo)程序 引導(dǎo)程序BOOT是在磁盤(pán)初始化時(shí) 由格式化命令FORMAT寫(xiě)在軟盤(pán)的第0扇區(qū)或硬盤(pán)的主引導(dǎo)扇區(qū)上的 它是一個(gè)極短的程序 主要的任務(wù)是檢查哪個(gè)磁盤(pán)驅(qū)動(dòng)器為DOS的系統(tǒng)盤(pán) 然后再檢查系統(tǒng)盤(pán)根目錄下的頭兩個(gè)文件是否是IO SYS和MSDOS SYS 如果為真 則把IO SYS文件讀入內(nèi)存 從而完成引導(dǎo)任務(wù) 可見(jiàn) DOS的引導(dǎo)程序只在系統(tǒng)啟動(dòng)時(shí)起作用 IO SYS及ROM BIOS 這是MS DOS的輸入 輸出管理模塊 它由兩部分構(gòu)成 在系統(tǒng)盤(pán)上的IO SYS 是進(jìn)行輸入 輸出的接口模塊 固化在ROM中的ROM BIOS 是一個(gè)具體的設(shè)備驅(qū)動(dòng)程序 在DOS系統(tǒng)初啟時(shí) 由引導(dǎo)程序負(fù)責(zé)將IO SYS裝入內(nèi)存 引導(dǎo)任務(wù)結(jié)束 轉(zhuǎn)而執(zhí)行IO SYS中的系統(tǒng)初始化程序 該程序負(fù)責(zé)調(diào)入MSDOS SYS 負(fù)責(zé)解釋DOS系統(tǒng)的配置文件 CONFIG SYS 設(shè)置系統(tǒng)的運(yùn)行環(huán)境 負(fù)責(zé)裝入COMMAND COM模塊 在系統(tǒng)運(yùn)行過(guò)程中 接到輸入 輸出請(qǐng)求后 先由IO SYS對(duì)命令加以解釋 轉(zhuǎn)換成有關(guān)的設(shè)備控制命令 然后再與ROM BIOS中具體的設(shè)備驅(qū)動(dòng)程序發(fā)生關(guān)聯(lián) 進(jìn)而完成用戶所要求的輸入 輸出任務(wù) MSDOS SYS 這是DOS內(nèi)核 一方面實(shí)施對(duì)DOS磁盤(pán)文件的操作管理 另一方面還管理內(nèi)存 外部設(shè)備以及其他系統(tǒng)資源 并為用戶使用DOS系統(tǒng)和這些資源提供諸多的系統(tǒng)調(diào)用 COMMAND COM 這是命令處理程序模塊 是MS DOS操作系統(tǒng)與用戶之間的接口 它接收用戶輸入的各種DOS命令 解釋后加以執(zhí)行 它將負(fù)責(zé)設(shè)置DOS的有關(guān)中斷向量 負(fù)責(zé)檢查啟動(dòng)時(shí)有無(wú)DOS的自動(dòng)執(zhí)行批處理文件 AUTOEXEC BAT 若有 則調(diào)入執(zhí)行 然后處于等待用戶輸入的狀態(tài) COMMAND COM在內(nèi)存由兩部分組成 一是COMMAND COM的暫駐內(nèi)存模塊 CCPT 一是COMMAND COM的常駐內(nèi)存模塊 CCPR 它們分散存放在不同的區(qū)域中 如圖8 2所示 COMMAND COM的暫駐內(nèi)存模塊 CCPT 定位在內(nèi)存儲(chǔ)器 640KB 的最高端 這個(gè)區(qū)域?qū)嶋H上是整個(gè)內(nèi)存中的可用存儲(chǔ)空間 即可以分配給用戶程序使用的空間 因此 如果用戶程序很大 就有可能將其覆蓋掉 正因?yàn)檫@個(gè)原因 才把它稱(chēng)為 暫駐內(nèi)存模塊 它的內(nèi)容是 命令接收及解釋程序 內(nèi)部命令程序 批命令處理程序以及外部命令裝入程序四個(gè)部分 從其組成可以看出 該模塊負(fù)責(zé)接收并解釋用戶通過(guò)鍵盤(pán)鍵入的命令 如果是內(nèi)部命令 則立即從此模塊中調(diào)用相應(yīng)的程序執(zhí)行 DOS把常用的命令稱(chēng)為內(nèi)部命令 若是外部命令 DOS把不常用的命令稱(chēng)為外部命令 則通過(guò)INT21H中斷處理程序 將外部命令調(diào)入并執(zhí)行 COMMAND COM的常駐內(nèi)存模塊 CCPR 與暫駐內(nèi)存模塊隔著可用存儲(chǔ)空間相對(duì)而放 該模塊很小 主要就是一個(gè)檢查并重新安裝暫駐模塊的程序 DOS內(nèi)部是這樣設(shè)計(jì)的 總是讓用戶程序執(zhí)行完畢后返回到CCPR 于是只要用戶程序執(zhí)行完 CCPR就會(huì)立即投入運(yùn)行 它檢查CCPT是否被用戶程序覆蓋 如果被覆蓋 則啟動(dòng)重新安裝程序 將CCPT從它所在的系統(tǒng)盤(pán)區(qū)調(diào)入到它所在的內(nèi)存高端區(qū)域中 DOS把它的COMMAND COM模塊分成兩個(gè)部分 各占一個(gè)存儲(chǔ)區(qū) 一個(gè)常駐 一個(gè)暫駐 存儲(chǔ)區(qū)域雖然分隔兩處 卻是DOS完成命令處理的不可分割的整體 暫駐模塊完成命令處理的主體工作 常駐模塊確保系統(tǒng)的正常運(yùn)行 DOS之所以這樣精心地安排COMMAND COM 主要是為了給用戶提供盡可能大的存儲(chǔ)空間 提高整個(gè)內(nèi)存儲(chǔ)器的利用率 MS DOS的三大模塊 IO SYS MSDOS SYS COMMAN COM 形成了一個(gè)層次結(jié)構(gòu) 命令處理程序 COMMAN COM 是人 機(jī)界面 是體現(xiàn)MS DOS操作系統(tǒng)外部特性的模塊 因此它應(yīng)該在最上層 以便與用戶進(jìn)行交往 DOS內(nèi)核 MSDOS SYS 主要是實(shí)行文件管理 也兼管外部設(shè)備 它起到呈上啟下的作用 因此處于中間層 BIOS與計(jì)算機(jī)硬件關(guān)系密切 所以放在最下層 層次結(jié)構(gòu)使系統(tǒng)清晰 有條理 8 1 2MS DOS的進(jìn)程1 程序段前綴 PSP 在MS DOS中 由代碼 數(shù)據(jù) 工作棧組成的用戶程序 最終通過(guò)連接 形成一個(gè)擴(kuò)展名為 EXE的可執(zhí)行浮動(dòng)代碼程序 這個(gè)程序的地址空間就是用戶作業(yè)的邏輯地址空間 當(dāng)通過(guò)系統(tǒng)調(diào)用EXEC調(diào)用它時(shí) 就在內(nèi)存可用存儲(chǔ)空間里為其分配一個(gè)連續(xù)的分區(qū) 可以看出 MS DOS實(shí)行的是可變式分區(qū)存儲(chǔ)管理方案 成為它的絕對(duì)地址空間 但是要注意 這個(gè)分區(qū)的尺寸不等于用戶地址空間大小 而是用戶地址空間加上256個(gè)字節(jié) 如圖8 3所示 這個(gè)加在程序絕對(duì)地址空間前面的256個(gè)字節(jié) 就是該程序的程序段前綴 PSP 也可以說(shuō)是DOS進(jìn)程的進(jìn)程控制塊 2 環(huán)境塊 EVB 在MS DOS中 進(jìn)程的程序段與程序段前綴總是被分配在同一個(gè)內(nèi)存分區(qū)中 環(huán)境塊則被安排在另一個(gè)分區(qū) 進(jìn)程的環(huán)境塊由一系列格式為 變量名 參數(shù) 的環(huán)境參數(shù)組成 以便為進(jìn)程的運(yùn)行提供一個(gè)良好的環(huán)境 正因?yàn)槿绱?可以把DOS中進(jìn)程的環(huán)境塊視為進(jìn)程控制塊的擴(kuò)充 即是進(jìn)程的擴(kuò)充控制塊 進(jìn)程程序段前綴與環(huán)境塊之間的聯(lián)系 如圖8 4所示 它用到了DOS對(duì)常規(guī)內(nèi)存管理中設(shè)置的數(shù)據(jù)結(jié)構(gòu) 內(nèi)存控制塊 MCB 下面為此做一些解釋 為了管理空閑的和已經(jīng)分配的內(nèi)存分區(qū) MS DOS在每個(gè)分區(qū)的前面開(kāi)辟一個(gè)固定的區(qū)域 這就是該分區(qū)的內(nèi)存控制塊 MCB 在MCB中 有一項(xiàng) 分區(qū)使用標(biāo)志 當(dāng)一個(gè)分區(qū)已經(jīng)分配時(shí) 在此填寫(xiě)該分區(qū)的起始地址 比如 對(duì)于程序和程序段前綴所在的分區(qū) 它的MCB中所填寫(xiě)的正是程序段前綴PSP的起始地址 即圖8 4中標(biāo)有 的指針?biāo)?對(duì)于環(huán)境塊的 分區(qū)使用標(biāo)志 在使用上有一些特殊 即在這里填寫(xiě)的不是自己所在分區(qū)的起始地址 填寫(xiě)的仍然是它所依附的進(jìn)程的PSP地址 即圖8 4中標(biāo)有 的指針?biāo)?這樣一來(lái) DOS的進(jìn)程控制塊 即PSP 中有指向其環(huán)境塊的指針 而環(huán)境塊能從自己MCB的 分區(qū)使用標(biāo)志 中得到進(jìn)程控制塊的地址 一個(gè)進(jìn)程的程序段前綴與環(huán)境塊之間就這樣被聯(lián)系在一起了 8 1 3MS DOS的作業(yè)管理鑒于MS DOS的單用戶 單任務(wù) 其內(nèi)存中不可能允許有多個(gè)作業(yè)并存的情形出現(xiàn) 因此也就沒(méi)有作業(yè)調(diào)度的問(wèn)題 不過(guò) DOS既提供有脫機(jī)的作業(yè)控制方式 成批處理作業(yè) 也提供有聯(lián)機(jī)的作業(yè)控制方式 鍵盤(pán)命令或者菜單 1 MS DOS的命令處理 聯(lián)機(jī)方式 MS DOS中的命令處理模塊 COMMAND COM 提供了一組操作命令 用戶可以通過(guò)鍵盤(pán)鍵入命令 MS DOS把功能簡(jiǎn)單 使用頻率較高的操作命令稱(chēng)為 內(nèi)部命令 如前所述 內(nèi)部命令程序都在COMMAND COM暫駐內(nèi)存模塊中 只要暫駐內(nèi)存模塊在內(nèi)存 在接收到輸入的一條內(nèi)部命令時(shí) 就能夠直接調(diào)用到它并執(zhí)行 外部命令是一些使用頻度較小的命令 它們都是以一個(gè)個(gè)文件的形式存放在磁盤(pán)上 當(dāng)在內(nèi)存的暫駐內(nèi)存模塊接收到一個(gè)外部命令時(shí) 必須先將它從磁盤(pán)上讀入內(nèi)存 然后再執(zhí)行 所以 外部命令的執(zhí)行要比內(nèi)部命令的執(zhí)行多一個(gè)讀盤(pán)的過(guò)程 圖8 5給出了在MS DOS管理下 從一個(gè)FORTRAN語(yǔ)言源程序的建立到執(zhí)行完畢的整個(gè)作業(yè)管理過(guò)程 作為MS FORTRAN3 3編譯系統(tǒng) 由六個(gè)文件組成 FOR1 EXE FORTRAN LIB LINK EXE FOR2 EXE LIB EXE和MATH EXE 將FORTRAN源程序從編輯到運(yùn)行 可以分為四步走 編輯過(guò)程 編譯過(guò)程 連接過(guò)程和執(zhí)行過(guò)程 如果出錯(cuò) 每一步都有可能循環(huán)重復(fù)再做 如圖8 5的中間所示 1 源程序的建立 啟動(dòng)DOS 運(yùn)行一個(gè)文字編輯軟件 比如DOS自帶的EDLIN 見(jiàn)圖8 5右側(cè)用戶命令所示 就可以輸入FORTRAN的源程序了 假定為該源程序起名為 ZONG FOR 這就是源程序的編輯階段 2 編譯 FORTRAN源程序需要經(jīng)過(guò)兩次編譯才能夠生成目標(biāo)程序 第一趟編譯由MS FORTRAN3 3的FOR1 EXE完成 功能是詞法分析 產(chǎn)生中間文件供第2趟編譯使用 第2趟編譯由FOR2 EXE完成 功能是進(jìn)行語(yǔ)法 語(yǔ)義分析 最終產(chǎn)生目標(biāo)代碼 文件名為ZONG OBJ 這是一個(gè)浮動(dòng)代碼程序 還不能直接投入運(yùn)行 為了完成編譯 用戶在鍵盤(pán)上直接鍵入命令FOR1和FOR2即可 3 連接裝配 在鍵盤(pán)上鍵入命令LINK 調(diào)用FORTRAN的LINK EXE 對(duì)目標(biāo)程序ZONG OBJ與函數(shù)庫(kù)以及其他已經(jīng)過(guò)編譯的目標(biāo)程序進(jìn)行連接裝配 經(jīng)過(guò)這一步所產(chǎn)生出來(lái)的就是可執(zhí)行文件ZONG EXE 4 運(yùn)行 連接裝配后所產(chǎn)生的是一個(gè)可以直接投入運(yùn)行的程序 在DOS提示符下 鍵入命令ZONG 就可以得到所希望的結(jié)果 這是MS DOS為用戶提供的聯(lián)機(jī)作業(yè)控制方式 在整個(gè)控制過(guò)程中 是否下一步進(jìn)行什么工作 何時(shí)進(jìn)行下一步工作 以及怎樣進(jìn)行下一步工作 都完全由用戶來(lái)加以控制 從表面上看 MS DOS并沒(méi)有向用戶提供顯式的作業(yè)控制命令 其實(shí) 這一切都隱含在DOS的命令處理程序COMMAND COM中 該程序負(fù)責(zé)接收鍵盤(pán)輸入的各種命令 另外 在MS DOS下 任何一個(gè)可執(zhí)行程序都等同于一個(gè)外部命令 因此 在鍵盤(pán)上鍵入EDLIN FOR1 FOR2 LINK和ZONG等 MS DOS都會(huì)到磁盤(pán)上把相應(yīng)的程序讀入內(nèi)存 然后執(zhí)行 從而達(dá)到控制作業(yè)運(yùn)行的目的 2 MS DOS的批處理 脫機(jī)方式 在MS DOS中 以 BAT為擴(kuò)展名的是所謂的 批處理 文件 如果希望多次重復(fù)執(zhí)行若干條命令 注意 這不僅指DOS提供的命令 它也包含任何一個(gè)可執(zhí)行程序 或希望有選擇地執(zhí)行不同的命令等情形 就可以把它們編寫(xiě)成為一個(gè)批處理程序 以完成這樣的任務(wù) 批處理文件無(wú)須編譯 只要鍵入文件名 就由COMMAND COM模塊一條一條地讀入并解釋執(zhí)行 MS DOS向用戶提供專(zhuān)門(mén)用于編寫(xiě)批處理程序的一些語(yǔ)句 以便能夠在程序中實(shí)現(xiàn)分支 循環(huán)和嵌套等程序結(jié)構(gòu) 主要的有 ECHO 顯示 FOR 重復(fù)執(zhí)行 GOTO 無(wú)條件轉(zhuǎn)移 IF 條件判斷 PAUSE 暫停執(zhí)行 REM 注釋 SHIFT 移位替換參數(shù) 和CALL 嵌套調(diào)用另一個(gè)批處理程序 在MS DOS中 有三類(lèi)批處理文件 一是不帶參數(shù)的普通批處理文件 它們是一些由用戶自己編寫(xiě)的批處理文件 二是帶參數(shù)的復(fù)雜批處理文件 在這種批處理文件里 可以出現(xiàn)參數(shù) 0 9 其中 0即是批處理文件名本身 1 9出現(xiàn)在批處理程序中 調(diào)用時(shí) 用實(shí)際參數(shù)替換 1 9 三是名為AUTOEXEC BAT的自動(dòng)執(zhí)行批處理文件 它總是位于系統(tǒng)啟動(dòng)盤(pán)根目錄上 只要該文件存在 DOS啟動(dòng)時(shí)它就會(huì)被自動(dòng)執(zhí)行 因此 如果用戶想啟動(dòng)后能有一個(gè)適合自己的工作環(huán)境 那么就可以把自己的設(shè)想編寫(xiě)進(jìn)該文件中 8 2MS DOS的存儲(chǔ)管理 自從DOS5 0版推出以來(lái) 使得MS DOS的內(nèi)存模式趨于復(fù)雜化 整個(gè)地址空間可以分為四個(gè)獨(dú)立的區(qū)域 常規(guī)內(nèi)存區(qū) 上位內(nèi)存區(qū) 高端內(nèi)存區(qū) 擴(kuò)充內(nèi)存區(qū) 各有其不同的大小與屬性 之所以會(huì)造成這么復(fù)雜的存儲(chǔ)結(jié)構(gòu) 究其原因還是由于機(jī)器本身的結(jié)構(gòu)引起的 為了保持與以往低版本的兼容性 MS DOS的存儲(chǔ)管理 仍然只局限于對(duì)常規(guī)的640K內(nèi)存進(jìn)行 本節(jié)主要介紹MS DOS對(duì)常規(guī)內(nèi)存的管理 另外也對(duì)MS DOS的各種內(nèi)存區(qū)域做一些說(shuō)明 8 2 1MS DOS對(duì)常規(guī)內(nèi)存的管理從總體上說(shuō) MS DOS對(duì)常規(guī)640KB內(nèi)存的管理 采用的是靜態(tài)式分區(qū)存儲(chǔ)管理技術(shù) 向用戶提供多種存儲(chǔ)分配策略 但又有其自身的某些特點(diǎn) 每一個(gè)調(diào)入內(nèi)存的程序 無(wú)論當(dāng)前是否正處于執(zhí)行 MS DOS都為其分配一個(gè)連續(xù)的內(nèi)存分區(qū) 不過(guò)MS DOS規(guī)定 從地址0開(kāi)始每16個(gè)字節(jié)為一個(gè) 節(jié) 它是進(jìn)行存儲(chǔ)分配的單位 比如 一個(gè)程序需要8K字節(jié)的存儲(chǔ)空間 那么MS DOS就分配給它512節(jié) 因?yàn)?192 16 512 為了管理內(nèi)存中所有已分配的和空閑的分區(qū) MS DOS在每個(gè)內(nèi)存分區(qū)的前面都開(kāi)辟一個(gè)16個(gè)字節(jié) 即一個(gè)節(jié)長(zhǎng) 的區(qū)域 在它的里面存放該分區(qū)的尺寸和使用信息 這個(gè)區(qū)域被稱(chēng)為是一個(gè)內(nèi)存分區(qū)所對(duì)應(yīng)的內(nèi)存控制塊 MCB 其結(jié)構(gòu)如圖8 6所示 一個(gè)分區(qū)的內(nèi)存控制塊里主要記錄如下信息 分區(qū)性質(zhì)標(biāo)志 用于記錄該分區(qū)是否是整個(gè)常規(guī)內(nèi)存的最后一個(gè)分區(qū) 如果是 Z 則表示是整個(gè)常規(guī)內(nèi)存中的最后一個(gè)分區(qū) 如果是 M 則表示是常規(guī)內(nèi)存中的非最后一個(gè)分區(qū) 分區(qū)使用標(biāo)志 用于記錄該分區(qū)是一個(gè)已分配區(qū)還是一個(gè)空閑區(qū) 如果這里記錄的是0000H 則表示這是一個(gè)空閑分區(qū) 如果是一個(gè)已分配的分區(qū) 則這里記錄它所管理的那個(gè)分區(qū)的起始地址 分區(qū)尺寸 用于記錄除去MCB所占用的一節(jié)外 所管轄的整個(gè)分區(qū)的大小 多少節(jié) 比如圖8 7 a 給出了一個(gè)分區(qū) 從其分區(qū)性質(zhì)標(biāo)志為 Z 可以知道 它是整個(gè)內(nèi)存中的最后一個(gè)分區(qū) 從分區(qū)使用標(biāo)志為 0000H 可以知道 它是一個(gè)空閑分區(qū) 可以參與分配 從分區(qū)尺寸為512可以知道 它的長(zhǎng)度是8KB 又比如 圖8 7 b 給出了一個(gè)分區(qū) 從其分區(qū)性質(zhì)標(biāo)志為 M 可以知道 它是內(nèi)存中的某一個(gè)分區(qū) 從分區(qū)使用標(biāo)志為一個(gè)地址可以知道 它已經(jīng)被分配 所管轄的分區(qū)的起始地址就在此記錄著 從分區(qū)尺寸為512可以知道 它的長(zhǎng)度是8KB MS DOS采用這種方法管理內(nèi)存中的分區(qū)后 在各分區(qū)之間建立起了這樣一種關(guān)系 從一個(gè)內(nèi)存控制塊的起始地址出發(fā) 加上一節(jié)長(zhǎng)度 即16個(gè)字節(jié) 就到達(dá)該控制塊所管理的內(nèi)存分區(qū) 在此基礎(chǔ)上 再加上該分區(qū)的長(zhǎng)度 它在內(nèi)存控制塊里記錄著 就到達(dá)下一個(gè)分區(qū)的內(nèi)存控制塊的起始位置 于是 MS DOS在各個(gè)分區(qū)之間雖然沒(méi)有設(shè)置任何指針指向 但卻通過(guò)上述方法 可以從一個(gè)分區(qū)的MCB出發(fā) 順序找到下面各個(gè)分區(qū)的MCB 從中得到該分區(qū)的使用信息 猶如通過(guò)MCB組成了一個(gè)管理內(nèi)存分區(qū)的MCB鏈 利用這種辦法 也就能夠?qū)嵭蟹謪^(qū)的分配和釋放操作了 MS DOS較高版本對(duì)常規(guī)內(nèi)存的分配 提供了可做出選擇的三種方法 1 最先適應(yīng)法 從最低地址的MCB開(kāi)始 順著MCB鏈往下搜索 鏈上第一個(gè)滿足存儲(chǔ)申請(qǐng)尺寸的空閑分區(qū)作為分配對(duì)象 然后MS DOS從該分區(qū)開(kāi)始的低地址處往高地址方向劃分出相當(dāng)尺寸的分區(qū)進(jìn)行分配 剩余部分形成一個(gè)新的空閑分區(qū) 2 最佳適應(yīng)法 從最低地址的MCB開(kāi)始 順著MCB鏈往下搜索 從鏈上所有滿足存儲(chǔ)申請(qǐng)尺寸的空閑分區(qū)中選出最小的那個(gè)分區(qū)作為分配對(duì)象 然后MS DOS從該分區(qū)開(kāi)始的低地址處往高地址方向劃分出相當(dāng)尺寸的分區(qū)進(jìn)行分配 剩余部分形成一個(gè)新的空閑分區(qū) 3 最后適應(yīng)法 從最低地址的MCB開(kāi)始 順著MCB鏈往下搜索 從鏈上找出滿足存儲(chǔ)申請(qǐng)尺寸的最后那個(gè)空閑分區(qū)作為分配對(duì)象 然后MS DOS從該分區(qū)高地址往低地址方向劃分出相當(dāng)尺寸的分區(qū)進(jìn)行分配 剩余部分形成一個(gè)新的空閑分區(qū) 系統(tǒng)初啟時(shí) MS DOS默認(rèn)的是最先適應(yīng)法 如果希望采用新的存儲(chǔ)分配策略 可以通過(guò) 獲取或設(shè)置分配策略 系統(tǒng)調(diào)用達(dá)到目的 在MS DOS中 該系統(tǒng)調(diào)用的功能號(hào)為58H 在此系統(tǒng)調(diào)用中 包含兩個(gè)子功能 0號(hào)子功能用于獲得當(dāng)前系統(tǒng)采用的分配策略 1號(hào)子功能用于重新設(shè)置分配策略 MS DOS以00H代表最先適應(yīng)法 01H代表最佳適應(yīng)法 02H代表最后適應(yīng)法 MS DOS是通過(guò) 申請(qǐng)內(nèi)存分區(qū) 系統(tǒng)調(diào)用來(lái)實(shí)施空閑分區(qū)分配的 在MS DOS中 該系統(tǒng)調(diào)用的功能號(hào)為48H 該系統(tǒng)調(diào)用根據(jù)當(dāng)時(shí)采用的存儲(chǔ)分配算法 沿著MCB鏈去尋找一個(gè)滿足條件的空閑分區(qū)加以分配 其功能主要是先進(jìn)行空閑分區(qū)的合并工作 然后再進(jìn)行分區(qū)的分配 要注意 在進(jìn)行分區(qū)合并時(shí) 總是只考慮它后面分區(qū)的情形 如果后面分區(qū)是一個(gè)空閑的 那么就將兩者合并成一個(gè)大的空閑分區(qū) 合并后的這個(gè)分區(qū)的 分區(qū)性質(zhì)標(biāo)志 應(yīng)該嗆喜 暗暮笠桓隹障蟹智 腦 曛盡 8 8給出了兩個(gè)分區(qū)合并的情形 在圖8 8 a 中 欲釋放的內(nèi)存分區(qū)為8KB 512節(jié) 在它的下面有一個(gè)原來(lái)就是空閑的分區(qū) 長(zhǎng)度為4KB 256節(jié) 圖8 8 b 為合并后的情形 合并后的分區(qū)長(zhǎng)度為12KB 768節(jié) 分區(qū)的使用標(biāo)志是 0000H 分區(qū)的性質(zhì)標(biāo)志是 Z 最后一個(gè)分區(qū) MS DOS是通過(guò) 釋放內(nèi)存分區(qū) 系統(tǒng)調(diào)用來(lái)實(shí)施分區(qū)回收工作的 在MS DOS中 該系統(tǒng)調(diào)用的功能號(hào)為49H 要注意的是 該系統(tǒng)調(diào)用只管分區(qū)的回收 不過(guò)問(wèn)是否需要進(jìn)行空閑分區(qū)的合并 8 2 2PC機(jī)地址的構(gòu)成 分段 表示法要搞清楚MS DOS的各種存儲(chǔ)模式 就首先要了解PC機(jī)的地址結(jié)構(gòu) 存儲(chǔ)器是以字節(jié)為單位存儲(chǔ)信息的 每個(gè)字節(jié)都有一個(gè)與之相對(duì)應(yīng)的地址 IBMPC機(jī)的字長(zhǎng)是兩個(gè)字節(jié) 即16個(gè)二進(jìn)制位 因此用一個(gè)字長(zhǎng)來(lái)表示地址 可以從0到65535 若用十六進(jìn)制表示 則為0 FFFFH 這就是說(shuō) 16位字長(zhǎng)的機(jī)器 可以直接表示的存儲(chǔ)空間是64KB 另一方面 86系列各類(lèi)處理器的內(nèi)存地址引線數(shù)目如圖8 9所示 這就產(chǎn)生了矛盾 用字長(zhǎng)可以直接表示的存儲(chǔ)空間小 由處理器地址引線可以直接訪問(wèn)的存儲(chǔ)空間來(lái)得大 也就是說(shuō) 實(shí)際的物理存儲(chǔ)器要大 就拿8088為例 這個(gè)矛盾具體表現(xiàn)為 16位字長(zhǎng)可以表示的地址范圍是0 FFFFH 十六進(jìn)制表示 即64KB 而通過(guò)20根地址引線能夠直接訪問(wèn)的地址范圍是0 FFFFFH 十六進(jìn)制表示 即1024KB 1MB 它需要用20個(gè)二進(jìn)制位才能表示出來(lái) 用一個(gè)字長(zhǎng)是無(wú)法表示的 為了利用一個(gè)字長(zhǎng)表示出地址引線可以直接達(dá)到的存儲(chǔ)范圍 在IBMPC機(jī)中 采用了構(gòu)成存儲(chǔ)器地址的 分段 表示法 前面已經(jīng)提及 MS DOS把16個(gè)字節(jié)算做一個(gè) 節(jié) 用它做為存儲(chǔ)分配的單位 另外 MS DOS還規(guī)定從任何一節(jié)開(kāi)始的 最多64KB 即4096節(jié) 大小的存儲(chǔ)區(qū)域?yàn)橐粋€(gè) 段 由于一段最長(zhǎng)為64KB字節(jié) 因此一個(gè)段內(nèi)各個(gè)單元的相對(duì)地址正好可以用一個(gè)字長(zhǎng)表示出來(lái) 特別要注意 根據(jù)段的定義 在MS DOS中 段只能從某一個(gè)節(jié)開(kāi)始劃分 而不能從隨便一個(gè)內(nèi)存單元開(kāi)始劃分 比如圖8 10 a 中 仍以8088為例 它的物理地址空間為1MB 其中 存儲(chǔ)單元0 00010H 00020H等都是一個(gè)節(jié)的開(kāi)始地址 十六進(jìn)制表示 因此 從0地址開(kāi)始往下的一個(gè)大小為20KB的存儲(chǔ)區(qū)域 0 Y 構(gòu)成一個(gè)MS DOS的段 從00010H地址開(kāi)始往下的一個(gè)大小為12KB的存儲(chǔ)區(qū)域 00010H X 構(gòu)成一個(gè)MS DOS的段 從00020H地址開(kāi)始往下的一個(gè)大小為64KB的存儲(chǔ)區(qū)域 00020H Z 構(gòu)成一個(gè)MS DOS的段 這些都是段的正確例子 又比如圖8 10 b 從00010H地址開(kāi)始往下的一個(gè)大小為78KB的存儲(chǔ)區(qū)域 00010H A 不構(gòu)成一個(gè)段 因?yàn)殡m然它起始于一個(gè)節(jié) 但長(zhǎng)度卻超過(guò)了64KB 用MS DOS的一個(gè)字長(zhǎng)已無(wú)法表示出它里面含有的所有單元地址了 從00018H地址開(kāi)始往下的一個(gè)大小為24KB的存儲(chǔ)區(qū)域 00018H B 不構(gòu)成一個(gè)段 因?yàn)樗鼪](méi)有在一節(jié)處開(kāi)始 從圖8 10 a 可以發(fā)現(xiàn) 在此物理空間里 凡是一個(gè)節(jié)的地址 其最后4位肯定是0 這是一個(gè)很重要的特征 也是一個(gè)很容易理解的特征 因?yàn)橐还?jié)是16個(gè)字節(jié) 2的4次方為16 所以節(jié)的地址的最低4位只能是0 這個(gè)特征說(shuō)明 可以用一個(gè)字長(zhǎng)來(lái)表示一個(gè)節(jié)的物理地址的高16位 并理解它的低4位為0 有了這些基礎(chǔ) 就可以把1MB存儲(chǔ)空間里的任何一個(gè)地址用 分段 的方法表示出來(lái)了 所謂存儲(chǔ)空間地址的 分段 表示法 就是用 段址 段內(nèi)位移 來(lái)表示20位的單元地址 這里 段址 是指某一段的起始地址 由于段總是從節(jié)開(kāi)始 低4位一定是0 故只需保存它的高16位 使用時(shí)再把低4位0補(bǔ)上 這里的 段內(nèi)位移 是指在一個(gè)段內(nèi)其單元相對(duì)于段址的偏移量 比如 圖8 11中 在節(jié)地址為00020H處開(kāi)始往下有一個(gè)長(zhǎng)度為1KB的段 那么用16位字長(zhǎng)表示段址應(yīng)該是0002H 是地址去掉低4位的0 在這一段中 所有地址的段址都是它 見(jiàn)圖8 11左數(shù)第1列 該段共有1024個(gè)單元 在此段內(nèi)的位移按十進(jìn)制表示是0 1023 按十六進(jìn)制表示是000H 03FFH 見(jiàn)圖8 11左數(shù)第2列 或右數(shù)第1列 物理地址的形成實(shí)際上是在段址后面添加一個(gè)0后與段內(nèi)位移相加的結(jié)果 總結(jié)上述可以得出 由 段址 段內(nèi)位移 形成一個(gè)物理地址的過(guò)程如圖8 12所示 即 在十六位段址的后面添加4位 然后和十六位的段內(nèi)位移相加 從而得到所對(duì)應(yīng)的物理地址 雖然一個(gè)單元的物理地址是唯一的 但因?yàn)橐粋€(gè)單元可以被劃分在不同的存儲(chǔ)段中 因此用 段址 段內(nèi)位移 表示單元地址時(shí) 可能出現(xiàn)不同的表示結(jié)果 在IBMPC機(jī)里 設(shè)有四個(gè)16位的段寄存器 每個(gè)寄存器里可以存放一個(gè)段址的高16位 它們是 代碼段寄存器CS 數(shù)據(jù)段寄存器DS 棧段寄存器SS以及附加段寄存器ES 一個(gè)進(jìn)程運(yùn)行時(shí) 就把涉及它的各段段址存放在相應(yīng)的段寄存器中 需要產(chǎn)生一個(gè)20位的地址時(shí) CPU就會(huì)根據(jù)當(dāng)時(shí)的情形 選擇適當(dāng)?shù)亩渭拇嫫?將它里面的內(nèi)容左移4位 形成低4位為0 然后再和段內(nèi)位移相加 得到20位的物理地址 8 2 3MS DOS的各種內(nèi)存區(qū)域圖8 13給出了MS DOS四個(gè)存儲(chǔ)區(qū)域 常規(guī)內(nèi)存區(qū) 上位內(nèi)存區(qū) 高端內(nèi)存區(qū)和擴(kuò)充內(nèi)存區(qū)的劃分情形 下面對(duì)它們做一些簡(jiǎn)單的說(shuō)明 1 常規(guī)內(nèi)存區(qū)2 上位內(nèi)存區(qū)3 高端內(nèi)存區(qū)4 擴(kuò)展內(nèi)存區(qū)和擴(kuò)充內(nèi)存區(qū) 8 3MS DOS的文件管理 8 3 1MS DOS文件管理綜述在MS DOS中 按照文件的內(nèi)容 同樣把文件分成普通文件 目錄文件和特殊文件三類(lèi) 特殊文件是針對(duì)設(shè)備而言的 普通文件和目錄文件則都存放在硬盤(pán)或軟盤(pán)上 無(wú)論是硬盤(pán)還是軟盤(pán) 在使用前都需要對(duì)磁盤(pán)的整個(gè)存儲(chǔ)區(qū)域進(jìn)行統(tǒng)一安排 以便規(guī)定各個(gè)區(qū)域的具體用途 1 對(duì)于軟盤(pán) 在使用前必須先用FORMAT命令進(jìn)行格式化 該命令的功能是按照格式化后軟盤(pán)的容量來(lái)劃分磁道和扇區(qū) 然后再把整個(gè)盤(pán)片劃分成如圖8 14所示的5個(gè)區(qū)域 成為一個(gè)盤(pán)卷 引導(dǎo)扇 引導(dǎo)扇為整個(gè)盤(pán)卷的第0扇區(qū) 它包含兩部分內(nèi)容 一是在前面提及過(guò)的引導(dǎo)程序 BOOT 一是該盤(pán)卷的基本參數(shù)表 BPB 在BPB中 有關(guān)該盤(pán)卷的主要參數(shù)有 磁頭數(shù) 單面還是雙面 每個(gè)磁道的扇區(qū)數(shù) 總扇區(qū)數(shù) 每個(gè)扇區(qū)的字節(jié)數(shù) 文件分配表 FAT 的個(gè)數(shù) 每個(gè)文件分配表占用的扇區(qū)數(shù) 根目錄的項(xiàng)數(shù)以及每簇所含扇區(qū)數(shù) 簇 是MS DOS進(jìn)行磁盤(pán)存儲(chǔ)空間分配的單位 MS DOS規(guī)定1簇由若干個(gè)連續(xù)扇區(qū)組成 并且所含扇區(qū)數(shù)必須是2的整數(shù)次方 比如1簇為1個(gè)扇區(qū) 為2個(gè)扇區(qū) 為4個(gè)扇區(qū) 為8個(gè)扇區(qū) 等等 文件分配表 FAT 在MS DOS的文件管理中 文件分配表起到很重要的作用 它用來(lái)記錄普通文件和目錄文件在盤(pán)卷文件存放區(qū)里占用的存儲(chǔ)空間 一般地 系統(tǒng)將設(shè)置兩個(gè)完全一樣的文件分配表FAT1和FAT2 以便在必要時(shí) 能夠用另一個(gè)做恢復(fù)工作 保證系統(tǒng)的安全運(yùn)行 一個(gè)盤(pán)卷有幾個(gè)文件分配表 每個(gè)文件分配表占用多少扇區(qū) 都記錄在引導(dǎo)扇中 有關(guān)文件分配表的問(wèn)題 后面還要詳細(xì)介紹 根目錄區(qū) 根目錄區(qū)用來(lái)存放盤(pán)卷根目錄下的各個(gè)目錄項(xiàng)內(nèi)容 在MS DOS中 一個(gè)文件的目錄項(xiàng)要占用32個(gè)字節(jié) 由于盤(pán)卷格式化時(shí)規(guī)定了根目錄的項(xiàng)數(shù) 因此在一個(gè)盤(pán)卷中 根目錄中擁有的目錄項(xiàng)數(shù)是一定的 文件存放區(qū) 文件存放區(qū)用于存放普通文件和目錄文件 除根目錄以外 的內(nèi)容 整個(gè)盤(pán)卷 去除引導(dǎo)扇 文件分配表和根目錄區(qū)所占用的扇區(qū)后 剩余的扇區(qū)就完全做為文件存放區(qū)使用了 2 對(duì)于硬盤(pán) 在使用之前必須經(jīng)過(guò)如下3步處理 低級(jí)格式化 使用FDISK命令對(duì)硬盤(pán)進(jìn)行分區(qū) 使用FORMAT命令進(jìn)行高級(jí)格式化 低級(jí)格式化的任務(wù)主要有兩個(gè) 一是對(duì)整個(gè)硬盤(pán)按磁頭 按盤(pán)面劃分磁道和扇區(qū) 一是對(duì)磁盤(pán)上的所有 壞 扇區(qū)做上標(biāo)記 購(gòu)買(mǎi)微機(jī)時(shí) 硬盤(pán)一般都已經(jīng)經(jīng)過(guò)了低級(jí)格式化 用戶不必去做這項(xiàng)工作 用FDISK對(duì)硬盤(pán)分區(qū) 就是把經(jīng)過(guò)低級(jí)格式化后的整個(gè)硬盤(pán) 按照用戶所需要的容量劃分成不同類(lèi)型的區(qū)域 對(duì)于MS DOS 硬盤(pán)的分區(qū)有兩種類(lèi)型 一是MS DOS的主分區(qū) 在該分區(qū)里存有MS DOS操作系統(tǒng) 其盤(pán)符 即一個(gè)盤(pán)區(qū)的標(biāo)識(shí) 必須是 C 當(dāng)系統(tǒng)是從硬盤(pán)啟動(dòng) MS DOS也可以通過(guò)軟盤(pán)啟動(dòng) 不過(guò)這時(shí)一定是通過(guò)A盤(pán) 且在A盤(pán)驅(qū)動(dòng)器里插入的是一張系統(tǒng)盤(pán) 時(shí) 就由此分區(qū)取得對(duì)計(jì)算機(jī)的控制權(quán) 一是MS DOS的擴(kuò)展分區(qū) 擴(kuò)展分區(qū)只能作為數(shù)據(jù)盤(pán)使用 不能承擔(dān)計(jì)算機(jī)的啟動(dòng)任務(wù) 只有在把硬盤(pán)容量的一部分總體劃歸成擴(kuò)展分區(qū)后 才能對(duì)該分區(qū)再細(xì)劃分若干個(gè)小分區(qū) 形成一個(gè)個(gè)邏輯磁盤(pán) 其盤(pán)符由FDISK命令依序自動(dòng)分配為D E F 如圖8 15所示 用FDISK命令對(duì)硬盤(pán)進(jìn)行分區(qū)時(shí) 就把物理上的第1扇區(qū)開(kāi)辟為整個(gè)磁盤(pán)的主引導(dǎo)扇 在那里存放有主引導(dǎo)程序和記錄硬盤(pán)分區(qū)的有關(guān)信息 使用FORMAT命令對(duì)磁盤(pán)各分區(qū)進(jìn)行格式化 就與對(duì)軟盤(pán)進(jìn)行格式化相當(dāng) 即把硬盤(pán)的一個(gè)分區(qū)視為一張很大的軟盤(pán) 對(duì)它進(jìn)行盤(pán)面的劃分 有引導(dǎo)扇 并在其中建立基本參數(shù)表BPB 文件分配表區(qū) 根目錄區(qū)以及存放文件的文件存放區(qū) 在圖8 15中 下面畫(huà)的是某一個(gè)磁盤(pán)分區(qū)的放大效果 可以看出 對(duì)一個(gè)分區(qū)的安排 與一張軟盤(pán)相同 最初的MS DOS采用的是一級(jí)目錄結(jié)構(gòu) 即直接通過(guò)文件名查找目錄 隨之處理I O 后來(lái) MS DOS揉進(jìn)了一些UNIX操作系統(tǒng)的風(fēng)格 開(kāi)始采用樹(shù)型目錄結(jié)構(gòu) 使得其文件管理更加符合用戶使用的要求 MS DOS的文件名由兩個(gè)部分組成 基本文件名和擴(kuò)展名 基本文件名可以有最多8個(gè)字符組成 出現(xiàn)在文件名中的字母 不區(qū)分大小寫(xiě) 因此在MS DOS中 書(shū)寫(xiě)成 ABC Abc或abC表示是相同的一個(gè)文件 要注意的是 對(duì)于UNIX來(lái)說(shuō) 這樣書(shū)寫(xiě)代表了3個(gè)不同的文件 在基本文件名的后面 可以跟隨擴(kuò)展名 擴(kuò)展名是可選的 擴(kuò)展名總是以一個(gè)點(diǎn)開(kāi)始 然后是1到3個(gè)字符 在MS DOS中 經(jīng)常用擴(kuò)展名來(lái)識(shí)別文件的性質(zhì) 最常用的擴(kuò)展名有 bat 一個(gè)可以解釋執(zhí)行的批處理文件 com 可執(zhí)行的二進(jìn)制命令文件 doc 文檔文件 exe 可執(zhí)行的二進(jìn)制文件 obj 由編譯程序產(chǎn)生的目標(biāo)代碼文件 sys 系統(tǒng)文件或設(shè)備驅(qū)動(dòng)程序文件 txt ASCII文本文件 在MS DOS 從根目錄出發(fā) 經(jīng)過(guò)子目錄 然后到達(dá)一個(gè)文件的路徑 稱(chēng)為該文件的路徑名 要注意的是 MS DOS路徑名之間是用字符 進(jìn)行分隔 這一點(diǎn)又與UNIX不同 UNIX是用字符 做為路徑分隔符的 這意味著UNIX文件 usr ast zong 在MS DOS中應(yīng)該寫(xiě)為 usr ast zong 除了有從根目錄 開(kāi)始的絕對(duì)路徑外 MS DOS也有從當(dāng)前目錄開(kāi)始的相對(duì)路徑 并經(jīng)常用字符 代表當(dāng)前目錄 用 代表當(dāng)前目錄的上一級(jí)目錄 父目錄 MS DOS為文件賦予某些屬性 記錄在該文件的目錄項(xiàng)中 只讀 R 具有此屬性的文件不能被修改 存檔 A 上次備份后又被修改的文件具有此屬性 在MS DOS中 用MSBACKUP 備份或恢復(fù)文件 RESTORE 恢復(fù)備份文件 和XCOPY 拷貝目錄機(jī)器子目錄和文件 等命令 都會(huì)涉及到文件的歸檔 也可以用ATTRIB 顯示和修改屬性 命令來(lái)查看文件現(xiàn)有的屬性和修改其屬性 系統(tǒng) S 具有此屬性的文件 不能通過(guò)DEL 刪除文件 命令刪除 通常 MS DOS的系統(tǒng)文件屬于此列 隱藏 H 不希望被DIR 顯示文件和子目錄 命令列出的文件 可以設(shè)置此屬性 卷標(biāo) V 表示該目錄項(xiàng)為一個(gè)子卷標(biāo) 目錄 D 表示該目錄想是一個(gè)子目錄 MS DOS支持多個(gè)磁盤(pán)的文件系統(tǒng) 但沒(méi)有像UNIX所提供的那種安裝功能 沒(méi)有把多個(gè)磁盤(pán)統(tǒng)一在一個(gè)根目錄下 因此 在MS DOS下 常會(huì)出現(xiàn)從這個(gè)盤(pán)切換到另一個(gè)盤(pán) 也就是從這個(gè)文件系統(tǒng)切換到另一個(gè)文件系統(tǒng)的情形發(fā)生 在每一個(gè)盤(pán)上都可以設(shè)置自己的當(dāng)前目錄 切換也就在當(dāng)前目錄之間進(jìn)行 圖8 16給出了UNIX和MS DOS文件系統(tǒng)的簡(jiǎn)略對(duì)比 8 3 2MS DOS的文件分配表 FAT MS DOS通過(guò)盤(pán)卷上的文件分配表 記錄普通文件和子目錄文件占用磁盤(pán)存儲(chǔ)空間的情形 FAT中的表目總是從0開(kāi)始順序編號(hào) 表目0和1被用來(lái)存放磁盤(pán)介質(zhì)標(biāo)志等信息 因此 一個(gè)文件分配表從第2個(gè)表目開(kāi)始 才真正用來(lái)記錄磁盤(pán)空間的分配情形 文件分配表到底有多大 這與磁盤(pán)上文件存放區(qū)包含多少簇有關(guān) 文件分配表的表目數(shù) 是磁盤(pán)文件存放區(qū)上所有的簇?cái)?shù)加2 在前面已經(jīng)知道 MS DOS是以簇為單位分配磁盤(pán)上的文件存放區(qū)的 為了與文件分配表配合 文件存放區(qū)在按照簇的尺寸劃分后 規(guī)定從2開(kāi)始順序編號(hào) 于是 文件分配表的第2個(gè)表目 就對(duì)應(yīng)于磁盤(pán)文件存放區(qū)上第2簇的使用情況 但是要記住 磁盤(pán)上文件存放區(qū)的第2簇實(shí)際上是第1個(gè)簇 只是由于編號(hào)從2開(kāi)始 一般地 文件分配表上第i個(gè)表目 就對(duì)應(yīng)于磁盤(pán)文件存放區(qū)上第i簇的使用情況 通過(guò)這種辦法 在文件分配表表目與文件存放區(qū)的簇之間 建立起了一一對(duì)應(yīng)的關(guān)系 從文件分配表表目的內(nèi)容 就能得到它所對(duì)應(yīng)的簇的當(dāng)前使用情況 一個(gè)文件總是占用存放文件區(qū)中的若干個(gè)簇 每個(gè)簇都有自己的編號(hào) 分配給文件的第1個(gè)簇的簇號(hào) MS DOS把它登記在該文件的目錄項(xiàng)中 下一個(gè)簇的簇號(hào)總是登記在以其前一個(gè)簇的簇號(hào)為編號(hào)的文件分配表的相應(yīng)表目中 這樣一來(lái) 在文件分配表中形成了文件占用存儲(chǔ)空間的 簇鏈 從文件目錄項(xiàng)中得到文件所在第1簇的簇號(hào)后 順著文件分配表相應(yīng)表目中記錄的簇號(hào) 就能夠逐一找到整個(gè)文件在盤(pán)卷中占用的簇 圖8 17給出了文件分配表的一個(gè)例子 在圖中 有三個(gè)文件A B C 分配給文件A的是第6簇 第8簇 第4簇和第2簇 文件B占用第12 5和9簇 文件C占用第3 15和10簇 于是 在文件A的文件目錄項(xiàng)中存放著它占用的第1個(gè)簇的簇號(hào)6 在文件分配表的第6個(gè)表目中填寫(xiě)它占用的第2個(gè)簇的簇號(hào)8 在文件分配表的第8個(gè)表目中填寫(xiě)它占用的第3個(gè)簇的簇號(hào)4 在文件分配表的第4個(gè)表目中填寫(xiě)它占用的第4個(gè)簇的簇號(hào)2 在文件分配表的第2個(gè)表目中填寫(xiě)標(biāo)志EOF 表明文件A的結(jié)束 同樣地 可以形成文件B和文件C的簇鏈 在圖8 17的文件分配表中 使用了一些象征性的標(biāo)志 比如標(biāo)有FREE標(biāo)志的表目 表示所對(duì)應(yīng)的簇為空閑的簇 標(biāo)有BAD標(biāo)志的表目 表示所對(duì)應(yīng)的簇為壞簇 不能分配 等等 具體實(shí)現(xiàn)時(shí) 不用它們做為標(biāo)志 向一個(gè)文件 包括子目錄文件 中追加記錄時(shí) 就要涉及簇的分配 刪除一個(gè)文件或子目錄 就會(huì)涉及到簇的釋放 就文件分配表而言 刪除文件即是沿著該文件的簇鏈 將各簇號(hào)對(duì)應(yīng)的FAT表項(xiàng)內(nèi)容置為FREE 變?yōu)榭梢灾匦率褂玫谋眄?xiàng) 刪除子目錄時(shí) 首先要判定該子目錄是否是當(dāng)前目錄 若是 則不準(zhǔn)刪除 其次是要判定該子目錄是否為空 只有當(dāng)子目錄中只剩下 項(xiàng)和 項(xiàng)時(shí) 該子目錄才能被刪除 通過(guò)了這兩關(guān) 刪除子目錄與刪除文件的操作就一樣了 向一個(gè)文件追加記錄時(shí) 首先要計(jì)算文件的新長(zhǎng)度 有兩種可能 一是如果創(chuàng)建一個(gè)新的文件 那么原來(lái)沒(méi)有簇鏈 長(zhǎng)度是0 于是除了需要向文件分配表申請(qǐng)簇以外 還要把申請(qǐng)到的簇號(hào)填入該文件的目錄項(xiàng)中 另外一種情形是文件已經(jīng)存在 原有簇鏈不夠使用 因此要在原來(lái)基礎(chǔ)上增加文件長(zhǎng)度 這時(shí)就需要在文件分配表中尋找標(biāo)有 FREE 標(biāo)志的表目 并將它們所對(duì)應(yīng)的簇一一鏈入原有的簇鏈 完成這項(xiàng)工作后 才能開(kāi)始進(jìn)行寫(xiě)入操作 MS DOS在進(jìn)行簇分配時(shí) 采用 就近雙向查找 分配策略 即以一個(gè)指定的簇號(hào) 比如文件尾的簇號(hào) 或一個(gè)已經(jīng)找到的空閑簇號(hào)為中心 先正向增1 即簇號(hào)增1 查找 判定那個(gè)簇是否空閑 如果失敗 就反向減1 即簇號(hào)減1 查找 判定那個(gè)簇是否空閑 如果失敗 就正向增2 即簇號(hào)增2 查找 判定那個(gè)簇是否空閑 如果失敗 就反向減2 即簇號(hào)減2 查找 判定那個(gè)簇是否空閑 找到一個(gè)空閑簇后 就又以它為中心進(jìn)行查找 直到所需空閑簇全部找到 否則不予分配 這種分配策略 可以使文件分配的存儲(chǔ)空間相對(duì)集中 從而減少文件讀寫(xiě)時(shí)磁頭移動(dòng)的次數(shù)和距離 8 3 3MS DOS的樹(shù)型目錄結(jié)構(gòu)MS DOS的每一個(gè)盤(pán)卷都有一個(gè)根目錄表 簡(jiǎn)稱(chēng)根目錄 根目錄中有很多目錄項(xiàng) 它們可能是一般文件的目錄項(xiàng) 也可能是子目錄文件的目錄項(xiàng) 整個(gè)根目錄被固定在盤(pán)卷的根目錄區(qū)中 從根目錄中的一般文件目錄項(xiàng)出發(fā) 得到的分支是葉子 即具體的文件 從根目錄中的子目錄項(xiàng)出發(fā) 得到的是一個(gè)枝杈 即一個(gè)子目錄文件 每一個(gè)枝杈又可以繼續(xù)往下分出葉子或枝杈 子目錄文件就是由一個(gè)個(gè)子目錄項(xiàng)組成的子目錄表 簡(jiǎn)稱(chēng)子目錄 這樣一種帶有分支的層次結(jié)構(gòu) 猶如一棵倒置的樹(shù) 根在上 分支和葉子在下 這種結(jié)構(gòu)的優(yōu)點(diǎn)是能夠方便地組織和查找文件 在不同目錄下允許出現(xiàn)重名 圖8 18 a 給出了MS DOS目錄的層次結(jié)構(gòu)示意圖 在圖中 倒三角表示一個(gè)目錄項(xiàng) 在根目錄表中 有6個(gè)目錄項(xiàng) 其中4個(gè)是一般文件目錄項(xiàng) 它們分別對(duì)應(yīng)于文件A B C D 有兩個(gè)子目錄項(xiàng) 子目錄甲和子目錄乙 在子目錄甲中有兩個(gè)一般文件目錄項(xiàng) 分別對(duì)應(yīng)于文件E和F 在子目錄乙中有一個(gè)一般文件目錄 它對(duì)應(yīng)于文件G 有一個(gè)子目錄項(xiàng) 對(duì)應(yīng)于子目錄丙 在子目錄丙中 有三個(gè)一般文件目錄項(xiàng) 它們對(duì)應(yīng)于文件H I J 在MS DOS的每一個(gè)子目錄表中 除了具體的目錄項(xiàng)外 還安排一個(gè)目錄項(xiàng) 一個(gè)目錄項(xiàng) 它們分別表示當(dāng)前目錄和父目錄 只有當(dāng)一個(gè)目錄表中僅包含 和 時(shí) 才意味該目錄表為空 目錄項(xiàng)是一個(gè)含32個(gè)字節(jié)長(zhǎng)的數(shù)據(jù)區(qū) 它里面登記著一個(gè)文件或子目錄的有關(guān)信息 MS DOS的目錄項(xiàng)結(jié)構(gòu)如圖8 18 b 所示 圖中括號(hào)里的數(shù)字表示這一信息所需占用的字節(jié)數(shù) 下面是對(duì)目錄項(xiàng)內(nèi)容的簡(jiǎn)要說(shuō)明 文件名 MS DOS規(guī)定文件名最多不得超過(guò)8個(gè)字符 因此在目錄項(xiàng)中 為 文件名 準(zhǔn)備了8個(gè)字節(jié) 當(dāng)這里的第1個(gè)字節(jié)取值00H時(shí) 表示該目錄項(xiàng)為空閑 可以被分配 當(dāng)這里的第1個(gè)字節(jié)取值E5H時(shí) 表示原來(lái)占用該目錄項(xiàng)的文件已經(jīng)被刪除 此目錄項(xiàng)現(xiàn)在可以重新分配它用 擴(kuò)展名 擴(kuò)展名最多3個(gè)字符 因?yàn)檫@里給擴(kuò)展名只準(zhǔn)備了3個(gè)字節(jié)的位置 如果擴(kuò)展名不足3個(gè)字符 則用空格填充 文件屬性 MS DOS為文件設(shè)置屬性有兩個(gè)作用 首先通過(guò)文件屬性區(qū)分文件的類(lèi)別 是卷標(biāo) V 是目錄 D 還是一般磁盤(pán)文件 只有在是一般磁盤(pán)文件時(shí) 才利用屬性給出文件的存取權(quán)限 A H R S 文件的建立和修改的日期和時(shí)間 文件的起始簇號(hào) 由前面已經(jīng)知道 MS DOS總是把分配給一個(gè)文件的第1簇號(hào)填寫(xiě)在文件目錄項(xiàng)中 也就是目錄項(xiàng)的 文件起始簇號(hào) 處 通過(guò)它 就可以在文件分配表 FAT 中找到該文件的簇鏈 得到文件的存儲(chǔ)位置 文件長(zhǎng)度 文件長(zhǎng)度是指該文件所需的總字節(jié)數(shù) 由于文件一般總要在最后一簇產(chǎn)生一些浪費(fèi) 因此告知文件的總長(zhǎng)度 對(duì)判定文件的結(jié)束位置是重要的 8 3 4MS DOS文件訪問(wèn)的實(shí)現(xiàn)為了提高對(duì)文件訪問(wèn)的速度 MS DOS在整個(gè)系統(tǒng)中設(shè)置了一張 系統(tǒng)文件表 SFT 該表主要用于記錄系統(tǒng)當(dāng)前同時(shí)打開(kāi)的文件的有關(guān)信息 從而起到了活動(dòng)文件目錄的作用 SFT中擁有的表目數(shù) 用戶可以在系統(tǒng)配置文件CONFIG SYS中 通過(guò)命令行 files n 來(lái)設(shè)定 其默認(rèn)值為8 整個(gè)系統(tǒng)文件表包括兩個(gè)子表 子表1由表頭以及5個(gè)表項(xiàng)構(gòu)成 子表2由表頭以及n 5個(gè)表項(xiàng)構(gòu)成 每一個(gè)表項(xiàng)占用53個(gè)字節(jié) 圖8 19是系統(tǒng)文件表的結(jié)構(gòu) 子表表頭的第一部分是一個(gè)指針 通過(guò)它使兩個(gè)子表鏈接在一起 成為一個(gè)整體 表頭的第二部分記錄該子表表項(xiàng)的數(shù)目 子表1固定為5 子表2是n 5 兩個(gè)表的表目數(shù)總共為n 當(dāng)用戶打開(kāi)一個(gè)文件時(shí) 就要在SFT中申請(qǐng)一個(gè)表目 把文件的目錄信息從磁盤(pán)拷貝到表目中 除此之外 還要在表目中記錄如下信息 1 記錄打開(kāi)文件的文件目錄項(xiàng)在磁盤(pán)的位置 以便關(guān)閉文件時(shí) 根據(jù)這一信息進(jìn)行回寫(xiě)操作 2 在此記錄對(duì)文件操作的控制信息 比如文件的打開(kāi)方式 文件的讀寫(xiě)指針和已經(jīng)傳送的簇?cái)?shù)等 3 記住這個(gè)文件被不同調(diào)用者同時(shí)打開(kāi)的次數(shù) 打開(kāi)一次就在計(jì)數(shù)值上加1 關(guān)閉一次就在計(jì)數(shù)值上減1 只有當(dāng)計(jì)數(shù)值為0時(shí) 這個(gè)文件才能真正被關(guān)閉 即收回它所占用的系統(tǒng)文件表表目 回憶一下MS DOS為每個(gè)進(jìn)程設(shè)置的程序段前綴 在程序段前綴里面 開(kāi)辟著該進(jìn)程的文件打開(kāi)表 JFT 文件打開(kāi)表的作用一方面是把父進(jìn)程已經(jīng)打開(kāi)的文件情況復(fù)制過(guò)來(lái) 另一方面是可以用來(lái)打開(kāi)自己所需要使用的文件 打開(kāi)一個(gè)文件 就意味著要在文件打開(kāi)表中申請(qǐng)到一個(gè)表目 該表目的序號(hào) 就是以后訪問(wèn)這個(gè)文件的 句柄 那么 為什么有了文件的句柄就可以對(duì)某個(gè)文件進(jìn)行訪問(wèn) 這主要要弄清楚申請(qǐng)到的文件打開(kāi)表表目是如何與具體文件溝通的 如果它能與文件溝通 也就是能夠找到文件的目錄信息 那么通過(guò)文件句柄也就能與文件溝通了 這就要用到上面介紹的系統(tǒng)文件表 具體地 要分兩步進(jìn)行 1 獲得該文件在系統(tǒng)文件表中占用的表目序號(hào) 當(dāng)進(jìn)程打開(kāi)一個(gè)文件時(shí) 首先通過(guò)文件名去查系統(tǒng)文件表 看里面有沒(méi)有叫這個(gè)名字的文件 如果有 說(shuō)明該表目中存放的是該文件的目錄等有關(guān)信息 因此立即能夠獲得該表目序號(hào) 如果沒(méi)有 則申請(qǐng)一個(gè)空閑的SFT表項(xiàng) 把文件的目錄信息從磁盤(pán)拷貝到表目中 填寫(xiě)進(jìn)其他信息 然后也獲得該表目序號(hào) 2 將系統(tǒng)文件表表目序號(hào)填入進(jìn)程的文件打開(kāi)表中 到進(jìn)程程序段前綴的文件打開(kāi)表中申請(qǐng)一個(gè)表項(xiàng) 把得到的系統(tǒng)文件表表目序號(hào)填入該表項(xiàng)內(nèi) 并獲得文件打開(kāi)表項(xiàng)的序號(hào) 即句柄 經(jīng)過(guò)這樣兩步之后 由文件的句柄 就可以去查進(jìn)程的文件打開(kāi)表 由文件打開(kāi)表 得到該文件在系統(tǒng)文件表中的表目序號(hào) 通過(guò)這個(gè)序號(hào)去查系統(tǒng)文件表 就得到該文件的目錄內(nèi)容等信息 就可以對(duì)文件進(jìn)行各種操作了 圖8 20給出了示意圖 在圖中 進(jìn)程A為了訪問(wèn)文件X 就通過(guò)句柄k查進(jìn)程程序段前綴中的文件打開(kāi)表 由該句柄得到這個(gè)文件在系統(tǒng)文件表中的序號(hào)m 通過(guò)序號(hào)m 查系統(tǒng)文件表 得到文件X的目錄等信息 于是就可以訪問(wèn)該文件了 8 4MS DOS的設(shè)備管理 8 4 1MS DOS設(shè)備管理綜述8 4 2MS DOS設(shè)備驅(qū)動(dòng)程序的構(gòu)成MS DOS的所有設(shè)備驅(qū)動(dòng)程序都有如圖8 21所示的結(jié)構(gòu) 總體上分成兩個(gè)部分 一個(gè)是由18個(gè)字節(jié)組成的設(shè)備頭 DH 另一個(gè)是驅(qū)動(dòng)程序的實(shí)際代碼 前者用于標(biāo)識(shí)各個(gè)驅(qū)動(dòng)程序并給出它的一些屬性 后者用于進(jìn)行實(shí)際的輸入 輸出 從這種劃分看 MS DOS中的設(shè)備頭 起到了設(shè)備控制塊的作用 下面對(duì)設(shè)備頭中的各項(xiàng)內(nèi)容做一些說(shuō)明 下一個(gè)設(shè)備頭指針 MS DOS把系統(tǒng)中已經(jīng)安裝的設(shè)備驅(qū)動(dòng)程序通過(guò)各自設(shè)備頭里的這個(gè)指針 鏈接成一個(gè)隊(duì)列 稱(chēng)為設(shè)備頭鏈 當(dāng)然 這里存放的地址是以 段址 段內(nèi)位移 給出的 設(shè)備屬性 設(shè)備的屬性是指設(shè)備的類(lèi)型 以及該設(shè)備具有的特性 MS DOS用一個(gè)字來(lái)刻畫(huà)設(shè)備的屬性 比如 用該字的最高位來(lái)區(qū)分是字符設(shè)備還是塊設(shè)備 此位為1是字符設(shè)備 此位為0是塊設(shè)備 其余15位的意義 有的位具有相同的含義 有的位將隨是字符設(shè)備還是塊設(shè)備而有不同的含義 策略程序指針和中斷程序指針 這是兩個(gè)指向具體程序代碼的指針 所謂 策略程序 它的任務(wù)很簡(jiǎn)單 在系統(tǒng)接到一個(gè)I O請(qǐng)求后 由文件系統(tǒng)形成請(qǐng)求包并發(fā)送給策略程序 策略程序接收到I O請(qǐng)求包后 就把它的地址轉(zhuǎn)送給中斷程序 中斷程序才是設(shè)備驅(qū)動(dòng)程序中真正實(shí)施I O服務(wù)的部分 它分析請(qǐng)求包里記錄的I O命令 然后執(zhí)行命令 并將執(zhí)行結(jié)果存入請(qǐng)求包中 在輸入 輸出任務(wù)完成后 進(jìn)程就在請(qǐng)求包里獲得結(jié)果 在處理輸入 輸出時(shí) MS DOS首先調(diào)用策略程序 作用是為設(shè)備下 工作任務(wù)單 然后調(diào)用中斷程序 作用是命令 雇員 即設(shè)備 執(zhí)行下達(dá)的任務(wù) 設(shè)備名 對(duì)于字符設(shè)備 在 設(shè)備名 處存放邏輯設(shè)備名 對(duì)于塊設(shè)備 在 設(shè)備名 處存放該設(shè)備驅(qū)動(dòng)程序所支持的單元個(gè)數(shù) 為了構(gòu)成設(shè)備頭鏈 MS DOS設(shè)置了名為 系統(tǒng)內(nèi)部參數(shù)表 LOL 的一張表 為了管理方便 在該表中模仿設(shè)備頭開(kāi)辟了18個(gè)字節(jié) 組成所謂的 NUL 設(shè)備頭 NUL 是一個(gè)沒(méi)有輸入 輸出的設(shè)備名 因此沒(méi)有具體的驅(qū)動(dòng)程序代碼 它的設(shè)備頭總是位于設(shè)備頭鏈之首 由它與其他的設(shè)備頭鏈接成一個(gè)隊(duì)列 如圖8 22所示 前面已經(jīng)說(shuō)過(guò) 要通過(guò)設(shè)備頭中的 設(shè)備屬性 來(lái)區(qū)分不同的設(shè)備 總的來(lái)說(shuō) MS DOS把設(shè)備分為兩大類(lèi) 設(shè)備屬性 最高位為1 表示是字符設(shè)備 為0 表示是塊設(shè)備 在圖8 22中 包括NUL設(shè)備在內(nèi) 給出了5個(gè)屬于字符設(shè)備的設(shè)備頭 1個(gè)屬于塊設(shè)備的設(shè)備頭 在字符設(shè)備前提下 設(shè)備屬性 最低4位取值為4時(shí) 表示是NULL設(shè)備 取值為3時(shí)為標(biāo)準(zhǔn)輸入設(shè)備 取值為2時(shí)為標(biāo)準(zhǔn)輸出設(shè)備 從圖8 22看出 位于LOL中的是NUL設(shè)備頭 鏈接在它后面的名為CON的是標(biāo)準(zhǔn)輸入 輸出設(shè)備 即鍵盤(pán)和顯示器 在圖8 22中 標(biāo)明為塊設(shè)備的設(shè)備頭 其 設(shè)備名 處填寫(xiě)的是十六進(jìn)制的03H 表示該設(shè)備驅(qū)動(dòng)程序要驅(qū)動(dòng) 控制3個(gè)單元的磁盤(pán)驅(qū)動(dòng)器 MS DOS中 對(duì)驅(qū)動(dòng)器進(jìn)行全系統(tǒng)統(tǒng)一編號(hào) 有了設(shè)備頭鏈 在遇到輸入 輸出請(qǐng)求時(shí) 就根據(jù)設(shè)備的邏輯名 去查設(shè)備頭鏈 由設(shè)備頭鏈得到設(shè)備的驅(qū)動(dòng)程序 從而就可以完成所需要的I O 8 4 3MS DOS對(duì)塊設(shè)備的管理塊設(shè)備在MS DOS中用于存儲(chǔ)文件 因此與文件管理關(guān)系密切 這里給出塊設(shè)備管理中用到的數(shù)據(jù)結(jié)構(gòu) 1 驅(qū)動(dòng)器參數(shù)塊 DPB從圖8 22看出 MS DOS是把塊設(shè)備驅(qū)動(dòng)程序 設(shè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《漢語(yǔ)閱讀教程》課件-教學(xué)課件:漢語(yǔ)閱讀教程
- 2025解除租賃合同模板
- 2025企業(yè)勞動(dòng)合同書(shū)模板
- 2025中級(jí)會(huì)計(jì)實(shí)務(wù)預(yù)習(xí)知識(shí)考點(diǎn):合同收入確認(rèn)
- 2025兼職國(guó)慶節(jié)臨時(shí)工合同范文
- 《蟋蟀的住宅》教學(xué)設(shè)計(jì)和反思
- 2025年房地產(chǎn)經(jīng)紀(jì)人之業(yè)務(wù)操作過(guò)關(guān)檢測(cè)試卷B卷附答案
- 2025年執(zhí)業(yè)藥師之中藥學(xué)專(zhuān)業(yè)一題庫(kù)練習(xí)試卷B卷附答案
- 新質(zhì)生產(chǎn)力解析圖
- 冷凝集素病的臨床護(hù)理
- 2025年房屋租賃合同范本中介版
- 2025五一節(jié)前安全教育培訓(xùn)
- 水電解制氫試題及答案
- 湖北省武漢市2025屆高中畢業(yè)生四月調(diào)研考試歷史試題及答案(武漢四調(diào))
- 藍(lán)色北京師范大學(xué)4.3頂部導(dǎo)航欄博士復(fù)試模板
- 防汛減災(zāi)小知識(shí)
- 2024年四川宜賓環(huán)球集團(tuán)有限公司招聘考試真題
- 期中測(cè)試(范圍:第1-4章)(A卷·夯實(shí)基礎(chǔ))-北師大版七年級(jí)數(shù)學(xué)下冊(cè)(原卷版)
- 2025時(shí)政試題及答案(100題)
- 《旅行社經(jīng)營(yíng)與管理》電子教案 5-2 旅行社接待業(yè)務(wù)2
- 醫(yī)療器械操作規(guī)范與安全知識(shí)培訓(xùn)試題庫(kù)
評(píng)論
0/150
提交評(píng)論