操作系统的分页机制

WIN32 汇编和以前教科书上的汇编的不同之处

WIN32 当然要涉及到界面了,没界面还搞个鬼哦

以前俺们学的都是DOS 16位汇编

现在技术进步了,学32位啦 NND

DOS下,16位采用段寄存器寻址方式,也就是二级寻址方式

具体的就是前N位为寄存器地址,存放在寄存器中,N位为为偏移地址 ,用得真是痛苦啊,分段寻找,比追超级MM还难;MM可以直接寻址,不管寻到的地址的内容是什么,但是能直接得到结果.

上面图的意思就是先使用段寄存器找到所在的段,再使用地址偏移量来寻找该段中的物理地址!这就是传说中的实模式寻址方式或DOS下的寻址方式;

还有这个寄存器的寻址范围很小,只有1M

80386的寄存器是32 位的.意思就是你直接可以使用这个通用寄存器来查找4GB的地址空间,是不是很爽,但是别忘记了,4GB是虚拟的地址空间,在你使用之前你还必须得问物理存储器去申请,申请失败的时候就返回NULL(具体参看WINDOWS核心编程) .据说段寄存器在32位操作系统下面还有用,现在理解得还是不太明白,(引用一段话: 保护模式下,一个地址空间是否可以被写入,可以被多少优先级的代码写入,是不是允许执行等涉及保护的问题就出来了。要解决这些问题,必须对一个地址空间定义一些安全上的属性。段寄存器这时就派上了用途。但是涉及属性和保护模式下段的其他参数,要表示的信息太多了,要用64位长的数据才能表示。我们把这64位的属性数据叫做段描述符(Segment Descriptor)

我不明白的地方就是这些属性怎么和段寄存器联系到一起的,当通用寄存器查找的时候段寄存器怎么和段寄存器联系到一起的!!!!

 

 

现在开始进入本文主旨:分页机制!

采用分页的好处有方便处理内存解决内存碎片问题,=====一堆,线形地址是由那些页表组成的,其实这个东西也就是一个二级寻址,还要管理那个页表

下面来看虚拟内存是怎么用页表来实现的

页表可以指定一个页面并不真正映射到物理内存中当访问到的一个页的位置不再物理存储器中的时候,系统就会出现异常,然后系统就把硬盘上的内容调用到物理存储器中来.

还是看片片

使用页表运行WINDOWS中的程序,

系统为每一个进程维护一张页表,其中操作系统得代码,数据和系统的DLL对这些页表来说i是透明的,不同的是用户DLL,进程的代码数据;

结论:

每个应用程序都有自己的4 GB的寻址空间。该空间可存放操作系统、系统DLL和用户DLL的代码,它们之中有各种函数供应用程序调用。再除去其他的一些空间,余下的是应用程序的代码、数据和可以分配的地址空间。

  不同应用程序的线性地址空间是隔离的。虽然它们在物理内存中同时存在,但在某个程序所属的时间片中,其他应用程序的代码和数据没有被映射到可寻址的线性地址中,所以是不可访问的。从编程的角度看,程序可以使用4 GB的寻址空间,而且这个空间是“私有”的。

DLL程序没有自己“私有”的空间。它们总是被映射到其他应用程序的地址空间中,当做其他应用程序的一部分运行。原因很简单,如果它不和其他程序同属一个地址空间,应用程序该如何调用它呢?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值