作业五
|Last edited: 2024-12-5

一、总结并讨论交换技术的思想

交换技术是一种内存管理技术,在内存紧张时使用。它通过将内存中一些不常使用的进程暂时移动到外存,再把外存中需要使用的进程移动回内存,提高了系统的内存资源利用率,变相”扩充“了内存空间。本质上是进程在内存和外存之间的动态调度。
 
交换技术的机制确定后,我们有一些实现细节的策略需要确定:
1、一般系统会为交换技术专门分配一片磁盘,其拥有连续的磁道,可以进行较为高效的访问。
2、对于每个进程,只有在运行中需要动态修改的部分:栈和堆需要进行交换,其余部分(如数据段、代码段)本就可以通过正在运行的程序的可执行文件中获得,故不需要交换。
3、对于在什么情况下要交换,页面如何置换,我们可以有不同的策略选择,比较经典的页面置换策略有LRU、FIFO等。需要注意的一点是,由于CPU和I/O设备的运行机制:DMA机制,我们不能换出正在进行I/O的进程,否则会导致I/O出现问题。
 
整体来看,交换技术有点类似于缓存技术——在交换技术中,内存是外存的缓存。
如果只从结果来看,我们很容易认为二者是一致的。但是从实现目的来看,两项技术是完全不同的:交换技术是为了管理有限的内存资源,而缓存技术是为了提高内存访问速度。我们应对这一点进行区分。
 

二、总结并讨论程序中指令或数据地址绑定的时机

 
程序在运行时需要加载到内存中,程序中的指令、变量、函数等都拥有对应的内存地址,我们需要了解这些地址的对应是在什么时候进行的。
总体而言,我们有三个可以进行地址绑定的时机。
1、编译时
在编译时得知该进程将在内存中的驻留地址,则可以在编译时就直接进行指令和数据的地址绑定。
这种情况在我们日常在计算机运行程序时并不常见,因为我们日常运行的进程很少会驻留在内存的指定地址,他们的地址一般是动态分配的,而且也可能会被交换到外存中。
但是这种地址绑定技术在一些嵌入式系统中很常见。
 
2、加载时:
将程序加载到内存时进行地址绑定是最符合直觉的一种地址绑定方式,在经过编译、链接后,所有指令与数据的相对地址就已知了,只要知道进程起始物理地址,所有的地址都可以被确定。因而在加载时进行地址绑定是简单直接的。
但是这也遇到很多问题,比如由于交换技术的存在,进程可能在换出后重新换入时,换入到与之前不同的内存地址,这就需要我们重新对地址进行绑定。仅凭加载时地址绑定就显得不够灵活。
 
3、运行时:
运行时进行地址绑定是现代计算机操作系统最常用的地址绑定技术,它不仅能够支持虚拟内存技术:使得多个进程能够共享物理内存,同时还兼具灵活性与安全性,并且能够提高内存的利用效率。
你或许会担心运行时进行地址绑定会拉低运行效率,实际上我们利用了硬件设备MMU来帮助我们完成了这一过程,避免了这一问题。
 
总体来说,三个绑定的时机从静态逐渐演变到动态,各有各的适用场景。
同时,我们要把这里提到的地址重定位与我们在ics上第七章所学的地址重定位进行区分,ics中的地址重定位指的是链接器对可重定位文件中的数据进行重定位,将其转化为逻辑地址的过程。而我们这里提到的重定位是把逻辑地址转化为物理地址的过程,不能将二者混淆。
 
 
 
 
Loading...