[每天五分钟,备战架构师-3]操作系统基本原理之存储管理

每天五分钟,轻松备考系统架构师

存储管理

存储器是计算机系统中最重要的资源之一,任何程序和数据及各种控制用的数据结构都必须占有一定的存储空间,因此,存储管理直接影响系统性能。

存储器由内存和外存组成。存储管理主要是指对内存的管理,目的是尽量提高内存的使用效率。

1.1 内存

内存是系统实际提供的存储单元组成的一个连续地址空间,处理器可以直接存取。其访问速度快,价格较高。

1.2 外存

外存包括软盘、硬盘、光盘、磁带等,处理器不能直接访问。其访问速度慢,价格较便宜。

存储管理的功能

开始之前需要首先明确两个概念:物理地址空间 和 逻辑地址空间。一般来说,用户程序使用的是逻辑地址空间,逻辑地址空间是相对地址。物理地址是内存中各存储单元的编号,是真实的地址。

2.1 内存分配与回收

1. 单一连续区管理,单一连续分配

这种分配方式的运用场景是:一个用户独占连续的内存用户去,只能用于单用户、单任务的操作系统中。这时的内存区包含系统区和用户区,可以要求对系统区进行保护(给一个基址,只能使用基址后面的内存空间,0到基址范围都归系统),也可不对系统进行保护。

连续分配会造成内存碎片问题,空闲内存不能被利用,包括内部碎片和外部碎片。外部碎片,在分配单元间的未使用内存,内部碎片,在分配单元中的未使用内存。

2. 分区存储管理

分区管理的思想是将内存划分为若干个连续区域,每个分区装入一个作业运行。

2.1 固定分区管理

把内存固定的划分为若干个大小不等的区域。(系统对内存的管理和控制通过分区说明表进行,分区说明表说明各分区号,分区大小,起始地址和是否空闲(分区状态)。内存的分配释放,保护,地址变换都是通过分区说明表进行)

2.2 可变分区管理

在作业执行前不建立分区,分区的建立是建立在作业的处理过程中进行的,大小随着作业或进程对内存的要求而改变的。动态分区除了分区说明表还把内存中的可以分区单独构成可用分区表或可以分区自由链。

2.3 分配算法

2.3.1 首次适配

从0地址往后查找和使用第一个可用空闲快(要比需要的空间大)。基本实现机制要求把空闲的内存块按地址排序。回收要考虑能否合并内存块。 优点:简单,易于产生更大的空闲快,向着地址空间的结尾 劣势:易产生外部碎片(随着动态分配加剧),不确定性

2.3.2 最优适配

找比需求大但最接近需求的空闲内存块,产生尽可能小的内存碎片。原理是为了避免分配大空闲块,最小化外部碎片,要求对空闲地址快按尺寸size排序,回收要合并。 优点:当大部分分配需要小空间时使用,简单。 缺点:外部碎片太小太细,不利于后续重分配。

2.3.3 最差匹配

使用最大的空闲快,大块拆分变小块,可以避免产生太多微小的碎片,也要排序,回收合并。 优点:分配中大型SIZE时实用。 缺点:重分配慢,对大块的请求可能没得用了。

3. 页式存储管理

连续内存分配有碎片的缺点,对应非连续的优点:更好的内存利用和管理,允许共享代码和数据(共享库。。),支持动态加载和动态链接。最大的问题在于管理的开销。在虚拟地址和物理地址之间的转换,如果用软件来实现,开销巨大。因此要考虑用硬件来协同解决。

页面,进程逻辑地址空间分成大小相等的区,每个区称为页面或页。 页框,又称页帧。内存物理地址空间分成大小相等的区,其大小和页面大小相等,每个区就是一个页框。 逻辑地址,分页存储器的逻辑地址由页号和页内偏移两部分组成。

页面调度算法有最优算法、随机算法、先进先出算法、最近最少使用算法。

4. 段式存储管理

分段管理就是将一个程序按照逻辑单元分成多个程序段,每一个段使用自己单独的虚拟地址空间。

优点: 4.1每个逻辑单元可单独占用一个虚拟地址空间,这样使得编写程序的空间大为增长。 4.2由于段式按逻辑关系划分,因此共享起来十分方便。 4.3对于空间稀疏的程序来说,分段管理将节省大量的空间。 缺点: 4.1外部碎片和一个段必须全部加载到内存。

分段和分页的比较:

  1. 分段是信息的逻辑单位,由源程序的逻辑结构及含义所决定,是用户可见的,段长由用户根据需要来确定,段起始地址可以从任何内存地址开始。引入的目的是满足用户模块化程序设计的需要。
  2. 分页是信息的物理单位,与源程序的逻辑无关,是用户不可见的,页长由系统(硬件)决定,页面只能从页大小的整数倍地址开始。引入目的是实现离散分配并提高内存利用率。

5. 段页式存储管理

段页式管理就是将程序分为多个逻辑段,在每个段里面又进行分页,即将分段和分页组合起来使用。这样做的目的就是想同时获得分段和分页的好处,但又避免了单独分段或单独分页的缺陷。

2.2 地址变换(重定位)

操作系统把用户程序指令中的相对地址变换成为所在存储中的绝对地址的过程,实现了从逻辑地址到物理地址的转换。分为静态重定位、动态重定位。

2.3 内存保护

内存分配前,需要保护操作系统不受用户进程的影响,同时保护用户进程不受其他用户进程的影响。通过釆用重定位寄存器和界地址寄存器来实现这种保护。重定位寄存器含最小的物理地址值,界地址寄存器含逻辑地址值。每个逻辑地址值必须小于界地址寄存器;内存管理机构动态地将逻辑地址与界地址寄存器进行比较,如果未发生地址越界,则加上重定位寄存器的值后映射成物理地址,再送交内存单元。每一个逻辑地址都需要与这两个寄存器进行核对,以保证操作系统和其他用户程序及数据不被该进程的运行所影响。

参考资料: 1、操作系统之存储管理

2、计算机操作系统之存储管理

3、操作系统Day1地址空间与地址生成

4、操作系统 笔记(三)

5、操作系统 - 地址重定位

6、操作系统原理总结

7、操作系统核心原理-5.内存管理(下):段式内存管理

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构说

Socket基本-TCP粘包问题

Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架 提供完整的解决方案 优点很多也就不说了, 但是有个缺点必须要求客户端调用采用thr...

751160
来自专栏cs

计算机网络--子网划分+思科CiscroPacket使用

<h1>1.0概念</h1> <p> <p><b>子网划分</b>是通过借用IP地址的若干位主机位来充当子网地址从而将原网络划分为若干子网而实现的...

44290
来自专栏Golang语言社区

转--如何压缩Golang 编译出的可执行文件大小

先给结论:可以减少到原来的29% 最近在写一个TLScat小工具 Github.com/mengzhuo/tlscat 源文件仅仅2KB不到,但是用 go bu...

507100
来自专栏人人都是极客

物理地址和虚拟地址的分布

上一节内容的学习我们知道了CPU是如何访问内存的,CPU拿到内存后就可以向其它人(kernel的其它模块、内核线程、用户空间进程、等等)提供服务,主要包括: 以...

438100
来自专栏H2Cloud

linux epoll 开发指南-【ffrpc源码解析】

摘要 关于epoll的问题很早就像写文章讲讲自己的看法,但是由于ffrpc一直没有完工,所以也就拖下来了。Epoll主要在服务器编程中使用,本文主要探讨服务器程...

42450
来自专栏Danny的专栏

MySQL安装图解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

32730
来自专栏祥子的故事

Tensorflow | win10中安装tensorflow-0.12.1 (0.12.1以后的版本安装均适用)

1.1K70
来自专栏java思维导图

【读书笔记】弄懂服务路由与负载均衡,微服务搞起

1 基本概念 SOA 公共的业务被拆分出来,形成可共用的服务,最大程度地保障代码和逻辑的复用,避免重复建设,这种设计称为SOA。 路由 SOA架构中,服务消费者...

38170
来自专栏nummy

Jupyter notebook 快速入门

在浏览器中输入http://localhost:8888,就出现了notebook的页面。

8020
来自专栏云加头条

智能云上手指南:如何将历史数据迁移到万象优图

6 月 21 日,腾讯云在 2017「云+未来」峰会上推出了战略新品——智能云,宣布将腾讯积累近 20 年的 AI 能力向政府、企业和开发者开放,其中首批开放计...

38730

扫码关注云+社区

领取腾讯云代金券