[自制操作系统] 第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(网络地址转换 ...
随机推荐
- 企业需要使用网络损伤仪 WANsim 的帮助,以便更高效地迁移到云端
正确解决与云环境中的应用程序部署有关的问题需要针对每个系统的独特需求以寻找特定的网络工具.网络损伤仪 WANsim 助力企业更高效地迁移到云端! 起初,云厂商以在云端办公相对于传统方式拥有更高的可靠性 ...
- shell、bash和sh区别
shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序.你在提示符下输入的每个命令都由shell先解释然后传给Linux内核. shell 是一个命令语言解释器(co ...
- Redis HyperLogLog 是什么?这些场景使用它,让我枪出如龙,一笑破苍穹
在移动互联网的业务场景中,数据量很大,我们需要保存这样的信息:一个 key 关联了一个数据集合,同时对这个数据集合做统计. 比如: 统计一个 APP 的日活.月活数: 统计一个页面的每天被多少个不同账 ...
- js字符串常用的方法总结,及其用法
JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...
- docker基础_docker引擎内部原理
docker引擎内部原理 docker主要由以下主要组件构成:docker客户端.docker守护进程(daemon).containerd.runc.shim daemon daemon的主要功能包 ...
- Failed to load resource: the server responded with a status of 404 ()
今天遇到了一个一开始感觉很莫名其妙的报错 在编写页面的时候把原先写在html页面里的js代码单独拿出来做成一个JavaScriptUtil文件,放在了和html页面同一个目录下.运行之后在对应的页面c ...
- MySql免安装版 Error 2003 Can connect to MySQL server on ...
现象描述:mysql只能本地登录,无法远程登录 解决方案: 1. 查看mysql端口(默认端口3306,命令端口根据需要修改),发现只有本地连接端口开放. netstat -an|findstr 33 ...
- vue项目中cookie的使用
Vue使用cookie和session 1:cookie和session 为了防止数据运输或存储终端,特地设置了cookie和session,他们其实都是将数据存储当地. cookie数据保存在客户端 ...
- SSM框架中返回的是字符串还是页面跳转的问题
如果你在控制器前的注解是@RestController的话,将返回controller方法指定的String值,@RestController注解相当于@ResponseBody和@Controlle ...
- Windows下查找各类游戏存档路径
我算是个比较爱打单机游戏的人,同时也是个半吊子的编程爱好者,有的时候会去干一些修改存档的事儿.不过这篇博文不讲存档修改技术,只讲第一步:去哪找存档? 目标:在windows10系统下搜索到游戏的存档路 ...