博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
x86 保护方式 简介 一
阅读量:5282 次
发布时间:2019-06-14

本文共 1953 字,大约阅读时间需要 6 分钟。

80386   三种工作方式   实模式    保护模式和虚拟86模式

 
只有在保护方式下  全部32条地址线才有效   可以寻址高达4g字节的物理地址空间
超过1m的内存空间  被成为扩展的内存空间     保护模式下  才有存储器饭段管理和分页管理机制   实模式下是没有这些概念的。  不仅提供了存储器的共享和保护  而且实现了虚拟存储器的硬件支持 ,才有多任务的支持
一   存储管理机制
存储管理机制由80386存储管理不见mmu实现
1.目标
物理内存有限  为了运行大型的任务  和多任务   所以采用虚拟存储器   虚拟存储器是一种软硬件结合的技术,
任务a和任务b需要隔离   同时又要共享部分代码和数据   所以还要支持特权保护
2.地址空间和地址转换
保护方式下 的虚拟存储器由大小可变的存储块构成  这样的存储块称为段   
虚拟存储器的地址又叫逻辑地址由指示描述符的选择子和段内偏移两部分构成   这样的地址及和称为虚拟地址空间    80386支持的虚拟空间可达64t字节
cpu只能运行在内存中的程序   所以虚拟存储器中的数据需要映射到物理存储器中   才能使用  即二维的虚拟地址要映射到一维的线性地址

  线性地址隔离了虚拟地址空间和物理地址     线性地址为一维地址空间与物理地址空间对等   同为32位长   空间容量为2的32次方   共4g字节

如图所示
  分段机制将虚拟地址转换为线性地址   此步骤总存在  如果没有分页机制  线性地址就是物理地址
分页机制把线性和物理空间划分为大小相同的块  这样的块叫做页   通过在线性的页和物理的页建立联系的映射表  实现线性到物理的转换
分段机制可以使用可变大小的块   ,分页机制的块大小相同适合与管理物理存储器  (包括内存和外存),分页管理机制能够有效地支持虚拟存储器
段及分页是不同的机制   是整个地址转换函数的不同的转换级,都利用主存储器中的转换表   这些表具有独立的结构  事实上,段表位于线性地址空间  而页表在物理地址空间爱你   
3.虚拟存储器的概念
需要存储管理机制和一个大容量的硬盘支持   程序运行的任何时刻 只要把虚拟空间的一部分映射到主存储器   其余部分在硬盘上   ,访问存储器的范围变化时,需要把虚拟存储器的某些部分从磁盘调入主存储器   虚拟存储器的另外部分  也能从主存储器传回到磁盘上
a 把实际在主存中的虚拟部分标记为无效   并建立虚拟驻留部分到物理映射的关系   把驻留部分的虚拟地址转换为物理地址  
b 如果程序访问的虚拟地址对应于虚拟空间的未驻留主存的部分  则由于无效的映射  发生异常   
c 操作系统把未驻留的部分从磁盘读入主存并更新地址转换表   这种异常处理完成之后    返回原来的程序恢复执行    并重新执行一次原来引起异常的指令  
e 地址转换机制统计驻留在主存中的虚拟存储器部分的使用信息,在主存空间紧缺时,帮助操作系统决定可以将哪些部分传送回磁盘
 
二 保护机制
分为不同任务间的保护   和同一个任务内的保护
1.任务间的保护
通过把每个任务放在不同的虚拟地址空间的方法来实现任务与任务的隔离保护
虚拟到物理的映射函数在每个任务中进行定义   随着任务切换  映射函数也切换
任务a的虚拟地址空间映射到物理地址空间的某个区域   而任务b的虚拟地址空间映射到物理地址空间的另外区域   彼此独立 互不相干。所以两个不同的任务即使有相同的虚拟地址   但是实际的物理地址存储但与并不同
所以可见  每个虚拟地址(逻辑地址 )空间都可以认为是从0开始的       即有相同的虚拟地址
每个任务各有一组独立的映射表  即具有不同的地址转换函数   即每个任务都有自己的段表和页表   当任务进行切换时,需要为新任务切换地址转换表    
注意:为了使操作系统与所有的其他应用程序隔离   要把操作系统存储在一个单一的任务中   同时要让操作系统由所有的任务共享    就需要把操作系统存储在虚拟地址空间的一个公共区域    然后 每个任务按照此区域分配一个同样的虚拟地址空间并且进行同样的虚拟到物理地址的映射    各个任务公用的这部分虚拟地址空间  被称为全局地址空间
局部地址空间       不被任何其他的任务共享的虚拟地址部分   仅由一个任务占有
2.同一任务内的保护
同一个任务具有四种执行特权级别,用于限制对任务中的段进行访问。
四种级别 0 1 2 3    最内层为0    最外层为3
 

 

 每一特权级都有各自独立的堆栈   以避免与共享栈区的保护问题  
每当程序的特权级变化时   需要切换到相应级别的堆栈  
对于ss来说  描述符的dpl必须等于当前代码段的cpl
任务在特定时刻的权级成为cpl  当前运行程序的特权级   
允许访问同一级别或外层级别的数据段    
 
特权级的典型用法:os内核在0级    os的其余部分在1级     应用程序在3级   2级保留给中间软件使用

转载于:https://www.cnblogs.com/dongguolei/p/7896484.html

你可能感兴趣的文章
HW5.29
查看>>
Linux查看物理CPU个数,核数,逻辑CPU个数;内存信息
查看>>
sqlserver查询效率
查看>>
FoxMail邮件设置
查看>>
percona-toolkit 之 【pt-online-schema-change】说明
查看>>
[模板]大数加法
查看>>
ZeroBrane Lua脚本编辑器代码自动补全
查看>>
linux下播放mp3
查看>>
POJ1611-The Suspects-并查集
查看>>
笔记--cocos2d-x 3.0 环境搭建
查看>>
Unable to create an instance of the Java Virtual Machine
查看>>
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
查看>>
深入理解类成员函数的调用规则(理解成员函数的内存为什么不会反映在sizeof运算符上、类的静态绑定与动态绑定、虚函数表)...
查看>>
div最低高度设置
查看>>
Chrome浏览器正常,IE下界面却乱了
查看>>
关于不断刷新界面jsp+ajax
查看>>
课程总结
查看>>
gcc/g++ 如何支持c11 / c++11标准编译
查看>>
js高阶函数应用—函数防抖和节流
查看>>
牛客 545A 小A与最大子段和 & CF 660F Bear and Bowling 4
查看>>