嵌入式系统之操作系统篇
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、索引法。
轉載于:https://www.cnblogs.com/chenshikun/p/7723374.html
總結
以上是生活随笔為你收集整理的嵌入式系统之操作系统篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用samba来创建windows下的文件
- 下一篇: leancloud的技术面试指南