从win32中的写时复制(Copy on write )机制谈起

我们知道,内存映射文件的物理存储器来自磁盘上已有的文件,而不是来自也交换文件。系统在加载exe和dll文件的时候使用的是内存映射文件来载入并运行exe和dll,这样大大节省了页交换文件的空间以及应用程序的启动时间。所以,实际上系统载入exe文件的时候就是利用内存映射文件技术把磁盘中的exe文件映射到内存(实际上,系统只是预定了一块足够大的地址空间来容纳exe文件,一定要注意“预定”这个词,待预定的地址空间区域的具体位置已经在exe文件中指定。默认情况下,exe的基地址为0x00400000.系统也会对这个地址空间的区域进行标注,表明该区域的后备物理存储区来自磁盘上的exe文件,而非来自系统的页交换文件。

以上就是,系统装载可执行文件的时经常被称为“映射到地址空间”的解释了,实际上就是创建了exe文件对应的页交换文件,也就是系统为这个exe文件的执行预定了足够大的地址空间,在x86下为4G的地址空间。

以上是系统加载exe文件的过程,映射到地址空间之后,系统开始执行exe文件的启动代码。完成了这个映射过程后,系统会负责所有的换页(paging),缓存(buffering)以及高速缓存(caching)的操作。例如,如果.exe文件中的代码跳到一个指令地址,但是该地址尚未载入内存,那么会引发一个页错误(page fault)。系统会检测到这个错误并自动将该页代码从文件载入到内存。然后系统会把该内存页映射到进程地址空间中的适合位置,并让线程继续执行,就好像该页代码早就在内存中一样。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
复制Copy-on-Write,简称COW)策略是一种用于优化内存和间效率的技术,常用于操作系统、数据库以及编程语言的实现。 在COW策略,当多个进程或线程共享同一份资源或数据,不会立即复制这份资源或数据,而是共享同一份拷贝,只有在某个进程或线程需要修改这份数据才会执行实际的复制操作。 具体来说,在资源或数据被多个进程或线程共享,它们实际上共享同一份只读的拷贝。当某个进程或线程需要修改这份数据,会先执行一次复制操作,然后修改复制后的数据,而其他进程或线程仍然共享原始的只读拷贝。这样一来,当需要修改的进程或线程比较少,就可以避免大规模的复制操作,从而提高内存和间效率。 COW策略的优点在于减少了复制操作的开销,节省了内存的使用。当多个进程或线程共享大规模数据,COW可以避免大规模的数据复制,减少内存的占用,从而减少了系统开销。同,COW也提高了并发性,因为不需要加锁来保护原始拷贝的数据,只有在修改才需要加锁。 然而,COW策略也存在一些缺点。首先,每次数据修改都需要复制一份数据,而且当修改操作频繁复制操作的开销可能逐渐积累起来,降低了效率。此外,COW策略的实现也较为复杂,需要额外的开销和处理逻辑。 总之,COW策略是一种用于优化内存和间效率的技术,通过延迟实际的数据复制操作,同共享同一份只读数据拷贝,从而提高系统的性能和并发性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值