全局空间和局部空间

全局空间和局部空间

  • 操作系统需要把程序加载到内存并运行程序.
  • 操作系统要提供大量的实例 , 数据或服务供程序调用,以简化程序编写.
  • 同时在访问设备时消除潜在的竞争和冲突.

所以每个任务包含两个部分:全局部分和私有部分.

  • 全局部分是所有任务共有的,含有操作系统的软件和库程序,以及可以调用的系统服务和数据;
  • 私有部分包括每个任务各自的数据和代码.如图:
    Alt
    左是每个任务的全局空间和局部空间,右是多任务的全局空间和局部空间.

震惊!!每个任务的地址空间竟有 64TB?

GDT最大的尺寸是 216 字节,又每个段描述符占 8 字节,所以GDT可以划分 213 个段,即 8192 个.又GDT的 0 号描述符不能使用,故实际是 8191 个段,但这只有 4GB可以忽略不计.又段内偏移地址是 32 位,段的长度最大是 4GB,因此,一个任务的全局空间,其总大小为 213 × \times × 232 = 245 字节,即 32TB.
同理,局部描述符表LDT可以划分 213 个,即 8192 个描述符,每个段的长度最大是 4GB.故,一个任务的局部空间,其总大小为 213 × \times × 232 = 245 字节,即 32TB.
这样一来,每个的总地址空间为 32+32=64TB ,但在一个 32 根地址总线的处理器上,无论如何不能这么巨大的存储空间.但其实这些只是虚拟的地址空间.操作系统允许程序的编写者使用这么巨大的地址空间编写程序.
这就是说编译器不考虑处理器的寻址空间的大小,也不考虑物理内存的大小,它只负责编译程序.但是,当程序超出理内存的大小时,或操作系统无法分配这么大的物理内存空间时,怎么办?
同一块物理内存,可以让多个任务,或者多个任务的不同段使用.

  1. 当执行或者访问一个新的段时,如果它不在物理内存中(描述符的"P"位为 0 ,这时会引发中断),而且也没有空闲的物理内存来加载它
  2. 那么操作系统将在内存查找一个暂时用不到的段,把它换出到磁盘中,并把腾出的空间分配给马上要访问的段
  3. 然后改变段的描述符,使之指向这段内存空间(同时描述符的"P"位改为 1 ,这之后中断返回).
  4. 下一次,当换出的段又用到时,再按同样的方法加载到内存.
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值