现代操作系统的虚拟内存实现

因为不管存储器多大,程序都可以将其填满。所以 在现代计算机操作系统中 我们设计了 分层存储器体系
在 分层存储器体系中,存在 MB 的快速、昂贵、易失性的高速缓存,GB的速度价格适中的同样易失的内存 ,以及 TB的低速、廉价、非易失的磁盘存储。

操作系统的工作之一 就是 将层次存储系统体系 抽象成为一个 有用的模型 并管理这个抽象。

探索 内存抽象方案:

无存储器抽象

最简单的存储器抽象 即 没有抽象。 早期的大型机、小型计算机 都没有存储抽象。 每一个程序 都直接访问物理内存。

因此 那时候呈现给编程人员的存储器 即是: 从0到某个上限的地址集合,每个地址 对应一个 可容纳 一定数目(通常是 8位)的二进制数据。

指令 Move Register1, 100 即:将 100的物理内存的内容,复制到 register1中。

该种方案下,系统中同时运行两个程序是不可能的。如果进程 A在 地址 100位置写入数据,进程 2 在稍后的时间中 对地址 100进行了改写,可能导致 进程A的崩溃。

但 无内存抽象模式依然广泛存在于嵌入式系统中。比如 洗衣机、微波炉 此类设备 都已经完全被ROM形式的软件控制。 这种情况下,软件都采用 绝对地址寻址的方式,因为 所有运行的程序 都可以被事先确定, 用户不需要运行自己的软件。

问题: 如何在没有存储器抽象的情况下 同时运行多个程序?
操作系统 只需要 把当前的内存中的内容 保存到磁盘上 ,然后将下一个程序 读入到内存中 再次运行即可。 只要在同一时刻 内存中只有一个程序 即可。

历史中 IBM 360 的做法:
  1. 内存被划分为 大小2KB的块。
  2. 每个块 分配一个 4位的保护键, 保护键 存储在cpu PSW中的特殊寄存器中。
  • 所以: 一个运行中的进程如果访问保护码 与 PSW中的不同的内存,硬件将会捕获该事件。 因为只有系统可以修改保护键,这样就可以 防止 用户进程 之间、用户和操作系统之间的相互干扰。
  1. 静态重定位技术: 即便 存在保护键,依然无法解决 两个进程 使用重复的绝对地址的问题,我们希望每个进程使用一套自己私有的内存地址来进行内存访问。
    IBM 360 采用的方法 即:在第二个 程序 装载到内存 100地址时, 常数100将被 加到 程序的每一个 程序地址上。

存储器抽象: 地址空间

直接暴露物理地址的问题: 1) 用户程序可以简单的寻址内存地址,很容易地破坏 操作系统。 2) 同时运行多个程序将非常困难。

要多个应用程序 同时处于内存 而不互相影响 需要解决两个问题: 1)保护 2)重定位

IBM 360的办法 实际效果并不好,因为 其 静态重定位 技术,不仅缓慢,还需要 额外的标记 来确定 哪些地址 需要被加。(比如 相对地址指令并不需要 + 程序的起始位置

动态重定位: (初步简单实现) 给cpu配置两个寄存器: 基址寄存器 、界限寄存器。 使程序装载期间无需重定位。 此方法可以简单实现存储器抽象。

具体做法:

  1. 当一个进程运行时 程序的起始地址装载到基址寄存器中程序的长度 装载到 界限寄存器中。
  2. 每次 进程访问内存,取一条指令、读写一个内存地址时:
    读写地址 --> 地址 + 基址寄存器 --> 检查 是否在 界限寄存器范围内 --> 发送到 内存总线
    cpu硬件会将 地址发送到内存总线 之前, 自动把基址寄存器的数值 + 进程发出的地址上。 同时检查结果是否在界限寄存器范围内。 超过了界限则捕获错误。

问题: 上述方法完美的解决了 地址空间抽象 需要的 保护 与 重定位 问题。但是依然存在另外一个 问题,即:程序需要的内存 >> 实际物理内存, 又如何解决呢?
答案是: 交换技术 与 分页 技术

我们先看交换技术:

交换技术:(最简单的策略)
  1. 将进程完整的调入内存中,多个进程同时运行。
  2. 当前内存不能满足新进程的内存需要时候,将空闲进程 换出到磁盘中, 通过对进程 内存到磁盘 的换入换出 操作,来实现 同时运行多个进程。


    系统交换技术.jpeg
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • 计算机系统的存储器层次结构自上而下依次分为:寄存器、高速缓存、内存储器、磁盘缓存、可移动存储介质5层。 存储介质的...
    特立独行的佩奇阅读 695评论 0 0
  • 计算机系统虚拟内存分享 前言 该分享文档,是基于《深入理解理解计算机系统》第三版关于内存方面的总结。下述所有模型图...
    不想工作的iOS阅读 752评论 0 5
  • 1、导论 与用户交互的程序: 基于文本的shell 基于图标的图形化用户界面(GUI) 操作系统所处的位置: 多数...
    曹元_阅读 1,393评论 0 4
  • 内存是计算机很重要的一个资源,因为程序只有被加载到内存中才可以运行;此外,CPU所需要的指令与数据也都是来自内存的...
    哆啦Aa有梦阅读 2,501评论 0 1
  • 操作系统 现代计算机系统由一个或多个处理器,主存,磁盘,打印机,键盘,鼠标,显示器,网络接口以及各种其他输入/输出...
    何幻阅读 864评论 0 2