學習操作系統原理最好的方法是自己寫一個簡單的操作系統。
一、屏幕顯示原理
電腦顯示器屏幕是由很多很小的像素組成的。每個像素就像是一個小燈泡,在屏幕上一排一排的整齊排列着。只要能控制每個像素的顏色就能顯示出各種各樣的圖形。如果近距離觀察過會場或室外的大屏幕會有更直觀的感受,這種大屏幕上每個像素就是一個小燈泡。
屏幕顯示原理大致可以如下表示:
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