自己动手从零写桌面操作系统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

posted @ 2023-03-05 23:23  成宇佳  阅读(501)  评论(0编辑  收藏  举报