操作系統高頻(六)linux內核
1.內核態,用戶態的區別???
內核態和用戶態的區別主要在于權限和安全性。
- 權限:內核態擁有最高的權限,可以訪問和執行所有的系統指令和資源,而用戶態的權限相對較低,只能訪問受限的指令和資源。內核態能夠執行特權指令,如修改內存映射、管理硬件設備等,而用戶態不能直接執行這些特權指令。
- 安全性:由于內核態具有較高的權限,錯誤的操作或濫用權限可能會導致系統崩潰或不安全。為了保護系統的穩定性和安全性,將操作系統的核心部分放在內核態下運行,限制用戶態的權限。用戶態的應用程序必須通過系統調用的方式向內核請求操作系統提供的服務和資源,這樣可以有效地控制用戶程序對系統的影響范圍。
- 進入內核態的方式:進入內核態有三種方式,分別是系統調用、異常和設備中斷。系統調用是應用程序主動向內核請求服務的方式;異常是由應用程序中的錯誤或異常情況觸發的,如非法指令、內存訪問越界等;設備中斷是外部設備產生的中斷信號,需要內核處理。
2.段頁式內存管理有何優點????
段頁式內存管理結合了段式內存管理和頁式內存管理的優點,提供了靈活性、保護性、共享性和虛擬化支持。
靈活性:
- 將內存劃分為段和頁的組合,既可以方便地管理不同類型的程序和數據,又可以細致地進行內存分配和利用。
保護性:
- 通過設置段和頁的訪問權限,可以對內存進行精細的訪問控制,保護數據的安全性。
共享性:
- 段頁式內存管理支持多個程序共享同一段或同一頁面,減少內存重復存儲,提高內存利用效率。
虛擬化支持:
- 通過頁表和頁面地址轉換,實現虛擬地址到物理地址的映射,為虛擬內存提供支持,提高系統的內存容量和隔離性。
3.Linux內核的組成??
- 進程管理:負責創建、管理和調度進程,包括進程的創建、銷毀和調度等功能。
- 內存管理:負責管理內存資源,包括物理內存的分配與釋放、虛擬內存的映射與管理等。
- 文件系統:提供對存儲設備和文件的訪問接口,支持各種文件系統格式。
- 設備驅動:提供對硬件設備的抽象和控制接口,支持各種設備驅動程序。
- 網絡協議棧:實現了各種網絡協議,提供網絡通信的功能。
- 系統調用:提供用戶空間程序與內核之間的接口,允許應用程序調用內核提供的功能和服務。
4.系統調用的作用??
提供資源訪問:
- 應用程序可以通過系統調用請求訪問操作系統提供的資源,如文件的讀寫、網絡通信和設備訪問等。
實現用戶態與內核態切換:
- 應用程序通常運行在用戶態,而某些操作需要在內核態執行。通過系統調用,應用程序可以將控制權切換到內核態,讓操作系統核心來完成特權操作。
提供操作系統服務:
- 系統調用封裝了操作系統提供的各種服務和功能,如進程管理、內存管理、文件系統操作和網絡通信等。應用程序可以通過系統調用使用這些服務。
實現進程間通信:
- 系統調用提供了進程間通信的機制,允許不同的應用程序進行數據交換和協作。應用程序可以通過系統調用進行消息傳遞、共享內存訪問等操作。
5.系統調用read()/write(),內核具體做了哪些事情????
- 用戶空間發起read()/write()系統調用,并將參數傳遞給內核。
- 內核根據系統調用號找到相應的內核函數進行處理,如sys_read()/sys_write()。
- 內核根據文件描述符找到對應的文件對象,并執行讀取或寫入操作。
- 在讀取操作中,內核將數據從文件或設備讀取到內核空間,并通過頁緩存層進行管理。
- 在寫入操作中,內核將數據從用戶空間拷貝到內核空間,并通過文件系統層將數據寫入文件或設備。
- 內核可能會通過緩存管理、塊設備管理和驅動程序等層次對數據進行處理和傳輸。
- 處理完成后,內核將結果返回給用戶空間,并用戶空間繼續執行下一步操作。
6.bootloader內核和根文件的關系?
嵌入式Linux系統從軟件角度可以分為四個主要部分:引導加載程序(Bootloader)、Linux內核、文件系統和應用程序。這些部分共同構成了完整的嵌入式系統。
- 引導加載程序(Bootloader):引導加載程序是系統啟動的第一個執行代碼,負責系統的引導和初始化。它可以包括固化在固件中的boot代碼和Bootloader程序。引導加載程序的主要任務是初始化硬件、加載Linux內核、配置系統參數,并將控制權傳遞給內核。
- Linux內核:Linux內核是嵌入式系統的核心,負責管理系統的硬件資源、提供各種設備驅動程序和執行系統的核心功能。它提供了任務管理、內存管理、進程調度、設備管理等基本功能,并提供了豐富的系統調用接口供應用程序使用。
- 文件系統:嵌入式系統通常會有一個或多個文件系統。根文件系統是其中最重要的,它包含了操作系統所需的基本文件和目錄結構。此外,嵌入式系統還可以建立在閃存或其他存儲設備上的文件系統,用于存儲應用程序、配置文件和數據等。
- 應用程序:應用程序是嵌入式系統中運行在用戶空間的程序,利用Linux內核提供的服務和資源完成特定的功能需求。應用程序可以包括各種應用、服務和驅動程序,用于實現各種功能,如通信、控制、數據處理等。
7. Bootloader多數有兩個階段的啟動過程。???
預引導階段(Pre-boot Stage):
- 第一階段:該階段也被稱為硬件初始化階段。在此階段,Bootloader負責進行硬件初始化和基本系統設置。這包括檢測和初始化處理器、內存、時鐘、總線和其他外設的操作。
- 第二階段:在此階段,Bootloader負責加載第二階段的Bootloader代碼。此代碼位于存儲介質上(例如閃存、硬盤等),并負責執行更高級的系統配置和初始化,包括加載文件系統驅動程序等。這一階段還可以提供用戶界面、bootloader配置和固件升級等功能。
操作系統加載階段(Operating System Load Stage):
- 該階段是引導加載程序加載并啟動操作系統(通常是Linux內核)的階段。Bootloader會加載操作系統內核的映像文件,并執行一系列操作,例如設置內核參數、初始化設備樹等。然后,它將控制權轉移到操作系統的入口點,使操作系統接管系統的控制和管理。
通過這兩個階段的啟動過程,引導加載程序能夠在啟動過程中對硬件進行初始化和配置,并加載操作系統,以使嵌入式系統能夠正常運行。這種分階段的啟動過程為系統提供了靈活性和可擴展性,使Bootloader能夠在不同的硬件平臺和應用場景中進行自定義配置和操作。
8.linux的內核是由bootloader裝載到內存中的????
Linux內核是由引導加載程序(Bootloader)裝載到內存中的。在系統啟動過程中,引導加載程序負責加載Linux內核,將其從存儲介質(如磁盤或閃存)讀取到內存中的指定位置。
具體的步驟如下:
- 引導加載程序首先初始化硬件環境,例如處理器、內存和外設等。
- 引導加載程序根據特定規則(如配置文件或參數)確定Linux內核的位置,通常是指定內核映像文件在存儲介質上的位置。
- 引導加載程序從存儲介質中加載Linux內核的映像文件到內存中的指定位置。這個過程涉及到讀取映像文件的內容,并將其復制到內存中的指定位置。
- 引導加載程序還可能對內核進行一些預處理或修正,如設定內核啟動參數、修改映像文件的頭部信息等。
- 加載完成后,引導加載程序將控制權轉移到Linux內核的入口點,以開始內核的執行。
9.為什么需要BootLoader??
- 硬件初始化:Bootloader負責初始化嵌入式系統的硬件環境。它通過設置處理器、內存、時鐘和外設等硬件的初值,確保它們處于正確的狀態以便后續的系統操作。
- 加載操作系統:Bootloader的主要任務是加載操作系統,如Linux內核,將其從存儲介質(如閃存、磁盤等)中讀取到內存中。這個過程包括讀取映像文件、解壓縮(如果有必要)以及將內核映像文件復制到內存的指定位置。
- 系統配置和參數設置:Bootloader可以提供用戶界面或配置文件,允許用戶或系統管理員對系統進行配置和參數設置。這包括設置內核啟動參數、設置設備樹、選擇啟動選項等。通過這些配置和參數設置,Bootloader可以根據特定需求進行個性化定制。
- 多引導選擇:在某些情況下(如雙重引導或多系統引導),系統可能有多個可選的操作系統或內核映像文件。Bootloader可以提供菜單或交互界面,允許用戶選擇啟動哪個操作系統或內核映像文件。這提供了靈活性和可擴展性,使系統能夠根據需求選擇不同的操作系統或配置。
- 系統維護和升級:Bootloader還可以用于系統維護和固件升級。它可以提供功能,如備份和還原系統、加載和更新固件等。通過這些功能,系統的維護和升級可以更加方便、安全和可靠。
10. Linux內核同步方式總結??
- 中斷屏蔽:通過屏蔽系統中斷來避免競態條件的發生,在進入臨界區之前屏蔽中斷,保證期間不會被其他進程或中斷打斷。
- 原子操作:執行過程中不會被其他代碼路徑中斷的操作,確保對共享資源的訪問是原子級別的,避免競態條件。
- 自旋鎖:用于保護臨界區的同步機制,線程在獲取自旋鎖時循環自旋等待,直到成功獲取鎖為止。
- 讀寫自旋鎖:優化的自旋鎖,適用于讀操作和寫操作的并發訪問場景,允許多個線程進行讀操作,只有一個線程可以進行寫操作。
- 順序鎖:保護共享數據的同步機制,適用于讀操作頻繁且寫操作相對較少的場景,提供了更高效的讀寫操作。
- 信號量:用于線程間同步和互斥的機制,允許設置計數器,并提供等待(P)和釋放(V)操作,控制同時訪問共享資源的線程數量。
- 讀寫信號量:用于讀操作和寫操作的線程同步和互斥的機制,允許多個線程進行讀操作,只有一個線程可以進行寫操作。
- BKL(大內核鎖):大粒度的內核鎖,用于整個內核的互斥保護,但可能導致系統整體性能下降,逐漸被其他同步機制所替代。
- Seq鎖:用于保護共享數據的同步機制,適用于并發讀和單個寫操作的場景,通過維護計數器并循環自旋等待實現讀寫同步。