Background
程式会在记忆体与硬体中间搬移,但最后会在记忆体内执行,且在执行时会使用到register,才能到控制unit中做硬体的process。记忆体只知道两种指令,且都是一连串的指令:address+read requestsaddress+data and write requests ⇒ 但速度较慢Register存取一个指令,通常在一个CPU clock内或更少时间内完成。记忆体管理比register存取高一个order;I/O device又比记忆体管理高一个order,所以在这之中存在着速度差的关係。所有process在一个大的记忆体中执行,所以需要控制整个空间,但因为空间是共用的,所以需要保护自己的process,以免资源被别人拿去使用。Base and Limit Registers(Hardware Support)
一个logic address space是由base和limit register所定义的。
Base:process的起始位置。Limit register:process的大小。CPU会负责以每个process ID来检查每个process是否有在自己的位置上。(between base and limit)
Address Binding
程式虽被储存在硬碟上,但须被载入记忆体中才能形成process去执行,而在硬体上等待的所有process会形成一个input queue。一般来说记忆体的起始位置是0000,但使用者的位置却不一定,因为有可能已经被别人先使用了。此外,address在程序生命週期的不同阶段以不同方式表示:Source code addresses usually symbolicCompiled code addresses bind to relocatable address从这个module开始的第 14 个byteLinker 或 Loader 将 relocatable address 绑定到 absolute addresses74014Linker:将程式需要的像是一些library、code、proess等连接在一起。
Loader:将link好的程式,再load到确定的记忆体位置。
Binding of Instructions and Data to Memory
Address在将指令与数据绑定到记忆体时,会发生三种不同的阶段:Compile time:如果已经知道记忆体的位置,便产生 absolute code,但有更改位置的话,code也需要重新产生(recompile)。Load time:如果程式在 Compile time 并不知道记忆体位置的话,就产生relocatable code。Executin time:如果process在执行时,记忆体segment被搬移到另一个segment的话,连接就会延迟到这时才开始。大部分作业系统都使用这个方法Need hardware support for address maps (e.g., base and limit registers)Logical vs. Physical Address Space
Logical address:由 CPU 产生。可说是当一个程式的最终位置未确定前的位置,也可称为「virtual address(虚拟地址)」。Physical address:真正记忆体的位置,由memory unit所看到。compile-time和load-time address binding schemes,logical = physical address。
在execution-time address-binding scheme就不同了。
Logical address space:Program 所产生的所有 logical address 的集合。Physical address space:这些逻辑地址对应的所有物理地址的集合。Memory-Management Unit(MMU)
管理记忆体的硬体部分。Base register在实作中可以检查从logical address转移到physical address的动作,所以又称为relocation register。使用者程式可以处理 logical address,它永远不会看到真正的 physical address。当引用记忆体中的位置时,就会发生execution-time binding。logical address和physical addresses绑定在一起。Dynamic relocation using a relocation register
当模组被呼叫时,才能将其载入主要记忆体中。(Routine is not loaded until it is called)为了有更好的memory-space使用率,所以没有使用的routine将永不载入。所有的routine以可重定位(relocatable)的加载格式,保存在硬碟上。当大量的code被需要去处理不常发生的事件时,就会非常有用(e.g 错误常式)。不需要操作系统的特殊支持 (和 MMU 没啥关係)
通过 program design 实现操作系统可以通过提供 library 来帮助实现 dynamic loading