学习操作系统原理最好的方法是自己写一个简单的操作系统。


一、屏幕显示原理

电脑显示器屏幕是由很多很小的像素组成的。每个像素就像是一个小灯泡,在屏幕上一排一排的整齐排列着。只要能控制每个像素的颜色就能显示出各种各样的图形。如果近距离观察过会场或室外的大屏幕会有更直观的感受,这种大屏幕上每个像素就是一个小灯泡。

屏幕显示原理大致可以如下表示:

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 亮白

在计算机里每个像素的颜色都是RGB三原色按照不同的配比来表示的。这里RGB三原色各用一个bit位来表示,所以只能显示2^3=8种颜色,前景色多了一个高亮位,也只能显示2^4=16种颜色。如果要显示更多的颜色就需要更多的bit位来表示,这个我们后面讲图形模式时再介绍。我们在文本模式下能显示黑底白字就足够了。对于黑底白字,字符颜色属性值对照上面两个表可以得出应该是0x07。

三、显存地址分布

之前在实模式的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

自己动手从零写桌面操作系统GrapeOS系列教程——14.屏幕显示原理与文本模式的更多相关文章

  1. 别人写的一个Bootstrap系列教程

    http://www.cnblogs.com/lansy/category/659061.html

  2. 一个人写的操作系统 - Sparrow OS

    一个人写的操作系统 - Sparrow OS 自己写一个操作系统,这是在过去的几年里我一直为之努力的目标,现在终于完成了. 缘起 自己动手写操作系统的动机最初来自于学习Linux遇到的困难. 我是一个 ...

  3. 自制 os 极简教程1:写一个操作系统有多难

    为什么叫极简教程呢?听我慢慢说 不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了 ...

  4. 【操作系统】关于Linux桌面操作系统

    以前是Win+Ubuntu+黑苹果,周末想体验一下deepin,于是简单安装了一下,安装过程很简单,这里不再描述.安装之后,第一次打开系统,确实很惊艳,赏心悦目的操作系统. 之前用Ubuntu时候,C ...

  5. 盘点|2021年最受欢迎Linux桌面操作系统前十名

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 阿里云开源镜像站利用云服务上的优势,提供快速.稳定的镜像分发服务.和免费的CDN加速服务.更新频率高,基本上一天一更新,对于Centos/Ubun ...

  6. 手把手教你从零写一个简单的 VUE

    本系列是一个教程,下面贴下目录~1.手把手教你从零写一个简单的 VUE2.手把手教你从零写一个简单的 VUE--模板篇 今天给大家带来的是实现一个简单的类似 VUE 一样的前端框架,VUE 框架现在应 ...

  7. 《一步一步写嵌入式操作系统》读书笔记1—Skyeye介绍、安装和HelloWorld

    2013-11-14 最近在看<一步一步写嵌入式操作系统>,感觉此书甚好,许多地方讲得很清楚.可操作性强,计划边读边实践边写笔记,希望能够逐步熟悉嵌入式操作系统底层的东西,最终剪裁出一套实 ...

  8. Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(异常处理和引用计数)

    我们将继续一步一步动手给Python写扩展,通过上一篇我们学习了如何写扩展,本篇将介绍一些高级话题,如异常,引用计数问题等.强烈建议先看上一篇,Python之美[从菜鸟到高手]--一步一步动手给Pyt ...

  9. Zedboard学习(一):移植Ubuntu桌面操作系统 标签: ubuntu移植zedboardFPGA 2017-07-04 21:53 26人阅读

    环境准备: 首先,需要的肯定是Ubuntu操作系统.可以在自己的电脑上安装物理机,也可以是虚拟机下运行的.我的是在Vmware下运行的Ubuntu14.04 32位操作系统. 由于zedboard上的 ...

  10. 27、从零写UVC驱动之分析数据传输(设置ubuntu通过串口打印,指定打印到文件,ubuntu切换root用户)

    A. 设置ubuntu让它从串口0输出printk信息a. 设置vmware添加serial port, 使用文件作为串口(在vmware中设置,文件是保存在windows中)b. 启动ubuntu, ...

随机推荐

  1. DDR内存256M16、512M8含义

    256M16,后面的16是代表数据位数,也可以认为是16个bit.一般一个Byte是8个bit.例如256M4的容量为256*16 bit = 4096Mb = 512MB所以 256M16和 512 ...

  2. Pytest 多进程并发执行

    在用例执行的过程中,想要用多进程并发执行测试用例,如何实现呢,其实很简单,pytest有对应的模块,安装方式. 安装 pip install pytest-xdist 使用 pytest test_d ...

  3. NOIP2015 pj

    达成成就!--尝试不看题解的情况下用cpp打完了一套NOIP pj 题目全部在luogu上-- P2669 金币 题目描述 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第 ...

  4. 项目自动备份,oracle 自动备份

    1 项目备份      变量的形式 定时任务不执行就都写成了绝对路径 #!/bin/bash # # 项目路径 /usr/local/tomcat-bjkjdx 备份文件路径/usr/local/ba ...

  5. swift 应用内切换语言

    1:在project info中的locations添加需要的语言 2:创建Localizable.strings文件 点击右边的localization勾选需要的语言 3:创建InfoPlist.s ...

  6. 【LeetCode_15】——三数之和

    今天做了力扣中的一道经典题:三数之和.这题思路倒是很快想到,调逻辑可把我调得够呛,这也正说明我的刷题思维远远不够,比起我室友半个月刷300多题的思维差远了...革命尚未成功,同志仍需努力. 原题链接: ...

  7. Spring5框架

    Spring5框架 一.Spring框架概述 1.1 Spring框架简介 Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的 ...

  8. Android studio的使用2

    运行按钮First activity: package com.example.activity;import androidx.appcompat.app.AppCompatActivity;imp ...

  9. dubbo相关面试题

    1.说说Dubbo的分层? 从大的范围来说,dubbo分为三层,business业务逻辑层由我们自己来提供接口和实现还有一些配置信息,RPC层就是真正的RPC调用的核心层,封装整个RPC的调用过程.负 ...

  10. mapreduce启动命令

    mapreduce启动命令 hadoop jar /var/lib/hadoop-hdfs/codejar/flash_format_testip.jar com.js.dataclean.hm2_h ...