嵌入式系統之操做系統篇

1 、嵌入式軟件基礎
  (1)嵌入式軟件的特色:
    A、規模較小。
    B、開發難度大。
    C、實時性和可靠性要求高。
    D、要求固化存儲。
  (2)嵌入式軟件分類:
    A、 系統軟件:控制和管理嵌入式系統資源,如嵌入式操做系統、驅動程序、中間件等。
    B、 應用軟件:定義嵌入式設備的主要功能和用途,負載與用戶進行交互。
    C、 支撐軟件:輔助軟件開發的工具軟件。
  (3)無操做系統的嵌入式軟件的兩種實現方式:
    A、 循環輪轉
      優勢:簡單、直觀、開銷小、可預測。
      缺點:過於簡單,全部代碼順序執行,沒法處理異步事件,缺少並行處理能力。
    B、 先後臺系統(在循環輪轉的基礎上增長了中斷處理功能)
      前臺(事件處理級):中斷服務程序,負載處理異步事件。
      後臺(任務級):一個無限循環,負載資源分配、任務管理和系統調度。
  (4)有操做系統的三大優勢:
    A、提升系統的可靠性。
    B、提升了系統的開發效率,下降了開發成本,縮短了開發週期。
    C、有利於系統的擴展與移植。
  (5)設備驅動層(也叫板級支持包  BSP :包含了嵌入式系統中全部與硬件相關的代碼)
    大多數的嵌入式硬件設備都須要某種類型軟件的初始化和管理。這部分工做由設備驅動層來完成的,它負責直接與硬件大交道,對硬件進行管理和控制,爲上層軟件提供所需的驅動支持,相似 PC 系統中的 BIOS 和驅動程序。
  (6)板級支持包BSP的基本思想
    把嵌入式操做系統與具體的硬件平臺隔離開來。在 BSP 當中,把全部與硬件相關的代碼都封裝起來,並向上提供一個虛擬的硬件平臺,而操做系統就運行在這個虛擬的硬件平臺上。它使用一組定義好的編程接口來與 BSP 進行交互,並經過 BSP 來訪問真正的硬件。
  (7)通常來講 BSP 主要包括兩個方面的內容:
    A、 引導加載程序  BootLoader
    B、 設備驅動程序
  (8)關於引導加載程序  BoorLoader
    引導加載程序是嵌入式系統加電後運行的第一段軟件代碼,是在操做系統內核運行以前運行的一段小程序,它的實現高度依賴於具體的硬件平臺,主要的基本功能以下:
    A、 片級初始化:純硬件初始化過程,把微處理器從上電的默認狀態設置成系統要求的工做狀態。
    B、 板級初始化:同時有軟件和硬件在內的初始化過程,設置各類硬件的寄存器和設置某些軟件的數據結構和參數。
    C、 加載內核:將操做系統和應用程序的映象從 Flash 存儲器複製到系統內存當中,而後跳轉到系統內核的第一條指令處繼續執行。
    補充: PC  系統的引導加載過程。
       PC 系統的引導加載程序由兩部分代碼組成――BIOS 和 MBR 中的引導程序。BIOS 在完成硬件檢測和資源配置後,將硬盤主引導記錄 MBR 中的引導程序讀到系統的內存當中,而後將控制權交給它,由它負責把操做系統的內核映象從硬盤讀入到內存,而後跳轉到內核入口去運行,即啓動操做系統。
  (9)設備驅動程序
    在一個嵌入式系統中,操做系統可能有也可能無,可是設備驅動程序是必不可少的。設備驅動程序, 就是一組庫函數,用來對硬件進行初始化和管理,並向上層軟件提供良好的訪問接口。大多數設備驅動程序都具有下面的基本功能: 啓動、關閉、停用、啓用、讀操做、寫操做。這些功能通常用函數的形式來實現,這些函數之間的組織結構主要有兩種 :分層結構 混合結構
  (10)關於分層結構
    A、硬件接口:直接操做和控制硬件。
    B、調用接口:不直接跟硬件大交道,爲上層軟件提供服務和函數接口。
    C、優勢:把全部與硬件相關的細節都封裝在硬件接口中,在硬件須要升級,須要更新設備驅動程序的時候,只須要改動硬件接口中的函數便可,而上層調用接口中的函數不用作任何修改。
    D、混合結構:在設備驅動程序當中,沒有明確的層次關係,上層接口和硬件接口混在一塊兒,相互調用。
  (11)嵌入式中間件它是在操做系統內核、設備驅動程序和應用軟件以外的全部系統軟件,其 基本思路是:把本來屬於應用軟件層的一些通用的功能模塊抽取出來,造成獨立的一層軟件,從而爲運行在它上面的那些應用軟件提供一個靈活、安全。移植性好、相互通訊、協同工做的平臺。

算法

2 、嵌入式操做系統概述
  (1)內核
    內核是指操做系統中的一個組件,它包含了 OS 的主要功能,即 OS 的各類特性及其相互之間的依賴關係,這些功能主要包括:
    A、 任務管理:對系統中運行的軟件進行描述和管理,並完成處理器資源分配和調度。
    B、 存儲管理:提升內存的利用率,方便用戶使用,提供足夠的存儲空間。
    C、 設備管理:方便設備的使用,提升 CPU 和 I/O 設備的利用率。
    D、 文件管理:解決文件資源存儲、共享、保密和保護等問題。
    注:不一樣嵌入式操做系統的內核設計各不相同,取決於系統設計和實際需求。
  (2)嵌入式操做系統分類:
    A、按系統類型:商業系統、專用系統、開源系統。
    B、按響應時間:硬實時系統、軟實時系統。
    C、按軟件結構:單體結構(uCOS)、分層結構(MS-DOS)、微內核結構(Vxworks)。編程

 

3 、任務管理
  (1)嵌入式操做系統的任務管理能夠分爲:
    A、單道程序技術:操做系統中,任什麼時候候只能有一個程序在運行。
    B、多道程序技術:操做系統中,容許多個程序同時存在並運行。
  (2)進程
    進程,簡單的說,是一個正在運行的程序。進程與程序既有聯繫又有區別,主要表現爲下面結構方面:
    A、程序由 數據和 代碼兩部份內容組成,它是一個 靜態的概念。而進程是正在執行的程序,它也由兩部分組成: 程序和該程序的 運行上下文。它是一個 動態的概念。
    B、程序和進程之間並非一一對應的。一個進程在運行的時候能夠啓動一個或多個程序。反之,同一個程序也可能由多進程同時執行。
    C、程序能夠做爲一種軟件資源長期保存,以文件的形式存放在光盤或硬盤上,而進程則是一次執行的過程,它是暫時的,是動態的產生和終止。一個進程至少應包括三個方面: 相應的程序、 CPU  上下文、一組系統資源
    進程有三個特性:
    A、動態性:進程是正在運行的程序,而程序的運行狀態是不斷變化的。
    B、獨立性:進程是系統資源的使用單位,每一個進行有本身的運行上下文和內部狀態。
    C、併發性:宏觀來看,系統中同時有多個進程存在,它們相互獨立地運行。
    注:對於併發的理解。
    在單 CPU 的狀況下,所謂的併發性指的是宏觀上的併發運行,而微觀上仍是順序進行,各個進程輪流去使用 CPU 資源。在單核 CPU 中,真正的、物理上的 PC 寄存器只有一個,進程在輪流執行的時候,物理 PC 的取值也在不斷變化。而邏輯 PC 其實就是一個內存變量。每一個進程都有一個邏輯 PC,當一個進程要運行的時候,就把它的邏輯 PC 裝載到物理 PC 中去;反之,當一個進程暫不運行的時候,就把物理 PC中的值保存在它的邏輯 PC 當中。
  (3)線程
    線程就是進程當中的一條執行流程。進程其實包含兩個部分:資源平臺和執行流程(線程)。在一個進程當中,或者說在一個資源平臺上,能夠同時存在多個線程;能夠用線程做爲 CPU 的基本調度單位,使得各個線程之間能夠併發執行;對於同一個進程當中的各個線程來講,他們能夠共享該進程的大部分資源。 每一個線程都有本身獨立的  CPU  運行上下文和棧,這是不能共享的。
  (4)任務
    在嵌入式系統中,任務其實就是線程,它是可以獨立運行的一個實體。緣由有二:
    A、 任務具備獨立的優先級和棧空間,CPU 上下文通常存放在棧空間中。
    B、 任務之間能夠很方便地、直接地使用共享的內存單元,而不須要通過系統內核。在多道程序的嵌入式系統中,同時存在着多個任務,這些任務之間的結構通常爲 層狀
結構,存在着 父子關係。當嵌入式內核剛剛啓動的時候,只有一個任務存在,而後由該任務派生出全部其餘任務。
  (5)任務的建立與停止
    任務的建立主要發生在如下三種情形:
    A、 系統初始化。
    B、 任務運行的過程當中。
    C、 用戶提出請求。
    從技術的角度來講,實際上新任務只有一種建立的方法,也就是在一個已經存在的任務中,經過調用相應的系統函數來建立一個新的任務。任務的建立只要有兩種可能的實現模型:fork/exec 和 spawn。兩種模型的差異主要在於內存的分配方式
    A、fork/exec 模型下,首先調用 fork 函數爲新任務建立一份與父任務徹底相同的內存空間,而後再調用 exec 函數裝入新任務的代碼,並用它來覆蓋原有的屬於父任務的內容。 嵌入式  Linux  操做系統是基於 fork/exec 模型的。
    B、spawn 模式下,在建立新任務的時候,直接爲它分配一個全新的地址空間,而後將新任務的代碼裝入並運行。 S uCOS  操做系統是基於 spawn 模型的。小程序

    任務的停止可能有多種緣由,主要有下面三種狀況:
    A、 正常退出。
    B、 錯誤推出。
    C、 被其餘任務踢出。
    在有些嵌入式系統中,尤爲是一些控制系統中,它的某些任務被設計爲「死循環」的模式,一直循環下去,不會停止。
  (6)任務的狀態
    任務有三中基本狀態:
    A、運行狀態:任務佔有 CPU,並在 CPU 上運行。
    B、就緒狀態:任務已經具有運行的條件,在等待 CPU 空閒。
    C、阻塞狀態:任務由於正在等待某種事件的發生而暫時不能運行。
    對於就緒狀態和阻塞狀態,它們的相同之處在於,任務都是處於暫停狀態,沒有運行 。不一樣之處在於,暫停的緣由是不同的,致使就緒狀態的緣由是外因,是操做系統的 CPU正忙,而致使阻塞狀態的緣由是內因,是任務自身的問題。
    任務狀態的四種轉換關係:
    A、 運行 -> 阻塞:任務因爲等待某個時間被阻塞起來。
    B、 運行 -> 就緒:調度器因爲某種緣由(例如優先級)選擇了另外一個任務去運行。
    C、 就緒 -> 運行:CPU 空閒了,處於就緒狀態的任務被調度器選中去運行。
    D、 阻塞 ->就緒:任務的等待事件完成,具有了繼續運行的條件。
  (7)任務控制塊  TCB
    任務控制塊 TCB,就是在操做系統中,用來描述和管理一個任務的數據結構。系統爲每個任務都維護了一個相應的 TCB,用來保存該任務的各類相關信息。它的主要內容包括下面幾項:
    A、任務的管理信息:任務的標識 ID、狀態、優先級、調度信息、各類隊列指針等。
    B、CPU  上下文信息:CPU 各類寄存器當前的值以及邏輯寄存器。
    C、資源管理的信息:段表地址、頁表地址、根目錄、文件描述字等。
    當須要建立一個任務的時候,就爲它生成一個 TCB,並初始化這個 TCB 的內容;當須要停止一個任務的時候,只要回收它的 TCB 就能夠了。
  (8)任務的切換
    基本思想:把當前任務的運行上下文保存起來,並恢復新任務的上下文。任務切換一般有下面的 基本步驟:
    A、將處理器的運行上下文保存在當前任務的 TCB 中。
    B、更新當前任務的狀態,從運行狀態變爲就緒狀態或阻塞狀態。
    C、按照必定的策略,從全部處於就緒狀態的任務中選擇一個去運行。
    D、修改新任務的狀態,從就緒狀態變成運行狀態。
    E、 根據新任務的 TCB 的內容,恢復它的運行上下文環境。
    在一個多任務的操做系統中,採用 任務隊列的方式來組織它的全部任務。由操做系統來維護一組隊列,用來表示系統當中全部任務的當前狀態,不一樣的狀態用不一樣的隊列來標誌。
  (9)任務的調度
    調度器能夠看做 CPU 的資源管理者。任務調度的首要問題是:什麼時候進行調度,即調度發生的時機。通常有下面幾種情形:
    A、一個新任務被建立時,須要決定運行新任務仍是繼續執行父任務。
    B、一個任務運行結束時,須要從就緒隊列中選擇某個任務去運行。
    C、一個任務運行阻塞時,須要選擇另外一個任務去運行。
    D、一個 I/O 操做完成,任務阻塞結束,當即執行新就緒任務仍是繼續執行被中斷任務。
    E、一個時鐘節拍結束時,須要對就緒任務從新調度。
    任務調度的第二個問題是:如何調度,即調度方式。主要有兩種方式:
    A、 不可搶佔調度方式:例如時間片輪轉。
    B、 可搶佔調度方式:例如優先級調度。
    實時操做系統大都採用可搶佔調度方式。
    任務調度的第三個問題是:調度算法。
    A、先來先服務算法:按照任務到達的前後次序進行調度,是不可搶佔的調度方式。
    B、短做業優先算法:各個任務開始執行以前,事先預計好它的執行時間,從中選擇用時較短的任務優先執行。
    C、時間片輪轉算法:全部的就緒任務按照先來先服務的原則排成一個隊列。在每次調度的時候,把處理器分派給隊列當中的第一個任務,讓它去執行一小段時間。在這個時間段裏任務被阻塞或因爲其餘緣由暫停,或者任務的時間片用完了,它會被送到就緒隊列的末尾,而後調度器再執行當前隊列的第一個任務。這種算法的優勢是各個就緒任務都平均地分配使用 CPU 的時間,每一個就緒任務都能一直保持着活動性。時間片輪轉法有一個默認前提,即位於就緒隊列中的各個任務是同等重要的。
    D、優先級算法:給每一個任務都設置一個優先級。而後在任務調度的時候,在全部處於就緒狀態的任務中選擇優先級最高的那個任務去運行。採用優先級調度算法的一個
問題是可能會發生 優先級反轉 ,出現任務「 飢餓」現象。安全

  (10)實時系統調度
    對於 RTOS 調度器來講,任務之間的公平性並非最重要的,它追求的是 實時性
    A、 單調速率調度算法( RMS):任務的優先級與它的週期表現爲單調函數的關係,任務的週期越短,優先級越高,任務的週期越長,優先級越低。RMS 假定任務是相同獨立的 、週期性的、任務在可以在任何位置被搶佔,而實際中的系統,任務之間須要進行通訊和同步 ,這是一種理想的調度方法,實際中並不必定存在。
    B、 最先期限優先法( EDF) ):根據任務的截止時間來肯定其優先級,對於時間限期最近的任務,分配最高的優先級。當有一個新的任務處於就緒狀態時,各個任務的優先級就有可能要進行調整,選擇截止時間最近的任務去運行。
  (11)任務互斥
    A、任務之間的關係:相互獨立、任務互斥、任務同步、任務通訊。
    B、任務間的互斥:當前已經有一個任務正在訪問臨界區共享數據,那麼其餘任務暫時不能訪問。
    C、提出互斥訪問的四個條件:
      a、在任什麼時候候最多隻能有一個任務位於它的臨界區中。
      b、不能事先假定 CPU 的個數和系統的運行速度。
      c、沒有任務位於它的臨界區中,它不妨礙其餘任務去訪問臨界區資源。
      d、任何一個任務進入臨界區的請求必須在有限的時間內獲得知足,不能無限期。
    D、任務互斥的解決方案:
      a、關閉中斷法
      b、繁忙等待法
      c、信號量處理
  (12)信號量
    信號量記錄當前可用資源的數量。信號量由操做系統維護,任務不能直接去修改它的值,只能經過初始化和兩個標準原語(PV 原語)來對它進行訪問。
    注:關於原語。
    原語一般由若干條語句組成,用來實現某個特色的操做,並經過一段不可分割或不可中斷的程序來實現其功能。原語時操做系統內核的一個組成部分,必須在內核態下執行。原語的不可中斷性是經過在其執行過程當中關閉中斷來實現的。關鍵要理解 PV 原語的實現:
  P(semaphores S)
  {
    --S.count; //申請一個資源
    if(S.count < 0) //沒有空閒資源
    {
      將當前任務阻塞起來,加到阻塞隊列末尾,調度新的任務運行。
    }
   }
  V(semaphores S)
  {
    ++S.count; //釋放一個資源
    if(S.count <= 0) //有任務被阻塞
    {
      從阻塞隊列中取出一個任務,把該任務改成就緒狀態,插入就緒隊列。
    }
  }
利用操做系統提供的信號量機制,能夠方便、有效地實現對臨界資源的互斥訪問,優勢有兩個:
    A、 能夠設置信號量的計數值,從而容許多個任務同時進入臨界區。
    B、 當一個任務暫時沒法進入臨界區時,它會被阻塞起來,將 CPU 讓給其餘任務。
  (13)任務同步
    任務之間的同步可使用信號量機制,經過引入 PV 操做來設定兩個任務在運行時的前後順序。例如,能夠把信號量視爲某個共享資源的當前個數,而後由一個任務負責生成這種資源,而另外一個任務則負責消費這種資源,這樣能夠構成兩個任務之間的前後順序。在具體實現上,通常把信號量的初始值設爲 N,N 大於或等於0。而後在一個任務內使用 V 原語 ,把信號量加1,而在另一個任務內部使用 P 原語,將信號量減1,從而實現這兩個任務之間的同步關係。
  (14)死鎖
    在一組任務中,每一個任務都佔用着若干資源,同時又在等待其餘任務佔用的資源,從而形成全部任務都沒法進展下去的現象,這稱爲死鎖現象。除了資源的競爭以外,PV 操做使用不當也會引發死鎖。
  (15)信號
    所謂信號,是系統給任務的一個指示,代表某個異步事件已經發生了。該事件可能來自外部,也可能來自內部。信號機制也能夠稱爲軟中斷機制。信號機制與中斷處理機制很是類似,相同點:
    A、 都具備中斷性。
    B、 都有相應的服務程序。
    C、 均可以屏蔽響應。
    不一樣點:
    A、 中斷由硬件或特定指令產生,而信號由系統調用產生。
    B、 中斷觸發後,硬件會根據中斷向量找到相應的處理程序執行;而信號則經過發送信號的系統調用來觸發,系統不必定立刻對它進行處理。
    C、 中斷處理程序在系統內核的上下文中運行,是全局的;而信號處理程序在相關任務的上下文中運行,是任務的一個組成部分。
  (16)任務間通訊
    任務之間的通訊能夠分爲兩種類型:
    A、 低級通訊:只能傳遞狀態和整數值等控制信息,例如信號量機制。
    B、 高級通訊:可以傳輸任意數量的數據,只要有三類: 共享內存 、 消息傳遞和管道。網絡

    任務之間的通訊方式有兩種:
    A、 直接通訊:通訊雙方必須明確知道與之通訊的對象。例如 PV 原語。
    B、 間接通訊:通訊雙方不需指出消息的來源和去向,經過共享郵箱發送和接收消息。
    郵箱只能存放單條消息,它提供一種低開銷的消息傳遞機制,只有空和滿兩種狀態。 消息隊列與郵箱相似,可是能夠同時存放若干條消息,提供了一種任務間緩衝通訊的方法。管道由 UNIX 獨創,以 文件系統爲基礎,鏈接兩個任務之間的一個打開的共享文件,專用於任務直接的數據通訊。

數據結構

4 、設備管理
  (1)設備管理基礎
    一個 I/O 單元一般由兩個部分組成:
    A、 機械部分:I/O 設備自己。
    B、 電子部分:設備控制器或設備適配器。
    硬件寄存器的編址方式有三種:
    A、 I/O  獨立編址:對於各類設備控制器中的每個寄存器,分配一個惟一的 I/O 端口編號,也叫 I/O 端口地址,而後用專門的 I/O 指令對這些端口進行操做。這些端口地址構成的地址空間是徹底獨立的,與內存地址空間沒有任何關係。
    B、 內存映象編址:把各類設備控制器當中的每個寄存器都映射爲一個內存單元,這內存單元專門用於 I/O 操做。端口地址空間與內存地址空間是統一編址的,端口地址空間是內存地址空間的一部分。
    C、 混合編址:對於設備控制器當中的寄存器採用獨立編址的方法,每一個寄存器有一個獨立的 I/O 端口地址;而對於設備的數據緩衝區,則採用內存映象編址的方法,把他們統一到內存地址空間當中。
  (2) I/O  控制方式:
    A、 程序循環檢測:要一直佔用 CPU,浪費 CPU 的時間。
    B、 中斷驅動方式:先後臺系統。
    C、 直接內存訪問:DMA 控制,減小了中斷的次數。
  (3) I/O  軟件
    A、 中斷處理程序:當一個用戶程序須要某種 I/O 服務時,它會去調用相應的系統函數 ,而這個函數又會去調用相應的設備驅動程序,在驅動程序中會啓動相應的 I/O 操做,而且被阻塞起來,直到這個 I/O 操做完成後,產生一箇中斷程序,並跳到相應的中斷處理程序,在這裏將會喚醒被阻塞的驅動程序。
    B  設備驅動程序:直接同 I/O 設備打交道,直接對它們進行控制的軟件模塊。上層的 I/O軟件經過抽象的函數接口與設備驅動程序打交道,這些接口是標準的、穩定不變的,而硬件設備的具體細節被封裝在設備驅動程序裏面。設備驅動程序的管理經過驅動程序地址表來實現。驅動程序表中存放了各個設備驅動程序的入口地址,能夠經過此表來實現設備驅動的動態安裝與卸載。
    C、 設備獨立  I/O  軟件:這部分軟件在設備驅動程序的上面,是獨立的 I/O 軟件,也是系統內核的一部分,主要任務是實現全部設備都須要的一些通用 I/O 功能,並向用戶級的軟件提供一個統一的訪問接口。
    D、 用戶空間的  I/O  軟件:大部分的 I/O 軟件都是包含在操做系統當中的,也有一小部分運行在系統內核以外。主要能夠分爲下面兩種:
      a、與用戶程序進行連接的庫函數:例如 C 語言中與 I/O 相關的庫函數。
      b、徹底運行在用戶空間當中的程序:例如 Spooling 技術。
    注: Spooling  技術
      Spooling 是「外圍設備聯機操做」的所寫,spooling 技術也叫假脫機技術或虛擬設備技術,它能夠把一個獨佔的設備轉變爲具備共享特徵的虛擬設備。在多道系統中,對於一個獨佔設備,專門利用一道程序來加強該設備的 I/O 功能。優勢有二:能提供高速的虛擬 I/O 服務;能實現對獨佔設備的共享。併發

 

5 、文件系統
  (1)嵌入式文件系統概述
    文件系統就是操做系統中用以 組織、存儲、命名、使用和 保護文件的一套管理機制。常見的嵌入式文件系統有:
    A、 FAT :VxWorks、QNX、WindowsCE 等
    B、 NFS:網絡文件系統,基於遠程調用和擴展數據表示。
    C、 FFS:用於 Flash 存儲器的文件系統。
  (2)文件和目錄
    A、當一個文件被建立時,必須給它指定一個名字,用戶就是經過 文件名來訪問這個文件的。
    B、文件命是一個有限長度的字符串,由兩部分組成: 文件名和 擴展名。
    C、文件的邏輯結構主要有三種:無結構、簡單的記錄結構和複雜結構。現代文件系統一般採用的是無結構的形式。
    D、除了文件名以外,操做系統會給每一個文件附加一些其餘信息,稱爲 文件的屬性。
    E、文件的存取方法有兩種: 順序存取和 隨機存取。
    F、目錄也稱爲文件夾,它是一張 表格,記錄了在該目錄下每一個文件名和其餘的一些管理信息。
    G、在多級目錄結構中,訪問文件或目錄主要有兩種方法: 絕對路徑名和 相對路徑名。
  (3)文件系統的實現
    A、數據塊:在磁盤中以扇區爲單元進行讀寫操做。對文件系統而言,把磁盤空間劃分爲一個個大小相同的塊,稱爲物理塊,每一個物理塊包含若干個連續的扇區,同時把文件的字節流也分紅大小相同的邏輯塊。在文件系統內部,以塊爲單位來進行操做,把每個邏輯塊保存在一個物理塊中。
    B、文件的實現須要解決兩個方面的問題:
      a、如何描述一個文件。
      b、如何存儲一個文件。
    C、文件控制塊(FCB):它是 文件的描述方法,是操做系統爲了管理文件而設置的一種 數據結構,裏面存放了與文件有關的全部管理信息, FCB  是文件存在的標誌。
    D、文件的物理結構:連續結構、鏈表結構和索引結構。
      連續結構:把文件的各個邏輯塊按照順序存放在若干個連續的物理塊當中。主要用於CD-ROM 等一次性寫入的光學存儲介質當中。
      鏈表結構:把文件的各個邏輯塊依次存放在若干個物理塊當中,這些物理塊既能夠是連續的,也能夠是不連續的,而後在各個塊之間經過指針鏈接起來,前一個物理塊指向下一個物理塊,從而造成一條鏈表。帶有文件分配表的鏈表結構:在鏈表結構的基礎上,把每個物理塊當中的鏈表指針抽取出來,單獨組成一個表格,就是文件分配表( FAT )。若是要隨機訪問文件的地 n 個邏輯塊,能夠先從 FAT 表中查到相應的物理塊地址,而後根據這個地址直接去訪問磁盤。索引結構:把文件當中每個邏輯塊所對應的物理塊編號直接記錄在這個文件的文件控制塊當中,這樣的文件控制塊稱爲是 I 節點,或索引節點。這樣,對於系統中的每個文件,都有一個本身的索引節點,經過這個索引節點就可以直接實現邏輯塊與物理塊之間的映射關係。
  (4)目錄的實現
    A、 直接法:把文件控制塊的內容直接保存在目錄項當中,所以每一個目錄項就等於某個文件名加上它的 FCB。
    B、 間接法:目錄項裏面只有文件名和該文件的 FCB 所在地址。無論是那一種類型的實現方法,目錄的基本功能都同樣,即用戶給出一個文件名,就返回相應文件的 FCB。
  (5)空閒空間管理方法:
    A、位圖法。
    B、鏈表法。
    C、索引法。異步

相關文章
相關標籤/搜索