1. 程式人生 > >我是如何學習寫一個作業系統(完結):總結和系列索引

我是如何學習寫一個作業系統(完結):總結和系列索引

前言

從一開始的載入程式到現在的檔案系統已經有十篇了,算是自己對作業系統的學習的一個筆記,原本是想結合自己之前寫的玩具作業系統FragileOS,但是之後就轉到了結合Linux 0.11的程式碼去寫這個筆記。

因為現在是馬上開學了,後勁不足,也有點焦慮,所以這個系列寫得非常亂。沒有之前那個從零寫編譯器的系列學習筆記寫得順暢,收穫也沒有那麼多。所以之後開學後可能會打算再讀一下Linux 0.11的原始碼。

索引

我是如何學習寫一個作業系統(一):開篇

我是如何學習寫一個作業系統(二):作業系統的啟動之Bootloader

我是如何學習寫一個作業系統(三):作業系統的啟動之保護模式

我是如何學習寫一個作業系統(四):作業系統之系統呼叫

我是如何學習寫一個作業系統(五):故事的高潮之程序和執行緒1

我是如何學習寫一個作業系統(六):程序的排程

我是如何學習寫一個作業系統(七):程序的同步與訊號量

我是如何學習寫一個作業系統(八):記憶體管理和段頁機制

我是如何學習寫一個作業系統(九):檔案系統

總結

一個完整的作業系統至少包含這幾個部分:程序管理、記憶體管理和檔案系統,如果嚴格來說的話可以從載入程式開始說

載入程式

對於X86架構的計算機,開機時一共做這幾件事

  • 開機時的CS = 0xFFFF, IP = 0x0000

這時候的CPU處理真實模式,也就是定址的方式是CS:IP (真實模式和保護模式屬於CPU的工作模式,其中比較大的區別就是定址的方式)

  • 定址0xFFFF0

  • 檢查硬體裝置,像鍵盤顯示器之類的

  • 將磁碟0磁軌0扇區讀入0x7c00處

會從這裡讀入512位元組,也就是傳說中的載入程式,這裡放著計算機執行的第一段程式碼

  • 設定cs = 0x7c00 ip = 0x0000

這裡也就是會把真正的作業系統引導到指定位置開始執行

程序

單核CPU在同一時刻只能執行一條指令,所謂的多程序只是指令來回切換的假象,但是因為速度太快,就可以看成是同時進行的。所以在程序切換的時就需要去組織程序的切換

而有關程序最重要的兩個問題就是:

  • 程序的排程

  • 程序的同步

記憶體管理

多程序和記憶體管理是緊密相連的兩個模組,因為執行程序也就是從記憶體中取指執行,建立程序首先要將程式和資料裝入記憶體。將使用者原程式變成可在記憶體中執行的程式,而這就涉及到了記憶體管理。

這裡也就是為了更好的管理記憶體而引出了段機制和頁機制

檔案系統

計算機以程序為基本單位進行資源的排程和分配;而與使用者的互動,基本單位則是檔案。在檔案這一部分更多是和磁碟打交道。

作業系統很多時候就是圍繞著方便使用者和提高效率這兩方面,所以才會把磁碟抽象成檔案,又才會有後來的檔案目錄

結束

其實這一部分的總結在之前都有提到,在這裡做一個小整理而已