- 论坛徽章:
- 3
|
嗯嗯...
斑竹就是斑竹啊。
再引申一下,
1. 所以当一个新进程建立时,只要分配一个页目录就可以了,映射关系可以暂时不用设置。
然后读取可执行文件,开始加载程序,这时就开始依赖缺页异常了。当加载完最初需要的代码段和数据段,程序可以执行了,操作系统将PC指向可执行程序的入口,设置好运行时栈起始点,开始执行。然后就是缺页异常不断发生,缺页异常不断被处理的过程......
2. 虚拟地址空间中的一段属性相同并且地址连续的区域称之为一个VMA(Virtual Memory Area, 注意不是Virtual Memory Address那个VMA, 当然它们确实都叫VMA...), 这个VMA当然是内核里面的一个管理概念, 体现为内核代码里的一个数据结构。一个VMA可能映射至一个或者多个物理Page. 代码段数据段会不会换出和进程的“静态存储 动态存储”概念几乎没什么关系,只要内核的换页对于进程是透明的(嗯,实际上它们就是透明的),换哪个区域都不会有影响 -- 换了又怎么样?只要内核想换或者认为需要换 -- 进程需要时还可以换回来。对于进程来说,把“静态存储区域”理解为是一段死的一直存在在虚拟内存空间中的指令/代码总是没有问题的 -- 因为换页是透明的。所以,所谓“静态/动态内存”是一个从进程的虚拟空间角度去考察的概念,主要是看内存区域会不会动态伸缩/增减,内核是不用管的。
以上。本人理解有限,如有误,砖轻拍,谢谢。 |
|