美文网首页
操作系统梳理(二)内存

操作系统梳理(二)内存

作者: 链人成长chainerup | 来源:发表于2019-10-12 11:17 被阅读0次

本文将总结最近梳理的一些操作系统的知识,方便后续面试。其实随便找一本操作系统的课本,都会包含操作系统的几大模块,但这篇文章更像是我自己按照面试的常考题目要求,梳理、归纳、总结的,力求简单、直白、易于理解。其中会保留网上那些有利于理解的链接,方便自己后续复习。如果写到重要知识点处,我也可能会画一些图辅助理解。 本文是第二篇 《内存》

目录:

内存.png

下面开始整理:

1 从内存角度看实模式与保护模式、物理地址与逻辑地址

A 网络知识整理

实模式:就是直接操作实际的物理内存地址。在实模式下,程序运行是需要从内存中分配出足够多的连续的内存,然后把整个程序装载进去。
这样会带来如下问题:

  • 地址空间不隔离, 直接操作物理地址,可能发生程序A直接操作程序B物理内存的情况。
  • 程序运行时候的地址不确定:因为我们程序每次要运行的时候,都是需要装载到内存中的,假设你在程序中写死了要操作某个地址的内存,例如你要地址A。但是问题来了,你能够保证你操作的地址A真的就是你原来想操作的那个位置吗?很可能程序第一次装载进内存的位置是A,而程序第二次运行的时候,这个程序装载进内存的位置变成了B,而你操作的A地址压根就不是属于这个程序所占有的内存。
  • 内存使用率低下: 程序要运行,需要得到一个完整的物理内存,有可能当前计算机中没有对应的连续内存地址,即使分隔成多段的不连续内存总和满足大小也不行,那么就不能执行,或者需要将某些程序换出。

保护模式:则从程序的角度,分配一块虚拟的地址,这些虚拟的地址会映射到具体的物理地址上,这样每个程序,都会有自己的虚拟内存范围,就具有很好地隔离性了。我们后面讲的分段、分页、段页式 都是基于保护模式来讲的。

B 参考自

怎样通俗的理解操作系统中内存管理分页和分段? - Oo鮭鮭魚的回答 - 知乎
https://www.zhihu.com/question/50796850/answer/522734117

2 保护模式下的分段、分页、段页式

A 网络知识整理

分段:

这是为了满足用户要求而形成的一种储存管理方式。它把用户程序的地址空间分为若干个大小不同的段,每段可定义一组相对完整的信息。在储存器分配时,以段为单位,这些段在内存中可以不相邻接,所以也同样实现了离散分配。

分页:

在该方式中,将用户程序地址空间分为若干固定大小的区域,称为“页”或“页面”。典型的页面大小为1KB。相应的,也将内存空间分为若干个物理块或页框(frame),页和块的大小相同。这样可将用户程序的任一页放入任一物理块中,实现了离散分配。

分页与分段的比较:

  • 对程序员透明:分页透明,但是分段需要程序员显式划分每个段。
  • 地址空间的维度:分页是一维地址空间,分段是二维的
  • 大小是否可以改变:页的大小不可变,段的大小可以动态改变
  • 出现的原因:分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护

段页式:

这是分页和分段两种储存管理方式相结合的产物。程序的地址空间划分为多个拥有独立地址空间的段,每个段上的地址空间划分为大小相同的页。这样既拥有分段系统的共享保护,又拥有分页系统的虚拟内存功能。它兼具两者的优点,是目前应用较为广泛的一种储存管理方式。

B 参考自

https://www.jianshu.com/p/a805e2410fbe

3 内存连续分配的算法

A 网络内容整理
  • 首次适应(First Fit)算法:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
  • 最佳适应(Best Fit)算法:空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。
  • 最坏适应(Worst Fit)算法:又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑选出最大的分区。
B 参考自

https://juejin.im/entry/592257b62f301e006b183b95

4 内存置换算法

A 网络内容整理

为什么要地址转换

进程载入到真实内存才可以运行,而进程代码使用的是逻辑地址,所以牵扯到一个地址转换的问题

为什么要内存置换

假设某一时刻某个程序的内存页帧已经被写满了,但这时又需要将一个页写到物理内存中,就需要将原本在物理内存中的某一页换出来。如果置换不当,就会导致刚刚被换出到硬盘的页又要被写回内存,减慢系统运行的速度。页面置换算法就是考虑将哪一页换出来以获得优良性能的方法

内存置换算法

  • FIFO : FIFO算法的思想很简单,就是置换出当前已经待在内存里时间最长的那个页
  • LRU(Least Recent Used, 最近最少使用)算法: 由于当前时间之后需要用到哪些页无法提前获知,于是记录当前时间之前页面的使用情况,认为之前使用过的页面以后还会被用到。在置换时,将最近使用最少的页面换出内存。此种方法的开销比较大。
  • Clock算法(时钟轮转法): 为了节约Second Chance算法一个接着一个检查使用位的开销,时钟轮转法又提出了改进。时钟轮转法将所有的页组成一个圆,圆心的指针指向下一个要被置换的页面,置换前同样检查使用位,如果使用位为1,同样将其使用位置为0,随后将顺指针旋转,检查下一个页面,直到发现某页的使用位为0,将此页置换出内存。很容易理解此算法为什么叫“时钟”轮转法。
B 参考自

https://www.cnblogs.com/yongheng20/p/4967213.html

5 虚拟内存

A 网络内容整理

如果存在一个程序,所需内存空间超过了计算机可以提供的实际内存,那么由于该程序无法装入内存所以也就无法运行。单纯的增加物理内存只能解决一部分问题,但是仍然会出现无法装入单个或者无法同时装入多个程序的问题。但是可以从逻辑的角度扩充内存容量,即可解决上述两种问题。

基于局部性原理,在程序装入时,可以将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。另一方面,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息。这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。

** 虚拟存储器的特征:**

  • 多次性:一个作业可以分多次被调入内存。多次性是虚拟存储特有的属性
  • 对换性:作业运行过程中存在换进换出的过程(换出暂时不用的数据换入需要的数据)
  • 虚拟性:虚拟性体现在其从逻辑上扩充了内存的容量(可以运行实际内存需求比物理内存大的应用程序)。虚拟性是虚拟存储器的最重要特征也是其最终目标。虚拟性建立在多次性和对换性的基础上行,多次性和对换性又建立在离散分配的基础上
B 参考自

https://juejin.im/entry/592257b62f301e006b183b95

6 内存对齐的规则和作用

A 网络内容整理

内存对齐的主要作用是:

1、 平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
2、 性能原因:经过内存对齐后,CPU的内存访问速度大大提升。

** 内存对齐的规则:**

1、 对于结构的各个成员,第一个成员位于偏移为0的位置,以后每个数据成员的偏移量必须是min(#pragma pack()指定的数,这个数据成员的自身长度) 的倍数。
2、 在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。

B 参考自

http://www.cppblog.com/snailcong/archive/2009/03/16/76705.html

相关文章

  • 操作系统梳理(二)内存

    本文将总结最近梳理的一些操作系统的知识,方便后续面试。其实随便找一本操作系统的课本,都会包含操作系统的几大模块,但...

  • iOS开发 内存管理

    一、内存五大区 二、内存管理方案 iOS操作系统是针对不同场景,会提供不同的内存管理方案, TaggedPoint...

  • 二、Flutter 内存机制梳理

    闲鱼技术团队一直在探索如何使用Flutter来统一移动App开发。移动设备上的资源有限,内存使用成了日常开发中的常...

  • #看这篇就够了--启动优化之二进制重排:理论及实践(附源码)

    在做二进制重排之前,首先需要了解到几个知识点.例如:物理内存,虚拟内存,内存分页管理 等 物理内存 早期的操作系统...

  • 内存

    操作系统对内存管理哪些内容: 1. 操作系统负责内存空间的分配和回收 2. 操作系统需要提供某种技术从逻辑上内内存...

  • 内存与性能

    申请与释放内存 申请内存的过程 用户态使用malloc向操作系统申请内存 操作系统查找页面是否有空闲内存,如果有则...

  • 【操作系统】3.1 内存管理基础

    1.内存管理的介绍 问题:操作系统的内存管理主要是做什么? 操作系统的内存管理主要负责①内存的分配与回收(mall...

  • 内存管理——分页、分段

    参考 怎样通俗的理解操作系统中内存管理分页和分段?计算机操作系统 - 内存管理

  • linux操作系统基础知识有哪些

    内容来源(公众号:PHP版WEB项目)linux操作系统基础知识:1、操作系统区分物理内存和虚拟内存;2、了解内存...

  • 内存

    操作系统的物理内存: —— 常说的 “内存条”数据从磁盘中加载到内存后,才能被CPU访问。【操作系统的代码和数据...

网友评论

      本文标题:操作系统梳理(二)内存

      本文链接:https://www.haomeiwen.com/subject/hylfmctx.html