Linux 0.11主要包含文件管理和進程管理兩個部分。進程管理包括記憶體管理、進程管理、進程間通信模塊。文件管理包含磁碟文件系統,打開文件記憶體數據。磁碟文件系統包括空閑磁碟塊管理,文件數據塊的管理,文件元數據的管理,樹形結構目錄。打開文件記憶體數據包括文件描述符表、file文件表、inode節點表。 ...
總結
Linux 0.11主要包含文件管理和進程管理兩個部分。進程管理包括記憶體管理、進程管理、進程間通信模塊。文件管理包含磁碟文件系統,打開文件記憶體數據。磁碟文件系統包括空閑磁碟塊管理,文件數據塊的管理,文件元數據的管理,樹形結構目錄。打開文件記憶體數據包括文件描述符表、file文件表、inode節點表。
中斷過程
- 每個進程有一個用戶棧和一個進程棧,中斷調用導致用戶棧切換到內核棧,中斷返回導致內核棧切換到用戶棧
- INT指令中調調用時,用戶態運行狀態被保存到內核棧中
- IRET指令中斷返回時,恢復用戶態運行狀態信息,包括用戶棧地址信息
- 系統調用基於int 80軟中斷實現,80中斷程式根據系統調用號調用相應的函數,如sys_read、sys_write
- 時間片輪轉進程調度基於時鐘中斷實現,進程時間片用完時,發生時鐘中斷,中斷程式轉而運行調度程式
- 進程調度的實質是運行狀態之間的切換,被選中運行的程式,將被選中進程的運行狀態信息複製到硬體寄存器中,運行被選中程式
記憶體管理
- 分頁記憶體管理包括空閑塊的管理、進程基於頁表管理已分配的物理記憶體;分段記憶體管理通過段表(LDT)管理分段記憶體信息。
- 地址翻譯經過段號:偏移—>線性地址—>物理地址的二次轉換過程,設置好段表(LDTR)和頁表(PTBR)信息後,記憶體管理單元(MMU)自動完成地址翻譯過程。
文件管理
磁碟數據結構
- 磁碟空閑塊的管理,可以通過鏈表、點陣圖、成組鏈接法等。
- 文件數據塊的管理,通過類似頁表的結構維護文件邏輯塊到磁碟物理塊之間的映射
- 磁碟文件的管理,通過inode數組維護所有文件信息,inode記錄對應的文件信息
- 樹形目錄結構,目錄數據文件包含子文件名—>子文件inode號的映射關係,從而形成樹形目錄結構。
打開文件的記憶體數據結構
- inode表,記錄文件的inode數據,用磁碟上文件inode數據基本一致
- file表,記錄打開文件的信息,維護進程對文件的操作狀態,如讀寫偏移
- 文件描述符表,記錄進程打開的文件集合,表項是文件表的下標索引
- fork後父子進程文件描述符表相同;不同進程打開同一文件,具有不同的file數據,即擁有不同的讀寫偏移。
高速緩衝
- 空閑緩衝區的管理,使用空閑鏈表
- 已分配緩衝區的管理,為加快訪問速度,使用哈希表,哈希函數的輸入是設備號和磁碟塊號
- 臟緩衝塊數據的寫盤,緩衝塊需要重新緩存其它磁碟塊的數據時,對於舊的數據,如果具有臟數據(dirt位為1),則寫入磁碟
塊驅動程式
- 通過設備表管理塊設備,表項記錄設備的請求隊列地址,處理請求函數地址。
- 請求隊列維護所有對磁碟的讀寫請求,所有讀寫請求被放到請求隊列中
- 設備中斷處理程式,不斷處理請求隊列中的讀寫請求