读书-程序员的自我修养-链接、封装与库(13: 第六章:可执行文件的装载与进程(1)进程虚拟地址空间,4GB,和 装载方式,局部性原理,页映射

1. 进程虚拟地址空间

1.1 4GB虚拟地址空间

每个程序都有自己的虚拟地址空间,32位下虚拟地址空间为
0-2^32-1,即0x00000000 ~ 0xFFFFFFFF,也就是4GB大小。

1.2 4GB虚拟地址空间不能任意使用

那么32位下的4GB虚拟空间,程序是否能任意使用呢?
答案是否定的。
因为操作系统需要监管程序的运行,程序只能使用OS分配的地址。如果访问非法地址,OS就会干掉程序,如windows下的“进程因非法操作需要关闭”;linux下的段错误等。

1.2.1 4GB虚拟地址空间分配

linux下,进程虚拟空间分为:操作系统占1GB,进程占3GB。
如下图所示:
在这里插入图片描述
其中,进程从0x00000000 ~ 0xBFFFFFFF 3GB使用;
操作系统从 0xCFFFFFFF ~ 0xFFFFFFFF 1GB使用。

1.2.2 3GB空间不够用怎么办? PAE出现

  1. 在大型数据库,图像处理程序中,3GB空间不够用,那应该怎么办呢?
    解决办法就是 PAE(Physical Address Extension)地址扩展。
  2. 空间的含义:
    2.1 指的是虚拟地址空间,就是4GB。
    2.2 指的是物理地址空间,不止4GB,可以很大。
    如36位的物理地址,最高64GB物理内存。

这种使用Intel新的映射方式可以访问更多的物理内存的方法就叫做PAE

1.3 虚拟地址空间-详细

参考:
https://blog.csdn.net/lqy971966/article/details/119378416

2. 装载的方式

2.1 局部性原理的出现

最简单的装载就是将程序运行的所有指令和数据全部装入内存中。但是,很多时候程序需要的内存大于物理内存。
怎么办?加内存?-太贵
那就只装部分进内存 - 局部性原理。

2.1.1 局部性原理(动态装入的基本原理)

程序运行时是有局部性原理的,所以可以将最常用的部分驻留内存中,其他放在硬盘里,这就是动态装入的基本原理。

2.1.2 局部性的两种形式:时间和空间局部性

1.时间局部性(temporal locality)
	在一个具有良好时间局部性的程序中,
	被引用过一次的存储器位置很可能在不远的将来再被多次引用。

2.空间局部性(spatial locality)
	在一个具有良好空间局部性的程序中,如果一个存储器位置被引用一次,
	那么程序很可能在不久的将来引用附近的一个存储器位置。

参考:
深入理解操作系统(15)第六章:存储器层次结构(1)存储技术+局部性+层次结构(包括:存储器系统/RAM,ROM,SRAM,DRAM,闪存flash/磁盘/(时间和空间)局部性/缓存命中)
https://blog.csdn.net/lqy971966/article/details/121954379

2.2 两种动态装入方法

覆盖装入和页映射是两种很典型的动态装入方法。
他们采用的思想都是:局部性原理。

2.2.1 覆盖装入/overlay

1.在没有发明虚拟存储之前,都是使用覆盖装入的。
2.覆盖装入:

程序员需要将程序手动分割成若干块,
然后编写一个覆盖管理器程序来管理哪些模块应该驻留内存,哪些应该被替换掉。

3.简单的覆盖装入的例子:
一个程序有主模块main,main分别调用A和B。但是A和B之间不会调用。
他们的大小分别是:1024kb,512kb和256kb。
在不考虑内存对齐,装载地址限制情况下,理论上需要1024+512+256=1792kb的空间。
如果使用覆盖装入,只需要1024+512=1536kb的空间。
装入如下图所示:
在这里插入图片描述

2.2.2 页映射/paging

1.页映射是虚拟存储机制的一部分,它是虚拟存储的诞生而出现。
页映射的原理和覆盖装入一样,都是使用局部性原理。

2.页:
OS将内存和磁盘中的数据和指令按照页/page为单位划分成若干个页。以后所有的装载和操作的单位就是页。

3.页大小:4kb,8kb,2M,4M。
例如::2G内存,拥有210241024*1024/4096 = 524288个页大小。

2.2.3 页映射例子:

我们假设我们的32位机器只有16kb的内存,每个页4kb。
则页分配如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值