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. jmeter压力测试中遇到的问题汇总

    1.线程数大于1的时候,计数器配置没有勾选reset counter选项,导致测试结果出错 正常结果: 实际结果:index大于count数量时出错,病区及床号直接显示在count的基础上开始加1了 ...

  2. sql server技巧

    --查出数据最新的存储过程select name,modify_date from sys.procedures where modify_date>'2017-05-26 17:21:09.3 ...

  3. dbf 工程模式连接(vfp c# )

    首先现在微软官网下载“Microsoft OLE DB Provider for Visual FoxPro 9.0”驱动 下载完成后得到“VFPOLEDBSetup.msi” 双击安装即可在“C:\ ...

  4. gin 打linux环境包问题解决

    打window包直接go build一下,完事, 但是,打linux包出现如下错误 ..\github.com\mattn\go-isatty\isatty_linux.go:7:8: cannot ...

  5. 再谈Android AsyncTask的优缺点

    导语:之前做习惯了Framework层的开发,今天在武汉斗鱼公司面试APP客户端的开发,其中一道题是讲述Asynctask的优缺点,我靠,我只是知道有这么一个东西,会用而已,看来之前的生活太过于安逸, ...

  6. 倒计时器 CountDownTimer

    使用介绍 开发中经常会遇到一些和倒计时有关的场景,比如发送验证码的按钮,会在点击发送后,显示倒计时间,倒计时结束后才能够刷新按钮,再次允许点击.为了不阻塞软件的运行,又要实时刷新界面,我们通常会用到 ...

  7. DataGridView使用技巧(七、设定列宽和行高自动调整)----.NET

    DataGridView使用技巧(七.设定列宽和行高自动调整)----.NET 1) 设定行高和列宽自动调整 [VB.NET]' 设定包括Header和所有单元格的列宽自动调整DataGridView ...

  8. uvm_reg_field——寄存器模型(二)

    uvm_reg_field是最基本寄存器单元. typedef class uvm_reg_cbs; //----------------------------------------------- ...

  9. bootstrap 按钮组的嵌套

    您可以在一个按钮组内嵌套另一个按钮组,即,在一个 .btn-group 内嵌套另一个 .btn-group .当您想让下拉菜单与一系列按钮组合使用时,就会用到这个. 实例: <!DOCTYPE ...

  10. Lucene原理与代码分析

    http://www.cnblogs.com/forfuture1978/category/300665.html