一步步编写操作系统 25 cpu的保护模式

在保护模式下,我们将见到很多在实模式下没有的新概念,很多都是cpu硬件原生提供,并且要求的东西,也就是说按照cpu的设计,必须有这些东西cpu才能运行。咱们只要了解它们是什么并且怎么用就行了,不用深入到硬件之中挖掘其工作原理,咱们虽然是在做底层开发,但依然是应用型开发,我们能开发出什么样的软件,取决于cpu给咱们提供什么样的功能。就像能做出什么样的动画,主要取决于动画设计软件的功能是否强大,动画设计师的聪明才智虽然是无限的,但其驾驭能力还是很大程度上受限于软件本身的功能。今后大家会见到全局描述符表、中断描述符表、各种门结构等等,所以,大家不用对这些硬件相关的概念感到慌乱,这些是cpu提供给咱们应用的,咱们用好就行了,还记得之前说过的公设吗,这也是。

保护模式强调的是“保护”,它是在intel 80286 cpu中首次出现的,这是继8086之后,intel紧接着推出的一款产品。可见,当时的8086是多么的缺乏安全感。

保护模式中的“保护”体现在哪里?怎么就安全了?这个问题就像幸福的人问什么是幸福一样,还记得以前在百度工作时,我的技术经理李智勇问我:“你幸福吗?”,这时候我的项目经理贺亚涛抢答:“什么是幸福?”,哈哈,玩笑,您懂的。

“想要啥就有啥”并不是真正的幸福,而是发自内心地感恩、珍惜目前所拥有的一切。其实咱们已经被保护很久了,所以咱们才可以自由自在地享受计算机带来的便利。

幸福是比出来的,这一点不假。让我们看看cpu实模式的不幸,大家就清楚保护模式的幸福了。

1.实模式下操作系统和用户程序属于同一特权级,这哥俩平起平坐,没有区别对待。

2.用户程序所引用的地址都是指向真实的物理地址,也就是说逻辑地址等于物理地址,实实在在的指哪打哪。

3.用户程序可以自由修改段基址,可以不亦乐乎的访问所有内存,没人拦得住。

以上三个原因属于安全缺陷,没有安全可言的cpu注定是不可依赖的,这从基因上决定了用户程序乃至操作系统的数据都可以被随意的删改,一旦出事往往都是灾难性的,而且不容易排查。

4.访问超过64k的内存区域时要切换段基址,转来转去容易晕乎。

5.一次只能运行一个程序,无法充分利于计算机资源。

6.共20条地址线,最大可用内存为1M,这即使在过去20年前也不够用。

第4、5条是使用方面的缺陷,似乎当时(20年前)还可以忍受,但第6条简直就是硬伤,随着计算机事业的发展,程序对内存的需求必然是越来越大,如果还是1M内存,真的太束手束脚。

为了克服这种低劣的内存管理方式,处理器厂商开发出保护模式。这样,物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)需要被转化为物理地址后再去访问,程序对此一无所知。顺便说一句,地址转换是由处理器和操作系统共同协作完成的:处理器在硬件上提供地址转换部件,操作系统提供转换过程中所需要的页表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HDU - 5876】Sparse Graph(补图bfs,STLset)

题干: In graph theory, the complementcomplement of a graph GG is a graph HH on the same vertices such that two distinct vertices of HH are adjacent if and only if they are notnotadjacent in GG. Now you are given an undirected graph GG of NN no…

14.深度学习练习:Face Recognition for the Happy House

本文节选自吴恩达老师《深度学习专项课程》编程作业,在此表示感谢。 课程链接:https://www.deeplearning.ai/deep-learning-specialization/ Welcome to the first assignment of week 4! Here you will build a face recognition system. Many of the i…

java Integer 源码学习

转载自http://www.hollischuang.com/archives/1058 Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。 此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类…

【HDU - 5875】Function(线段树,区间第一个小于某个数的数 或 RMQ二分)

题干: The shorter, the simpler. With this problem, you should be convinced of this truth. You are given an array AA of NN postive integers, and MM queries in the form (l,r)(l,r). A function F(l,r) (1≤l≤r≤N)F(l,r) (1≤l≤r≤N) is defin…

15.深度学习练习:Deep Learning Art: Neural Style Transfer

本文节选自吴恩达老师《深度学习专项课程》编程作业,在此表示感谢。 课程链接:https://www.deeplearning.ai/deep-learning-specialization/ 目录 1 - Problem Statement 2 - Transfer Learning 3 - Neural Style Transfer 3.1 - Computing the cont…

java中synchronized(同步代码块和同步方法)详解及区别

问题的由来: 看到这样一个面试题: ? 1 2 3 4 5 6 //下列两个方法有什么区别 public synchronized void method1(){} public void method2(){ synchronized (obj){} } synchronized用于解决同步问题,当有多条线程同时访问共享数据时&a…

【2018icpc宁夏邀请赛现场赛】【Gym - 102222F】Moving On(Floyd变形,思维,离线处理)

https://nanti.jisuanke.com/t/41290 题干: Firdaws and Fatinah are living in a country with nn cities, numbered from 11 to nn. Each city has a risk of kidnapping or robbery. Firdawss home locates in the city uu, and Fatinahs home locates in the…

动手学PaddlePaddle(1):线性回归

你将学会: 机器学习的基本概念:假设函数、损失函数、优化算法数据怎么进行归一化处理paddlepaddle深度学习框架的一些基本知识如何用paddlepaddle深度学习框架搭建全连接神经网络参考资料:https://www.paddlepaddle.org.cn/documentation/doc…

Apollo进阶课程㉒丨Apollo规划技术详解——Motion Planning with Autonomous Driving

原文链接:进阶课程㉒丨Apollo规划技术详解——Motion Planning with Autonomous Driving 自动驾驶车辆的规划决策模块负责生成车辆的行驶行为,是体现车辆智慧水平的关键。规划决策模块中的运动规划环节负责生成车辆的局部运动轨迹,是决定车辆…

JVM核心之JVM运行和类加载全过程

为什么研究类加载全过程? 有助于连接JVM运行过程更深入了解java动态性(解热部署,动态加载),提高程序的灵活性类加载机制 JVM把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成J…

【2018icpc宁夏邀请赛现场赛】【Gym - 102222A】Maximum Element In A Stack(动态的栈中查找最大元素)

https://nanti.jisuanke.com/t/41285 题干: As an ACM-ICPC newbie, Aishah is learning data structures in computer science. She has already known that a stack, as a data structure, can serve as a collection of elements with two operations: push, …

动手学PaddlePaddle(2):房价预测

通过这个练习可以了解到: 机器学习的典型过程: 获取数据 数据预处理 -训练模型 -应用模型 fluid训练模型的基本步骤: 配置网络结构: 定义成本函数avg_cost 定义优化器optimizer 获取训练数据 定义运算场所(place)和执行器(exe) 提供数…

JAVA 堆栈 堆 方法区 解析

基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 。 方法的引用…

【2018icpc宁夏邀请赛现场赛】【Gym - 102222H】Fight Against Monsters(贪心排序)

题干: It is my great honour to introduce myself to you here. My name is Aloysius Benjy Cobweb Dartagnan Egbert Felix Gaspar Humbert Ignatius Jayden Kasper Leroy Maximilian. As a storyteller, today I decide to tell you and others a story about t…

动手学PaddlePaddle(3):猫脸识别

你将学会: 预处理图片数据 利用PaddlePaddle框架实现Logistic回归模型: 在开始练习之前,简单介绍一下图片处理的相关知识: 图片处理 由于识别猫问题涉及到图片处理知识,这里对计算机如何保存图片做一个简单的介绍。在…

Java对象分配原理

Java对象模型: OOP-Klass模型 在正式探讨JVM对象的创建前,先简单地介绍一下hotspot中实现的Java的对象模型。在JVM中,并没有直接将Java对象映射成C对象,而是采用了oop-klass模型,主要是不希望每个对象中都包含有一份虚函数表&…

【HihoCoder - 1831】80 Days(尺取 或 线段树)

题干: 80 Days is an interesting game based on Jules Vernes science fiction "Around the World in Eighty Days". In this game, you have to manage the limited money and time. Now we simplified the game as below: There are n cities on a …

动手学PaddlePaddle(4):MNIST(手写数字识别)

本次练习将使用 PaddlePaddle 来实现三种不同的分类器,用于识别手写数字。三种分类器所实现的模型分别为 Softmax 回归、多层感知器、卷积神经网络。 您将学会 实现一个基于Softmax回归的分类器,用于识别手写数字 实现一个基于多层感知器的分类器&#…

深入探究JVM | klass-oop对象模型研究

├─agent Serviceability Agent的客户端实现 ├─make 用来build出HotSpot的各种配置文件 ├─src HotSpot VM的源代码 │ ├─cpu CPU相关代码&#xff0…

动手学PaddlePaddle(5):迁移学习

本次练习,用迁移学习思想,结合paddle框架,来实现图像的分类。 相关理论: 1. 原有模型作为一个特征提取器: 使用一个用ImageNet数据集提前训练(pre-trained)好的CNN,再除去最后一层全连接层(fully-connecte…