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

成宇佳發表於2023-03-05

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


在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

相關文章