《操作系统 - 清华大学》5 -2:覆盖技术

文章目录

  • 1. 目标
  • 2. 覆盖的基本原理
  • 3. 覆盖技术的不足

1. 目标

在这里插入图片描述

覆盖技术产生于上世纪80年代和90年代初的时候,在那时候操作系统能力是很弱的,所以说当初目标是要在能够比较小的可用内存中运行比较大的程序,这个比较小,比较大的相对而言,在当时的代表就是 doc 系统,在这个操作系统下,硬件一般只有 640K 的内存。软件一般也就几十K, 大一点的上兆,这种容量下怎么能够使软件可以充分利用内存空间,可以虚拟出一个更大的空间,让软件能够跑,这实际上是靠覆盖技术,那它的基本原理什么呢?

2. 覆盖的基本原理

在这里插入图片描述
首先要把程序根据它的执行逻辑进行分类,划分出若干个区间,相对于独立的程序模块,在不同区间这些模块可以不用同时运行,那么就可以把这些不能同时执行的模块设置成共享同一块内存空间,按照时间顺序,前一段时间可能是某一个模块或者某一个分区里面的那些函数去执行,在后一段时间是另一些函数执行,但这些函数是共享一个内存空间,简单理解为分时的方式来共享同一块内存空间,在这个实验过程中需要注意几点:

  1. 首先一定会有常驻内存的一块代码和数据,它是要负责管理,它来负责决定在某个时间段要把这个相应的函数数据导入内存或者导出内存。
  2. 有一部分不常用的功能的函数数据在其他程序正在实现的时候,是要把它放到外存中去,只是在需要的时候装入内存。
  3. 如果是不存在相互间调用关系的函数或者模块,它不必同时装入到内存中去,这样就可以实现相互的覆盖,那么这些模块可以共享共用一个分区,这个分区实际上是一块内存空间。

OK,这是它基本的原理。看个例子,用例子来理解这个处理的过程,看下图:
在这里插入图片描述
这里面有一个程序,它有 A、B、C、D、E、F 五个模块,简单理解为五个函数,每个函数占了一定的空间,比如说 A 占了20 K, B 50 K, C 30K,还有D、E、F。上图可以看到每个调用关系, A 调了 B 和 C,B 调了 D,C 调了 E、F,这是它的逻辑调用关系.

基于逻辑调用关系就给它进行分类,这个分类实际上是可以看出来,需要把不具有调用关系的函数或者模块分成一个分区,在这里面可以看到 A 是单独分区,常驻内存,因为它要调用 B C D E F ,那么把 A 作为常驻在内存中的一块区域,只占20K。 B 和 C 这两个函数是对等的,它都被 A 所调用,但是 B 和 C 之间相互不会调用,所以说可以把它分在一个区域,同理 D E F 也可以分在一个区,那这是有分区了。

上图右边代表是当前物理内存的大小,它只有110K,那前面的 A B C D E F加起来一共有190K,如果说想把这个程序全装到内存中去,那其实物理内存是不够的,那能不能用覆盖技术来解决这个问题? 是不是能够把一些相互之间没有调用关系的一些模块函数放在一个分区

因为它们访问时间是不一样的,比如说 A 先调 B,再调 C:

  1. 那这时候它既然先调 B,就可以把 B 这 50K 空间导到内存里面来,从硬盘放到内存中去,那这时候它占了50K。
  2. 当 A 调完 B 之后,接着会执行调 C 的函数,但它调 C 之前,需要把 C 模块从硬盘调到内存中去,当然在调之前,首先要把 B 所用到的数据和代码导回到硬盘中去,需要注意一点,代码是只读的,它不会改变,所以代码导入过程是不需要处理的,只需要把这个空间直接释放就 OK 了。
  3. C 在这里面只占了30K,所以说把它们共享 50K 空间中只用 30K 来放 C,当 A 把 C 代码和数据调到内存来之后,A 就可以调用 C 了。这时候 A 不需要调用 B,所以说 B 没必要保存在内存中,可以体现出来 B 和 C 它们是没有调用关系。它们可以放在一个分区里,分区的大小是50K,也就是 B 和 C 中最大的容量,只要够就 OK。
  4. 当 C 执行完之后,C 会调用 E,C调 E 的时候,需要注意,D 函数和 F 函数其实是不会被执行的,因为在串行的过程中,C 在调 E 的时候,这两个函数不会执行,也意味着 C 调 E 的时候, D 和 F 其实是没必要放在内存中去,只需把 E 这20K 放到第二个 40 K 覆盖区里面去,这里面虽然 D E F 都有可能占用这40K 的内存空间,但是它们占用空间的时间是不一样,就是在 C 调 E 的时候,D F 是不可能会被执行的。
  5. 所以说当 E 执行完 20K 内存空间后,C 紧接着会调 F,在这时候它首先会把 E 占用空间给释放掉,把 F 从硬盘中导到这个覆盖区去,使得 F 可以正常执行。

当然在这里面可以看到它这个力度是以程序的逻辑调用关系来实现的,当然这种逻辑调用关系也意味着可以找出多种不同的这种覆盖分区的方式,上图其实只给出了一种,还有另外一种覆盖方式,这种方式需要内存空间可能更小,首先还是 A 是常驻内存的分区,它只占20K, D E F 相互间不会调用,那么它们可以共享50K 的覆盖区,那同时 D 和 C 也没有调用关系,共享一个覆盖区,但是 D 和 C 共享覆盖区,只需要30K 的空间,比刚才那种方式还要省出10K 的空间,也意味着在这种覆盖方法下,整个内存空间只需要100K,比刚才110 K 还要小。所以说在这里面可以通过程序员精心的安排,根据它代码的执行情况来选出一个最佳的覆盖方式,可以实现有效的覆盖管理,从而让大的程序可以利用很小空间就可以完成执行。

3. 覆盖技术的不足

在这里插入图片描述
虽然看到它好处就是说一个大程序可以放在一个很小内存里面,但是它还有一些潜在的问题,就由这个覆盖技术本身引入的一些问题。最大问题就是开销问题,开销问题分两类:

  1. 程序员需要考虑设计的开销,需要考虑怎么把一个大的程序根据它的逻辑执行关系来划分出一个一个小的相之间可以覆盖的功能模块,确定覆盖关系,其实还是挺费时费力的。
  2. 要不停地在新的不同阶段,要做出换入换出这种操作,操作本身会涉及到对硬盘的读写,加载到内存中去,或者写回硬盘,这个过程其实也有很大开销。

所以说它增加了程序员的负担,引入了很多时间开销,效率上来说会受一点影响,相对来说是它不太理想的地方。当然在早期操作系统没有很强大的管理之下,有这个技术已经很不错了,它可以使一些大型软件得以运行。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Nginx 在 Ubuntu 22.04 上安装 LibreNMS 开源网络监控系统

#LibreNMS 是一个功能强大的开源网络监控系统,它能够为你的网络性能和设备提供全面的监控。本文将引导你通过一系列步骤,在 Ubuntu 22.04 服务器上安装和配置 LibreNMS,使用 Nginx 作为 Web 服务器。 简介 LibreNMS 提供了对网络设备和性能…

Spring注入Map学习

Spring注入Map学习 在Spring中 在策略模式中, 会经常用到 根据Bean名称获取Bean的实例 有2个方法很好用 1. 使用Autowired注入 2. 使用构造方法注入 但是奇怪的一点是: 日志打印并没有看到结果, 第一行的 Autowired的结果 是个null 那是因为 注入时机 的问题 注入时机&…

【Redis_Day5】String类型

【Redis_Day5】String类型 String操作String的命令set和get:设置、获取键值对mset和mget:批量设置、获取键值对setnx/setex/psetexincr和incrby:对字符串进行加操作decr/decrby:对字符串进行减操作incrbyfloat:浮点数加…

谷歌云无法ssh登录(修改sshd_config也不行)

sudo -i vi /etc/ssh/sshd_config passwd root /etc/init.d/ssh restart service sshd restart 这是网站大部分教程讲的,但是我实际试了还是连不上 参考https://linux.do/t/topic/260732/15 原来/etc/ssh/sshd_config.d/下面有个60开头的文件,也需…

【FPGA-MicroBlaze】串口收发以及相关函数讲解

前言 工具:Vivado2018.3及其所对应的SDK版本 目前网上有许多MicroBlaze 的入门教程,比如下面的这个参考文章,用串口打印一个hello world。 【FPGA】Xilinx MicroBlaze软核使用第一节:Hello World!_fpga软核microblaze-CSDN博客 个…

【君正T31开发记录】8.了解rtsp协议及设计模式

前边搞定了驱动,先不着急直接上手撸应用层的代码,先了解一下大致要用到的东西。 设计PC端先用vlc rtsp暂时H264编码(vlc好像不支持h265,这个后边我试试)的视频流,先需要支持上rtsp server,了解rtsp协议是必…

渗透测试---shell(7)for循环2与while循环

声明:学习素材来自b站up【泷羽Sec】,侵删,若阅读过程中有相关方面的不足,还请指正,本文只做相关技术分享,切莫从事违法等相关行为,本人与泷羽sec团队一律不承担一切后果 视频地址:泷羽--shell&a…

CLIP-Adapter: Better Vision-Language Models with Feature Adapters 论文解读

abstract 大规模对比视觉-语言预训练在视觉表示学习方面取得了显著进展。与传统的通过固定一组离散标签训练的视觉系统不同,(Radford et al., 2021) 引入了一种新范式,该范式在开放词汇环境中直接学习将图像与原始文本对齐。在下游任务中,通…

C++初阶(十五)--STL--list 的深度解析与全面应用

文章目录 一、头文件与基本概念 二、构造函数和析构函数 1.构造函数 2.析构函数 三、元素访问 front back 四、迭代器相关函数 begin end rebegin(反向迭代器) rend(反向迭代器) 五、容量相关函数 empty size max…

一个关于 CSS Modules 的陷阱

我在引用 less 文件样式的时候&#xff0c;发现 index.less .drag_upload {width: 100%;height: 90vh;padding: 20px; }index.jsx import React, { useState, useEffect } from react; import styles from ./index.less;export default ({ }) > {return (<div classNa…

基于STM32的智能家居电器控制系统

目录 引言环境准备 2.1 硬件准备 2.2 软件准备智能家居电器控制系统基础 3.1 控制系统架构 3.2 功能描述代码实现&#xff1a;实现智能家居电器控制系统 4.1 数据采集模块 4.2 控制逻辑与设备管理 4.3 通信与远程控制实现 4.4 用户界面与数据可视化应用场景&#xff1a;家庭自…

视觉经典神经网络与复现:深入解析与实践指南

目录 引言 经典视觉神经网络模型详解 1. LeNet-5&#xff1a;卷积神经网络的先驱 LeNet-5的关键特点&#xff1a; 2. AlexNet&#xff1a;深度学习的突破 AlexNet的关键特点&#xff1a; 3. VGGNet&#xff1a;深度与简洁的平衡 VGGNet的关键特点&#xff1a; 4. ResNe…

vue3【实战】响应式的登录界面

效果预览 WEB 端效果 移动端效果 技术方案 vue3 vite Element Plus VueRouter UnoCSS TS vueUse AutoImport 技术要点 响应式设计 移动端&#xff1a;图片切换为绝对定位&#xff0c;下移一层&#xff0c;成为背景图片 <el-imageclass"w-screen h-screen lt-md…

c语言的qsort函数理解与使用

介绍&#xff1a;qsort 函数是 C 标准库中用于排序的快速排序算法函数。它的用法非常灵活&#xff0c;可以对任意类型的元素进行排序&#xff0c;只要提供了比较函数即可。 qsort 函数原型及参数解释&#xff1a; void qsort ( void* base, //指向要排序的数组的首元素…

AIGC学习笔记(6)——AI大模型开发工程师

文章目录 AI大模型开发工程师005 OpenAI大模型案例实践1 AI 翻译助手需求分析项目起源市场价格和市场前景基于大模型的翻译软件核心功能设计 2 AI 翻译助手架构设计架构设计代码结构设计 3 AI 翻译助手核心功能文档解析文档操作PDF文档操作表格操作图片操作 Prompt封装 4 AI 翻…

《生成式 AI》课程 作业6 大语言模型(LLM)的训练微调 Fine Tuning -- part1

资料来自李宏毅老师《生成式 AI》课程&#xff0c;如有侵权请通知下线 Introduction to Generative AI 2024 Spring 该文档主要介绍了国立台湾大学&#xff08;NTU&#xff09;2024 年春季 “生成式人工智能&#xff08;GenAI&#xff09;” 课程的作业 5&#xff08;GenAI HW…

cangjie (仓颉) vscode环境搭建

sdk下载 下载中心-仓颉编程语言官网 可选择半年更新版&#xff0c;不用申请。目前版本&#xff1a;0.53.13 &#xff0c;选择不同平台压缩包下载解压到任意位置即可 补充下载&#xff0c;vscode插件解压后&#xff0c;在vscode扩展中选择从vsix安装&#xff0c;安装后新增名为…

微信小程序全局配置:导航栏、下拉刷新与上拉触底设置教程

微信小程序全局配置:导航栏、下拉刷新与上拉触底设置教程 引言 微信小程序作为一种新兴的轻量级应用,凭借其便捷性和丰富的功能受到了广泛的欢迎。在开发小程序的过程中,合理配置全局属性是提升用户体验的关键。本文将深入探讨小程序的全局配置中的window选项,重点介绍导…

CPU命名那些事

一、Intel CPU命名 1. 命名结构 Intel CPU 的命名通常包含以下几个部分&#xff1a; 品牌 产品线 系列 代数 具体型号 后缀 例如&#xff1a;Intel Core i7-13700K 2. 各部分含义 品牌 Intel&#xff1a;表示厂商&#xff08;几乎所有命名中都有&#xff09;。不同品…

【C++笔记】数据结构进阶之二叉搜索树(BSTree)

【C笔记】数据结构进阶之二叉搜索树(BSTree) &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】数据结构进阶之二叉搜索树(BSTree)前言一.二叉搜索树的概念二.二叉搜索树的性能分析三.二叉搜索树的实现3.1二叉树的中序…