目录

一、前景回顾

二、实模式和保护模式

一、前景回顾

  在之前我们说到,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. Mybatis-typeAliases的作用

    其他具体代码请访问->mybatis的快速入门 1.在mybatis核心配置文件SqlMapperConfig.xml中配置别名 <!-- 定义别名--> <typeAlias ...

  2. Spring-Bean标签属性scope范围

    scope:指对象的作用范围,取值如下 1.singleton:默认值,单例的 2.prototype:多例的 3.request:WEB项目,Spring创建一个Bean的对象,把对象存入到requ ...

  3. linux磁盘概述

    硬盘简史 世界上第一块硬盘出生在1956年,至今已有61年半个多世纪的历史.它由IBM公司制造,世界上第一块硬盘:350RAMAC.盘片直径为24英寸,盘片数为50片,重量则是上百公斤,相当于两个冰箱 ...

  4. Java-GUI编程之绘图

    绘图 很多程序如各种小游戏都需要在窗口中绘制各种图形,除此之外,即使在开发JavaEE项目时,有时候也必须"动态"地向客户 端生成各种图形.图表,比如 图形验证码.统计图等,这都需 ...

  5. 6.Docker容器底层实现了解与安全机制

    原文地址: 点击直达 0x00 底层实现 我们以 Docker 基础架构来探究Docke底层的核心技术,简单的包括: Linux 上的命名空间(Namespaces) 控制组(Control grou ...

  6. SpringMVC基础原理

    1.拦截所有请求到DispatcherServlet 2.去寻找映射器 3.根据处理器适配器处理业务,返回视图 4.视图解析器解析显示视图

  7. [源码解析] TensorFlow 之 分布式变量

    [源码解析] TensorFlow 之 分布式变量 目录 [源码解析] TensorFlow 之 分布式变量 1. MirroredVariable 1.1 定义 1.2 相关类 1.2.1 类体系 ...

  8. python基础练习题(暂停一秒输出,并格式化当前时间)

    day5 --------------------------------------------------------------- 实例010:给人看的时间 题目 暂停一秒输出,并格式化当前时间 ...

  9. Java web与web gis学习笔记(二)——百度地图API调用

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  10. 使用Proftpd支持FTP/SFTP权限管控

    简介 FTP 文件传输协议,FTP由FTP服务器(存储文件)和FTP客户端(通过FTP协议访问FTP服务器上的资源)组成 传输方式 主动模式(Port) 客户端与服务器端的TCP 21端口建立连接 - ...