操作系统笔记二

news2025/2/26 21:44:39

虚拟内存

在这里插入图片描述
把不常用的数据放到硬盘上去,常用的代码或者数据才加载到内存,来实现虚拟的大内存的感觉
在这里插入图片描述

覆盖技术

目标:在较小内存运行较大程序。
原理:把程序按自身逻辑结构划分若干功能上相对独立的程序模块。不回同时执行的模块共享同一块内存区域,按时间先后运行。常用功能的代码和数据常驻内存(决定哪些模块导入导出内存)。不常用功能在其他程序模块实现,放在外存,使用时装入内存
在这里插入图片描述
缺点:
需要程序员把程序划分若干小功能模块,并确定模块间覆盖关系。增加编程复杂度。
从外存转入内存,实际上是时间换空间

交换技术

目标:多道程序在内存中,让正在运行的程序或需要运行的程序获取更大内存资源
方法:让OS管理正在运行的程序,将暂时不运行的程序送到外存。OS把一个进程的整个地址空间的内容保存到外存,将外存某个进程的地址空间读入内存。换入换出内容的大小为整个程序的地址空间

问题:
1.交换时机的确定:只有当内存不够或有不够的危险时换出。因为交换的开销很大
2.交换区的大小:必须足够大以存放所有用户进程的所有内存映像的拷贝。必须能对这些内存映像直接存取
3.程序换入时的重定位:换出后再换入内存位置不一定一样。最好采用动态地址映射的方式

覆盖是发生在一个程序里面,它通过那些没有调用关系的函数和模块共享一个内存区域。代价是程序员手动去指定他们之间什么关系
交换是发生在程序之间的,粒度是当个程序。是操作系统内部完成的,不需要程序员参与,但是开销大

虚存技术

目标:覆盖增加了程序员的负担,交换粒度太大增加了处理器的开销。希望可以像覆盖,不是把程序的所有内容都放在内存中,由OS自动完成,无须程序员干涉。可以像交换一样,实现进程在内存外存间交换,但只对进程的部分内容进行交换

要求:
程序的局部性原理,指程序在执行过程的一个较短时期,所执行指令地址和指令操作数地址,分别局限于一定区域
时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问集中在一个较短时期
空间局部性:当前指令和邻近的几条指令,当前访问数据和邻近的几个数据集中在一个较小区域内
在这里插入图片描述
在这里插入图片描述

在页式或段式内存管理基础上实现,只需将当前需要执行的部分页或段装入到内存,就可程序开始执行。
执行过程中,如执行指令或数据访问出现缺页或缺段,由处理器通知OS调入相应页或段到内存,继续执行。并且,OS将内存中暂时不用的页或段调出保存在外存。

特征
空间很大,把物理内存于外存相结合
部分交换:交换粒度更小,效率更高
不连续性:物理内存分配不连续,虚拟内存使用也是不连续的。使用的过程中可能出现缺页缺段,出现访问异常,但OS会自动帮助交换数据,处理异常

页式管理

在这里插入图片描述
页表项里除了有页帧外,还有几个bit,其中一个bit表示存在或不存在。不存在则出现访问异常

思路:当一个用户程序要调入内存运行,只装入部分页面,就可启动程序。在运行过程中,如果运行程序或访问数据不在内存,向OS发出缺页中断请求,OS处理中断时,将外存中相应页面调入内存
在这里插入图片描述
CPU执行一条指令,load一个内存地址,那如果这个内存地址没有映射关系,页表中驻留位为0,这时候就产生缺页异常
缺页中断的处理:

  1. 内存有空闲物理页,则分配一物理页帧,转4,否则转2
  2. 采用某种页面置换算法,选择一个将被替换的物理页帧f,对应的逻辑页q如果在内存期间被修改过,则写回外存
  3. 对q对应页表项进行修改,驻留位设0
  4. 将需访问的地址对应所在硬盘中的数据,以页为单位,从硬盘读到内存中转入物理页f
  5. 修改p对应的页表项内容,驻留位设1,把物理帧号设为f
  6. 重新运行被中断的指令

在这里插入图片描述
四类:程序(指令),数据程序,库,动态产生的数据。形成了后备存储或者叫二级存储
在这里插入图片描述
上图公式,如果p足够下,就可以使得平均访问时间j接近于10ns,如果p非常大,会导致整个虚存管理效率会很差
保证程序具有局部性特点,意味着产生缺页次数会很少

页面置换算法

目标:尽量减少缺页中断次数
页面锁定:用于描述必须常驻内存的OS的关键部分或时间关键的应用进程。通过在页表中添加锁定标志位实现
在这里插入图片描述

最优页面置换算法

缺页中断时,遍历内存当中每个逻辑页面,计算其下次访问前,需等待多长时间。选择等待最久的页面进行置换
实际无法实现,OS无法知道每个页面等久才会被访问。可作为其他算法性能评价的依据
在这里插入图片描述

先进先出算法FIFO

选择内存中驻留时间最长的页面淘汰。OS维护一个链表,记录所有位于内存当中的逻辑页面,链表首页驻留时间最长,链尾最短
性能较差,调出的可能是常访问的页面,并且有belady现象(给它的物理页帧越多,反而产生的缺页次数越多)。很少单独使用
在这里插入图片描述

最近最久未使用算法LRU

选择最久未使用的页面淘汰
是对最优页面置换算法的一个近似。依据是程序的局部性原理。在一小段时间内如果某些页面被频繁访问,那么未来一小段时间,大概率会再次被频繁访问。
在这里插入图片描述
需要记录页面使用时间的顺序。开销较大。
方法1,维护一个页面链表,刚使用的过的页面作为首节点,最久未使用的作为尾节点。每次访问内存时,找到相应页,从链表摘出,移动到链表头部,缺页时,淘汰链表末尾页面
方法2,设置一个页面活动栈,访问某页时,将页号压入栈顶。考察栈内有无相同页号,有则抽出,需要淘汰页面时,选择栈底页面
在这里插入图片描述

时钟页面置换算法clock

LRU的近似,对FIFO的改进
需要用到页表项的访问位,当一个页面被装入内存时,把改为初始化为0,如果这个页面被访问(读/写),则位置设为1.
把页面组织成环形链表(钟表面),把指针指向最老的页面(最先进来)。
若缺页,判断指针所指最老页面,若访问位为0,直接淘汰;若为1,则设为0.指针下移一格。直到找到被淘汰的页面,指针移动到其下一格
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
增加脏位,记录写操作
在这里插入图片描述

最不常用算法LFU

缺页中断时,选择访问次数最少的页面淘汰
对每页设置一个访问计数器,每当一个页被访问时,访问计数器加1
增加计数器是成本,遍历访问也增加开销
和LRU的区别,LRU是访问时间,时间越短越好,LFU是访问次数,次数越

Belady现象:采用FIFO算法时,有时出现物理页数增加,缺页率反而提高的现象
原因:置换特征与进程访问内存的动态特征是矛盾的,与置换算法目标不一致(替换较少使用的页面)。替换出去的页面不一定是不会访问的

在这里插入图片描述
局部页面算法
假定物理页帧是固定的,如果只有一个程序,可以把所有物理页帧给它,但多个程序希望在程序运行的不同时期调整不同的物理页帧。因此需要全局页面算法

前面的页面置换算法的前提是程序具有局部性原理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
期望是工作集尽量属于常驻集

工作集页置换算法

工作集代表的是有一个工作集的窗口,窗口有一个时间,当前的时间以及有一个size, size代表过去一个时间的大小,形成工作集窗口,窗口里面的页呢,代表当前这段时间内被访问的页,如果某个页要替换的时候,替换那些不在工作集里面的页。
随着程序的执行,工作集窗口在挪动,平移过程中,如果某个页,不在这个时间出窗口之内,这个页也会被丢掉,并不是说等着缺页的时候才开始丢页
在这里插入图片描述
对每一访问的页计时大小为4个时间单位,随着时间的推移超过4个时间没被访问就被置换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一种方法是每次访问页时判断是否增减页,第二种方法是在每次缺页中断时判断
在这里插入图片描述
抖动问题可能会被本地的页面置换改善

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2040666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FreeRTOS学习笔记(一)—— 裸机和RTOS,Freertos移植(MDK),stm32cubeIDE使用Freertos

FreeRTOS学习笔记(一)—— 裸机和RTOS,Freertos移植(MDK),stm32cubeIDE使用Freertos 文章目录 FreeRTOS学习笔记(一)—— 裸机和RTOS,Freertos移植(MDK&#…

uniapp/vue个性化单选、复选组件

个性化单选和复选组件在网页设计中非常常见,它们不仅能够提升用户界面的美观度,还能改善用户体验。此组件是使用vue uniapp实现的个性化单选复选组件。设计完成后,点击生成源码即可。 拖动组件过设计区 每行显示数量 默认支持每行三个&#…

Maven-学习首篇

目录 Maven简介基本概念&特点Maven的安装与配置Maven基础概念及使用方法Maven的项目结构Maven的使用Maven的依赖管理Maven的生命周期和插件常见疑问Maven的插件机制是如何工作的?Maven的POM文件主要包含哪些内容?Maven的生命周期包括哪些阶段&#x…

【C++语言】list的构造函数与迭代器

1. list的介绍及使用 1.1 list的介绍 list的文档介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点…

C++中的IO流

目录 1.C语言的输入与输出 2.流是什么 3.CIO流 标准IO流 IO流的四个标志 C文件IO流 4.stringstream的简单介绍 1.C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据,并将值存放在变…

钢铁百科:A572Gr60和SA572Gr60材质分析、A572Gr60和SA572Gr60简介

A572Gr60和SA572Gr60是两种常用的结构钢板,它们在材质、执行标准、化学成分、力学性能、交货状态、应用范围和常用规格方面有所不同。 材质: A572Gr60:属于美国材料与试验协会(ASTM)标准下的A572系列高性能结构钢&…

UIAbility组件基础(一)

一、概述 UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。 U…

自研低代码海报制作平台学习分享计划

vue3组件库开发前面咱卷完了JuanTree组件,接下来一起来卷vue3低代码海报制作平台的基础组件实现。首先是拖拽基础组件的开发,整好把前面学习的知识点再运用进来。 文章目录 效果演示基本拖拽区域拖拽旋转其他效果待实现 录屏说明 看一步步实现的效果&…

C++--类和对象(二)

类和对象的基础定义可参看:C--类和对象(一)-CSDN博客 本篇讲述类和对象里相当重要的几个成员函数 目录 类的默认成员函数: 1.构造函数 2.析构函数 3.拷贝构造函数 (1)无限递归调用拷贝构造 &#xff…

在Ubuntu中重装Vscode(没有Edit Configurations(JSON)以及有错误但不标红波浪线怎么办?)

在学习时需要将vscode删除重装,市面上很多方法都不能删干净,删除之后拓展都还在。因此下面的方法可以彻底删除。注意,我安装时使用的是snap方法。 如果你的VScode没有Edit Configurations(JSON),以及有错误但不标红波浪线的话&…

基于QT实现的TCP连接的网络通信(客户端)

上篇介绍了QT实现网络通信的服务器端,还没看服务器的朋友们先去上篇了解,这篇我来实现一下客户端的实现。 首先还是新建一个项目 选择mainwindow类 在通信前将.pro文件的第一行代码中追加network 窗口搭建 在mainwindow.ui中完成一下窗口的搭建 首先在…

序列建模之循环和递归网络 - 双向RNN篇

序言 在序列建模的广阔领域中,循环神经网络( RNN \text{RNN} RNN)以其独特的循环结构,在处理序列数据方面展现出了强大的能力。然而,传统的单向 RNN \text{RNN} RNN在处理某些复杂任务时,如自然语言处理中…

基于51单片机的士出租车计价器proteus仿真

地址:https://pan.baidu.com/s/1-GOrUrYlyGZFfkiiO6i5yg 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectron…

「Unity3D」TextMeshPro-Text(UI)无法拖放到TextMeshPro的属性面板上

继承MonoBehaviour,然后定义public TextMeshPro textPro,属性面板上就会有TextMeshPro的拖放槽(slot),以配置含有TextMeshPro的组件对象(GameObject)。 但此时会发现,含有TextMeshPr…

李沐老师动手深度学习pytorch版本的读取fashion_mnist数据并用AlexNet模型训练,其中修改为利用本地的数据集训练

李沐老师的d2l.load_data_fashion_mnist里面没有root参数,所以只会下载,不能利用本地的fashion_mnist数据。所以我使用torchvision 的datasets里面FashionMNIST方法,又由于李沐老师此处是利用AlexNet模型来训练fashion_mnist数据,…

xiaomi pad 6PRO 小米平板6 pro hyperOS降级 澎湃os 降级MIUI 14 教程 免解锁BL 降级,168小时解锁绑定

小米平板 6 Pro 机型代号 :liuqin 降级MIUI 14 小米澎湃 OS 正式版 澎湃OS安卓发布日期卡刷包线刷包OS1.0.7.0.UMYCNXM14.02024-07-13miui_LIUQIN_OS1.0.7.0.UMYCNXM_d618a5c980_14.0.zipliuqin_images_OS1.0.7.0.UMYCNXM_20240705.0000.00_14.0_cn_8cbf5920be.…

Android14之解决编译libaaudio.so报错问题(二百二十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列…

OceanBase内存管理小窍门

本文来自OceanBase热心用户的实践分享。 本文主要是对OceanBase内存管理的实用技巧分享,而并非直接深入OceanBase的代码层面进行阐述。​​​​​​​ 阅读本文章你将了解: 重载运算符new 与malloc在返回值上区别?在ceph 双向链表新用法&am…

[240815] GPT-4o 系统安全卡 | AMD 完成对 Silo AI 的收购,加速 AI 模型在硬件上的开发和部署

目录 GPT-4o 系统安全卡AMD 完成对 Silo AI 的收购,加速 AI 模型在硬件上的开发和部署 GPT-4o 系统安全卡 一、概述 GPT-4o 是一个多模态模型,可以处理文本、音频、图像和视频输入,并生成文本、音频和图像输出。本文概述了 GPT-4o 发布前的…

Azure OpenAI Swagger Validation Failure with APIM

题意:Azure OpenAI Swagger 验证失败与 APIM 问题背景: Im converting the Swagger for Azure OpenAI API Version 2023-07-01-preview from json to yaml 我正在将 Azure OpenAI API 版本 2023-07-01-preview 的 Swagger 从 JSON 转换为 YAML。 My S…