[自制操作系统] 第05回 CPU的三种模式
目录
一、前景回顾
二、实模式和保护模式
一、前景回顾
在之前我们说到,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的三种模式的更多相关文章
- 《30天自制操作系统》笔记(06)——CPU的32位模式
<30天自制操作系统>笔记(06)——CPU的32位模式 进度回顾 上一篇中实现了启用鼠标.键盘的功能.屏幕上会显示出用户按键.点击鼠标的情况.这是通过设置硬件的中断函数实现的,可以说硬件 ...
- Linux初学之vmware Workstation 网络连接三种模式
简介: VM(VMware Workstation简称VM,后面都将用VM代替阐述)是一款功能强大的虚拟化软件.VM支持在 单一的桌面上同时运行多款不同的操作系统,能够模拟完整的网络环境,支持pxe功 ...
- 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 ...
- [转]VMware Workstation网络连接的三种模式
经常要使用VMWare Workstation来在本地测试不同的操作系统,以前也搞不清楚网络连接三种模式,最近看了几篇文章才算明白.现总结如下: 1. VMware Workstation的虚拟网络组 ...
- LVS三种模式配置及优点缺点比较
目录: LVS三种模式配置 LVS 三种工作模式的优缺点比较 LVS三种模式配置 LVS三种(LVS-DR,LVS-NAT,LVS-TUN)模式的简要配置 LVS是什么: http://www.lin ...
- LVS三种模式配置及优点缺点比较 转
LVS三种模式配置及优点缺点比较 作者:gzh0222,发布于2012-11-12,来源:CSDN 目录: LVS三种模式配置 LVS 三种工作模式的优缺点比较 LVS三种模式配置 LVS三种 ...
- delegate,notifucation,KVO三种模式实现通信的优缺点
在开发ios应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers间怎么进行通信.在IOS应用不断的出现三种模式来实现这种通信: 1.委托delega ...
- 辛星跟您玩转vim第一节之vim的下载与三种模式
首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载,这里是csdn的下载地址:点此下载 ,假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http://d ...
- VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
VMware虚拟机上网络连接(network type)的三种模式--bridged.host-only.NAT VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换 ...
随机推荐
- 麒麟系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12
前言 上一篇,是使用Qt提供的安装包安装的,有些场景需要使用到从源码编译的Qt,所以本篇如何在银河麒麟系统V4上编译Qt5.12源码. 银河麒麟V4版本 系统版本: Qt源码下载 ...
- SpringMVC获取请求参数-基本类型
1.Controller中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配 (json形式) <dependency> <groupId>com.faste ...
- LC-203
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 . 示例 1: 输入:head = [1,2,6,3,4,5, ...
- SpatiaLite 数据库使用记录
SpatiaLite 数据库使用记录 官网 https://www.gaia-gis.it/fossil/libspatialite/index 下载地址 https://www.gaia-gis.i ...
- Cookie与Session、CBV添加装饰器
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- C++篇:第八章_类_知识点大全
C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 八.类 (一)类的概念与规则 "子类"和"子类型& ...
- Markdown学习-Typora
author:涂勇军 标题 (#加一个空格)一级标题 (##加一个空格)二级标题 (###加一个空格)三级标题 (####加一个空格)四级标题 字体 加粗:** hello,World **(快捷键是 ...
- url路径匹配类
AntPathMatcher 1.AntPathMatcher类匹配URL规则如下 ?匹配一个字符 * 匹配0个或多个字符 * *匹配0个或多个目录 2.例子 /trip/api/*x 匹配 / ...
- 漏洞复现:使用Kali制作木马程序
漏洞复现:使用Kali制作木马程序 攻击机:Kali2019 靶机:Win7 64位 攻击步骤: 1.打开Kali2019和Win7 64位虚拟机,确定IP地址在一个网段 2.确定好IP地址,进入Ka ...
- springboot:使用异步注解@Async的前世今生
在前边的文章中,和小伙伴一起认识了异步执行的好处,以及如何进行异步开发,对,就是使用@Async注解,在使用异步注解@Async的过程中也存在一些坑,不过通过正确的打开方式也可以很好的避免,今天想和大 ...