王道操作系统笔记(七)——— 内存管理的基本原理和要求

news2024/11/27 17:55:58

文章目录

  • 一、内存的概念和作用
  • 二、内存管理的概念
  • 三、进程运行的基本原理和要求
    • 3.1 程序执行过程
    • 3.2 逻辑地址和物理地址
    • 3.3 程序的链接
    • 3.4 程序的装入
    • 3.5 内存保护
  • 四、覆盖与交换
    • 4.1 覆盖技术
    • 4.2 交换技术


一、内存的概念和作用

  主存储器,简称主存,又称内存储器(内存),用来存放计算机运行期间所需的程序和数据,CPU可以直接随机地对其进行访问,程序执行前需要先放到内存中才能被CPU处理,主要作用是 缓和CPU与硬盘之间的速度矛盾

在这里插入图片描述
  内存中有一个个的小房间,每个小房间就是一个存储单元,内存地址从 0 开始,每个地址对应一个存储单元如果计算机按字节编制,每个存储单元大小为 1 字节,即 8 个二进制;如果计算机按字编址,每个存储单元大小为 1 个字。若字长为 16 位,则每个存储单元大小为 16 个二进制。若字长为 32 位,则每个存储单元大小为 32 个二进制。

在这里插入图片描述

补充:几个常用的数量单位
1 1 1 B = 8 8 8 bit    2 10 2^{10} 210 = 1 1 1 K (千)   2 20 2^{20} 220 = 1 1 1 M (兆,百万)   2 30 2^{30} 230 = 1 1 1 G (千兆,十亿)
1 1 1 GB = 2 10 2^{10} 210 MB = 2 20 2^{20} 220 KB = 2 30 2^{30} 230 B = 8 8 8* 2 30 2^{30} 230 bit

例:一台手机/电脑 有 4 4 4GB 内存
是指该内存中可以存放 4 4 4* 2 30 2^{30} 230 个字节。如果是按字节编址的话,也就是有 4 4 4* 2 30 2^{30} 230 = 2 32 2^{32} 232 个小房间。这么多小房间,需要 2 32 2^{32} 232 个地址才能标识,所以地址需要用 32 32 32 个二进制位来表示( 0 0 0 ~ 2 32 2^{32} 232- 1 1 1


二、内存管理的概念

  虽然计算机技术飞速发展,内存容量也在不断扩大,但仍然不可能将所有用户进程和系统所需的全部程序与数据放入内存,因此操作系统对内存空间进行合理的划分和有效的动态分配。操作系统对内存的划分和动态分配,就是内存管理的概念

操作系统作为系统资源的管理者,主要负责:
内存空间的分配与回收:OS 要怎么记录哪些内存区域已经被分配出去了,哪些又还空闲;当进程运行结束之后,如何将进程占用的内存空间回收。
内存空间的扩充:OS 利用虚拟内存技术或自动覆盖技术使得系统运行很大的程序,从逻辑上扩充内存。
地址转换:为了使编程更方便,程序员写程序时应该只需要关注指令、数据的逻辑地址。而 逻辑地址到物理地址的转换(这个过程称为地址重定位)应该由操作系统负责,其中 地址重定位有三种方式
内存保护:保证各进程在各自存储空间内运行,互不干扰。

在这里插入图片描述


三、进程运行的基本原理和要求

3.1 程序执行过程

创建进程首先要将程序和数据装入内存。将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤:
编译: 由编译程序将用户源代码编译成若干个目标模块,编译就是把高级语言翻译为机器语言
链接: 由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块
装入(装载): 由装入程序将装入模块装入内存运行。
在这里插入图片描述


3.2 逻辑地址和物理地址

  编译后,每个目标模块都是从 0 号单元开始编址,这称为该目标模块的 逻辑地址 (或相对地址)。当链接程序将各个模块连接成一个完整的可执行目标程序时,链接程序顺序依次按各个模块的相对地址构成统一的从 0 号单元开始编制的 逻辑地址空间。用户程序和程序员只需知道逻辑地址,而内存管理的具体机制则是完全透明的,只有系统编程人员才会涉及内存管理的具体机制。不同进程可以有相同的逻辑地址,因为这些相同的逻辑地址可以映射到内存的不同位置。
  物理地址空间 是指内存中物理单元的集合,它是地址转换的最终地址。进程在运行时执行指令和访问数据,最后都要通过物理地址从主存中存取。当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址(动态重定位是地址转换推迟到程序真正要执行时才进行),这个过程称为 地址重定位

注:以上两段,重点在于理解


3.3 程序的链接

  1. 静态链接
    在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
    在这里插入图片描述

  2. 装入时动态链接
    将各 目标模块装入内存时,边装入边链接的链接方式。
    在这里插入图片描述

  3. 运行时动态链接
    在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享
    在这里插入图片描述


3.4 程序的装入

  1. 绝对装入
    在编译与链接后,得到的装入模块指定 直接使用了绝对地址

  2. 静态重定位(可重定位装入)
    装入时对地址进行重定位,即将逻辑地址变换为物理地址,地址变换是在装入时一次完成的
    在这里插入图片描述
    静态重定位的特点: 在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。

  3. 动态重定位(动态运行时装入)
    装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址(装入时依然保持使用逻辑地址)而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持
    在这里插入图片描述
    动态重定位特点: 可以将程序分配到不连续的存储区中;在程序运行前只需装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存;便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间;采用动态重定位时允许程序在内存中发生移动

注:链接的作用是形成了完整的装入模块与逻辑地址,但逻辑地址到物理地址的转换过程是重定位,而不是装入


3.5 内存保护

内存分配前,需要保护 OS 不受用户进程的影响,同时保护用户进程不受其他用户进程的影响。用户进程可采取以下两种方法:

  1. 设置一对上下限寄存器
    在CPU中设置一对上、下限寄存器,存放进程的上、下限地址。进程的指令要访问某个地址时,CPU检查是否越界。
    在这里插入图片描述
  2. 利用重定位寄存器 和 界地址寄存器
    采用重定位寄存器(又称基址寄存器)和界地址寄存器(又称限长寄存器)进行越界检查。重定位寄存器 中存放的是进程的 起始物理地址界地址寄存器 中存放的是进程的 最大逻辑地址
    在这里插入图片描述

四、覆盖与交换

在多道程序环境下用来扩充内存的两种方法:

4.1 覆盖技术

基本思想:将程序分为多个段(多个模块)。常用的段常驻内存,不常用的段在需要时调入内存。

  内存中分为一个 固定区 和若干个 覆盖区。需要常驻内存的段放在 固定区 中,调入后就不再调出(除非运行结束)。不常用的段放在 覆盖区需要用到时调入内存,用不到时调出内存。并且 必须由程序员声明覆盖结构,操作系统完成自动覆盖。
在这里插入图片描述

缺点: 对用户不透明,增加了用户编程负担;覆盖技术 只用于早期的操作系统中,现在已成为历史。


4.2 交换技术

基本思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
  中级调度(内存调度),采用的就是交换技术;暂时换出外存等待的进程状态为挂起状态(挂起态)挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态。

在这里插入图片描述

  1. 具有对换功能的操作系统中,通常把磁盘空间分为 文件区和对换区 两部分。 文件区 主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;对换区 空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此 对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式。总之,对换区的I/O速度比文件区的更快
  2. 交换通常在许多进程运行且内存吃紧时进行,而系统负荷降低就暂停。例如:在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程;如果缺页率明显下降,就可以暂停换出。
  3. 可优先换出阻塞进程;可换出优先级低的进程;为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间。

注:PCB 会常驻内存,不会被换出外存。因为进程被换出外存后,系统需要通过PCB对进程进行管理。


下列措施中,能加快虚实地址转换的是( C )。
Ⅰ.增大快表(TLB)容量  Ⅱ.让页表常驻内存  Ⅲ.增大交换区(swap)
A.仅Ⅰ  B.仅Ⅱ  c.仅Ⅰ Ⅱ  D.仅Ⅱ Ⅲ
(来源:2014年408真题)


解析: 虚实地址转换,即逻辑地址与物理地址的转换。
增大快表容量:可增加查询快表命中的概率。
让页表常驻内存:在采用多级页表的请求分页存储管理系统中,页表常驻内存可保证在查询页表时不会发生缺页、调页的情况,从而加快地址转换。

  • 当系统有足够的交换区空间时,页面的换入换出都是通过交换区进行。
  • 当系统缺少足够的交换区空间时,不会被修改的文件直接从文件区调入,当它们需要换出时,由于未被修改因此不必换出,直接覆盖即可。可能被修改的页面,将其换出时必须调到交换区,以提升I/O速度。
  • 页表显然是可能被修改的内容,因此即使交换区空间不足,页表在换出时也必然放在交换区

因此,增加交换区对地址转换的速度无影响.

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

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

相关文章

【Spark分布式内存计算框架——Spark Core】4. RDD函数(中)Transformation函数、Action函数

3.2 Transformation函数 在Spark中Transformation操作表示将一个RDD通过一系列操作变为另一个RDD的过程,这个操作可能是简单的加减操作,也可能是某个函数或某一系列函数。值得注意的是Transformation操作并不会触发真正的计算,只会建立RDD间…

int、uint类型的比较与加减

uint与int的比较 int与uint比较时会把int转换成uint&#xff0c;一个负的int转换成uint会溢出。所以uint与int比较大小时容易得到错误的结果&#xff0c;如&#xff1a; #include <iostream> using namespace std;int main(int, char**) {cout << "compare …

IC真题 —— 刷题记录(1)

引言 记录一些 我自己刷的 IC行业招聘真题&#xff0c;不是每题记录&#xff0c;只记录一些值得记录的&#xff0c;写下自己的看法。主要是一些数字IC行业题目&#xff0c;偏前端。 1、有一个逐次逼近型 8位A/D 转换器&#xff0c;若时钟频率为250KHz&#xff0c;完成一次转换…

2023备战金三银四,自动化软件测试面试宝典合集

1.软件测试的定义是什么&#xff1f; 参考答案&#xff1a; 用手工或者自动化的方式执行测试用例的一个过程 2.软件测试的对象包括哪些&#xff1f; 参考答案&#xff1a; 源程序、目标程序、数据和相关文档 3.试结合软件开发流程模型&#xff0c;描述对应不同的阶段测试需要…

Linux系统

Linux系统 Linux操作系统&#xff1a;Windows、Mac Linux一切皆文件&#xff1a;文件就 读、写、&#xff08;权限&#xff09; Linux——》Redis——》Docker 学习方式&#xff1a; 认识Linux 基本的命令&#xff08;重点&#xff1a; git 讲了一些基本的命令&#xff0…

Windows上实现 IOS 自动化测试

本文介绍如何使用tideviceWDAairtest/facebook-wda实现在Windows上进行IOS APP自动化测试 环境准备 Windows Python环境 Python 3.6 WebDriverAgent安装 下载最新的项目到Mac&#xff1a;https://github.com/appium/WebDriverAgent $ git clone https://github.com/appiu…

求你了,不要再在对外接口中使用枚举类型了!

最近&#xff0c;我们的线上环境出现了一个问题&#xff0c;线上代码在执行过程中抛出了一个IllegalArgumentException&#xff0c;分析堆栈后&#xff0c;发现最根本的的异常是以下内容&#xff1a; java.lang.IllegalArgumentException: No enum constant com.a.b.f.m.a.c.A…

GEE遥感云大数据在林业中的应用

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

STM32开发(8)----CubeMX配置串口通讯(中断方式和DMA方式)

CubeMX配置串口通讯&#xff08;中断方式和DMA方式&#xff09;前言一、中断方式1.CubeMX配置2.代码实现3.实验结果二、DMA方式1.CubeMX配置2.代码实现3.实验结果总结前言 本章继续介绍使用STM32CubeMX对串口进行配置的方法&#xff0c;串口通讯有三种方式&#xff1a;轮询&am…

看完这篇 教你玩转渗透测试靶机vulnhub——Source:1

Vulnhub靶机Source:1渗透测试详解Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;远程命令执行漏洞 CVE-2019-15017&#xff1a;③&#xff1a;获取FLAG…

MySQL篇02-三大范式,多表查询

数据入库时,由于数据设计不合理&#xff0c;会存在数据重复、更新插入异常等情况, 故数据库中表的设计遵循的设计规范&#xff1a;三大范式1.第一范式(1NF)要求数据库的每一列都是不可分割的原子数据项&#xff0c;即原子性。强调的是列的原子性&#xff0c;即数据库中每一列的…

TOUGH系列软件建模实践方法及在地下水、CO2地质封存、水文地球化学、地热等多相多组分系统多过程耦合

查看原文>>> https://mp.weixin.qq.com/s?__bizMzAxNzcxMzc5MQ&mid2247578057&idx7&sn75f8d2c1c6edb28af76a8db4bb773de3&chksm9be2aed9ac9527cf0081082cdcf781e6c37f9f3ba383332ed1116abcbee0f05c0593187e964d&token2070450548&langzh_CN#r…

PostgreSQL查询引擎——General Expressions Grammar之restricted expression

General expressions语法规则定义在src/backend/parser/gram.y文件中&#xff0c;其是表达式语法的核心。有两种表达式类型&#xff1a;a_expr是不受限制的类型&#xff0c;b_expr是必须在某些地方使用的子集&#xff0c;以避免移位/减少冲突。例如&#xff0c;我们不能将BETWE…

TOOM舆情监测方案关键词设置,网络舆情监测方案有哪些举措?

网络舆情监测是通过在线社交媒体平台和其他网络渠道收集、分析和评估公众对某一话题的看法和反应的过程。目的是了解舆论趋势&#xff0c;提高社会影响力&#xff0c;帮助公司或组织了解公众对其产品或服务的评价&#xff0c;TOOM舆情监测方案关键词设置&#xff0c;网络舆情监…

docker快速部署xxjob2.3.0-SpringBoot快速集成示例

xxjob 2.3.0 部署 参考资料 docker安装xxl-job-admin步骤_JEECG低代码平台的技术博客_51CTO博客 run前准备 1 新建数据库 xxl_job 2 建表sql(可以直接使) https://github.com/xuxueli/xxl-job/blob/master/doc/db/tables_xxl_job.sql建库sql # # XXL-JOB v2.4.0-SNAPSHOT…

编译原理—栈式存储分配、有参函数的活动记录、参数传递与x86汇编

编译原理—参数传递与x86汇编-1.栈式存储分配0.有参函数的活动记录1. swap1(int p , int q)2. swap2(int *p,int *q)3. swap3(int *p, int *q)4. swap4(int &p, int &q)-1.栈式存储分配 0.有参函数的活动记录 参数分别是整型、指针、引用时的参数传递及其汇编代码 1. …

OpenResty(4):OpenResty快速入门

1 hello world openresty1.9.3.1及以下版本&#xff0c;请使用content_by_lua命令&#xff1b;在 openresty1.9.3.2以上&#xff0c;content_by_lua 改成了 content_by_lua_block。可使用 nginx -V 命令查看版本号 方法一&#xff1a; 修改openresty中nginx配置文件nginx.con…

【Django】云笔记项目

一、介绍 用户可在系统中记录自己的笔记&#xff0c;用户的数据被存储在云笔记平台&#xff1b;用户和用户之间的数据为隔离存储&#xff08;登陆后才能使用相关笔记功能&#xff0c;且只能查阅自己的笔记&#xff09; 二、功能拆解 1、用户模块 注册&#xff1a;成为平台…

Python学习------起步7(字符串的连接、删除、修改、查询与统计、类型判断及字符串字母大小写转换)

目录 前言&#xff1a; 1.字符串的连接 join() 函数 2.字符串的删除&取代 replace()函数 3.字符串的修改&切割 &#xff08;1&#xff09;strip() 函数 &#xff08;2&#xff09;lstrip()函数 和 rstrip()函数 &#xff08;3&#xff09;split()函数-->…

Dubbo3简单使用

Dubbo3简单使用 &#x1f449; 使用Spring Boot实现Dubbo3&#xff0c;请参见以下地址。 # Dubbo3官网地址 https://cn.dubbo.apache.org/zh/# 使用SpringBoot实现Dubbo3的地址 https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/quick-start/spring-boot/# 该项目的git地址…