x86-2-保护模式(protect mode)

引入保护模式的原因:

操作系统负责计算机上的所有软件和硬件的管理,它可以百分百操作计算机的所有内容。但是,操作系统上编写的用户程序却应当有所限制,比如只允许用户程序访问属于自己程序的内容,不然整个生态就很恶劣了,想象下你手机上的的微信被恶意软件给修改了,给你的所有好友群发黄色广告,你难受吗。

但是在之前8086CPU的工作模式也就是实模式的工作模式下,程序对软硬件的访问非常自由,没有任何限制,我们随随便便就可以修改内存上的数据,即使这个内存的范围不在我们程序的数据段里。这就和我们前面所想违背了。

因为在多用户、多任务时代,内存会有多个用户(应用)程序在同时使用,为了使它们彼此隔离,防止因某个程序的编写错误或者崩溃而影响到操作系统和其他用户程序,所以就有了保护模式。

也就是说保护模式就是为了防止某个程序影响操作系统和其它用户程序,每一个都相对独立。(操作系统也可以当作一个大型的程序)。

保护模式要保护什么内容:

实质上就是保护CPU中的某些资源不能被随意访问,包括硬件资源和操作系统的软件资源,比如说:内存、GDT、IDT等类型的系统级数据结构图以及OS 内核代码和数据等等。

保护模式根据什么来进行保护:

保护模式根据特权级来进行保护。

特权级:

在保护模式下,每个段都有一个特权级。intel的CPU特权级采用了0,1,2,3四种特权级,权限从高到低,也就是0级权限最高,3级最低。一般来说操作系统的特权级为0,用户程序的特权级最低为3。其中Windows只采用了0和3,也就是经常俗称的0环和3环。

特权级为0的程序拥有最高的权限,可以和实模式一样全方位操作计算机。其它特权级就权限依次往下。

拥有高特权级的代码可以对低特权级的数据进行访问,反之不行。

保护模式如何进行隔离和保护:

保护模式实施了种种访问限制,x86的段式管理(segmentation)和页式管理(paging)是实施保护措施的手段和途径。

segmentation机制和paging机制实行不同的内存管理模式和访问控制,对资源的访问先经过segementation阶段,然后如果还开启了paging就再经过paging机制。也就是说paging机制是一个可选项。

小结

因为实模式太不安全,所以引入了保护模式,保护模式通过段式管理和页式管理根据段的特权级来进行保护和隔离。

最新文章

  1. 对象排序,compareTo
  2. MYSQL中UNIX时间戳与日期的转换
  3. Codeforces Round #243
  4. linux内核宏container_of前期准备之gcc扩展关键字typeof
  5. 经过本人 6 年.net 工作经验证明 .net 工资确实比 Java 低
  6. C Primer Plus(第五版)9
  7. NET Core+Code First+Docker
  8. iscc2016-basic-心灵鸡汤
  9. 如何由XSD自动生成XML和实体类
  10. HDU 4716 A Computer Graphics Problem
  11. 고서--做完A之后做B, B受A影响
  12. 【Android Developers Training】 13. 支持不同平台版本
  13. 解决 SQL 注入的另类方法
  14. python file文件操作--内置对象open
  15. Confluence 6 用户宏示例 - NoPrint
  16. 新版Ubuntu安装日文输入法
  17. Django请求流程图
  18. AWS EC2 Root密码重置
  19. [Windows Azure] How to use the Queue Storage Service
  20. [poj 3090]Visible Lattice Point[欧拉函数]

热门文章

  1. tomcat 之 session 集群
  2. Spring(3):AOP面向切面编程
  3. Dubbo中CompletableFuture异步调用
  4. Spring实现类私有方法测试通用方案
  5. 【Java基础】ArrayList初始化操作
  6. Windows 10 彻底关闭 Antimalware Service Executable 降低内存占用
  7. java 常用类库:格式化NumberFormat;SimpleDataFormat类(转换Data()对象);DateTimeFormatter 转换LocalDateTime时间对象
  8. textarea控件好奇怪啊,用<s:if>标签居然不在一行回出现很多的空格,奇葩啊
  9. 使用mysql查询语句统计数据,如果是null值则赋值为0
  10. Visual Studio Code常用快捷键