作业系统 第九章(1)

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 addresses74014

Linker:将程式需要的像是一些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

Dynamic Linking

Static linking(静态连接):将 system libraries 载入 program code(由loader连结在一起),再由进入 binary program image。Dynamic Linking(动态连接):将 linking 延迟,直到执行时间。(并非"载入时发生")Stub 是 code 的一小片段,用于查找 memory-resident library routine。OS会检查是否routine在processes' space中。动态连接对于libraries特别有用此系统也可被称为shared libraries。考虑是否适用于patching system libraries。Versioning may be needed

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章