Java技术八股学习Day25

操作系统(二)

内存管理

(1)内存管理核心职责

内存管理是操作系统的核心功能,主要负责内存分配与回收(通过 malloc 申请、free 释放)、地址转换(虚拟地址转物理地址)、内存扩充(借助虚拟内存逻辑扩容)、内存映射(文件直接映射到进程空间)、内存优化(调整分配与回收策略)、内存安全(隔离进程内存访问),确保内存资源高效、安全使用。

(2)内存碎片
  • 内部碎片:分配给进程的内存大于实际需求,未使用的部分(如分配 128 字节给仅需 65 字节的进程,剩余 63 字节),常见于固定大小分配机制。
  • 外部碎片:未分配的连续内存过小,无法满足任何进程的内存需求,常见于分段机制,会降低内存利用率。
(3)内存管理方式
① 连续内存管理

为进程分配连续的内存空间,代表算法为伙伴系统(Linux 采用),将内存按 2 的幂次划分,分配时切分合适大小的块,释放时合并相邻块,可解决外部碎片,但存在内部碎片(分配大小需为 2 的幂次)。

② 非连续内存管理

允许进程内存离散分布,灵活性更高,分为三种方式:

  • 段式管理:按逻辑意义(如代码段、数据段)划分大小不等的段,通过段表映射虚拟地址与物理地址,易产生外部碎片。
  • 页式管理:将物理内存和虚拟地址空间划分为等长的页(如 4KB),通过页表映射,无外部碎片,仅可能有少量内部碎片,是现代操作系统主流方式。
  • 段页式管理:结合段式与页式,先分段再分页,兼顾逻辑划分与内存利用率,但地址转换流程更复杂。

虚拟内存

(1)定义与核心作用

虚拟内存是逻辑存在的内存空间,并非真实物理内存,核心作用包括:隔离进程(进程拥有独立虚拟地址空间,互不干扰)、提升物理内存利用率(仅加载进程当前所需数据)、简化内存管理(程序员无需直接操作物理内存)、支持内存共享(动态库仅加载一份)、提高安全性(控制物理内存访问权限)、提供超大可用内存(物理内存不足时借用磁盘空间)。

(2)关键概念
  • 虚拟地址:程序中使用的地址(如指针值),需转换为物理地址才能访问内存。
  • 物理地址:物理内存的真实地址,存储在内存地址寄存器中。
  • 地址转换:通过 CPU 中的 MMU(内存管理单元)将虚拟地址转为物理地址,核心机制为分段、分页、段页式。
  • 虚拟地址空间:单个进程独占的虚拟地址集合;物理地址空间:物理内存的地址范围。
(3)地址转换机制
① 分段机制

虚拟地址由 "段号 + 段内偏移" 组成,通过段表映射段的物理起始地址,起始地址 + 段内偏移即为物理地址。段表存储段长、段类型等信息,易产生外部碎片。

② 分页机制

虚拟地址由 "页号 + 页内偏移" 组成,通过页表映射物理页号,物理页起始地址 + 页内偏移即为物理地址。为解决单级页表占用空间大的问题,引入多级页表(32 位系统二级、64 位系统四级),按需加载页表项,节省空间(时间换空间)。

③ TLB(转址旁路缓存)

为提高地址转换速度,MMU 内置高速缓存,存储虚拟页号与物理页号的映射关系。查询时优先访问 TLB,命中则直接获取物理页号,未命中则查询页表并更新 TLB,减少主存访问次数。

(4)换页机制与页缺失
  • 换页机制:物理内存不足时,将部分物理页数据写入磁盘,需用时再读回物理内存,实现内存扩容,本质是时间换空间。
  • 页缺失:程序访问的虚拟页未加载到物理内存或未建立映射,分为硬性页缺失(物理内存无对应页,需从磁盘读取)、软性页缺失(物理内存有页但未映射,建立映射即可)、无效页缺失(访问无效物理内存,触发错误)。
(5)页面置换算法

当物理内存无空闲页时,选择淘汰页的规则,核心目标是减少页缺失次数:

  • OPT(最佳置换):淘汰未来最长时间不使用的页,理论最优但无法实现(无法预知未来访问)。
  • FIFO(先进先出):淘汰最先进入内存的页,简单易实现,但存在 Belady 现象(内存页数增加但缺页率上升),性能较差。
  • LRU(最近最久未使用):淘汰最近最久未访问的页,接近 OPT 性能,实际应用广泛(如 InnoDB 改进版 LRU)。
  • LFU(最少使用):淘汰一段时间内访问次数最少的页,与 LRU 类似但侧重访问频率。
  • Clock(时钟算法):淘汰最近未使用的页,是 LRU 的简化版,实现高效。

局部性原理

程序执行时的内存访问特性,是虚拟内存、缓存等技术的基础:

  • 时间局部性:同一数据或指令在一段时间内被反复访问(如循环代码)。
  • 空间局部性:访问某数据时,其相邻数据也大概率被访问(如数组遍历)。
  • 应用:分页机制中通过缓存(TLB、页缓存)利用时间局部性,通过预取技术利用空间局部性,提升内存访问效率。

文件系统

(1)文件系统核心职责

负责管理存储设备上的文件与目录,核心功能包括存储管理(文件数据存储与空间分配)、文件管理(创建、删除、移动、加密等)、目录管理(创建、删除、重命名等)、访问控制(管理用户对文件的访问权限,保证安全性)。

(2)硬链接与软链接的区别
对比维度 硬链接 软链接(符号链接)
inode 节点号 与源文件相同 与源文件不同
本质 源文件的平等副本,共享数据 指向源文件路径的快捷方式
源文件删除影响 无影响(需删除所有硬链接才彻底删除文件) 软链接失效(指向无效路径)
适用对象 仅文件,不可跨文件系统 文件和目录,可跨文件系统
创建命令 ln 源文件 链接文件 ln -s 源文件 链接文件
(3)提升文件系统性能的方式
  • 硬件优化:使用 SSD、NVMe 替代机械硬盘,采用 RAID 技术提升磁盘性能。
  • 文件系统选型:根据场景选择合适的文件系统(如 ext4、XFS)。
  • 缓存机制:利用缓存减少磁盘访问次数,提高缓存命中率。
  • 避免磁盘满载:预留一定剩余空间,减少文件碎片。
  • 合理分区:按用途分区,减少文件碎片,提升读写效率。
(4)常见磁盘调度算法

磁盘调度算法用于优化磁盘访问顺序,减少寻道时间和延迟时间:

  • FCFS(先来先服务):按请求顺序处理,简单但平均寻道时间长,易出现饥饿。
  • SSTF(最短寻道时间优先):优先处理距离当前磁头最近的请求,缩短寻道时间,但易饥饿。
  • SCAN(电梯算法):磁头沿一个方向扫描,处理途经请求,到达边界后反向,无饥饿。
  • C-SCAN(循环扫描):仅沿一个方向扫描,到达边界后返回起点循环,优化 SCAN 的无用移动。
  • LOOK:SCAN 改进版,无请求时立即反向,减少无用移动。
  • C-LOOK:C-SCAN 改进版,无请求时返回最近有请求的位置,进一步优化。
相关推荐
a努力。2 小时前
国家电网Java面试被问:分布式Top K问题的解决方案
java·开发语言·分布式·oracle·面试·职场和发展·kafka
码农水水2 小时前
浅谈 MySQL InnoDB 的内存组件
java·开发语言·数据库·后端·mysql·面试
shjita2 小时前
mapreduce输出乱码的处理
java·开发语言·数据库
是垚不是土2 小时前
基于OpenTelemetry实现分布式链路追踪
java·运维·分布式·目标跟踪·系统架构
组合缺一2 小时前
Solon AI Remote Skills:开启分布式技能的“感知”时代
java·人工智能·分布式·agent·langgraph·mcp
qq_192779872 小时前
将Python Web应用部署到服务器(Docker + Nginx)
jvm·数据库·python
weixin_436525072 小时前
若依多租户版 - modules中创建子模块
java·服务器·前端
LaoZhangGong1232 小时前
学习TCP/IP的第7步:设计TCPIP程序要注意的事项
网络协议·学习·tcp/ip·以太网
刃神太酷啦2 小时前
Linux 基础 IO 收官:库的构建与使用、进程地址空间及核心知识点全解----《Hello Linux!》(11)
java·linux·c语言·数据库·c++·算法·php