自己动手从零写桌面操作系统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汇编的朋友其实都学过了。本讲下面主要补充一下实模式下的内存布局,如下图(摘自《操作系统真象还原》)所示:
关于实模式下的内存布局我们需要了解以下几点:
- 实模式下总共有1MB的地址空间,但并不是所有的内存地址都是指向内存(条)的。
- 实模式下指向内存(条)的地址空间是0x00000~0x9FFFF,共640KB。也就是说当时支持的最大内存条容量是640KB。
- 在实模式内存中,真正可共我们放程序的地址范围是0x500~0x9FBFF,共630多KB。
- 0xA0000~0xBFFFF这段内存地址是指向三种不同显示模式的显存的。但这里的彩色图形显存非常小,只能显示分辨率为320*200的图形,而且颜色只有256色。GrapeOS并不使用这里。
- 0xF0000~0xFFFFF这段内存地址是指向主板上的BIOS程序的。
看完实模式下的内存布局,从现在的角度看,可能觉得这个硬件配置也太低了。有人传言比尔盖茨曾经说过人类用不着大于1MB的内存。不知这个传言的真假,但计算机的发展的确非常快,现在电脑内存十几GB已经很常见了。实模式在现代操作系统中也只是一个过渡模式,很快就切换到其它高级模式下了。在GrapeOS的实模式下我们主要做两件事,一是做一些必须在实模式下做的事,二是切换到保护模式。
本讲对应的视频版地址:https://www.bilibili.com/video/BV1ws4y1a7UK/
GrapeOS操作系统交流QQ群:643474045
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击