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

前言

從一開始的引導程序到如今的文件系統已經有十篇了,算是本身對操做系統的學習的一個筆記,本來是想結合本身以前寫的玩具操做系統FragileOS,可是以後就轉到告終合Linux 0.11的代碼去寫這個筆記。html

由於如今是立刻開學了,後勁不足,也有點焦慮,因此這個系列寫得很是亂。沒有以前那個從零寫編譯器的系列學習筆記寫得順暢,收穫也沒有那麼多。因此以後開學後可能會打算再讀一下Linux 0.11的源碼。git

索引

我是如何學習寫一個操做系統(一):開篇github

我是如何學習寫一個操做系統(二):操做系統的啓動之Bootloader架構

我是如何學習寫一個操做系統(三):操做系統的啓動之保護模式學習

我是如何學習寫一個操做系統(四):操做系統之系統調用操作系統

我是如何學習寫一個操做系統(五):故事的高潮之進程和線程1線程

我是如何學習寫一個操做系統(六):進程的調度htm

我是如何學習寫一個操做系統(七):進程的同步與信號量blog

我是如何學習寫一個操做系統(八):內存管理和段頁機制索引

我是如何學習寫一個操做系統(九):文件系統

總結

一個完整的操做系統至少包含這幾個部分:進程管理、內存管理和文件系統,若是嚴格來講的話能夠從引導程序開始說

引導程序

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

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

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

  • 尋址0xFFFF0

  • 檢查硬件設備,像鍵盤顯示器之類的

  • 將磁盤0磁道0扇區讀入0x7c00處

會從這裏讀入512字節,也就是傳說中的引導程序,這裏放着計算機執行的第一段代碼

  • 設置cs = 0x7c00 ip = 0x0000

這裏也就是會把真正的操做系統引導到指定位置開始執行

進程

單核CPU在同一時刻只能運行一條指令,所謂的多進程只是指令來回切換的假象,可是由於速度太快,就能夠當作是同時進行的。因此在進程切換的時就須要去組織進程的切換

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

  • 進程的調度

  • 進程的同步

內存管理

多進程和內存管理是緊密相連的兩個模塊,由於運行進程也就是從內存中取指執行,建立進程首先要將程序和數據裝入內存。將用戶原程序變成可在內存中執行的程序,而這就涉及到了內存管理。

這裏也就是爲了更好的管理內存而引出了段機制和頁機制

文件系統

計算機以進程爲基本單位進行資源的調度和分配;而與用戶的交互,基本單位則是文件。在文件這一部分更可能是和磁盤打交道。

操做系統不少時候就是圍繞着方便用戶和提升效率這兩方面,因此纔會把磁盤抽象成文件,又纔會有後來的文件目錄

結束

其實這一部分的總結在以前都有提到,在這裏作一個小整理而已。

相關文章
相關標籤/搜索