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. WCF中的AsyncPattern

    WCF中的AsyncPattern   (系列博文源自 http://pfelix.wordpress.com/,由笔者翻译并整理,转载请注明) 在wcf 的 service contract中, 服 ...

  2. 制作 Favicon.ico 图标教程

    摘要:有一些站长认为 favicon.ico 图标对于一个网站没有什么作用.甚至有一些站长认为,少加载一个图片,页面设计展现的速度更快些.的确,理论上是对的,但乐猪认为这种想法是肤浅的!有这种想法的站 ...

  3. FusionCharts3.2.1 参数的详细说明和功能特性

    功能特性animation                    是否动画显示数据,默认为1(True)showNames                 是否显示横向坐标轴(x轴)标签名称rotat ...

  4. IOSAutolayout

    21:55:33前言 1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-ip ...

  5. 自学Spring Boot

    简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配 ...

  6. Android(java)学习笔记149:利用开源SmartImageView优化网易新闻RSS客户端

    1.我们自己编写的SmartImageView会有很多漏洞,但是我们幸运的可以在网上利用开源项目的,开源项目中有很多成熟的代码,比如SmartImageView都编写的很成熟的 国内我们经常用到htt ...

  7. fgetc, fgets, getc, getchar, gets, ungetc - 输入字符和字符串

    总览 (SYNOPSIS) #include <stdio.h> int fgetc(FILE *stream); char *fgets(char *s, int size, FILE ...

  8. 10.字符串str的语法

    1).字符串的索引以及切片 s = 'ABCDLSESRF' #索引 s1 = s[0] print(s1) #A s2 = s[2] print(s2) #C s3 = s[-1] print(s3 ...

  9. tkinter学习-布局管理器

    阅读目录 pack 是按照添加顺序排列的组件 grid  是按照行/列形式排序的组件 place 允许程序员指定组件的大小和位置 pack: 说明:适用于少量的简单的组件的排列 fill:这个选项是告 ...

  10. Linux基础学习-数据备份工具Rsync

    数据备份工具rsync 作为一个系统管理员,数据备份是非常重要的,如果没有做好备份策略,磁盘损坏了,那么你的数据将全部丢失,所以在日常的维护工作中,一定要时刻牢记给数据做备份. rsync不仅可以可以 ...