操作系统(day08)内存

news/2025/3/29 22:35:11/

存储单元

内存的几个基本概念

存储单元

内存地址从0开始,每个地址对应一个存储单元
存储单元大小根据计算机按照什么方式编址

  • 按字节编址
    则每个存储单元大小为一字节,即1B,即8个二进制位
  • 按字编址
    看这个计算的字长是多少位,如果是字长16位的,则每个存储单元大小为一个字,每个字的大小是16个二进制位,2字节

从写程序到程序运行

  • 编译
    由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译成机器语言)
  • 链接
    由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块(有逻辑地址)
  • 装入(装载)
    由装入程序将装入模块装入内存运行(将数据、程序放到内存的指定地址中,以便于后面cpu能根据地址找到)
    在这里插入图片描述

内存的三种装入方式

绝对装入

如果在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码,装入程序按照装入模块中的地址,将程序喝数据装入内存。
缺点: 适用于以前的单道程序环境

静态重定位

编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址(0)而言的逻辑地址。可根据内存的当前情况(即哪里有空闲地址),将装入模块装入到内存适当位置。装入时对地址进行“重定位”, 将逻辑地址变换位物理地址(地址的变换是在装入时一次完成的

在这里插入图片描述

动态重定位方式

动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的(逻辑地址)。装入程序把装入模块装入内存后(装入程序会存放一个初始位置,重定位寄存器会记住这个位置),并不会立即把逻辑地址转换为物理地址,
而是 把地址转换推迟到程序真正要执行时才会进行。因此装入内存后所有的地址依然时逻辑地址。这种方式需要一个重定位寄存器的支持

运行过程
例如一个程序装入内存中,内部的指令地址都是逻辑地址,是从0开始的。比如一个指令是
将地址为80(逻辑地址)的存储单元写入1,那么当cpu要执行这个指令的时候,cpu会根
据重定位寄存器上显示该程序的起始位置,比如100(物理地址),加上逻辑地址,就是
这个指令真正在内存中存在的地址

优点:
1.允许程序在内存中发生移动(只需将重定位寄存器更新该程序新的起始位置即可)
2.并且可将程序分配到不连续的存储区中;在程序运行前只需装入它的部分代码即可投入允许,然后在程序运行期间,根据需要动态申请分配内容;便于程序段的共享
在这里插入图片描述

链接的三种方式

在这里插入图片描述
课后思维导图总结
在这里插入图片描述

内存保护

方法一:
在CPU中设置一对上、下限寄存器,存放进程的上下限地址。进程的指令要访问某个地址时,CPU检查是否越界

方法二:
采用重定位寄存器界地址寄存器。界地址寄存器中存放的时进程的最大逻辑地址,重定位寄存器中存放的是进程的起始物理地址

在这里插入图片描述
课后思维导图总结
在这里插入图片描述

覆盖与交换

覆盖技术

在这里插入图片描述

交换技术

交换技术的设计思想:
内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)

在这里插入图片描述

课后思维导图总结
在这里插入图片描述


http://www.ppmy.cn/news/24722.html

相关文章

AtCoder Grand Contest 061(题解)

A - Long Shuffle 这道题本质是一个找规律的题 既然是打表题,我们先暴力把他打出来 (盗一张图.jpg) 接下来就是在这张图中挖掘答案 我们可以明显的看到偶数行是有一些规律的 要么是相邻对的互换,要么不变 不变和互换的位置也有讲究,在二进制…

Day888.MySQL是怎么保证主备一致的 -MySQL实战

MySQL是怎么保证主备一致的 Hi,我是阿昌,今天学习记录的是关于MySQL是怎么保证主备一致的内容。 MySQL 能够成为现下最流行的开源数据库,binlog 功不可没。 在最开始,MySQL 是以容易学习和方便的高可用架构,被开发人…

MY2480-16P语音模块的使用

MY2480-16P语音模块的使用开发环境:STM32CUBEMXKEIL5辅助软件:串口助手、迅捷文字转语音一、MY2480-16P语音模块引脚图及引脚定义二、选择触发方式三、使用串口控制MY2480-16P语音模块四、模块使用指南开发环境:STM32CUBEMXKEIL5 辅助软件&a…

【自学Python】Python字符大小写判断

大纲 Python字符串是否是小写 Python字符串是否是小写教程 在开发过程中,有时候我们需要判断一个 字符串 是否是小写形式(即,所有的字符都是小写字母,不是英文字符的忽略不做判断),在 Python 中&#xff…

[ 常用工具篇 ] CobaltStrike(CS神器)基础(一) -- 安装及设置监听器详解

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

flutter-登录token本地存储(shared_preferences)、路由拦截

App一般都会遇到这样的需求:没有登录则跳转登录页面,登录了则跳转至指定页面。思路:1.登录之后存储token。2.路由拦截,没有登录则跳转至登录页面,登录了则跳转至指定页面。步骤:一:首先在pubspe…

数据结构——TreeMap、TreeSet与HashMap、HashSet

目录 一、Map 1、定义 2、常用方法 3、注意 二、TreeMap 三、HashMap 1、定义 2、冲突定义 3、冲突避免方法——哈希函数设计 (1)、直接定制法(常用) (2)、除留余数法(常用) (3)、平方取中法 &…

知识图谱 方法、实践与应用 王昊奋 读书笔记(下)

最近读了这本书,在思路上很有启发,对知识图谱有了初步的认识,以下是原书后半部分的内容,可以购买实体书获取更多内容。 知识图谱推理 结合已有规则,推出新的事实,例如持有股份就能控制一家公司&#xff0…