2020年秋招最新操作系统之存储管理面试知识点集锦(上)

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 2020年秋招最新操作系统之存储管理面试知识点集锦

一、基本概念:地址重定位

1.1 需要了解的内容

  • 程序装载到内存才可以运行
    通常,程序可以执行文件格式保存在磁盘上
  • 多道程序设计模型
  • 允许多个程序同时进入内存
  • 每个进程有自己的地址空间
    一个进程执行时不能访问另一个进程的地址空间
    进程不能执行不合适的操作

1.2 要解决的问题

image.png

说明:

在左边的单处理器系统中,如果一个进程想要运行,那么必须将进程地址空间装载到物理内存中才可以运行。

而右边的是多处理器系统中有多个进程需要进入物理内存执行,这里要解决的问题就是,如何将进程地址空间合理的装载到物理内存中,如何合理的分配使用内存,使得每个进程能正确执行。

1.3 复习:进程地址空间

image.png

1.4 注意

  • 进程中的地址不是最终的物理地址
  • 在进程运行前无法计算出物理地址

这就需要地址重定位来解决这些问题。

二、地址重定位

  • 逻辑地址(相对地址、虚拟地址)
    用户程序经过编译、汇编后形成目标代码,目标代码通常采用相对地址的形式,其首地址为0,其余地址都相对于首地址而编址。
  • 不能用逻辑地址在内存中读取信息。
  • 物理地址(绝对地址、实地址)
    内存中存储单元的地址,可直接寻址

为了保证cpu执行指令时可以正确访问内存单元,需要将用户程序中的逻辑地址转换为运行时可由机器直接寻址的物理地址,这一过程称为地址冲地位。

2.1 静态重定位与动态重定位

  • 静态重定位
    当用户程序加载到内存时,一次性实现逻辑地址到物理地址的转换。
    一般可由软件完成。
  • 动态重定位(重点)
    在进程执行过程中进行地址变换,即逐条指令执行时完成地址转换。
    支持程序浮动
    需要硬件部件支持,较为常用。

2.2 动态重定位实现

image.png

三、物理内存管理

3.1 空闲内存管理

image.png

**说明:**我们对物理内存有不同的划分,一种是等长的划分,一种是不等长的划分。


数据结构

1、位图

对于等长划分这种我们可以使用位图的方式。每个分配单元对应于位图中的一位,0表示空闲,1表示占用(或者相反)。对于不等长的划分可以使用下面两种分配结构。

2、空闲区表、已分配区表

表中每一项记录了空闲区(或已分配区)的起始地址、长度、标志

3、空闲块链表

3.2 内存分配算法

这里我们使用空闲区表、已分配区表为例来说明内存分配算法。

  • 首次适配first fit
    在空闲区表中找到第一个满足进程要求的空闲区
  • 下次适配next fit
    从上次找到的空闲区处接着查找
  • 最佳适配best fit
    查找整个空闲区表,找到能够满足进程要求的最小空闲区
  • 最差适配worst fit
    总是分配满足进程要求的最大空闲区
  • 当找到满足进程需求的空闲区表后,需要将空闲区分为两部分,一部分供进程使用,另一部分形成新的空闲区。

3.3 回收问题

  • 内存回收算法
  • 当某一块归还后,前后空闲空间合并,修改内存空闲区表。
  • 四种情况
    上相邻、下相邻、上下都相邻、上下都不相邻

3.4 伙伴系统(重点)

这是Linux底层内存管理采用的一种方法

  • 一种经典的内存分配方案,是一种特殊的分离适配算法
  • 主要思想:将内存按2的整数次幂进行划分,组成若干空闲块表;查找该链表找到能满足进程需求的最佳匹配块。
  • 算法
  • 首先将整个可用空间看作一块:2^U
  • 假设进程申请的空间大小为s
    如果满足2^(U-1)<s<=2^U,则分配整个块
    否则,将块划分为两个大小相等的伙伴,大小为2^(U-1)
  • 一直划分下去直到产生大于或等于s的最小块。

3.5 伙伴系统例子

image.png

**说明:**从上图中可以看到上面的算法是如何工作的。

四、连续内存管理方案

4.1 单一连续区

特点:一段时间内只有一个进程在内存中,简单、内存利用率低。

这种方案是在早期系统中使用的,有三种不同的布局:

image.png

4.2 固定分区

  • 把内存空间分割成若干个区域,称为分区
  • 每个分区的大小可以相同也可以不同
  • 分区大小固定不变
  • 每个分区装一个且只能一个进程
  • image.png
  • 说明:

不同的进程链分排在不同分区位置。缺点是有的进程链很长,一时得不到分区,但是此时可能有些空闲分区根本没有被使用。

于是还有右边这种排队方案,就是只有一个进程链,然后哪个分区空闲了,排在首位的进程就进入执行。早期手机中就是采用这种方法。

4.3 可变分区

  • 根据进程的需要,把内存空闲空间分割出一个分区,分配给该进程
  • 剩余部分称为新的空闲区
  • 会导致一些问题:导致一些外碎片,这样会导致内存利用率下降。
  • 碎片问题解决
  • 碎片:很小的、不易利用的空闲区,导致内存利用率下降
  • 解决方案:紧缩技术(又称压缩,紧致,搬家技术)
    在内存中移动程序,将所有小的空闲区合并为较大的空闲区
  • 紧缩时要考虑的问题
    系统开销、移动时机

五、离散内存管理方案(重点)

5.1 页式存储管理方案

  • 设计思想
    用户进程地址空间被划分为大小相等的部分,称为页(page),从零开始编号。
    这是逻辑地址空间上的称谓
  • 内存空间按同样大小划分为大小相等的区域,称为页帧(page frame),从零开始编号
  • 内存分配(规则)
    以页为单位进行分配,并按进程需要的页数来分配
    逻辑上相邻的页,物理上不一定相邻。
  • 典型的页面尺寸:4K4M
  • 逻辑地址
  • image.png
  • **说明:**逻辑地址分为页号和页内地址(页内偏移),这种划分是系统自动完成的,对用户是透明的。
  • 内存分配
  • image.png
  • **说明:**可以看到连续的进程地址空间映射到页帧中的物理内存是杂乱的。
  • image.png
  • **说明:**对于逻辑地址空间和物理内存空间的杂乱的映射,如何进行映射呢?这里我们需要使用页表来记录这种映射。
  • 相关数据结构及地址转换
  • 页表由若干页表项(记录了逻辑页号与页框号对应关系)构成
  • 每个进程一个页表,存放在内存
  • 页表起始地址保存在何处?
  • 空闲内存管理

其实我们可以使用位图就可以管理物理内存了

地址转换(硬件支持)

**cpu**取到逻辑地址,自动划分为页号和页内地址;

用页号查页表,得到页框号,再与页内偏移拼接成物理地址。

在这种方案中我们也会遇到碎片问题,这里的碎片是内碎片。比如某个进程需要5页加一条指令,于是这里我们需要分配6页给这个进程。


目录
相关文章
|
14天前
|
SQL 分布式计算 监控
Sqoop数据迁移工具使用与优化技巧:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入解析Sqoop的使用、优化及面试策略。内容涵盖Sqoop基础,包括安装配置、命令行操作、与Hadoop生态集成和连接器配置。讨论数据迁移优化技巧,如数据切分、压缩编码、转换过滤及性能监控。此外,还涉及面试中对Sqoop与其他ETL工具的对比、实际项目挑战及未来发展趋势的讨论。通过代码示例展示了从MySQL到HDFS的数据迁移。本文旨在帮助读者在面试中展现Sqoop技术实力。
27 2
|
14天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
30 2
|
14天前
|
数据采集 消息中间件 监控
Flume数据采集系统设计与配置实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入探讨Apache Flume的数据采集系统设计,涵盖Flume Agent、Source、Channel、Sink的核心概念及其配置实战。通过实例展示了文件日志收集、网络数据接收、命令行实时数据捕获等场景。此外,还讨论了Flume与同类工具的对比、实际项目挑战及解决方案,以及未来发展趋势。提供配置示例帮助理解Flume在数据集成、日志收集中的应用,为面试准备提供扎实的理论与实践支持。
25 1
|
17天前
|
存储 Unix 程序员
面试题:Ctrl + C在不同操作系统下的应用
字节跳动面试题:Ctrl + C在不同操作系统下的应用
35 1
|
2月前
|
存储 关系型数据库 MySQL
2024年Java秋招面试必看的 | MySQL调优面试题
随着系统用户量的不断增加,MySQL 索引的重要性不言而喻,对于后端工程师,只有在了解索引及其优化的规则,并应用于实际工作中后,才能不断的提升系统性能,开发出高性能、高并发和高可用的系统。 今天小编首先会跟大家分享一下MySQL 索引中的各种概念,然后介绍优化索引的若干条规则,最后利用这些规则,针对面试中常考的知识点,做详细的实例分析。
250 0
2024年Java秋招面试必看的 | MySQL调优面试题
|
1月前
|
消息中间件 NoSQL 网络协议
Java面试知识点复习​_kaic
Java面试知识点复习​_kaic
|
5天前
|
数据可视化 Python
Python模型评估与选择:面试必备知识点
【4月更文挑战第17天】本文深入探讨了Python模型评估与选择在面试中的关键点,包括性能度量、过拟合与欠拟合识别、模型比较与选择、模型融合和偏差-方差权衡。强调了避免混淆评估指标、忽视模型验证和盲目追求高复杂度模型的常见错误,并提供相关代码示例,如交叉验证、网格搜索和超参数调优。通过理解这些概念和技巧,可在面试中展示出色的数据科学能力。
31 12
|
14天前
|
机器学习/深度学习 分布式计算 BI
Flink实时流处理框架原理与应用:面试经验与必备知识点解析
【4月更文挑战第9天】本文详尽探讨了Flink实时流处理框架的原理,包括运行时架构、数据流模型、状态管理和容错机制、资源调度与优化以及与外部系统的集成。此外,还介绍了Flink在实时数据管道、分析、数仓与BI、机器学习等领域的应用实践。同时,文章提供了面试经验与常见问题解析,如Flink与其他系统的对比、实际项目挑战及解决方案,并展望了Flink的未来发展趋势。附带Java DataStream API代码样例,为学习和面试准备提供了实用素材。
37 0
|
14天前
|
分布式计算 资源调度 监控
Hadoop生态系统深度剖析:面试经验与必备知识点解析
本文深入探讨了Hadoop生态系统的面试重点,涵盖Hadoop架构、HDFS、YARN和MapReduce。了解Hadoop的主从架构、HDFS的读写流程及高级特性,YARN的资源管理与调度,以及MapReduce编程模型。通过代码示例,如HDFS文件操作和WordCount程序,帮助读者巩固理解。此外,文章强调在面试中应结合个人经验、行业动态和技术进展展示技术实力。
|
17天前
|
缓存 NoSQL 定位技术
深入探索Redis:面试中必须掌握的关键知识点
深入探索Redis:面试中必须掌握的关键知识点