QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

VIP至尊会员

Rank: 15Rank: 15Rank: 15

积分
874
查看: 69|回复: 0

[学习笔记] X86汇编语言-从实模式到保护模式—笔记(36)-第14章 任务的隔离和特权级保护(2)

[复制链接]
最佳答案
32 
累计签到:361 天
连续签到:6 天
兰陵月 发表于 5 天前 690 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 兰陵月 于 2017-12-10 20:30 编辑

14.1.2 全局空间和局部空间

每个任务实际上包括两个部分:全局部分和私有部分。全局部分是所有任务共有的,含有操作系统的软件和库程序,以及可以调用的系统服务和数据;私有部分则是每个任务各自的数据和代码,与任务所要解决的具体问题有关,彼此并不相同。如图14-002和图14-003。

14-002.png


14-003.png

任务实际上是在内存中运行的,所以,所谓的全局部分和私有部分,其实是地址空间的划分,即全局地址空间和局部地址空间,简称全部空间和局部空间。

地址空间的访问是依靠分段机制来进行的。具体地说,需要先在描述符表中定义各个段的描述符,然后再通过描述符来访问它们。因此,全局地址空间是用全局描述符表(GDT)来指定的,而局部地址空间则是由每个任务私有的局部描述符表(LDT)来定义的。

从程序员的角度来看,任务的全局空间包含了操作系统的段,是由别人编写的,但是他可以调用这些段的代码,或者获取这些段中的数据;任务局部空间的内容是由程序员自己创建的。通常,任务会在自己的局部空间运行,当它需要操作系统提供的服务时,转入全局空间执行。

每个段描述符对应着一个内存段。很显然,在一个任务的全局地址空间上,可以划分出2^13个段,也就是8192个段。又因为段内偏移是32位的,段的最大长度可以达到4GB,因此,一个任务的全局地址空间,其总大小为2^13×2^32=2^45字节,即32TB。同样的道理,局部描述符表LDT可以定义2^13个,也就是8192个描述符,每个段的最大长度也是4GB,所以一个任务的局部地址空间最大也是32TB。

这样一来,每个任务的总地址空间为64TB。在一个只有32根地址线的处理器上,无论如何也不可能提供这样巨大的存储空间,但是不要紧张,这只是虚假的,或者说虚拟的地址空间。操作系统允许程序的编写者使用该地址空间来写程序,即,使用虚拟地址或者逻辑地址来访问内存,就像他真的拥有这么巨大的地址空间一样。
编译器不考虑处理器可寻址空间的大小,也不考虑物理内存的大小,它只是负责编译程序。当程序编译时,编译器允许生成非常巨大的程序。但是,当程序超出了物理内存的大小时,或者操作系统无法分配这么大的物理内存空间时,怎么办呢?

同一块物理内存,可以让多个任务,或者每个任务的不同段来使用。当执行或者访问一个新的段时,如果它不在物理内存中,而且也没有空闲的物理内存空间来加载它,那么,操作系统将挑出一个暂时用不到的段,把它换出到磁盘中,并把那个腾出来的空间分配给马上要访问的段,并修改段的描述符,使之指向这段内存空间。下一次,当被换出的那个段马上又要用到时,再按相同的办法换回到物理内存。所有这一切,任务(如果它有思维的话)和程序的编写者是不必关心的,这就是虚拟内存管理的一般方法。




本帖被以下淘专辑推荐:

楼层
跳转到指定楼层

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /2 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2017-12-12 12:24

快速回复 返回顶部 返回列表