學習作業系統原理最好的方法是自己寫一個簡單的作業系統。
一、螢幕顯示原理
電腦顯示器螢幕是由很多很小的畫素組成的。每個畫素就像是一個小燈泡,在螢幕上一排一排的整齊排列著。只要能控制每個畫素的顏色就能顯示出各種各樣的圖形。如果近距離觀察過會場或室外的大螢幕會有更直觀的感受,這種大螢幕上每個畫素就是一個小燈泡。
螢幕顯示原理大致可以如下表示:
CPU(程式)->顯示卡(視訊記憶體)->顯示器(螢幕)
在程式的控制下,CPU將要顯示的資料傳送到顯示卡上的視訊記憶體(顯示卡上的記憶體),視訊記憶體中的資料和螢幕上的畫素是有對應關係的,顯示卡會不斷的從視訊記憶體中取出資料發給顯示器,顯示器就會在螢幕上顯示出對應的圖形。發給顯示器前,顯示卡可能會對資料做一些處理。顯示卡多長時間向顯示器發一次資料與重新整理頻率有關。
二、顯示卡的文字模式
顯示卡有圖形模式和文字模式兩類顯示模式。電腦啟動後,顯示卡的預設模式就是文字模式,能顯示25行80列ASCII字元。
對螢幕來說一切皆是圖形,顯示卡的文字模式是為了方便開發人員顯示字元用的。如果沒有文字模式,顯示任何字元都需要開發人員自己精確控制每個畫素,後面我們在圖形模式中就需要這麼做。文字模式無法展示多彩的世界,但我們在進入圖形模式前需要在文字模式下顯示一些提示資訊,所以我們需要學習一下文字模式。
在預設文字模式下,視訊記憶體與螢幕的對應關係為每2個位元組對應一個字元,其中低位元組存放ASCII碼,高位元組存放字元顏色屬性。詳情如下表所示:
bit | 內容 | 說明1 | 說明2 |
---|---|---|---|
15 | K | 是否閃爍 | 背景色 |
14 | R | 紅 | |
13 | G | 綠 | |
12 | B | 藍 | |
11 | I | 是否高亮 | 前景色 |
10 | R | 紅 | |
9 | G | 綠 | |
8 | B | 藍 | |
7 | 字元ASCII碼 | ||
6 | |||
5 | |||
4 | |||
3 | |||
2 | |||
1 | |||
0 |
R | G | B | 顏色 | |
---|---|---|---|---|
I=0 | I=1 | |||
0 | 0 | 0 | 黑 | 灰 |
0 | 0 | 1 | 藍 | 淺藍 |
0 | 1 | 0 | 綠 | 淺綠 |
0 | 1 | 1 | 青 | 淺青 |
1 | 0 | 0 | 紅 | 淺紅 |
1 | 0 | 1 | 品紅 | 淺品紅 |
1 | 1 | 0 | 棕 | 黃 |
1 | 1 | 1 | 白 | 亮白 |
三、視訊記憶體地址分佈
之前在真實模式的1M記憶體佈局中介紹過視訊記憶體地址的分佈,我們在這裡再回顧一下:
起始 | 結束 | 大小 | 用途 |
---|---|---|---|
0xb8000 | 0xbffff | 32KB | 文字模式視訊記憶體 |
0xb0000 | 0xb7fff | 32KB | 黑白圖形視訊記憶體 |
0xa0000 | 0xaffff | 64KB | 彩色圖形視訊記憶體 |
從上表可以看到,文字模式的視訊記憶體開始地址為0xb8000。上面我們已經講過,在該預設模式下,一個字元對應2個位元組。所以螢幕第一行第一個字元對應的地址為0xb8000和0xb8001,其中0xb8000為字元顏色屬性,0xb8001為字元ASCII碼。第二個字元對應的地址為0xb8002和0xb8003,後面的字元以此類推。在預設模式下,每行顯示80個字元,第81個字元會顯示在第二行第一個字元的位置,第161個字元會顯示在第三行第一個字元的位置,後面的字元同樣以此類推。
需要了解的是,上表中的圖形視訊記憶體地址段並不是GrapeOS作業系統用的圖形地址段,具體情況後面再介紹。
本講影片版地址:https://www.bilibili.com/video/BV1Nb411d7Ha/
本教程程式碼和資料:https://gitee.com/jackchengyujia/grapeos-course
GrapeOS作業系統QQ群:643474045