自己動手從零寫桌面操作系統GrapeOS系列教程——9.實模式介紹

學習操作系統原理最好的方法是自己寫一個簡單的操作系統。


在GrapeOS中會用到2種CPU模式,一種是實模式(real mode),另一種是保護模式(protected mode)。在本教程中,保護模式特指32位保護模式。這兩種模式最主要的不同點是對內存地址的訪問方式不同,此外還有其它的不同點。這兩者具體的不同之處我們會逐步介紹,本講我們先來介紹一下實模式。

實模式也叫8086模式。其實幾乎所有的x86彙編教程和書籍都會講實模式,如果沒有說是什麼模式,一般都是實模式。在第二講中已經提到學習本教程的前提條件之一是會x86彙編,所以看到本講的朋友應該是會x86基本彙編的。也就是說大家應該是懂實模式的,只不過有的朋友不知道那就是實模式而已。

上面我們提到實模式和保護模式的最主要的不同點是對內存地址的訪問方式不同。讓我們一起來回憶一下實模式下的內存地址是如何計算的:

實模式內存地址=段地址*16+偏移量

看到上面這個計算公式,學過x86彙編的朋友應該有印象了吧?有印象的朋友就可以繼續看下面的內容了。前面的課程中我們講到過電腦的啓動過程:

上電->BIOS->MBR(boot)->loader->kernel->交互界面(圖形/命令行)

在GrapeOS中,BIOS是實模式,MBR(boot)是實模式,loader的前半部分是實模式,後半部分是保護模式,kernel及其後續程序都是保護模式。

關於實模式不需要做過多的介紹,因爲會x86彙編的朋友其實都學過了。本講下面主要補充一下實模式下的內存佈局,如下圖(摘自《操作系統真象還原》)所示:

關於實模式下的內存佈局我們需要了解以下幾點:

  1. 實模式下總共有1MB的地址空間,但並不是所有的內存地址都是指向內存(條)的。
  2. 實模式下指向內存(條)的地址空間是0x00000~0x9FFFF,共640KB。也就是說當時支持的最大內存條容量是640KB。
  3. 在實模式內存中,真正可共我們放程序的地址範圍是0x500~0x9FBFF,共630多KB。
  4. 0xA0000~0xBFFFF這段內存地址是指向三種不同顯示模式的顯存的。但這裏的彩色圖形顯存非常小,只能顯示分辨率爲320*200的圖形,而且顏色只有256色。GrapeOS並不使用這裏。
  5. 0xF0000~0xFFFFF這段內存地址是指向主板上的BIOS程序的。

看完實模式下的內存佈局,從現在的角度看,可能覺得這個硬件配置也太低了。有人傳言比爾蓋茨曾經說過人類用不着大於1MB的內存。不知這個傳言的真假,但計算機的發展的確非常快,現在電腦內存十幾GB已經很常見了。實模式在現代操作系統中也只是一個過渡模式,很快就切換到其它高級模式下了。在GrapeOS的實模式下我們主要做兩件事,一是做一些必須在實模式下做的事,二是切換到保護模式。


本講對應的視頻版地址:https://www.bilibili.com/video/BV1ws4y1a7UK/
GrapeOS操作系統交流QQ羣:643474045

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章