目录

一、前景回顾

二、实模式和保护模式

一、前景回顾

  在之前我们说到,loader的作用才是读取加载操作系统内核,那么我们的重心就应该是loader.S文件,其实我们接下来也的确是会往loader.S中不断填充代码。只是现在我不想开门见山就去开始完善loader.S,对于初学者来说,知其然更要知其所以然,如果我说接下来要开始往loader里面填充全局描述符表等一系列数据结构,可能大多数人是比较懵的,这个东西是什么?有什么作用?所以,我觉得有必要花费一些章节来讲解一下CPU的三种模式,当你了解了这三种模式后,再回过头来看我前面说的东西,就多半能够理解了。这三种模式分别为实模式、保护模式和长模式。我们首先来看前两种模式,事实上在我们这个操作系统中最后也就只涉及到前两种模式。

二、实模式和保护模式

  结合历史背景,Intel 8086是由Intel在1978年所设计的一款16位微处理器,是x86架构的鼻祖。我们要知道当时是没有现在的实模式、保护模式、32位、64位等这些概念的。当时的程序员编写程序就像是我们前面编写的那样,指定一个地址存放代码,让CPU去执行就可以了。

  但是这样的设定有着诸多的缺点:

  1、操作系统和用户程序处于同一特权级,没有区别对待。

  2、用户程序可以自由修改段基址,可以随意访问内存。

  3、用户程序所引用的地址都是指向真实的物理地址,也就是说逻辑地址就等于物理地址。

  4、一次只能运行一个程序,无法充分利用计算机资源。

  5、访问超过64KB的内存区域时就要切换段基址。

  6、共有20条地址线,最大内存空间也就只有1MB。

  其实对于当时来说,第六条的缺陷是无法容忍的,因为随着计算机事业的不断发展,程序对内存的需求是不断增大的,如果还是1MB的内存,简直是让人捉襟见肘。于是Intel又于1985年推出了首款地址总线和寄存器都是32位的处理器80386,80386的内存空间有4GB大小,算是解决了第六个问题。后面我们都知道又推出了64位处理器,理论上可支持的内存空间就有16711425TB之大。

  内存空间的问题解决了,但是考虑到之前的CPU运行模式下的安全缺陷,处理器厂商便开发出了保护模式。没有对比就没有伤害,我们就不花其他篇幅来讲解保护模式,我们就看看针对前面五个问题,保护模式是如何解决的。

  1、针对第一和第二个问题,保护模式增加了特权级,这里我们可以理解为增加了内核级和用户级的两种特权级别,不同的级别有着不同的权限,内核级的特权高于用户级的特权。这样的话处于用户级的用户程序就不能随意访问处于内核级的操作系统,段寄存器属于操作系统管辖的内容,用户程序是无法直接修改的,因此这两个问题得到了解决。

  2、针对第三个问题,保护模式引入了内存分页机制,这里先不去讲述何为分页机制,我们只需要知道,在保护模式下,用户程序所引用的地址变成了虚拟地址,不再是真实的物理地址,虚拟地址到物理地址的映射由操作系统和处理器来完成,这样就完美地解决了第三个问题。

  3、针对第四个问题,保护模式引入了分时机制,每个进程有着事先划分好的时间片,当时间片用光后,进程自动让出CPU,让下一个进程接受调度,极大地提高了计算机的运行效率。当然,这些后面会再详细补充到。第四个问题也就解决了。

  4、第五个问题呢,其实不算是保护模式所解决的。我们知道,实模式下的内存访问方式是“段基址:段内偏移”,之前是因为寄存器的位数只有16位,所以导致段内偏移只能有2^16=64KB大小,超过64KB大小后就需要更改段寄存器的值才能访问到其他地方的内存。自从32位CPU带着32位寄存器出现以后,段内偏移就达到了2^32=4GB大小。因此第五个问题就迎刃解决了。

  所以为什么会有实模式呢?只是因为后来人为了区分保护模式,于是便给以前的模式取名为实模式,为了凸显现在新模式的优势,称新模式为保护模式。

  这里需要强调一下,16位CPU只能运行在实模式下,而32位CPU是可以运行在实模式和保护模式下的。这是考虑到兼容的原因,无论CPU的位数多少,只要还是X86架构下的CPU,一开始都是通过一样的流程来完成系统的初始化,所以会出现我们的CPU一开始处于实模式下,随后又跳转到保护模式下的现象。这里仅仅是针对的32位CPU。如果是16位CPU,那么从始至终都将只是运行在实模式下,如果是64位CPU,最后还会从保护模式跳转到长模式下。

  至于长模式,简单的来说就是寄存器变成了64位,因为我对这个没有深入了解,所以这里就点到为止了。

  总结一下,要想认识保护模式,我们就需要从它的三个特点来入手:

  1、地址映射

  2、特权级

  3、分时机制

  后面的章节便会围绕但不限于这三个点来充分展开,我们会在认识了解这三个特点的同时,不断完善我们的loader.S文件。不过在此之前,我们需要先迈入保护模式。

  欲知后事如何,请看下回分解。

[自制操作系统] 第05回 CPU的三种模式的更多相关文章

  1. 《30天自制操作系统》笔记(06)——CPU的32位模式

    <30天自制操作系统>笔记(06)——CPU的32位模式 进度回顾 上一篇中实现了启用鼠标.键盘的功能.屏幕上会显示出用户按键.点击鼠标的情况.这是通过设置硬件的中断函数实现的,可以说硬件 ...

  2. Linux初学之vmware Workstation 网络连接三种模式

    简介: VM(VMware Workstation简称VM,后面都将用VM代替阐述)是一款功能强大的虚拟化软件.VM支持在 单一的桌面上同时运行多款不同的操作系统,能够模拟完整的网络环境,支持pxe功 ...

  3. centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB 注意down掉网卡的方法 nginx效率没有LVS高 ipvsadm命令集 测试LVS方法 第三十三节课

    centos   LB负载均衡集群 三种模式区别 LVS/NAT 配置  LVS/DR 配置  LVS/DR + keepalived配置  nginx ip_hash 实现长连接  LVS是四层LB ...

  4. [转]VMware Workstation网络连接的三种模式

    经常要使用VMWare Workstation来在本地测试不同的操作系统,以前也搞不清楚网络连接三种模式,最近看了几篇文章才算明白.现总结如下: 1. VMware Workstation的虚拟网络组 ...

  5. LVS三种模式配置及优点缺点比较

    目录: LVS三种模式配置 LVS 三种工作模式的优缺点比较 LVS三种模式配置 LVS三种(LVS-DR,LVS-NAT,LVS-TUN)模式的简要配置 LVS是什么: http://www.lin ...

  6. LVS三种模式配置及优点缺点比较 转

    LVS三种模式配置及优点缺点比较   作者:gzh0222,发布于2012-11-12,来源:CSDN   目录: LVS三种模式配置 LVS 三种工作模式的优缺点比较 LVS三种模式配置 LVS三种 ...

  7. delegate,notifucation,KVO三种模式实现通信的优缺点

             在开发ios应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers间怎么进行通信.在IOS应用不断的出现三种模式来实现这种通信: 1.委托delega ...

  8. 辛星跟您玩转vim第一节之vim的下载与三种模式

    首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载,这里是csdn的下载地址:点此下载 ,假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http://d ...

  9. VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT

    VMware虚拟机上网络连接(network type)的三种模式--bridged.host-only.NAT VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换 ...

随机推荐

  1. [源码解析] TensorFlow 分布式环境(8) --- 通信机制

    [源码解析] TensorFlow 分布式环境(8) --- 通信机制 目录 [源码解析] TensorFlow 分布式环境(8) --- 通信机制 1. 机制 1.1 消息标识符 1.1.1 定义 ...

  2. 基于LAMP离线部署zabbix3.2.11

    zabbix是个什么东西这里不再赘述,先安装lamp再安装zabbix. 1.   安装依赖插件(把下面PHP那些依赖库全部都装了) #yum install -y gcc gcc-c++ opens ...

  3. Python自动批量修改服务器密码

    工作中,我们经常会定期更换服务器密码,如果手动去修改,不仅费时,而且容易出错.下面提供了一种思路,可以实现批量.自动修改服务器密码. 大致思路:首先,为每一台服务器设定一个唯一标识:其次,将每台服务器 ...

  4. 学习打卡——docker部署

    1. 部署mysql 拉取对应版本的mysql,不加版本号默认当前最新版 docker pull mysql:8.0.26 创建目录,可以换成你自己想把它存放的目录,后续同理 mkdir ~/mysq ...

  5. fs本地文件系统

    node 中有一个内置模块,fs全称flie system 文件系统,可以对本地文件执行增删改查操作(以下为异步相关API) 先引入内置模块   var fs=require('fs') 1,增: w ...

  6. LevelDB 学习笔记2:合并

    LevelDB 学习笔记2:合并 部分图片来自 RocksDB 文档 Minor Compaction 将内存数据库刷到硬盘的过程称为 minor compaction 产出的 L0 层的 sstab ...

  7. 6.1 SHELL脚本

    6.1 SHELL脚本元素 第一行的脚本声明(#!)用来告诉系统使用哪种Shell解释器来执行该脚本: 第二行的注释信息(#)是对脚本功能和某些命令的介绍信息,使得自己或他人在日后看到这个脚本内容时, ...

  8. kafka从入门到了解

    kafka从入门到了解 一.什么是kafka Apache Kafka是Apache软件基金会的开源的流处理平台,该平台提供了消息的订阅与发布的消息队列,一般用作系统间解耦.异步通信.削峰填谷等作用. ...

  9. 记录一下l联想Y7000安装双系统(win10+ubuntu16.04)

    单位新配的联想拯救者Y7000,感觉很不错哈,先上一张图. 说实在的,装这个有些小坑,我最开始是直接在原装win10上去装双系统的,结果死活装不上,还把原装win10给折腾没了,哈哈,好逗,以前装双系 ...

  10. [游记] pkusc 2021 游记

    流水账 Day-4 写了ICPC的一道DP,有点细节,虽然写得有点难受,但挺好玩 Day-3 写了PKUSC2018最水的一题 是随机开的题 Day-2 可以去pkusc了,从今天中午开始停课 刚吃完 ...