内存映射文件技术回顾

先前使用C++实现过通过网络进行大文件的传输,但是久了拾起时难免又会忘。再回顾后做个笔记

1、段页式存储管理简述
在段页式存储中,一个PE文件(.exe,.dLL等)由各种段组成,而一个段由由一些页面组成,其中每页面的大小为4KB。
比如:一个exe文件分为主程序段I、主程序段II、…、数据段及栈段(线程栈)等,而数据段的大小为15KB,也就是说数据段包含了4个页面。
为什么不是3.25个页面?因为页面是一个内存单元,与之相对应的物理内存的块大小也为4KB。

逻辑地址:是假设程序都是从0地址开始,到程序大小的一个地址(其实并不是)。 一般又称之为虚拟地址,为什么说虚拟呢?因为程序运行在内存的时候,程序总能调用到指定(比如指针)地址处的数据,给我们的感觉好像就是程序直接能在内存中的实际地址调用到数据,其实并不是这样,这个过程的实现最先是由CPU给我们所需要调用的数据的地址(该地址就是逻辑地址),然后通过在自身程序查找相应段表,然后查段表中的页表,最后查找到对应的页 …
具体的加载与置换后面讲到

内存分为一个个块,每个块大小为4KB

2、CPU如何调度指定进程
在程序加载到内存并运行后,运行一段时间后,此时需要调用程序数据段中某一个数据(在数据段中某个页面里),此时CPU给出该数据的逻辑地址,接着查找存储在内存中程序对应的段,根据逻辑地址换算出是段表中的第几个段,然后换算出是段对应页表中的第几个页面,然后结合逻辑地址中的页内偏移地址,找出对应的物理内存地址(这是真实的地址!!!)。找相应数据具体分为如下三种情况:
(1)运气好的话,可能相应页的数据加载到了对应的物理内存块中,这样程序就能直接调用对应物理内存地址处的数据。
(2)可是偏偏运气不好,相应页的数据没有加载到物理块中,此时会产生访问违规(或者说中断,就是没有找到数据的意思),然后就会去页交换文件(也就是我们的虚拟内存)查找对应的的数据是否存在,如果存在也交换文件中,就将页交换文件中对应页加载到物理内存对应的块。如果此时物理内存块不足够,就通过页面置换算法(LRU、FIFO等),将闲置的页面置换到页交换文件中,然后再将页交换文件中的页加载到物理内存中。
(3)可能此时运气很不好,在页交换文件中也没有找到相应的页,此时就要到程序的磁盘地址处去查找对应的数据,然后将查找的数据直接加载到物理内存中,如果物理内存不足,就通过置换算法将闲置的块置换到页交换文件中,然后再将磁盘中的数据加载到物理内存。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值