【操作系统学习笔记】(五)内存管理(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是一个逻辑实体,但一般不会同时包含多种不同类型的内容。
相关文章
|
24天前
|
人工智能 Android开发 数据安全/隐私保护
移动应用与系统:探索开发趋势与操作系统的协同进化####
当今时代,移动应用不再仅仅是简单的软件工具,它们已成为扩展智能手机及平板等设备功能的关键。本文旨在深入分析当前移动应用的开发趋势,探讨移动操作系统的最新进展及其对应用开发的影响,并阐述两者如何相互促进、协同进化,共同推动移动互联网技术向前发展。 ####
|
26天前
|
移动开发 人工智能 Android开发
移动应用与系统:探索移动开发与操作系统的协同进化####
当今数字化时代,移动设备已成为日常生活不可或缺的一部分。本文旨在深入探讨移动应用开发与移动操作系统之间的紧密关系及其相互影响,揭示技术创新如何推动这一领域的发展。通过分析当前主流移动操作系统的特点、移动应用的开发趋势以及两者间的互动机制,本文为开发者和用户提供了一个全面了解该领域的窗口。 ####
|
23天前
|
开发工具 Android开发 iOS开发
移动应用与系统:涵盖移动应用开发、移动操作系统等相关话题####
本文深入探讨了移动应用开发和移动操作系统的复杂世界。从移动应用开发的基本概念到移动操作系统的核心功能,再到两者如何相互作用以提供无缝的用户体验,本文全面涵盖了这一领域的各个方面。无论你是开发者、技术爱好者还是普通用户,这篇文章都将为你提供有价值的见解。 ####
25 1
|
29天前
|
人工智能 物联网 Android开发
移动应用与系统:探索开发趋势与操作系统的协同进化####
本文深入探讨了移动应用开发的当前趋势,以及这些趋势如何与移动操作系统的发展相互影响、协同进化。通过分析最新的技术动态、市场数据及用户行为变化,本文旨在为开发者提供关于未来移动应用开发方向的洞察,并讨论操作系统层面的创新如何促进或制约应用的发展。 ####
|
6天前
|
5G 数据安全/隐私保护 Android开发
移动应用与系统:探索开发趋势与操作系统革新####
本文深入剖析当前移动应用开发的最新趋势,涵盖跨平台开发框架的兴起、人工智能技术的融合、5G技术对移动应用的影响,以及即时应用的发展现状。随后,文章将探讨主流移动操作系统的最新特性及其对开发者社区的影响,包括Android的持续进化、iOS的创新举措及华为鸿蒙OS的崛起。最后,还将讨论移动应用开发中面临的挑战与未来的发展机遇,为读者提供全面而深入的行业洞察。 ####
|
1月前
|
安全 物联网 Android开发
移动应用与系统:探索开发趋势与操作系统的演进####
【10月更文挑战第29天】 本文深入探讨了移动应用开发的最新趋势与挑战,并分析了主流移动操作系统(如Android、iOS)的发展动态。通过对比不同系统的技术特点和市场表现,揭示了移动应用生态系统的复杂性及其对开发者的影响。此外,还讨论了跨平台开发工具的兴起如何改变应用开发流程,以及这些变化对未来移动计算领域的潜在影响。 ####
35 4
|
1月前
|
人工智能 Android开发 数据安全/隐私保护
移动应用与系统:探索移动应用开发及操作系统的未来趋势####
本文深入探讨了移动应用开发和移动操作系统的现状、挑战与未来发展趋势。通过分析当前主流的移动操作系统(如Android和iOS)以及移动应用开发的最新技术,旨在为开发者提供有价值的参考,帮助他们更好地应对未来的挑战。 ####
|
1月前
|
安全 Android开发 iOS开发
移动应用与系统:探索移动应用开发与操作系统的协同进化###
【10月更文挑战第29天】 本文深入探讨了移动应用开发与移动操作系统之间的紧密联系与相互促进作用,分析了当前主流移动操作系统(如iOS、Android)的最新特性及其对应用开发的影响,并展望了未来移动应用与系统协同发展的新趋势。通过具体案例分析,揭示了开发者如何利用系统特性优化应用性能,提升用户体验,同时指出了跨平台开发工具的兴起如何进一步模糊了应用与系统间的界限,推动了整个移动互联网生态系统的繁荣发展。 ###
41 2
|
1月前
|
搜索推荐 前端开发 测试技术
移动应用与系统:探索开发之道与操作系统的演进#### 一、
【10月更文挑战第24天】 本文将带你深入探索移动应用开发的全过程,从构思到上架的每一个细节。同时,我们还将回顾移动操作系统的发展历程,分析当前主流系统的技术特点和未来趋势。无论你是开发者还是普通用户,都能在这里找到感兴趣的内容。 #### 二、
26 1
|
1月前
|
人工智能 前端开发 物联网
移动应用与系统:探索开发与操作系统的协同进化####
【10月更文挑战第26天】 本文探讨了移动应用开发和移动操作系统之间的紧密关系,揭示了它们是如何相互影响和促进彼此发展的。从早期的功能手机到现今的智能手机,移动操作系统经历了巨大的变革,而移动应用作为其生态系统中的重要组成部分,也随着技术的演进不断创新。文章将深入分析这一过程中的关键节点和技术突破,以及未来的发展趋势。 ####
25 0