Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

深入理解内存(3):内存交换技术

$
0
0

我们知道当多进程在内存中共存时,如果内存足够大都够用,大家相安无事自然是最理想的事了.不过现实往往没那么美好.有些时候内存会满了,不够用了.此时必须将进程从内存移到硬盘中去.有空间时可能又会被移回内存来.专业点的说法叫 滚出(roll-out),滚进(roll-in).或者叫换出,换入.

 

在进行换出,换入时你可能会想到两种方法

(1)以进程为单位换出换进,这是最简单最容易想到的.但是显然不够灵活,因为一个进程所需的内存空间较大.所以这种交换技术现在用的不多

(2)只交换进程的一部分. 通过页式或段式内存管理先把进程的虚拟地址空间划分为若干页面或段,这样交换时就可就交换页或段.

 

页式存储管理

所谓分页就是把进程的虚拟地址空间划分成大小均匀的一页页的(实际上就是一块块的,把进程切成几小块罢了),比如一页是1K,然后把物理内存也划分成一页页的.然后再把两者映射起来.如下图.哎发现有时说一堆话学不如一个图顶用,下面的图都是我们从别处拷来的,图片原地址http://www.doc88.com/p-982340562158.html

 

当然这个映射关系的信息肯定要保存在哪.都保存在寄存器中.然后通过逻辑地址找物理地址的流程如下图

 

 

 

段式存储管理

分页时,就是不管三七二十一,都一刀切,把程序切成均匀的一页页的.但我们知道程序实际运转时是成为很多模块的,比如一个函数可能是一个模块.如果按程序的逻辑结构来分成更小的组成部分可能更合理.因为程序执行时也可以那样分成一个个小的单位去执行的嘛.这里我们把程序的更小单位叫作业

不过分段存储管理其实跟分页管理大的思想理念是一样的,都是把程序分成更小的单位嘛,便于交换而已.只不过分段不是均匀分成固定大小的页,而是根据实际情况分在大小不均的段.此时由于段大小不一,所以除了知道每个段的开始地址还必须要有段表长度的信息.

 

逻辑地址与物理地址转换如下图

 

 

 

分页与分段结合

分页与分段自然是各有好处.分段如果每段太大了自然不太好,那还不如干脆把整个程序交换出去得了,不用整得这么麻烦

于是有人想着把这两种方法结合起来,叫段页式存储管理.你要以在一段内再使用分页技术

 

作者:weiwenhp 发表于2013-1-15 21:14:50 原文链接
阅读:40 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>