前言
從一開始的引導(dǎo)程序到現(xiàn)在的文件系統(tǒng)已經(jīng)有十篇了,算是自己對(duì)操作系統(tǒng)的學(xué)習(xí)的一個(gè)筆記,原本是想結(jié)合自己之前寫的玩具操作系統(tǒng)FragileOS
<https://github.com/dejavudwh/FragileOS>,但是之后就轉(zhuǎn)到了結(jié)合Linux 0.11的代碼去寫這個(gè)筆記。
因?yàn)楝F(xiàn)在是馬上開學(xué)了,后勁不足,也有點(diǎn)焦慮,所以這個(gè)系列寫得非常亂。沒有之前那個(gè)從零寫編譯器的系列學(xué)習(xí)筆記
<https://www.cnblogs.com/secoding/p/11393720.html>
寫得順暢,收獲也沒有那么多。所以之后開學(xué)后可能會(huì)打算再讀一下Linux 0.11的源碼。
索引
我是如何學(xué)習(xí)寫一個(gè)操作系統(tǒng)(一):開篇 <https://www.cnblogs.com/secoding/p/11402948.html>
我是如何學(xué)習(xí)寫一個(gè)操作系統(tǒng)(二):操作系統(tǒng)的啟動(dòng)之Bootloader
<https://www.cnblogs.com/secoding/p/11405968.html>
我是如何學(xué)習(xí)寫一個(gè)操作系統(tǒng)(三):操作系統(tǒng)的啟動(dòng)之保護(hù)模式
<https://www.cnblogs.com/secoding/p/11407486.html>
我是如何學(xué)習(xí)寫一個(gè)操作系統(tǒng)(四):操作系統(tǒng)之系統(tǒng)調(diào)用 <https://www.cnblogs.com/secoding/p/11414172.html>
我是如何學(xué)習(xí)寫一個(gè)操作系統(tǒng)(五):故事的高潮之進(jìn)程和線程1
<https://www.cnblogs.com/secoding/p/11417547.html>
我是如何學(xué)習(xí)寫一個(gè)操作系統(tǒng)(六):進(jìn)程的調(diào)度 <https://www.cnblogs.com/secoding/p/11422525.html>
我是如何學(xué)習(xí)寫一個(gè)操作系統(tǒng)(七):進(jìn)程的同步與信號(hào)量 <https://www.cnblogs.com/secoding/p/11428751.html>
我是如何學(xué)習(xí)寫一個(gè)操作系統(tǒng)(八):內(nèi)存管理和段頁機(jī)制 <https://www.cnblogs.com/secoding/p/11437268.html>
我是如何學(xué)習(xí)寫一個(gè)操作系統(tǒng)(九):文件系統(tǒng) <https://www.cnblogs.com/secoding/p/11442659.html>
總結(jié)
一個(gè)完整的操作系統(tǒng)至少包含這幾個(gè)部分:進(jìn)程管理、內(nèi)存管理和文件系統(tǒng),如果嚴(yán)格來說的話可以從引導(dǎo)程序開始說
引導(dǎo)程序
對(duì)于X86架構(gòu)的計(jì)算機(jī),開機(jī)時(shí)一共做這幾件事
* 開機(jī)時(shí)的CS = 0xFFFF, IP = 0x0000
這時(shí)候的CPU處理實(shí)模式,也就是尋址的方式是CS:IP (實(shí)模式和保護(hù)模式屬于CPU的工作模式,其中比較大的區(qū)別就是尋址的方式)
*
尋址0xFFFF0
*
檢查硬件設(shè)備,像鍵盤顯示器之類的
*
將磁盤0磁道0扇區(qū)讀入0x7c00處
會(huì)從這里讀入512字節(jié),也就是傳說中的引導(dǎo)程序,這里放著計(jì)算機(jī)執(zhí)行的第一段代碼
* 設(shè)置cs = 0x7c00 ip = 0x0000
這里也就是會(huì)把真正的操作系統(tǒng)引導(dǎo)到指定位置開始執(zhí)行
進(jìn)程
單核CPU在同一時(shí)刻只能運(yùn)行一條指令,所謂的多進(jìn)程只是指令來回切換的假象,但是因?yàn)樗俣忍?,就可以看成是同時(shí)進(jìn)行的。所以在進(jìn)程切換的時(shí)就需要去組織進(jìn)程的切換
而有關(guān)進(jìn)程最重要的兩個(gè)問題就是:
*
進(jìn)程的調(diào)度
*
進(jìn)程的同步
內(nèi)存管理
多進(jìn)程和內(nèi)存管理是緊密相連的兩個(gè)模塊,因?yàn)檫\(yùn)行進(jìn)程也就是從內(nèi)存中取指執(zhí)行,創(chuàng)建進(jìn)程首先要將程序和數(shù)據(jù)裝入內(nèi)存。將用戶原程序變成可在內(nèi)存中執(zhí)行的程序,而這就涉及到了內(nèi)存管理。
這里也就是為了更好的管理內(nèi)存而引出了段機(jī)制和頁機(jī)制
文件系統(tǒng)
計(jì)算機(jī)以進(jìn)程為基本單位進(jìn)行資源的調(diào)度和分配;而與用戶的交互,基本單位則是文件。在文件這一部分更多是和磁盤打交道。
操作系統(tǒng)很多時(shí)候就是圍繞著方便用戶和提高效率這兩方面,所以才會(huì)把磁盤抽象成文件,又才會(huì)有后來的文件目錄
結(jié)束
其實(shí)這一部分的總結(jié)在之前都有提到,在這里做一個(gè)小整理而已。
熱門工具 換一換