从根本上来说,计算机里面运转的程序有两种:管理计算机的程序和使用计算机的程序。正如本书前面多次提到,操作系统就是管理计算机的程序。而管理者本身也需要使用资源。其中的一个资源就是内存空间。内存管理的第一个问题是操作系统本身在内存中的存放位置。应该将哪一部分的内存空间用来存放操作系统呢?或者说,我们如何将内存空间在操作系统和用户程序之间进行分配呢?

最简单的方式就是将内存划分为上下两个区域,操作系统和用户程序各占用一个区域,如图11-4所示。

比较起来图11-4a的构造最容易理解。因为操作系统是为用户提供服务的,在逻辑上处于用户程序之下。将其置于地址空间的下面,符合人们的惯性思维。另外,操作系统处于地址空间下面还有一个实际好处:就是在复位、中断、陷入等操作时,控制移交给操作系统更方便,因为操纵系统的起始地址为0,无须另行记录操作系统所处的位置,程序计数器清零就可以了。清零操作对于硬件来说非常简单,无须从总线或寄存器读取任何数据;而图11-4b的布置虽然也可以工作,但显然与人们习惯中操作系统在下的惯性思维不符。

当然,除了上述两种分配方式外,如果愿意,我们也可以将操作系统和用户程序分拆,形成穿插的分配方式。只不过这样做没有半点好处,白白增加管理的复杂性。

由于现代的计算机内存除了RAM之外,可能还备有ROM。而操作系统既可以全部存放在ROM里,也可以部分存放在ROM里,这样又多出了两种分配方式,如图11-5所示。

图11-5a模式下操作系统放在ROM里面的好处是不容易被破坏,缺点就是ROM要做得大,能够容纳整个操作系统。由于ROM比较贵,通常情况下是备有少量的ROM,只将操作系统的一部分放在ROM里,其余部分放在RAM里。因此,这两种分配模式以图11-5b为佳。

图11-5b分配模式还有另外一个好处:可以将输入输出和内存访问统一起来。即将输入输出设备里面的寄存器或其他存储媒介编入内存地址(在用户程序地址之上),使得访问输入输出设备如同访问内存一样。这种输入输出称为内存映射的输入输出。如果要访问的地址高于RAM的最高地址,则属于I/O操作,否则属于正常内存操作。

这样,根据操作系统是否占用ROM或我们是否采用内存映射的输入输出来分,存在两种模式:

操作系统占用RAM的底层,用户程序占用RAM的上层。
操作系统占用RAM的底层和位于用户程序地址空间上面的ROM,用户程序位于中间。

第2种模式又分为3种情况:

没有使用内存映射的输入输出,ROM里面全部是操作系统。
使用了内存映射的输入输出,ROM的一部分是操作系统,另一部分属于I/O设备。
使用了内存映射的输入输出,ROM全部属于I/O设备。

例如,CP/M操作系统的内存布局模式就是上述第1种情况,其BIOS和CP/M内核均处于ROM里面,而shell和用户程序处于RAM里,如图11-6所示。

CP/M是微计算机控制程序(Control Pro-gram for Microcomputers)的缩写,它是一个运行在Intel 8080和Intel 8085微机上的早期操作系统。


多数现代操作系统采用的是第2种模式:即ROM里面包括操作系统一部分和I/O,RAM里面则包括操作系统的其他部分和用户程序。Solaris 10操作系统采用的则是第2种模式(见图11-4b)。即操作系统在上面,用户程序在下面。

操作系统在内存中的位置相关推荐

  1. C++类的虚函数表和虚函数在内存中的位置

    C++类的虚函数表和虚函数在内存中的位置 C++类的虚函数表和虚函数在内存中的位置 虚函数表和虚函数在内存中的位置说明 参考 C++类的虚函数表和虚函数在内存中的位置 虚函数表指针是虚函数表所在位置的 ...

  2. 408 知识点笔记——操作系统(内存管理)

    文章目录 3 内存管理 3 内存管理 [虚拟存储器] 在程序装入时,可以只将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行.采用连续分配方式时,会使相当一部分内存空间都处于暂时或 &q ...

  3. USF MSDS501 计算数据科学中文讲义 2.2 在内存中表示数据

    来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目 原文:Representing data in memory 译者:飞龙 协议:CC BY-NC-SA 4.0 典型的程 ...

  4. 操作系统之内存管理详解

    1 内存管理概念 1.1 基本原理和要求 内存管理: 操作系统对内存的划分和动态分配 内存管理的功能有: 内存空间的分配与回收 由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高 ...

  5. Linux 操作系统原理 — 内存 — 基于局部性原理实现的内/外存交换技术

    目录 文章目录 目录 前文列表 基于局部性原理实现的内-外存交换技术 局部性原理 Swap 交换分区 前文列表 <Linux 操作系统原理 - 内存 - 物理存储器与虚拟存储器> < ...

  6. 【Android 逆向】Android 逆向基本概念 ( 定位内存中的修改点 | 基址寻址法 | 搜索定位法 )

    文章目录 一.定位内存中的修改点 1.基址寻址法 2.搜索定位法 一.定位内存中的修改点 使用 " 基址寻址法 " 或 " 搜索定位法 " 搜索 指定文件中的代 ...

  7. 直接载入内存中的DLL

    http://www.cppblog.com/mybios/archive/2006/11/21/15483.html 作者:任明汉下载源代码前言你可能不希望在发布程序时附带上一个外部的 DLL,因为 ...

  8. 从内存中加载并启动一个exe

    从内存中加载并启动一个exe 文章作者:Idle_ (阿呆) 信息来源:[url]http://cnxhacker.net/article/show/2821.html[/url] windows似乎 ...

  9. 从内存中加载并运行exe(两种方法)

    windows似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动.      而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法.      用途嘛,     也许可以 ...

最新文章

  1. C# 错误!!容量超出了最大容量。参数名: capacity 这个是什么问题呢?
  2. [unreal4入门系列之九] UE4创建空白关卡并添加碰撞体
  3. maven修改setting文件后重启_Maven项目构建
  4. 如何使用反射来基于JPA注释记录数据模型
  5. Java中的紧凑堆外结构/组合
  6. 子进程 已安装 post-installation 脚本 返回错误状态 1 dpkg: 依赖关系问题使得 mysql-server 的配置工作不能继续: mysql-server 依赖于 mysq
  7. 【渝粤教育】国家开放大学2019年春季 2767养猪技术 参考试题
  8. 樊昌信版通信原理期末复习第一章绪论
  9. android java 调试快捷键_Android Studio 代码页跳界面 /java和XML快速切换技巧
  10. java将naso注册成计算机服务_2018计算机二级考试Java语言每日一练 8月2日
  11. Atitit orm的实现模式 data-mapper模式和active-record模式有什么区别
  12. java http 双向认证_HttpsURLConnection使用,并实现双向认证
  13. Jquery框架核心部分例子 .
  14. Centos-6.3-x86_64 minimal 迷你版安装笔记 - Java篇
  15. html的选择字体样式代码,html 常用字体(示例代码)
  16. 字节全栈工程师亲自整理的40个前端练手项目
  17. xmpp即时通讯协议的特性---长处和缺点!
  18. houdini flowmap
  19. AP VLAN解决的问题
  20. JAVAWEB-NOTE03

热门文章

  1. VALSE学习(十八):复杂视频的深度高效分析与理解方法
  2. 图相处理自学(二):图像处理基本算法Black level / sensor offset/ Shading/ Color Matrix/ AWB(QP值)
  3. Mysql 的uuid()函数以及replace()函数使用
  4. linux中jdk添加字体_LINUX下JDK安装字体
  5. Windows2012服务器无法复制粘贴问题
  6. mybatis 里面concat()函数t模糊查询
  7. mysql同步多主,MySQL多主一从同步配置
  8. elasticsearch 主键字段_ElasticSearch 索引 VS MySQL 索引
  9. c++ 队列_经典数据结构与算法(一):Python/C/C ++实现堆栈和队列
  10. 机器学习算法-09-深度学习、BP神经网络、Hopfield神经网络、基于数学原理的神经网络、径向基函数RBF(B站一条会说666的咸鱼)