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级保留给中间软件使用

x86 保护方式 简介 一的更多相关文章

  1. 3.3 x86指令简介

    计算机组成 3 指令系统体系结构 3.3 x86指令简介 x86指令种类繁多,数量庞大.在这一节我们将会学习x86指令的分类,并分析其中最为基础的一部分指令. 通常一个指令系统主要包括这几类指令.运算 ...

  2. 基于汇编的 C/C++ 协程 - 切换上下文

    在前一篇文章<基于汇编的 C/C++ 协程 - 背景知识>中提到一个用于 C/C++ 的协程所需要实现的两大功能: 协程调度 上下文切换 其中调度,其实在技术实现上与其他的线程.进程调度没 ...

  3. Detours简介 (拦截x86机器上的任意的win32 API函数)

    Detours 当然是用detours,微软明显高腾讯一筹,同上,至今没失败过.写这种HOOK一定要再写个测试程序,不要直接HOOK你的目的程序,例如QQ,因为这样不方面更灵活的测试.说明一下:Det ...

  4. Linux嵌入式 -- 内核简介(x86)

    0. 嵌入式系统 以应用为中心,软硬件可裁剪,对功耗.对体积.对成本等都有严格要求的专用计算机系统. 1.  linux体系结构 2. 为什么 划分为 用户空间 和 内核控件 ?  分两级,内核和应用 ...

  5. x86 保护模式 十 分页管理机制

    x86   保护模式  十  分页管理机制 8.386开始支持分页管理机制 段机制实现虚拟地址到线性地址的转换,分页机制实现线性地址到物理地址的转换.如果不启用分页,那么线性就是物理地址 一  分页管 ...

  6. ASP.NET Core 1.1 Preview 1 简介(包含.NETCore 1.1升级公告)

    ASP.NET Core 1.1 Preview 1于2016年10月25日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强. 要将现有项目更新到ASP.NET Core 1.1 Pre ...

  7. Linux-/proc目录简介

    Linux /proc目录简介 1.简单了解 以文件系统的方式为访问系统内核数据的操作提供接口 由linux内核提供:通过/proc文件系统,在运行时访问内核内部数据结构.改变内核设置的一种机制 pr ...

  8. coredump简介与coredump原因总结

    from:http://www.cnblogs.com/doctorqbw/archive/2011/12/21/2295962.html   千兵卫博士   coredump简介与coredump原 ...

  9. NDK开发-简介&环境搭建(Eclipse,Android Studio)

    NDK简介 NDK(Native Development Kit)是一套工具集,允许你在Android应用中嵌入c或c++. 使用NDK的好处主要有以下4点: 安全:由于apk的java层代码很容易被 ...

随机推荐

  1. python flask学习(2)

    本文主要整理下几个Flask扩展: 0.Flask-Bootstrap:集成Twitter开发的一个开源框架Bootstrap.1.Flask-Script:为Flask程序添加一个命令行解析器2.F ...

  2. javaScript面向对像

    1.创建对象 <script type="text/javascript"> function Flower(name,addre) { this.name=name; ...

  3. div 绝对定位

    div绝对居下 .Phone2title{ width:%; height:30px; line-height:30px; /*text-align:left;*/ /*background-colo ...

  4. Java .class文件的反编译与反汇编

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10840818.html 一:反编译 通常用于第三方JAR包的逆向工程. 一般我们拿到的jar包都是经过编译后 ...

  5. log4j日志工具类

    /** * log4j日志Util */public class LogUtil { private static Logger logger=null; static{ StackTraceElem ...

  6. Json字符串转excel表格文件

    假如我们有一段json串,该json串是由一系列结构相同的数据集合组成,如下: { "data": [ { "groupId": "com.test. ...

  7. IOS之constraints

    anyway, you can do this with auto layout. You can do it entirely in IB as of Xcode 5.1. Let's start ...

  8. SQLServer怎样把本地数据导入到远程服务器上(转载)

    平常用到mssql时间比较少,总是过一段时间就忘记应该怎么操作了.当要做mssq把本地数据导入到远程服务器的时候,就去网上搜索很久都没有图解的,所以今天自己收集一下免得下次又到处去找.希望对自己,同时 ...

  9. poj2312Battle City BFS

    题意: M行N列矩阵, 'Y'表示开始位置, 'T'表示目标位置, 从开始位置到目标位置至少需要走多少步,其中, 'S', 'R'表示不能走, 'B' 花费为2, 'E'花费为1. 思路:纯 BFS. ...

  10. 手把手教你写 Vue UI 组件库

    最近在研究 muse-ui 的实现,发现网上很少有关于 vue 插件具体实现的文章,官方的文档也只是一笔带过,对于新手来说并不算友好. 笔者结合官方文档,与自己的摸索总结,以最简单的 FlexBox  ...