为了深入计算机底层,无知的我正在参考《王道考研》学习计算机操作系统。

笔记特点是 我重新整理了涉及资料的一些语言描述、排版,而使用了自己比较容易理解的描述、同样是回答了一些常见关键问题

文章目录

  • 3.1_1_内存的基础知识
    • 内存-定义和作用
    • 内存-根据其计算地址长度
    • 指令的工作原理
    • 逻辑地址 vs 相对地址
    • 从写程序到程序运行的过程
    • 装入模块装入内存-逻辑地址法
      • 如果从地址为0的地方开始装入
      • 如果从地址为100(其他)的地方开始存入
    • 装入的三种方式——绝对装入
    • 装入的三种方式——可重定位装入
    • 装入的三种方式——动态运行时装入
    • 链接的三种方式——静态链接
    • 链接的三种方式——装入时动态链接
    • 链接的三种方式——运行时动态链接
    • 知识回顾与重要考点
  • 3.1_2_内存管理的概念
    • 内存空间的分配与回收
    • 内存空间的扩展
    • 地址转换
    • 内存保护
      • 设置一对上、下限寄存器
      • 重定位寄存器和界地址寄存器
    • 知识回顾与重要考点
  • 3.1_3_覆盖与交换
    • 覆盖技术
    • 交换技术
    • 知识回顾与重要考点
  • 3.1_4_连续分配管理方式
    • 单一连续分配
    • 固定分区分配
    • 动态分区分配
    • 知识回顾与重要考点

3.1_1_内存的基础知识

内存-定义和作用

内存定义 && 作用

  • 内存可存放数据。
  • 缓和CPU与硬盘之间的速度矛盾。程序执行前需要先放到内存中才能被CPU处理

思考:在多道程序环境下,系统中会有多个程序并发执行,也就是说会有多个程序的数据需要同时放到内存中。那么,如何区分各个程序的数据是放在什么地方的呢?

方案:给内存的存储单元编地址

内存地址从0开始,每个地址对应一个存储单元

内存中也有一个一个的“小房间”,每个小房间就是一个“存储单元

  • 如果计算机“按字节编址**”**, 则每个存储单元大小为 1字节,即 1B,即 8个二进制位
  • 如果字长为16位的计算机 “按字编址**”**,则每个存储单元大小为 1个字;每个字的大小为 16 个二进制位

内存-根据其计算地址长度

一台手机/电脑 有 4GB 内存,是什么意思?

是指该内存中可以存放 4* 2^30个字节。如果是按字节编址的话,也就是有 4*2^30 = 2^32个“小房间”

这么多“小房间”,需要 2^32个地址才能一 一标识,所以地址需要用 32 个二进制位来表示(就是0~ 2^32 -1)

补充知识

2^10 = 1K (千)

2^20 = 1M (兆,百万)

2^30 = 1G (十亿,千兆)

考点

有的题目会告诉我们内存的大小,让我们确定地址长度应该是多少(即要多少个二进制位才能表示相应数目的存储单元)

指令的工作原理

工作原理

指令的工作基于“地址”。 每个地址对应一个数据的存储单元

工作机制

可见,我们写的代码要翻译成CPU能识别的指令。

这些指令会告诉CPU应该去内存的哪个地址读/写数据, 这个数据应该做什么样的处理。

在这个例子中,我们默认让这个进程的相关内容从地址#0开始连续存放,指令中的地址参数直接给出了变量 x 的实际存放地址(物理地址)。

思考:如果这个进程不是从地址#0 开始存放的,会影响指令的正常执行吗?

会。这是因为如果在执行过程中改变了存放地址指令的位置。那么还是按照物理地址来找到数据存放地址的话,找到的结果是错误的。还有等等原因。

逻辑地址 vs 相对地址

逻辑地址又称相对地址

相对地址又称物理地址

编译时产生的指令只关心“相对地址”

在实际放入内存时,再根据存放的起始位置得到“绝对地址”

从写程序到程序运行的过程

  1. 编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)
  2. 链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块
  3. 装入(装载):由装入程序将装入模块装入内存运行

装入模块装入内存-逻辑地址法

如果从地址为0的地方开始装入

如果从地址为100(其他)的地方开始存入

引出问题-如果还是按照逻辑地址来存入,那么实际存入数据的地方不是我们期望的

解决思路 如何将指令中的逻辑地址转换为物理地址?如下介绍装入的三种方式

装入的三种方式——绝对装入

绝对装入定义

  1. 在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。
  2. 装入程序按照装入模块中的地址,将程序和数据装入内存。

Eg:如果知道装入模块要从地址为 100 的地方开始存放…如下

缺陷 绝对装入只适用于单道程序环境。 这是因为这种环境是在同一时刻,内存当中只会有一个程序在执行,这可以使得在编译或汇编时就确定内存的物理地址

转换时机

  • 程序中使用的绝对地址,可在编译或汇编时给出,也可由程序员直接赋予。
  • 通常情况下都是编译或汇编时再转换为绝对地址

装入的三种方式——可重定位装入

定义

  1. 编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。
  2. 装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。

执行机制如下

特点

  1. 静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间(如果没有足够的内存,就不能装入该作业)
  2. 作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。//这是因为作业地址不会随着移动而相应地改变

装入的三种方式——动态运行时装入

动态重定位定义 又称动态运行时装入。

  1. 编译、链接后的装入模块的地址都是从0开始的。
  2. 装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。

=>因此装入内存后所有的地址依然是逻辑地址。

//这种方式需要一个重定位寄存器的支持。

执行机制如下

链接的三种方式——静态链接

定义

  1. 在程序运行之前, 先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块)
  2. 之后不再拆开

执行机制如下

链接的三种方式——装入时动态链接

定义

将各目标模块装入内存时,边装入边链接的链接方式

执行机制如下

链接的三种方式——运行时动态链接

定义

在程序执行中需要该目标模块时,才对它进行链接。

执行机制如下

优点是 便于修改和更新,便于实现对目标模块的共享。

知识回顾与重要考点

3.1_2_内存管理的概念

内存空间的分配与回收

内存空间的扩展

地址转换

意义

为了使编程更方便,程序员写程序时应该只需要关注指令、数据的逻辑地址。而逻辑地址到物理地址的转换(这个过程称为地址重定位(三种装入方式))应该由操作系统负责,这样就保证了程序员写程序时不需要关注物理内存的实际情况。

方式

内存保护

设置一对上、下限寄存器

  1. 在CPU中设置一对上、下限寄存器,存放进程的上、下限地址。
  2. 进程的指令要访问某个地址时,CPU检查是否越界。

重定位寄存器和界地址寄存器

采用重定位寄存器(又称基址寄存器)和界地址寄存器(又称限长寄存器)进行越界检查。

@重定位寄存器中存放的是进程的起始物理地址。@界地址寄存器中存放的是进程的最大逻辑地址。

知识回顾与重要考点

3.1_3_覆盖与交换

覆盖技术

机制

将程序分为多个段(多个模块)。

  • 常用的段常驻内存
  • 不常用的段在需要时调入内存。

内存中分为一个“固定区”和若干个“覆盖区”

  • 需要常驻内存的段放在“固定区”中,调入后就不再调出(除非运行结束)
  • 不常用的段放在“覆盖区”,需要用到时调入内存, 用不到时调出内存

特点

必须由程序员声明覆盖结构,操作系统完成自动覆盖。

缺点:

  • 对用户不透明,增加了用户编程负担。
  • 在应用上,覆盖技术只用于早期的操作系统中,现在已成为历史

交换技术

机制

内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)

  • 中级调度(内存调度),就是要决定将哪个处于挂起状态的进程重新调入内存

暂时换出外存等待的进程状态为挂起状态(挂起态,suspend)

  • @挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态

应该在外存(磁盘)的什么位置保存被换出的进程?

具有对换功能的操作系统中,通常把磁盘空间分为文件区和对换区两部分

  • 文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;
  • 对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式(学过文件管理章节后即可理解)。总之,对换区的I/O速度比文件区的更快。

什么时候应该交换?

交换通常在许多进程运行且内存吃紧时进行;系统负荷降低就暂停。

例如:在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程;如果缺页率明显下降,就可以暂停换出

应该换出哪些进程?

可优先换出阻塞进程;可换出优先级低的进程

  • 引出问题-为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间…
  • PCB 会常驻内存,不会被换出外存

知识回顾与重要考点

3.1_4_连续分配管理方式

连续分配:指为用户进程分配的必须是一个连续的内存空间。

单一连续分配

内存被分为系统区和用户区。 系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。

内存中只能有一道用户程序,用户程序独占整个用户区空间。

**优点:**实现简单;无外部碎片;可以采用覆盖技术扩充内存;不一定需要采取内存保护(eg:早期的 PC 操作系统 MS-DOS)。

缺点:只能用于单用户、单任务的操作系统中;有内部碎片;存储器利用率极低。

//@内部碎片的含义 分配给某进程的内存区域中,没有被用上的内存空间。

如下图分配

固定分区分配

历程 20世纪60年代出现了支持多道程序的系统,为了能在内存中装入多道程序,且这些程序之间又不会相互干扰, 于是将整个用户空间划分为若干个固定大小的分区,在每个分区中只装入一道作业,这样就形成了最早的、最简单的一种可运行多道程序的内存管理方式。

固定分区分配又分为

二者的优劣

分区大小相等:

缺乏灵活性(可能会出现一个小的进程占用了一个大的分区,导致部分内存没有被使用)

但是很适合用于用一台计算机控制多个相同对象的场合(比如:钢铁厂有n个相同的炼钢炉,就可把内存分为n个大小相等的区域存放n个炼钢炉控制程序)

分区大小不等:增加了灵活性,可以满足不同大小的进程需求。根据常在系统中运行的作业大小情况进行划分(比如:划分多个小分区、适量中等分区、少量大分区)

操作系统如何记录内存使用情况

操作系统需要建立一个数据结构——分区说明表,来实现各个分区的分配与回收。

每个表项对应一个分区,通常按分区大小排列。

每个表项包括对应分区的大小、起始地址、状态(是否已分配)。

下图是内存分区表 用数据结构的数组(或链表)即可表示这个表

内存固定分配 机制

当某用户程序要装入内存时,由操作系统内核程序根据用户程序大小检索该表, 从中找到一个能满足大小的、未分配的分区,将之分配给该程序,然后修改状态为“已分配”。

**优点:**实现简单,无外部碎片。

缺点:a. 当用户程序太大时,可能所有的分区都不能满足需求,此时不得不采用覆盖技术来解决,但这又会降低性能;b. 会产生内部碎片,内存利用率低。

动态分区分配

动态分区分配(可变分区分配)。这种分配方式不会预先划分内存分区,而是在进程装入内存时, 根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的。(eg:假设某计算机内存大小为 64MB,系统区 8MB,用户区共 56 MB…)

操作系统如何记录内存使用情况

**空闲分区表:**每个空闲分区对应 一个表项。表项 中包含分区号、 分区大小、分区 起始地址等信息 进程4 (4MB)

**空闲分区链:**每个分区的起始部分和末尾部分分别设置前向指针和后向指针。起始部分处还可记录分区大小等信息

当很多个空闲分区都能满足需求时, 应该选择哪个分区进行分配?

动态分区分配算法。从空闲分区表(或空闲分区链)中选出最合适的一个分区分配给该作业。

分区的分配与回收操作

回收后,内存分区会合并

知识回顾与重要考点

计算机操作系统 | 3.1_1~3.1_4 内存及内存管理 | 参考自王道考研 | 无知的我费曼笔记(图文排版无水印)相关推荐

  1. <<计算机操作系统(慕课版)>>第十二章参考答案

  2. 算法与数据结构王道天勤_复习计算机专业课是买王道考研好还是天勤笔记好?...

    单就数据结构来说,天勤.(一定要做你要考的学校的真题) 网络操作系统什么的,除数据结构以外我没看到好的备考书.王道天勤啥的题可以做一下,关键还是要结合不同院校的资料具体问题具体分析. 我今年考的,在平 ...

  3. 计算机操作系统笔记(一) 南京大学慕课版

    一.计算机系统概览 计算机系统的组成:硬件子系统和软件子系统 硬件子系统:电,磁,光,机械与原理构成的各种物理部件的有机组合,是系统工作的载体,包含CPU,主存储器,I/O控制系统,外围设备: 软件子 ...

  4. 计算机操作系统中程序的功能是,计算机操作系统的功能和分类研究

    摘 要:计算机操作系统是一种系统的体系,是计算机运行的核心,同时它精确的掌管着计算机软件,资源硬件,精确的管理着计算机的各项工作,组织计算机工作的各个重要的流程.随着时代的发展和科技的日新月异,计算机 ...

  5. 七年级上计算机课教学记录,【备课参考】(川教版)七年级信息技术上册第9课《计算机操作系统》教学设计...

    第九课-计算机操作系统 一.教学内容分析: 本课内容参考四川教育出版社<信息技术>七年级(上)第九课-计算机操作系统,本课内容有:计算机系统的管理者-操作系统,Windows操作系统的发展 ...

  6. 计算机操作系统 内存_计算机内存的类型| 操作系统

    计算机操作系统 内存 什么是记忆? (What is Memory?) The essential component of the computer is its Memory. It is ass ...

  7. 计算机操作系统 - 内存管理

    计算机操作系统 - 内存管理 目录 计算机操作系统 - 内存管理 虚拟内存 分页系统地址映射 页面置换算法 1. 最佳 2. 最近最久未使用 3. 最近未使用 4. 先进先出 5. 第二次机会算法 6 ...

  8. 国防科大计算机考研大纲,2022年国防科技大学F1003计算机操作系统考研大纲及参考书目...

    2022年研究生入学考试自命题科目考试大纲 科目代码:F1003 科目名称:计算机操作系统 一.参考书目 1.<操作系统教程>(第5版),费祥林,高等教育出版社,2014年. 2.< ...

  9. 【操作系统】【C/C++开发】内存管理

    内存管理 操作系统对内存的划分和动态分配,就是内存管理的概念.有效的内存管理在多道程序设计中非常重要,不仅方便用户使用存储器.提高内存利用率,还可以通过虚拟技术从逻辑上扩充存储器.内存管理的功能有: ...

最新文章

  1. Linux内存管理 (26)内存相关工具
  2. Demo学习: CalendarPanel
  3. CSP认证201612-4 压缩编码[C++题解]:区间dp、huffman树、石子合并
  4. 实验——LINUX常用网络测试命令
  5. 关于mobiscroll插件的使用
  6. 【matlab】将matlab中数据输出保存为txt或dat格式
  7. leetcode917
  8. 少走弯路:Mac+python+opencv
  9. java spark读写hdfs文件,Spark1.4从HDFS读取文件运行Java语言WordCounts
  10. iptables -F 后断开连接
  11. V831学习日记之串口通信
  12. android删除通知栏图标,Android开发系列---UI篇---添加和消除通知栏图标
  13. FreeSWITCH的传真发送
  14. 首批5G手机概念热炒,但你真的敢用?
  15. 服务器信息怎么备份,DNS服务器信息备份与还原教程
  16. 炉石传说 古墓惊魂 灾祸领主 英雄技能
  17. 10招有效预防电脑辐射
  18. MSRA显著性检测数据集
  19. JQuery插件——progressbar进度条
  20. \t\tsizeof(char*)几个字节?

热门文章

  1. 创业 股份比例与合伙人
  2. 利用GPU训练的配置方法(Keras)
  3. html间隔大的虚线,html如何增加虚线边框之间的间距_html_开发99编程知识库
  4. 吐槽一下网上那些售房信息
  5. 2021年起重机械指挥考试内容及起重机械指挥模拟考试系统
  6. java中级面试题及答案,java线程安全面试题
  7. Linux缓存之TLB
  8. 华为的操作系统鸿蒙多久出来,华为OS操作系统“鸿蒙”什么时候上市?华为OS操作系统有什么用处?...
  9. mupdf添加图片水印_如何在图片上加上水印
  10. Android:手机关闭相机拍照声音