第一章 多任务操作系统基础1
为了实现多任务操作系统 程序的编译过程很大程度上考虑了这个事情
与构建可执行文件相关的所有技术的最终目标是建立尽可能多的控制程序执行的过程。
为了真正理解可执行文件结构,最重要的是充分了解程序的执行,作为操作系统内核和嵌入其中的信息之间的相互作用可执行文件扮演着最重要的角色。
这方面的第一步是了解程序运行的环境。先介绍现代多任务操作。
计算机的抽象结构,任何一个系统都可认为由四个基本部分组成,其中输入部分用于接收进入系统的信息或数据;经过处理中心加工后再由输出部分送出,能源部分为整个系统提供操作运行的能源供给,包括输入和输出部分操作所需要的能量。
现在站在CPU的角度去看待一个程序的加载。
1.进程 内核
从内核的观点看 进程的目的就是用来承担分配系统资源的实体(CPU时间和内存)
内核本身并不是一个进程,而是进程的管理者。
2.内存地址(在80x86微处理器)
逻辑地址
包含在机器语言指令中用来指定一个操作数或者一条指令的地址。每一个逻辑地址都是由一个段和偏移量组成,偏移量指明了从段开的地方到实际地址之间的距离。
线性地址
也称虚拟地址。是 一个32位无符号整数
物理地址
用于内存芯片级内存单元寻址。
内存控制单元MMU 通过一种称为分段单元的硬件电路把一个逻辑地址转换成线性地址。接着 分页单元的硬件电路把线性地址转换为物理地址
3.什么是虚拟内存?
虚拟内存 virtual memory 作为一种逻辑层 处于程序内存请求与硬件内存管理单元(MMU)之间。
当进程使用一个虚拟地址时,内核和硬件内存管理单元 协同定位其在内存中的物理位置。
现代多任务操作系统允许多个用户并发的执行多个程序。
通过虚拟内存的概率很好的解决了内存需求和有限内存之间的矛盾
使用虚拟内存空间可以让每一个进程都有自己的 内存空间 且是一致和固定的
当不同的进程使用同样的代码时,比如库文件中的代码,物理内存中可以只存储一份这样的代码,不同的进程只需要把自己的虚拟内存映射过去就可以了,节省内存
运行时候 物理内存的数量 可能会被划分为一个个的小片段(页),每一个也都可以用来完整的执行程序。
在程序需要分配连续的内存空间的时候,只需要在虚拟内存空间分配连续空间,而不需要实际物理内存的连续空间,可以利用碎片
正在运行的完整的程序 可执行文件布局 会被完整的保存在硬盘里面。 只有那些当前CPU要用到的才会被加载到内存页中。
虚拟内存技术 把 内存看作是硬盘的高速缓存,内存中只保留活动区域 并且根据需要在硬盘和内存之间 不断进行来回数据传输,这样就可以高效率的利用内存了。