页式内存管理和写时拷贝技术

基本的内存管理方法:固定加载地址的内存管理、固定分区的内存管理、非固定分 区的内存管理、交换内存管理
这几种内存管理方式:
1、固态分区的形式浪费内部的空间,造成内部碎片。有大的空间,小的进程只能在队列中等待。
2、非固态分区可以解决内部碎片,但是不利于程序增长。
3、交换内存管理是最灵活的,解决了程序所需空间增长而无法运行的问题。
随着程序在内存和磁盘之间的交换,内存变得越来越碎片化,就是内存被程序分割成无法使用的小空间。这些散布在进程之间的小空间就是外部碎片,为什么是外部呢?因为没有分配内存,从进程的粒度来说,它是处在进程分配了空间的外面,这种碎片化过程也称为:外部碎片化。
随着进程的进进出出,外部碎片会大量占用内存资源,使得空间浪费。欸,那么如何才能减少这种外部碎片呢?
1、 最佳适用:找到能容纳新进程的最小空间
2、 最先适用:找到第一个能容纳新进程的空间
这两个进程哪个好一些呢?
最先适用好一些,因为最佳适用的最小空间释放后反而难以利用去分配空间。
不论是最先适用还是最佳适用都不能消除外部碎片,当然我们可以进行碎片整理,移动进程在内存中的位置把空闲的空间连成一片,但这种操作需要把进程放在磁盘上,再重新加载,效率低下。

除了外部碎片的问题,交换内存管理方式还有地址空间增长:

1、 交换的内存管理可以解决外部碎片的问题,把程序“倒”在磁盘上,再在内存上找到更大的空间将程序“倒”进来。磁盘操作耗时,就会影响效率。
2、 交换所能带来的空间增长有限,单一程序不能超过物理内存空间。
那么解决的方法?
追其根源,每个程序的大小是不一样的,这样内存分配空间时就会存在不一致。 只要将虚拟内存和物理内存都分成大小一样的部分,我们称为“页”,只要按页进行内存分配,就不会出现外部碎片。
程序增长有限是因为一个程序要全部加载到内存中去,才会运行。那么怎么解决呢?那不需将所有程序都加载到内存,也可以用分页解决,只将当前需要的页存放在内存中,其他的页存放在磁盘中,这样一个程序占有内存和磁盘,空间增长大大增加。分页后,如果需要更多的空间,那么就在内存中再开辟一个新页。不用再在磁盘上倒来倒去了,提高效率。
分页内存管理:
刚才说了交换内存管理的缺陷和解决方法“分页”,分页
内存管理的核心就是把虚拟内存和物理内存划分成大小相同的页面,比如4kb,16kb,32kb,并以页面作为最小分配单位。物理空间是页面的整数倍,而且空间分配以页面为单位,不会出现外部碎片。
同时,一个虚拟页面可以存放在任何一个物理页面上,空间增长容易解决,可以再分配一个虚拟页面存放在另一个物理页面上。
一个程序的虚拟地址由两部分组成:
页面号 页内偏移值

对于32位寻址的系统,页面大小位4kb,页面号占20位,页内偏移值占12位。

那么虚拟页面如何到物理页面呢?
首先分离虚拟地址中的页号。32为位中提取出20位。
然后判断页表是否有效,是否在内存中,是否是操作系统的。
注意:虚拟空间为它的寻址空间。
但是一般的程序不可能将这个空间装满,在内部有的空间是空的,如果去访问这部分的空间就是非法的。100K有25个页,不存在第26个虚拟页面,但是如果试图访问,那么就是错误的。
这里写图片描述

MMU接收cpu发送的虚拟地址,并翻译成物理地址给内存。
MMU对虚拟地址的翻译只是将虚拟页面号翻译成物理页面号,对偏移值不进行任何操作。
MMU是如何查找呢?通过查页表,每个程序MMU都为其保存了一个页表,即虚拟页面到物理页面的映射。
在页表中记录更多的状态,可以知道一个页面是否有效,是否被保护,是否在物理内存中。
这里写图片描述
那么如何查找呢?
这里写图片描述

从上面这张图看到cpu读出虚拟地址,页面大小为4kb,虚拟页面号为20位,页面地址偏差为12位。通过页面号为2,查找页表2对应的物理页面号110,物理页面号和页面偏差合并,就是物理地址:110 000000000100

程序加载过程:
一个页面大小为4k
这里写图片描述
写时拷贝技术:
创建fork之后,父进程会创建出一个子进程,这个子进程作为父进程的副本。
可是每次fork出的子进程会将父进程的所有数据都拷贝给自己吗?
哎呀,子进程就会抱怨了,人家也不完全是爹二代啊,怎么事事都跟我爹有关,那我娶得媳妇,也不能是我爹的啊,哈哈!!
嗯,我们之前说父子进程不会共享各种数据段,全局变量区、堆区、栈区。
但是子进程拷贝父进程的数据是这样的:
只有只读权限,没有修改的权限。
如果子进程只是对父进程进行读取操作,那么子进程用的就是父进程的数据,因为它们是浅拷贝,指向的是同一个文件指针。
那么如果子进程修改父进程的数据呢?在修改前,子进程只拷贝出需要修改的数据,进行修改,这样满足父子进程数据不共享。
这里写图片描述

修改数据之后:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/lyt15829797751/article/details/78523503
今日推荐