一步步编写操作系统 52 深入浅出cpu的特权级

所谓保护模式下的“保护”,主要体现在特权级上,以后随着后面工作的展开,会越来越多的和它们打交道,现在是时候说道说道了。

在人类社会中出现恶势力时,人们总是希望出现一位具有神力的英雄来拯救世人、主持公道。阶级是骨子里的东西,它一直存在,然而阶级和平等并不矛盾,阶级是为了平等而生,这是自然界为维护秩序自然产生的事物,如果打破了这个平衡,平等也将不复存在。正因为阶级和平等之间的相互制约,才有了今天的民主与和平,只有让少数人获得特权去维护公平,社会才会存在祥乐安康,计算机中也是一样。

保护模式的安全性也体现了“阶级”:为了维护计算机世界的和平,避免潜在的危险,对于那些不受控的程序,剥夺它们的部分能力,使它们没有杀伤力,让它们只能老老实实地做好公民。

先给大家笼统地介绍下特权级那点事:

整个计算机世界其实可以分为两部分,访问者和受访者。访问者是动态的,具有能动性,它主动去访问各种资源。受访者是静态的,它就是被访问的资源,只能干坐着等待访问者光顾。访问者的特权级可以变,受访者的特权不能变。

拿开车举例,cpu相当于汽车,驾驶车的人可以是普通人,也可以是警察。同样一辆车,只有警察才能把车开到警局,普通人开着这辆车去警局会被拦下的,在警局门口的警卫说了,只有警车才能开进警局,警卫判断汽车是否为警车的标准是,检查司机是否为警察,只要是警察开的车,一律按警车放行处理。当前特权级就是指cpu的状态,普通人的特权为3,警察的特权为0。当普通人想把车开进警局,到警局门口就得换一位身份为警察的司机,这就是特权级变换,而cpu,也就是这辆车,它在硬件上始终是不变的,车还是那辆车,该几个轮子就是几个轮子,只是车的角色在变。开车的人不同,车的角色就不同,普通人开,这车就是普通的私家车,当换警察做为司机时,它就成了警车,到了警局门口,警卫便让其通行。

建立特权机制是为了通过特权来检查合法性,整个计算机世界的特权检查,都是发生在“访问者”在访问“受访者”的一刹那,实际上就是检查访问者的特权级和受访者的特权级是否匹配。

不知道各位看官听我说这个例子后有没有对特权有个概貌的认识,下面咱们从细节上展开讨论。

CPU既是大脑,又是警察,它负责维护计算机内的安全。它将程序拥有的权利分为4个等级,这就是保护模式下特权级的由来。

特权级按照权力从大到小分为0、1、2、3级,没错,数字越小权利越大,0级特权能力最大,3级特权能力最小。如果您看过七龙珠,0级特权相当于破坏神,无所不能。连悟空变成赛亚人之神也打不过他,3级特权相当于像布玛那样的普通人类(其它特权级请大伙儿自己对号入座^_^)。

0级特权是我们操作系统内核所在的特权级,必须得让操作系统处于至高无上的地位,这样它的子民(应用程序)才不会反了天。计算机在启动之初就以0级特权运行,MBR是咱们所写的第一个程序,它是含着金钥匙出生的,自从它从BIOS那里接过第一棒的时候,它已经是像神一样处于0级特权了。整个系统的特权级分布如图

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

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

相关文章

详解两阶段3D目标检测网络PVRCNN:Point-Voxel Feature Set Abstraction for 3D Object Detection

在《动手学无人驾驶(4):基于激光雷达点云数据3D目标检测》一文中介绍了3D目标检测网络PointRCNN。今天介绍该作者新提出的3D检测模型:PVRCNN,论文已收录于CVPR2020。 作者个人主页为:https://sshaoshuai.gi…

【Codeforces - 755C】PolandBall and Forest(并查集)

题干: PolandBall lives in a forest with his family. There are some trees in the forest. Trees are undirected acyclic graphs with k vertices and k - 1 edges, where k is some integer. Note that one vertex is a valid tree. There is exactly one …

一步步编写操作系统 53 任务状态段TSS介绍

操作系统是利用PCB来维护所有任务的,包括进程和线程,但cpu提供的是TSS,linux系统可没用它,因为效率太低。但是还是要了解下TSS才清楚操作系统中某些操作的原因。 本节中所讲的特权级与它有着密不可分的联系,TSS作用不…

动手学无人驾驶(6):基于IMU和GPS数据融合的自车定位

在上一篇博文《动手学无人驾驶(5):多传感器数据融合》介绍了如何使用Radar和LiDAR数据对自行车进行追踪,这是对汽车外界运动物体进行定位。 对于自动驾驶的汽车来说,有时也需要对自身进行更精确的定位,今天…

【Codeforces - 798C】 Mike and gcd problem(思维,贪心)

题干: Mike has a sequence A  [a1, a2, ..., an] of length n. He considers the sequence B  [b1, b2, ..., bn] beautiful if the gcd of all its elements is bigger than 1, i.e. . Mike wants to change his sequence in order to make it beauti…

一步步编写操作系统 48 加载内核1

其实,我们等了这一刻好久好久,即使我不说,大家也有这样的认识,linux内核是用c 语言写的,咱们肯定也要用c语言。其实...说点伤感情的话,今后的工作只是大部分(99%)都要用c语言来写&am…

Coursera自动驾驶课程第1讲:Welcome to the self-driving cars specialization

本专栏为Coursera自动驾驶课程笔记,B站上也有配套课程视频,对自动驾驶技术感兴趣的朋友可以看看。 本讲对应视频: https://www.bilibili.com/video/BV1WE411D74g?p1https://www.bilibili.com/video/BV1WE411D74g?p2https://www.bilibili.…

【CodeForces - 999D】Equalize the Remainders(思维,贪心)

题干: You are given an array consisting of nn integers a1,a2,…,ana1,a2,…,an, and a positive integer mm. It is guaranteed that mm is a divisor of nn. In a single move, you can choose any position ii between 11 and nn and increase aiai by 11. …

Coursera自动驾驶课程第2讲:The Requirements for Autonomy

上一讲《Coursera自动驾驶课程第1讲:Welcome to the self-driving cars specialization》对本课程进行了整体概述,同时回顾了自动驾驶汽车的发展历史。 从本讲我们开始进入正式的学习,我们将首先了解到如何划分自动驾驶汽车等级、以及自动驾…

一步步编写操作系统 51 加载内核4

咱们的内容都是连栽的,如果您没看过我之前的文章,本节您是看不懂的。 接上节。 介绍完内核初始化的函数kernel_init后,本节代码部分还差一点点没说啦,下面看代码: …略 179 ;在开启分页后,用gdt新的地址…

【CodeForces - 777C】Alyona and Spreadsheet(思维,前缀和)

题干: During the lesson small girl Alyona works with one famous spreadsheet computer program and learns how to edit tables. Now she has a table filled with integers. The table consists of n rows and mcolumns. By ai, j we will denote the integ…

Coursera自动驾驶课程第3讲:Self-Driving Hardware and Software Architectures

在上一讲《Coursera自动驾驶课程第2讲:The Requirements for Autonomy》中我们了解到了如何划分自动驾驶汽车等级、以及自动驾驶三大模块:感知、决策和执行。 本讲我们将学习新的模块:自动驾驶汽车的硬件和软件架构。 B站视频链接&#xff…

一步步编写操作系统 54 CPL和DPL入门1

我们在工作中,公司都给员工配有员工卡,此员工卡就是员工身份的“标签”,用它来出入公司、食堂就餐等。给公司创造价值的是员工的生产力,不是员工卡,员工卡只是公司人事部门管理员工的一种手段而已。 现在说计算机&…

Coursera自动驾驶课程第4讲:Safety Assurance for Autonomous Vehicles

在上一讲《Coursera自动驾驶课程第3讲:Self-Driving Hardware and Software Architectures》中我们了解了自动驾驶汽车常用的传感器和硬件组件、软件系统。 本讲我们将学习新的模块,也是自动驾驶汽车最重要的模块之一:安全模块。 B站视频链…

【Codeforces - 1000C】Covered Points Count(思维,离散化,差分)

题干: You are given nn segments on a coordinate line; each endpoint of every segment has integer coordinates. Some segments can degenerate to points. Segments can intersect with each other, be nested in each other or even coincide. Your task i…

Coursera自动驾驶课程第5讲:Vehicle Dynamic Modeling

在上一讲《Coursera自动驾驶课程第4讲:Safety Assurance for Autonomous Vehicles》中我们了解了自动驾驶汽车中一个非常重要的模块:安全模块。 本讲我们将学习新的模块:汽车运动学和动力学模块。(这部分可能需要一定的理论力学和…

详细解析电源滤波电容的选取与计算

电感的阻抗与频率成正比,电容的阻抗与频率成反比。所以,电感可以阻扼高频通过,电容可以阻扼低频通过。二者适当组合,就可过滤各种频率信号。如在整流电路中,将电容并在负载上或将电感串联在负载上,可滤去交…

【CodeForces - 124C】Prime Permutation(数学,思维,小结论)

题干: You are given a string s, consisting of small Latin letters. Lets denote the length of the string as |s|. The characters in the string are numbered starting from 1. Your task is to find out if it is possible to rearrange characters in st…

Java同步锁——lock与synchronized 的区别【转】

在网上看来很多关于同步锁的博文,记录下来方便以后阅读 一、Lock和synchronized有以下几点不同: 1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,synchronized是在JVM层面…

Coursera自动驾驶课程第6讲:Vehicle Longitudinal Control

在上一讲《Coursera自动驾驶课程第5讲:Vehicle Dynamic Modeling》中我们了解了汽车运动学和动力学模块。 本讲我们继续学习新的模块:汽车纵向控制。具体地,我们将学习PID控制算法,看看该算法是如何在自动驾驶汽车中应用的。 B站…