【操作系统学习笔记】(五)内存管理(2)关于分页系统的设计与实现

简介: 本文是个人学习《现代操作系统》的笔记。
本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。

本文是个人学习《现代操作系统》的笔记。

分页系统中的设计

局部分配与全局分配策略

  • 问题背景:如何在相互竞争的可运行进程之间分配内存。
  • 管理内存动态分配的一种方法:PFF(page fault frequency)

注:它指出了分配的 时机 ,控制了分配集的大小,但不会具体指出要替换哪一个

  • 局部全局、各种具体算法的划分不是从同一个维度考虑的。有的算法可同时支持全局和局部,如FIFO和LRU;有的算法只有局部才有意义,如工作集和WSClock算法。

负载控制

  • 两级调度思想:一些进程被放入磁盘期间,用一个短期调度程序调度剩余进程。

关于页面大小的选择

page大小是操作系统的可选参数。

在内存中有n个段,页面大小为p字节时,会有np/2字节的内部碎片。

共享page

多个进程通过共享程序页表来共享同一个程序。

共享库(windows中称作DLL(动态链接库))

优点:

  • 使可执行文件更小
  • 节省内存空间
  • 如果共享库中的一个函数因为修正bug被更新了,不需要重新编译

缺点:
由于多个进程共用,装载时进行重定位行不通。

解决方案:

  • 写时复制(和使用共享库的目的相悖)
  • 变异共享库时,增加一个特殊编译选项,让编译器不要产生绝对地址的指令。

共享库实质

内存映射文件

清除策略

双指针策略:前指针由分页守护进程控制,后指针用于页面置换。

分页守护进程

  • 定义:大多数时候睡眠、定期被唤醒以检查内存状态的后台进程。
  • 工作原理:通过预定的页面置换算法换出内存,以保证有足够多的空闲页框。

实现虚拟内存系统的注意事项

分页

  • 新进程创建时,操作系统要确定程序和数据初始时有多大,并为它们创建一个页表。
  • 进程被换出时,页表不需要在内存中;进程运行时,它必须在。
  • 缺页中断发生时,操作系统必须通过硬件寄存器以确定是哪个虚拟地址造成了缺页中断。
  • 进程退出时,操作系统必须释放进程的页表、页面和硬盘占用空间。

缺页中断处理的过程

  • 硬件陷入内核
  • 启动汇编代码例程暂存信息(栈思想)(该例程将操作系统作为函数调用)
  • 发生缺页中断时,尝试确定需要哪个虚拟页面,并检查该地址是否有效,存取与保护是否一致。

    • if不一致,向进程发出一个信号或kill掉该进程;
    • else if 无空闲页框,执行置换页面算法淘汰掉一个页面腾出页框。
    • else if 所选页框脏了,将该页写回磁盘,并发生一次上下文切换,期间挂起该进程,先运行其他进程。
    • else 通过磁盘操作将其装入

之后可理解为对上述操作的出栈过程。

指令备份

  • 背景:为什么需要备份?

当程序访问不在内存中的页面时,引起缺页中断的指令会半途停止并trap,取出页面后需重新启动引起trap的命令。

  • 实现

CPU设计上,通过使用一个隐藏的内容寄存器,在每条指令执行之前,把程序计数器内容复制到该寄存器。

虚拟内存与I/O间的关系

在等待I/O完成时,某进程被挂起,另一个进程运行,这期间产生一个缺页中断。

磁盘管理-当页面被换出时会放在磁盘的哪个位置

  • 静态备份:在磁盘上设置特殊的交换分区,甚至从文件系统划分一块独立磁盘。

    • 注意:为了避免溢出,最好为context data stack都保留交换区,并且允许其实际多于一个快
  • 动态备份:页面换出时才分配磁盘空间。
    特点:每个进程都必须有一张表,用于记录每个页面相应的磁盘地址

分段

segment,这和初学汇编时的段思想一致

  • page是定长的,segment不是
  • segment是一个逻辑实体,但一般不会同时包含多种不同类型的内容。
相关文章
|
8月前
|
关系型数据库 虚拟化 UED
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
354 7
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
|
4月前
|
JSON iOS开发 数据格式
最新研发flutter3.32+window_manager客户端OS管理系统
原创Flutter3.32+Dart3.8+Getx+Window_Manager实战桌面客户端os系统解决方案。支持macOS和windows两种主题风格、自定义桌面栅格布局。
371 50
|
运维 安全 Devops
Cisco NX-OS ACI 16.1(4h)F 发布 - 适用于 ACI 模式下的 Cisco Nexus 9000 系列交换机系统软件
Cisco NX-OS ACI 16.1(4h)F 发布 - 适用于 ACI 模式下的 Cisco Nexus 9000 系列交换机系统软件
104 0
|
4月前
|
缓存 监控 Linux
CentOS系统如何查看当前内存容量。
以上方法都不需要特殊软件或者复杂配置即可执行,在CentOS或其他Linux发行版中都适合运行,并且它们各自透露出不同角度对待问题解答方式:从简单快速到深入详尽;从用户态到核心态;从操作层数到硬件层数;满足不同用户需求与偏好。
364 8
|
5月前
|
存储 缓存 监控
手动清除Ubuntu系统中的内存缓存的步骤
此外,只有系统管理员或具有适当权限的用户才能执行这些命令,因为这涉及到系统级的操作。普通用户尝试执行这些操作会因权限不足而失败。
1018 22
|
6月前
|
Cloud Native 安全 Linux
龙蜥操作系统:CentOS 谢幕之后,国产云原生系统的崛起之路
龙蜥操作系统(Anolis OS)是 CentOS 停止维护后,由阿里云等企业联合发起的开源项目。它以双内核架构和全栈优化为核心,提供无缝替代 CentOS 的方案,兼容主流生态并针对云计算场景深度优化。其技术亮点包括 RHCK 和 ANCK 双内核、性能优化、全栈安全及国密算法支持。龙蜥适用于云原生基础设施、企业级应用部署及开发环境,社区已吸引 200 多家单位参与。未来规划涵盖 AI 框架优化、RISC-V 架构适配及桌面环境构建,正重新定义云时代的操作系统边界。
1560 0
|
9月前
|
监控 Linux Python
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
330 27
|
9月前
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
697 30
|
9月前
|
弹性计算 运维 监控
操作系统控制台-健康守护我们的系统
阿里云操作系统控制平台作为新一代云端服务器中枢平台,通过创新交互模式重构主机管理体验。用户可通过API、SDK、CLI等方式进行系统管理,采用图形化控制替代传统命令行操作,集智能运维、集群协调、生态扩展于一体,显著提升企业级IT设施管理效能。通过此平台,用户可以轻松实现运维监控、智能助手、扩展插件管理及订阅服务等功能,大幅降低运维复杂度,提高管理效率。
258 11
|
5月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
1945 0

推荐镜像

更多