[操作系统] 分页系统的设计问题

关于操作系统设计的基本原理和设计原则 操作系统设计的精妙之处就在于,在底层硬件之上创造了新的抽象, 对于系统初始化来说, 它呈现了执行流到线程转化这一概念,该概念远远比它的实现细节更加重要,处理器以“取指-执行”为周期开始串行执行指令,而初始化代码将自身转化为一个并发处理系统, 这里的关键之处在于,初始化代码并不是创建一个独立的并发系统,然后跳转到新的系统。 阅读详情

分页系统的设计问题



1. 局部策略与全局分配策略

假如三个进程A,B为当前可运行进程。假如A发生了缺页中断,页面置换算法在置换页面时,如果只考虑已经分配给A的页面,就叫做局部页面置换算法。而如果置换的页面不考虑被置换的页面属于哪个进程,则叫做全局页面置换算法。

局部算法可以有效地为每个进程分配固定的内存片段。全局算法在可运行进程之间动态地分配页框,因此分配给各个进程的页框数也是随时间变化的。

全局算法在通常情况下比局部算法要好。但是工作集算法和WSClock算法只在局部策略中才有意义,因为没有针对整个机器的工作集。所以在必须使用局部策略时,可以按进程大小按比例分配页面数量,但是为了保证进程可以运行,需要给规定一个最小页框数。即使某个进程达不到这个比例,也应该分配给它规定的最小页框数

2. 负载控制

一旦所有进程的组合工作集超出了内存容量就有可能发生颠簸。因为一旦有进程需要更多的内存,但是没有进程需要更少的内存,只能暂时从内存中去掉一些进程。可行的方法是将一部分进程交换到磁盘,并释放所有它们所占有的页面。如果颠簸依然没有停止,则需要交换出更多进程,直到颠簸结束。

另外,如果交换出过多的进程,CPU可能长时间处于空闲状态,所以在交换进程时,还应该考虑进程的特性(计算密集型还是I/O密集型)。

3. 页面大小

页面大小的选择没有最优选择,大页面和小页面各有优点何缺点。

小页面优点:

  • 正文段、数据段和堆栈段一般情况下无法恰好装满整个页面,平均情况下最后一个页面的一半是空的。这些浪费的空间叫做内部碎片。所以页面越小,浪费的字节就越小(当内存中有n个段、页面大小为p字节时,浪费的碎片为np/2字节)。

  • 如果一个程序是按阶段顺序执行的,每阶段需要的内存很小,如4KB,如果页面大小是32KB,那么每次会浪费很多空间。

小页面缺点:

  • 小页面需要更多页面,即需要更大的页表。内存与磁盘的传输一般为一次一页,这就意味着需要更多的传输。大部分时间用在了磁盘的寻道和延迟上,传输一个小页面和大页面本身的时间可以被忽略了。所以更多次的传输意味着更多的时间。
  • 某些机器中,每次进程切换都必须要装入页表,小页面也会花费更多时间。

4. 分离的指令空间和数据空间

大多数计算机只存在一个地址空间,既存放程序也存放数据。可以将指令(程序正文)和数据分离,放在两个不同的地址空间,这样两个空间都可以进行分页,并且相互独立。这种方法可以使可用的地址空间加倍,所需要的仅仅是当硬件取指时告诉它使用哪个空间。另外将指令与数据分离,对下面提到的共享页面来说会变的很简单。

5. 共享页面

当几个不同的用户同时运行同一个程序时。为了避免在内存中有一个页面的两份副本,使用共享页面效率更高。只读页面(如程序文本)可以共享,但是数据页面不能共享。

如果支持指令空间和数据空间的分离,那么可以在每个进程的进程表中添加两个指针,一个指向指令空间,一个指向数据空间。如果进程A,B运行的是同一个程序,那么它们指向指令空间的指针可以指向同一个页。

共享页面

存在的问题是,假设进程A和B同时运行一个编辑器并共享页面。如果调度程序决定从内存中移走A,并撤销A所有的页面,那么这会造成B大大量的缺页中断需要把共享页面重新调入。所以,当A结束时,能够发现共享页面仍在被使用是很重要的。可以使用一个专门的数据结构进行记录。

如果想要对数据空间进行共享,可以让每个进程有自己单独的页表,但是同时指向一个数据页面集合。当这些进程只是读数据而不做更改时,可以一直使用。如果作出更改,操作系统就会生成一个该页的副本,这个进程就有自己的副本了。该方法被称为写时复制,通过减少那些不执行写操作的页面的复制而提高了性能。

6. 共享库

如果一个程序装载了某个共享库(如一些函数等),其他的程序就没有必要再次装载这个库了。并且一个共享库被装载和使用时,不是一次性被读入内存的,而是根据需要,以页面为单位装载的。共享库的另一个优点是,如果里面的一个函数被修改了,不需要重新编译程序,旧的文件依然可以正常工作通过使用新的共享库来替换原有文件,就可以使用新的共享库了。

共享库所造成的问题是重定位问题,如图

共享库

如进程1,2共享一个20KB的库(每个框为4KB)。在进程1中,这个库被定位在36K+16,但是在进程2中,如果将36K+16作为地址装载就会出错,因为需要跳转的地址是12K+16。

所以,在编译共享库时,需要用特殊的编译选项告诉编译器,不要产生使用绝对地址的指令,只产生使用相对地址的指令,不管共享库被放在虚拟空间的什么位置,都可以正确工作。这种只使用相对偏移量的代码叫做位置无关代码。

7. 内存映射文件

共享库实际为该机制的特例。核心思想是:进程可以通过发起一个系统调用,将一个文件映射到其虚拟地址空间的一部分。在多数实现中,在映射共享的页面时不会实际读入页面内容,而是在访问页面时才会读入。当进程退出或显式地解除文件映射时,所有被改动的页面会被写回到文件中。

这个机制可以把一个文件当做一个内存中的大字符数组来访问,而不用通过读写操作来访问文件。如果两个或以上进程同时映射了同一个文件,他们就可以通过共享内存来通信。

8. 清除策略

发生缺页中断时如果系统中有大量的空闲页框,此时的分页系统在最佳状态。所以应该建立一个叫做分页守护的后台进程,它在多数时候睡眠,但会被定期唤醒,如果空闲页框过少,分页守护进程通过预定的页面置换算法选择页面换出内存。如果这些页面被修改过则将他们写回磁盘。

在任何情况下,页面中原先的内容都应该被记录在一个缓冲区中。当需要使用一个被淘汰的页面时,如果该页框没被覆盖,则可从这个缓冲区中移出并恢复该页面。分页守护进程,保证了所有空闲页框是干净的,所以空闲页框在被分配时不必着急写回磁盘。

实现方法是使用一个双指针时钟。前指针由分页守护进程控制。当它指向一个脏页面时,就写回磁盘,前指针向前移动,当指向干净页面时,不写回磁盘,只移动前指针。后指针用于页面置换,与标准时钟算法中的指针一样。

9. 虚拟内存接口

在一些高级系统中,程序员可以对内存映射进行控制。允许控制的原因是为了允许两个或多个进程共享一部分内存。实现共享内存的方法是对内存区域进行命名,通过让一个进程把内存区域的名字告诉第二个进程,使得第二个进程可以把该区域映射到第二个进程自己的虚拟地址空间中。这样一个进程可以往共享内存中进行写内容,另一个进程读内容,就可以进行高速的通信。

页面共享可以用来实现高性能的消息传递系统,因为普通情况下传递消息,数据被从一个地址空间复制到另一个地址空间开销很大。而如果可以空着页面映射,发送方可以清除那些包含消息的页面的映射,接收进程映射进来,这种方法只需要复制页面名字,而不用复制数据本身。

参考书目:现代操作系统第三版

现代操作系统 第4版 第3章笔记 #第三章 阅读详情

相关推荐

《现代操作系统》第三章:存储管理

操作系统中管理分层存储器体系的部分称为存储器管理(memory manager) 3.1 无存储器抽象 直接使用物理地址; 并行问题; 重定位问题(因为使用的是绝对物理地址); 装载器需要一定的方法来辨别地址和常数(地址值需要重定位,而常数不需要重定位)。 3.2 一种存储抽象:地址空间 要保证多个应用程序同时处于内存中并且不互相影响,需要解决的问题:保护和重定位。 保护:给内存块标记保...

u014209688的专栏 662

Linux操作系统 系统界面设计

Linux 系统设计 实现用户信息管理、进程信息管理、文件目录信息管理、网络信息管理、调用其它可执行程序等功能。

GV5555的博客 2499

操作系统 程序设计作业5——模拟分页系统的地址变换(公式法和硬拼法) (C++实现)

文章目录题目代码运行结果 题目 某分页系统中,程序空间与物理空间都是2GB,页面大小为4KB。 已知某进程的页表如下,请编写程序模拟分页系统的地址变换过程。 要求分为公式法和硬拼法两种方式实现,并对比体会两种方法的差别。 要求: (1)用户输入逻辑地址,程序输出对应物理地址 (2)用户输入的逻辑地址可以是十进制也可以是十六进制 (3)输出的物理地址可以是十进制也可以是十六进制 (4)两种方法的计算...

qq_40939814的博客 2148

【操作系统】分页分段

分页分段已知某分页系统,主存容量为64K字节,页面大小为1K,对一个4页大的作业,其0、1、 2、3页分别被分配到主存的2、4、6、7块中,试: (I)将十进制的逻辑地址1023、2500、 3500、4500 转换成物理地址: (2)以十进制的逻辑地址1023为例画出地址变换过程图。 某虚拟存储器的用户空间共有32个页面,每页1KB,主存16KB。假定某时刻,系统为用户的第0,1,2,3页分配的块号分别为5,10,4,7,而该用户的作业长度为6页,试将十六进制的虚拟地址0A5C转化成物理地址。

qq_62702607的博客 4966

【技术解析】华为智算中心:昇腾AI算力与无损网络如何驱动大模型训练

本文深入解析了华为智算中心如何通过昇腾AI算力与超融合以太无损网络的协同,驱动千亿参数大模型的高效训练。昇腾NPU提供专用计算引擎,而基于RoCE的无损网络则通过PFC、ECN等技术确保万卡集群间的高带宽、零丢包通信,实现算力利用率最大化,解决大规模AI训练的核心瓶颈。

weixin_29311017的博客 191

XMind文件解析黑科技:用Python实现版本自适应读取(兼容2010-2024)

本文深入探讨了如何利用Python实现XMind文件的版本自适应解析,兼容从2010到2024年的各版本。通过分析XMind文件作为ZIP压缩包的本质,文章提供了智能探测文件内部结构(JSON或XML)并构建健壮读取逻辑的完整方案,有效解决了版本兼容性难题,并演示了将解析数据转换为PlantUML等下游应用的实战案例。

weixin_29041767的博客 682

【操作系统】存储模型(二):虚拟存储技术和置换算法

1 虚拟存储技术(Virtual Memory) 1.1 概念 当进程运行时,先将其一部分装入内存,另一部分暂留在磁盘,当要执行的指令或访问的数据不在内存时,由操作系统自动完成将它们从磁盘调入内存的工作。 ...

少侠露飞的学习笔记 5349

【ISAR成像定标方法(1)—转台目标的RD成像算法MATLAB仿真】

ISAR成像定标方法的研究具有重要意义,但是与之相关的学习资料以及仿真对于小白来说很难找或者很杂乱,本人作为小白之一在研究过程中苦不堪言,现在自己所要研究的定标内容已经完成,以后还学不学雷达也不一定,因为后面的路更难,现在打算把一些相关推导和仿真结果列出来,以供小白交流学习使用,希望能有点帮助。(PS:由于公式和符号的原因,采用图片形式说明)

此木旧年的博客 6416

分页系统中的设计问题---局部分配和全局分配、负载控制、页面大小、分离的指令空间和数据空间、共享页面、共享库、 内存映射文、清除策略件、虚拟内存接口

分页系统中的设计问题在前几节里讨论了分页系统是如何工作的,并给出了一些基本的页面置换算法和如何实现它们。然而只了解基本机制是不够的。要设计一个系统,必须了解得更多才能使系统工作得更好。下面将讨论为了使分页系统达到较好的性能,操作系统设计者必须仔细考虑的一些其他问题。局部分配策略与全局分配策略请见点击打开链接在前几节中,我们讨论了在发生缺页中断时用来选择一个被置换页面的几个算法。与这个选择相关的一个...

Unique-You的博客 1457

人体红外传感器HC-SR501

本文记录的是如何用stm32使用HC-SR501。实验平台:野火指南者stm32f103vet6。实验现象:一旦有人体经过,LED会亮红色。HC-SR501 传感器工作原理人体都有恒定的体温,一般在 37 度,所以会发出特定波长 10UM 左右的红外线,被动式红外探头就是靠探测人体发射的 10um 左右的红外,进行工作的。人体发射的 10um 左右。

weixin_43772611的博客 1万+

肖特基二极管选型参数,结构原理,工艺与注意问题总结

肖特基二极管(Schottky Diode)是一种特殊的二极管,也被称为肖特基势垒二极管。它是利用金属与半导体接触形成的金属-半导体结原理制成的。与传统的PN结二极管相比,肖特基二极管具有更低的正向压降、更高的开关速度、更高的反向恢复时间以及更好的温度稳定性等特点。本文对肖特基二极管的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 812

【现代操作系统】之分页系统中的设计问题

机制与策略

Shijia Yin 444

基于Spring Boot + Vue 3构建高并发华为数码商城交易平台:全栈架构设计与实现

内容将涵盖系统架构、数据库设计、核心模块开发(用户、商品、订单、购物车)、安全认证、性能优化以及前后端分离部署等关键环节,并提供详尽的代码示例,旨在为开发者提供一个可落地的企业级项目实战指南。<el-button text class="button" @click.stop="addToCart(product)">加入购物车</el-button>.antMatchers("/api/user/login", "/api/user/register").permitAll() // 公开接口。

2201_76125393的博客 306

读书笔记-现代操作系统-3储存管理-3.5分页系统中的设计问题

3.5 分页系统中的设计问题3.5.1 局部分配策略和全局分配策略怎样在互相竞争的可运行程序之间分配内存。 局部页面置换算法,只在进程内部分配,如果有缺页则置换本进程内的页面。 全局页面置换算法,在所有进程所占内存分配,如果有缺页则置换所有进程中最适合的页面。 通常来说全局页面置换更好,尤其是在工作集的大小随进程运行时间发生变化时这种现象更加明显。若使用局部算法,即使有大量空闲页框存在,工作集

千念飞羽的专栏 637

【unity知识】最新的虚拟相机Cinemachine3简单使用介绍

本文介绍了Unity中Cinemachine 3虚拟相机系统的使用方法。相比旧版本,新版功能更强大且参数分类更直观。文章详细讲解了摄像机镜头参数、旋转控制(包括None、目标跟随、样条线推拉、旋转追随等6种模式)和位置控制(跟随、样条轨道、硬锁定等5种模式)。重点演示了样条轨道摄像机的创建与配置,以及如何实现第一人称和第三人称视角。通过丰富的GIF图示,展示了各种模式的运行效果,帮助用户快速掌握Cinemachine 3的核心功能。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 865

图文详解秋叶ComfyUI整合包开启密码访问教程(附内网穿透实战经验) ComfyUI密码、ComfyUI-Login、ComfyUI内网穿透、秋叶整合包、ComfyUI安全防护

想远程访问 ComfyUI(跨设备或公网)不希望任何人随意使用或篡改服务需要给 ComfyUI 添加登录验证机制只要按照本文教程,安装插件,并设置好用户名密码,你就能把服务加上一道强力的门槛。📌配合ngrokfrp等内网穿透工具使用公网域名推荐启用 HTTPS(SSL证书可以用宝塔/ZeroSSL 申请)密码可以设置复杂一些,定期更换更安全📬如果你在配置过程中遇到问题,欢迎评论区留言交流,或者私信我,后续我也会更新更多 ComfyUI 插件教程、安全部署经验等内容。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2722

现代操作系统(三)

现代操作系统(三) 三.内存管理 分层存储器体系:MB级别的快速、昂贵、易失的高速缓存(cache);GB级别的速度与价格适中、易失的内存;TB级别的低速、廉价、非易失的磁盘存储;USB等可移动存储设备 操作系统中管理分层存储器体系的部分称为存储管理器 无存储器抽象 直接访问物理内存,所以想在内存中同时运行两个程序是不可能的,因为新的程序会覆盖前一个程序在相同位置的所有内容 在不使用存...

SEUXXD的博客 715

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

操作系统的存储管理

存储器抽象:地址空间 将物理地址暴露给进程将会导致几个严重的问题: 用户程序寻址内存中的每个字节,他们可以容易地破坏操作系统。 没有对物理内存抽象的情况下很难同时运行多个程序。(没有独立的地址空间) 地址空间(address spaces) 地址空间为程序创造了一种抽象的内存,地址空间是一个进程可用于寻址内存的一套地址集合,并且这个地址空间独立于其他进程的地址空间。 交换技术 把所有进程保存在...

void 898

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

现代操作系统_内存管理

内存管理 内存RAM是计算机中一种需要认真管理的重要资源,将讨论操作系统是怎样对存储器创建抽象模型以及如何管理它们的。 分层存储器体系(memory hierarchy),即在这个体系中,计算机有若干兆(MB)快速、昂贵且易失性的高速缓存(cache),数千兆(GB)速度与价格适中且同样易失性的内存,以及几兆兆(TB)低速、廉价、非易失性的磁盘存储,另外还有诸如DVD和USB等可移动存储装置。 操作系统的工作是将这个存储体系抽象为一个有用的模型并管理这个抽象模型。 操作系统中管理分层存储器体系的部分称为存储

cbzFocus的博客 534

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

分页系统中的设计问题

分页系统中的设计问题局部分配策略与全局分配策略负载控制页面大小分离的指令空间和数据空间共享页面共享库内存映射文件清除策略虚拟内存接口 我们将讨论为了使分页系统达到较好的性能,操作系统设计者必须仔细考虑的一些其他问题 局部分配策略与全局分配策略 怎样在相互竞争的可运行进程之间分配内存 如图a所示,三个进程A、B、C构成了可运行进程的集合。假如A发生了缺页中断,页面置换算法在寻找最近最少使用的页面时是只考虑分配给A的6个页面呢?还是考虑所有在内存中的页面?如果只考虑分配给A的页面,生存时间值最小的页面是A5,

guicaifjz的博客 579

基于Hash页表的分页系统实现实验

生成N个用户线程和一个管理线程,用户线程随机产生一些逻辑地址和读写操作(读操作表示不修改页面,写操作表示修改页面),,管理线程负责按顺序将各用户线程产生的逻辑地址转换为物理地址。系统采用带TLB的分页系统,所有用户线程各。,每个用户线程的,实际页面数和页表随机生成(但是页表中的有效无效位总数应小于等等线程实际页面数)。所有用户线程的,Hash函数为H( ID,page)自定义。链表中的结点由页号、帧号和下一节点的指针构成,页号的Hash值相同的所有结点构成一张链表,Hash页表中存储该链表的头结点地址。

weixin_74334636的博客 904

多级分页系统解决了什么问题?又引入了什么新问题?

计算机考研-408-知识点梳理 操作系统 & 组成原理 多级分页系统解决了什么问题?又引入了什么问题? 多级页表是为了解决页表占用过多连续内存的问题,进一步将页表离散化,提高内存的利用率。多级页表是一种典型的“时间换空间”方法,增加了访存次数,降低了分页系统的性能。 ...

ccrick's blog 1210

3.5 分页系统的设计问题

3.5 分页系统中的设计问题1. 局部分配策略与全局分配策略怎样在相互竞争的可运行进程之间分配内存?淘汰内存中页面是不管它属于哪个进程(全局页面置换算法)还是只选属于该进程的(局部页面置换算法)。一般情况下,全局算法比局部算法好,当工作集大小随进程运行时间发生变化时更明显。若使用局部算法:有大量空闲页框存在,工作集的增长也会导致颠簸;而如果工作集缩小又会浪费内存。使用全局算法时需要不停地确定该给每...

wojiaoxurunxin的博客 277

常考计算机操作系统面试习题(二)(下)

参考答案:文件的逻辑结构:从用户或应用程序的视角来看,文件的组织和结构形式。例如,文本文件按字符存储,数据库文件按表格存储。文件的物理结构:系统如何将文件存储在磁盘或其他外部存储设备上的方式。它涉及到文件数据如何分配到磁盘块,以及使用何种存储方式来组织文件。讲解:文件的逻辑结构和物理结构是操作系统管理文件时两个不同的层面。逻辑结构是用户关心的文件格式,而物理结构是操作系统如何高效存储和管理这些文件的方式。参考答案:时间局限性。

2301_81831423的博客 2373
上一篇: [操作系统] 页面置换算法(二)
下一篇: [操作系统] 分页系统的实现问题
LLLZHLIU
博客等级 码龄10年 19粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值