《30天自製作業系統》第6天

2021-06-20 02:15:19 字數 3278 閱讀 1535

1.pic 可程式設計中斷控制器

pic 連線

8個中斷訊號,監視輸入管腳的

8個中斷訊號。主

pic:

irq0-irq7

(irq2

連線到從

pic:

irq8-irq15)。

中斷發生後,cpu

命令pic傳送2

個位元組的資料,格式是:

0xcd  0***

,cpu收到2

個位元組後把資料當做指令來執行。

0xcd 

就是int

的機器碼,

cd  10 

就是int 0x10

,於是執行了中斷程式。

2.每次訪問記憶體時,將所訪問的位址和資料放到快取記憶體中,第二次訪問的時候,只需訪問快取即可,大大提高了速度。

9成以上的時候浪費在迴圈上。

快取功勞很大。

cr0 |=    cr0_cache_disable;//允許快取

cr0 &=  ~cr0_cache_disable;//禁止快取

聰明的編譯器:

編譯器優化能力較強,偶爾會把不需要優化的地方優化了,這點需要注意。

3.挑戰記憶體管理:乙個程式執行時,需要向作業系統申請記憶體空間的分配,os

必須恰當管理好那些記憶體可以使用(空閒),那些記憶體不可以使用(正在使用),這就是記憶體管理。記憶體管理的基礎,一是記憶體分配,一是記憶體釋放。 4.

第乙個方法:按4kb

為單位進行記憶體管理,專門用乙個記憶體查詢表,如果不可用標記為

1,可用標記為0。

最開始空閒空閒設為0

,當乙個程式向

os申請

100k

記憶體空間時,從記憶體查詢表中找到連續

25個為

0的位址空間即可。找到後(查詢表)標記為

1,程式執行完畢釋放空間再標記為0。

第二個方法:

struct freeinfo ;空閒空間的起始位址

addr

,空閒空間的大小

size

。struct memman零碎位址

查詢空閒位址空間,如果大小滿足要求,addr+=

要分配的大小;

size-=

要分配的大小;

釋放:增加一條可用記憶體資訊,free++

;上下捨入:i = (i+0xfff) & 0xfffff000;

5.圖層的顯示與疊加---

多個圖層的疊加,重繪,只繪製改變的地方即可!!! 總結

1.計算機主要功能是計算(資訊的處理),次要功能是通訊,基本都是圍繞這兩個功能進行;最開始的計算機就是用於科學計算的; 2.

cpu是核心部件,計算功能都由其完成;

3.計算的是資料,現實的物理世界都可以抽象為資料,0101

的二進位制資料;

4.資料需要輸入,因此需要輸入裝置,比如滑鼠,鍵盤等,資料經過cpu

的處理後也需要輸出,輸出裝置包括檔案,顯示器,印表機等;

5.具體的計算是由指令完成的,乙個指令可以看成一塊電路,比如加法器電路; 6.

計算的物件是資料,計算的核心是演算法(複雜資料的表現形式稱為資料結構); 7.

所有的高階程式最終都編譯稱為cpu

的指令,也就是一系列的

01串,可以用二進位制編輯器檢視任何軟體的機器指令;編譯器不過是乙個文字轉換工具,把高階語言轉化為機器指令**;

8.多工是由cpu

儲存剛執行的暫存器,最後返回現場;

9.儲存是乙個很重要的功能,資料和指令都需要儲存,軟體執行後都在記憶體中,cpu

根據pc

暫存器的值一條一條執行指令;

10.所有的程式設計都是對cpu

程式設計,就是順序執行一條條的機器指令;彙編和機器指令一一對應,是最底層的語言,他可以控制硬體完成(

cpu所能做的)所有的功能;

11.電腦開機後,cpu

暫存器cs=0xffff,

其他暫存器都為0,

cpu執行cs:

ip=0xffff0

處的程式,此程式為

bois rom

程式,他的功能是開始執行硬體的檢查(

post

),查詢外部硬體記憶體,鍵盤,顯示器,硬碟是否正常,自檢完成後

bios

把控制權轉交給下一階段的啟動程式。安裝啟動順序查詢啟動裝置,檢視第乙個扇區最後兩位元組是否是

55aa,

如果是,開始執行此扇區的**,這個**功能主要是載入作業系統到記憶體中,載入後,將控制權交給作業系統。

12.作業系統的三大抽象:檔案系統,虛擬記憶體(記憶體空間),執行緒。

顯示器上的圖形都是cpu

繪製出來的,

cpu將畫素資料寫到視訊記憶體空間,電子掃瞄器按畫素掃瞄到顯示器即可完成顯示。視窗的顯示,隱藏,疊加,滑鼠的顯示等都是由作業系統完成,主要是繪製。鍵盤,滑鼠,網絡卡的輸入都是中斷實現,中斷效率高,占用

cpu時間少。多工就是

cpu的暫存器值儲存,最後還原過程。

13.作業系統將一系列常用功能封裝為函式,以**用程式呼叫,這種函式就是作業系統的api

函式,比如

windows

系統的winapi

,mfc

不過是對

winapi

的再次封裝而已。

14.定時器功能也是由中斷完成,到時間了用中斷通知cpu

。15.

記憶體管理是乙個很重要的功能,有很多實現方法,乙個方法就是維護乙個列表,指示當前空閒記憶體的起始位址和空閒大小,如果有程式要求os

分配記憶體空間

1k,查詢此表即可,如果有則將起始位址加上

1k,將大小減去1k。

16.

17.無論何時看到源**總應該想到他最終的表現是機器**-

機器指令,甚至可以想象到他編譯後的機器**是什麼。

18.一般的編譯器都會將依賴cpu

生成的機器碼的部分單獨歸為乙個名為

backend

的模組,根據不同的

cpu可以更換相應的

backend

,就可以支援其他型號的

cpu了。

19.很多看似難如登天的事情,一旦真的下決心去做,你會發現難度並沒有想象中那麼高,只是我們往往缺少一顆勇於挑戰的心罷了。

20.軟體0101

,資料結構與演算法,

c/c++,web,

移動網際網路,智慧型地球,智慧型電器,

linux

,能源與材料,地球是平的

---大爭之世,全球化視野,宇宙視野,上帝的角度,

21.高屋建瓴,抓住本質和重點。

2013-12-26

《30天自製作業系統》第4天

1.c語言與畫面顯示的練習 彙編與c 語言結合時能自由使用的寄存區只有 eax,ecx,edx3 個,其他寄存區用於記憶非常重要的值,只能讀不能寫。intel系列 cpu 8086 80186 286 386 486 pentium pentiumpro pentium2 pentium3 pent...

30天自製作業系統 第3天

cf 進製標誌,1位暫存器 jc 若進製標誌是1,則跳轉 int 0x13 呼叫磁碟bios ah 0x00 系統復位 0x02 讀盤 0x03 寫盤 0x04 校驗 0x0c 尋道 al 處理物件的扇區數 ch 柱面號 0xff cl 扇區號 0 5位 柱面號 0x300 2 dh 磁頭號 dl ...

30天自製作業系統 第0天

hello os tab 4 標準fat12格式軟盤專用 db 0xeb 0x4e 0x90 db helloipl 啟動區的名稱 可為任意字串 dw 512 每個扇區的大小 必須為512位元組 db 1 簇的大小 必須為1個扇區 dw 1 fat的起始位置 一般從第乙個扇區開始 db 2 fat的...