操作系统第三章 内存管理概念(上)

1. 内存的基础知识

1.1 什么是内存,有什么作用

1> 存储单元,内存地址的概念和联系

2> 按字节编址 VS 按字编址

1.2 进程运行的基本原理

1.2.1 指令的工作原理

操作码 + 若干参数

1.2.2 逻辑地址(相对地址) VS 物理地址(绝对地址)

1.2.3 从写程序到程序运行

1> 编译源代码文件

2> 编译 由源代码文件生成目标模块(高级语言->机器语言)

3> 链接 由目标模块生成装入模块,连接后形成完整的逻辑地址

4> 装入 把装入模块装入内存,装入后形成物理地址

1.2.4 三种链接方式

1> 静态链接 装入前链接成一个完整装入模块

2> 装入时动态链接 运行前边装入边链接

3> 运行时动态链接 运行时需要目标模块才装入并连接

1.2.5 三种装入方式

1> 绝对装入 编译时产生绝对地址

2> 可重定位装入(静态重定位) 装入时将逻辑地址转化为物理地址

4> 动态运行时装入(动态重定位) 运行时把逻辑地址->物理地址,需设置重定位寄存器

总:

2. 内存管理的概念

2.1 内存空间的分配和回收

2.2 内存空间的扩充(实现虚拟性)

2.3 地址转换

2.3.1 操作系统负责实现逻辑地址到物理地址的转换

2.3.2 三种方式

1> 绝对装入: 编译器负责地址转换(单道程序阶段,无OS)

2> 可重定位装入: 装入程序负责地址转换(早期多批处理阶段)

3> 动态运行时装入: 运行时才进行地址转换(现代)

2.4 存储保护

2.4.1 保证个进程在自己的内存空间运行,不会越界访问

2.4.2 俩种方式

1> 设置上下寄存器

2> 利用重定位寄存器,接地址寄存器进行判断

总:

3. 进程的内存映像

4. 覆盖与交换

4.1 覆盖技术

4.1.1 一个固定区

1> 存放最活跃的程序段

2> 固定区中程序段在运行过程中不会调入调出

4.1.2 若干覆盖区

1> 不可能同时被访问程序断共享一个覆盖区

2> 覆盖区中的程序段在运行过程中会根据需要调入调出

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

4.1.4 缺点: 对用户不透明,增加了用户的编程负担

4.2 交换技术

1> 内存紧张时,换出某些进程以腾出内存空间,再换入某些进程

2> 磁盘分为文件区和对换区,换出的进程放在对换区

4.3 覆盖与交换的区别

1> 覆盖是在同一个程序或进程中的

2> 交换时在不同进程(或作业)之间的

总:

5. 连续分配管理方法

5.1 单一连续分配

1> 只支持单道程序,内存分为系统区和用户区,用户程序放在用户区

2> 无外部碎片,有内部碎片

5.2 固定分区分配

1> 支持多道程序,内存用户空间分为若干个固定大小的分区,每个分区只能装一道作业

2> 无外部碎片,有内部碎片

3> 俩种方式: 分区大小相等,分区大小不等

5.3 动态分区分配

1> 支持多道程序,在进程装入内存时,根据进程的大小动态地建立分区

2> 无内部碎片,有外部碎片

3> 外部碎片可以用紧凑技术来解决

4> 回收分区时的四种情况(总之就是相邻的空间分区要合并)

总:

6. 动态分区分配算法

6.1 首次适应算法(First Fit)

6.2 最佳适应算法(Best Fit)

6.3 最坏适应算法(Worst Fit)

6.4 临近适应算法( Next Fit)

总:

相关推荐
杨杨杨大侠6 小时前
都能接模型、RAG 和 MCP,Java Agent 框架到底差在哪?
java
大哥您好6 小时前
QEMU 11.1.2 多架构编译指南(x86_64 / aarch64 / riscv64)
linux·服务器
Autumn_ing6 小时前
Design.md生成UI怎么验收?举例运营后台的颜色、状态和数据核对
前端·ui·ai·设计系统·paico·ai生成ui·design.md
keyipatience7 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
Thinker QAQ7 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
朱涛的自习室8 小时前
我给 Gemini 4 和 DeepSeek 搞了套「末位淘汰」,AI 干活会更猛吗?(Day 3)
android·前端·后端
Gauss松鼠会8 小时前
高斯数据库(openGauss)的物理存储结构
运维·服务器·数据库·sql·opengauss·经验总结
Android系统攻城狮8 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_prepare_read调用流程与实战(七十四)
linux·运维·服务器·gstreamer音视频·音视频进阶
杨云龙UP8 小时前
PostgreSQL 18.4 数据库整库迁移实战:pg_dump 备份与 pg_restore 恢复完整操作手册
运维·服务器·数据库·postgresql·pg_dump·pg_restore
霸道流氓气质9 小时前
RAG 可观测性与生产监控实战:四层遥测模型、五大仪表盘与 OpenTelemetry 全链路追踪的 Java 生产级实现
java·人工智能·python