作业系统 第九章(1)

Background

  • 程序会在记忆体与硬体中间搬移,但最後会在记忆体内执行,且在执行时会使用到register,才能到控制unit中做硬体的process。
  • 记忆体只知道两种指令,且都是一连串的指令:
    • address+read requests
    • address+data and write requests ⇒ 但速度较慢
  • Register存取一个指令,通常在一个CPU clock内或更少时间内完成。
  • 记忆体管理比register存取高一个order;I/O device又比记忆体管理高一个order,所以在这之中存在着速度差的关系。
  • 所有process在一个大的记忆体中执行,所以需要控制整个空间,但因为空间是共用的,所以需要保护自己的process,以免资源被别人拿去使用。

Base and Limit Registers(Hardware Support)

一个logic address space是由baselimit 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 symbolic
    • Compiled code addresses bind to relocatable address
      • 从这个module开始的第 14 个byte
    • Linker 或 Loader 将 relocatable address 绑定到 absolute addresses
      • 74014

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 没啥关系)

  1. 通过 program design 实现
  2. 操作系统可以通过提供 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

<<:  Git push

>>:  【Vue】new Vue() 和 export default 差别

每个人都该学的30个Python技巧|技巧 21:set的处理方法(字幕、衬乐、练习)

上次教到新的容器叫做集合,那听到这个名称有没有想起来在高中时期的数学也有学过集合呢?那时候教到的交集...

Node-RED学习心得(操作篇)

架构图 基本功能 本篇会介绍6项常用的子模块,并适时使用案例来介绍它们的功能以及再使用上的一些细节 ...

Day15,设定一下Ingress

正文 在很多的情境下,我们会使用到前天所提及的Service Type Loadbalancer,而...

【Side Project】 一切就绪,准备开工

选择语言与IDE 这边就直接决定使用Visual Studio 作为我们开发的IDE, 并用 **A...

[NestJS 带你飞!] DAY04 - Controller (下)

主体资料 (Body) 在传输资料时经常会使用到主体资料,比如说:POST、PUT、PATCH等操作...