嵌入式基础知识-存储管理

上篇介绍了存储器的相关知识,偏重的是硬件结构,本篇介绍存储管理的相关知识,偏重的是软件管理。

1 存储管理概念

操作系统,包括嵌入式系统,通常利用存储管理单元MMU(Memory Management Unit)来提供内存保护机制,实现系统内核与应用程序,应用程序与应用程序之间的隔离。

内存保护包括两个方面:

  • 防止地址越界:对于多个应用程序,每个应用程序都有自己独立的地址空间。
  • 防止操作越界:对于多个应用程序共享的内存区域,每个应用程序都有自己的访问权限。

存储管理的方式,通常可以分为一下几类:

  • 分区存储
  • 页式存储
  • 段式存储

2 分区存储

分区存储又可分为两类:

  • 固定分区存储:分区大小是固定的
  • 可变分区存储:分区大小是可变的

2.1 固定分区存储

固定分区,是指分区的个数、位置、大小一旦确定后,就不再变化了。另外,分区的大小可以是相等的,也可以是不相等的。

对于新任务到来后的内存分配原则,有两种:

  • 多个输入队列:对于每一个用户分区,都有一个相应的输入队列。当一个新任务到来时,就把它加入到对应的队列中,要求这个队列对应的分区,是能够装得下该任务的最小分区。
  • 单个输入队列:所有的用户分区只设置一个输入队列。当一个新任务到来时,就把它加入到对应的队列中,当某个分区空闲时,就从队列中选择合适的任务去占用这个分区,在任务选择时,可以有两种分配方法:
    • 方式一:选择离对首最近的且能够装入这个分区的任务。当选中的是较小的任务时,则会浪费大量内存空间。
    • 方式二:先搜索整个队列,选择能够装入这个分区的最大任务,尽可能减小空间浪费。

对于固定分区:

  • 优点:易于实现,系统开销较小(空闲空间管理、内存分配与回收算法复杂度低)
  • 缺点:内存利用率不高,产生内存碎片;分区总数固定,限制了并发程序的个数

2.2 可变分区存储

可变分区,是指分区不是预先划分的,而实动态创建的,在装入一个程序时,系统根据它的需求和内存空间的使用情况来决定是否分配。

当一个程序开始运行,要求装入内存时,系统就会从空闲区划出一块进行分配;当程序运行完则释放存储区域,变为空闲区。

在具体实现可变分区管理时,需考虑三个方面问题:

  • 内存管理的数据结构:系统会维护一个分区链表,记录每个内存分区的情况(分配状态、起始地址、长度等)
  • 内存的分配算法:当新任务到来时,需决策分配到哪个空闲分区,通常有4种分配法 :
    • 最先匹配法:从链表头,按顺序找到第一个能装入新任务的空闲分区。接着把该空闲分区中按照任务大小分割,剩余的部分仍是一个空闲分区,将任务装入,并更新分区链表
    • 下次匹配法:与最优匹配法类似,区别是每次分配后记录位置,下次再分区时从此位置开始查找,而不是从固定的链表头开始查找
    • 最佳匹配法:将新任务状态与其大小最接近的空闲分区中。这种方法最大的缺点是产生的空闲分区可能很小而无法使用
    • 最坏匹配法:每次都选用最大的分区进行分配,避免出现不可用的极小分区,但较大的空闲分区也不被保留
  • 内存的回收算法:当任务运行结束释放内存时,若有相邻的空闲分区,则需要合并为一个大的空闲分区,并更新分区链表

对于内存的分配算法,可以看下如下实例:某计算机系统内存大小128k,采用可变分区分配方式进行内存分配,当前系统的内存分块情况如下图左图,现有一个作业4要分配9k的内存,这这种分配算法的分区情况如下图右边4个子图所示

可变分区改善了固定分区的一些缺点,但作为分区存储本身,仍有一些无法解决的问题:

  • 当进程运行所需的内存大于系统内存时,则无法将整个进程一起调入内存,从而无法运行该程序

3 页式存储

页式存储,将进程空间分配为一个个页,同时将系统内存也分配为一个个页,例如都是4K的大小。

这样,运行程序时,每次将需要运行的逻辑页状态内存中,运行完再装入下一个要运行的页,这样就解决了空间极大的进程运行的问题。

对于逻辑页,可以用页号和页内地址表示:

  • 页号:与内存中的物理块号并不是对应的,需要通过查询“页表”得到对应的物理块号
  • 业内地址:或称页内偏移量,与内存中的物理偏移地址是一致的

比如上图中,其地址长度32位,页号占用20位,页内地址占用12位,则页面总数为220=1024K=1M个,页面大小为212=4K

对于页表的表示,如下图,左边是进程中的页号,通过查询页表,可以得到右边内存中对应的块号。

通过页表的方式,可以实现从逻辑地址到物理地址的转换。

  • 逻辑地址:页号+业内偏移
  • 物理地址:物理块号+页内偏移地址

两种地址的页内偏移是一样的,所以地址转换,只需要先计算出页号与物理块号的转换关系,即可进行地址转换。

页式存储的地址转换,可看如下实例:

题目:页面大小L为1k字节,页号2对应的内存块号b=8,将逻辑地址A=2500转换为物理地址E

由题目可得如下分析:

  • 页面大小1k,则页内地址占用10位
  • 逻辑地址2500转为16进制为0x09C4,取低10位为业内地址,即0x01C4,页号为0x02
  • 由题目知页号为0x02对应的内存块号为8,对应的16进制为0x08,将其与业内地址组合,可得物理地址为0x0x21C4,十进制即为8644。

或直接使用十进制计算:

  • 页号P=A/L=2500/1024=2,由题目知,其对应的内存块号为8

  • 业内偏移w=A%L=2500%1024=452

  • 则物理地址为:

    E=b*L+w=8*1024+452=8644
    

页式存储的优缺点:

  • 优点:内存利用率高,内存碎片小,分配与管理简单
  • 缺点:增加了系统的开销,可能产生抖动现象

4 段式存储

段式存储与页式存储比较相似,区别是段式存储不是按照固定的大小分割内存,而是根据进程的逻辑功能进行空间画法,这样便于内存共享,只是每段的空间大小不同。

4.1 基本原理

与页式存储类似,段式存储每段的表示,由段号和段内地址组成。

从逻辑地址到物理地址的转换,则是通过段表的查询来实现。

看一个实例,例如,某进程的段表内容如下,当访问段号2,段内地址400的逻辑地址时,进行地址转换则会出现越界异常

段号段长内存起始地址权限状态
01006000只读在内存
1200读写不在内存
23004000读写在内存

因为段号2对应的段长只有300,而段内地址400则超出了范围,地址4400为非法地址

4.2 段页式存储

段页式存储,则是将段式存储和页式存储结合起来使用,对进程空间先分段,再分页。

段页式存储优缺点:

  • 优点:空间浪费小,便于存储共享与存储保护,可以动态链接
  • 缺点:管理的复杂度与开销增大,需要的硬件增加,执行速度下降

5 总结

本篇介绍了存储管理的相关知识,包括存储管理的分类:分区存储、页式存储和段式存储,已经不同存储方式的地址转换方式与优缺点等。

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

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

相关文章

填补5G物联一张网,美格智能快速推进RedCap商用落地

自5G R17版本标准冻结以来,RedCap一直引人注目。2023年更是5G RedCap突破性发展的一年,从首款5G RedCap调制解调器及射频系统——骁龙X35发布,到国内四大运营商发布RedCap技术白皮书,芯片厂商、模组厂商、运营商及终端企业都在积极…

Nginx(1)

目录 1.Nginx概述2.Nginx的特点3.Nginx主要功能1.反向代理2.负载均衡 1.Nginx概述 Nginx (engine x) 是一个自由的、开源的、高性能的HTTP服务器和反向代理服务器,也是一个IMAP、POP3、SMTP代理服务器。 Nginx是一个强大的web服务器软件,用于处理高并发…

网卡内部的 DMA

前言 MCU、SOC 内部通常带有 DMA 控制器,要想使用 DMA 通常需要如下操作 选择通道配置传输方向(内存到外设、内存到内存、外设到内存)设置源地址、目的地址(内存地址、外设地址)设置源地址、目的地址是否自增设置位宽…

04-5_Qt 5.9 C++开发指南_QComboBox和QPlainTextEdit

文章目录 1. 实例功能概述2. 源码2.1 可视化UI设计2.2 widget.h2.3 widget.cpp 1. 实例功能概述 QComboBox 是下拉列表框组件类,它提供一个下拉列表供用户选择,也可以直接当作一个QLineEdit 用作输入。OComboBox 除了显示可见下拉列表外,每个…

冠达管理投资前瞻:三星加码机器人领域 大信创建设提速

上星期五,沪指高开高走,盘中一度涨超1%打破3300点,但随后涨幅收窄;深成指、创业板指亦强势震动。截至收盘,沪指涨0.23%报3288.08点,深成指涨0.67%报11238.06点,创业板指涨0.95%报2263.37点&…

【HCIP】OSPF综合实验

题目: 配置: R1 //ip分配 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 172.16.0.1 27 [r1-GigabitEthernet0/0/0]q [r1]int lo [r1]int LoopBack 0 [r1-LoopBack0]ip add 172.16.1.1 24//配置缺省 [r1]ip route-static 0.0.0.0 0 172.16.0.3 //启动…

系统架构设计师-软件架构设计(7)

目录 大型网站系统架构演化 一、第一阶段:单体架构 到 第二阶段:垂直架构 二、第三阶段:使用缓存改善网站性能 1、缓存与数据库的数据一致性问题 2、缓存技术对比【MemCache与Redis】 3、Redis分布式存储方案 4、Redis集群切片的常见方式 …

日撸java_day60

文章目录 小结k近邻算法(knn)定义算法流程距离度量k值的选择总结 聚类定义k-means聚类步骤k-means算法小结 小结 k近邻算法(knn) 定义 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别…

VLAN原理+配置

目录 一, 以太网二层交换机 二,三层架构: 三,VLAN配置思路 1.创建vlan 2.接口划入vlan 3.trunk干道 4.vlan间路由器 5.DHCP池塘配置 四,华为VLAN部分的接口模式讲解: 五,华为VLAN部分的…

《Zookeeper》从零开始学Zookeeper源码(三)之服务器的启动过程

目录 QuorumPeerMain QuorumPeerMain 在搭建本地的源码环境中,启动zookeeper服务端的入口为QuorumPeerMain,先看下它的类结构: 它本身只有一个属性quorumPeer,它代表了zookeeper集群中的一台机器,它会不断检测当前服…

docker镜像push到仓库

镜像可以很方便直接 push 到 docker 的公共仓库或阿里云仓库 一、Dockerpush指定仓库是什么? Dockerpush是Docker的一个命令,用于将本地的Docker镜像推送到Docker官方公共仓库或用户私人仓库。而指定仓库则是将这个Docker镜像推送到指定的仓库中。 通过D…

Visual Studio Code中对打开的脚本格式统一

什么是Language Server Protocol (LSP)? Language Server Protocol(语言服务器协议,简称LSP)是微软在2016年提出的一套统一的通讯协议方案。LSP定义了一套编辑器或者IDE与语言服务器(Language Server)之间使用的协议&…

Vue3 实现产品图片放大器

Vue3 实现类似淘宝、京东产品详情图片放大器功能 环境&#xff1a;vue3tsvite 1.创建picShow.vue组件 <script lang"ts" setup> import {ref, computed} from vue import {useMouseInElement} from vueuse/core/*获取父组件的传值*/ defineProps<{images:…

分布式应用:ELK企业级日志分析系统

目录 一、理论 1.ELK 2.ELK场景 3.完整日志系统基本特征 4.ELK 的工作原理 5.ELK集群准备 6.Elasticsearch部署&#xff08;在Node1、Node2节点上操作&#xff09; 7.Logstash 部署&#xff08;在 Apache 节点上操作&#xff09; 8.Kiabana 部署&#xff08;在 Node1 节点…

什么是全局代理,手机怎么设置全局代理

目录 什么是全局代理 全局代理的优缺点 优点 缺点 手机怎么设置全局代理 注意事项 总结 在计算机网络和信息安全中&#xff0c;全局代理是一种常用的技术手段&#xff0c;用于将网络流量通过代理服务器进行转发和处理。本文将介绍什么是全局代理&#xff0c;探讨全局代理…

使用kubeadm快速部署一个k8s集群

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…

2020年12月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题 第1题 执行语句print(1010.0)的结果为&#xff1f; A&#xff1a;10 B&#xff1a;10.0 C&#xff1a;True D&#xff1a;False 正确的答案是 C&#xff1a;True。 解析&#xff1a;在Python中&#xff0c;比较运算符 “” 用于比较两个值是否相等。在这个特…

2023 电赛 E 题 激光笔识别有误--使用K210/Openmv/树莓派/Jetson nano实现激光笔在黑色区域的目标检测

1. 引言 1.1 激光笔在黑色区域目标检测的背景介绍 在许多应用领域&#xff0c;如机器人导航、智能家居和自动驾驶等&#xff0c;目标检测技术的需求日益增加。本博客将聚焦于使用K210芯片实现激光笔在黑色区域的目标检测。 激光笔在黑色区域目标检测是一个有趣且具有挑战性的…

20天学会rust(一)和rust say hi

关注我&#xff0c;学习Rust不迷路 工欲善其事&#xff0c;必先利其器。第一节我们先来配置rust需要的环境和安装趁手的工具&#xff0c;然后写一个简单的小程序。 安装 Rust环境 Rust 官方有提供一个叫做 rustup 的工具&#xff0c;专门用于 rust 版本的管理&#xff0c;网…

Linux——设备树

目录 一、Linux 设备树的由来 二、Linux设备树的目的 1.平台识别 2.实时配置 3.设备植入 三、Linux 设备树的使用 1.基本数据格式 2.设备树实例解析 四、使用设备树的LED 驱动 五、习题 一、Linux 设备树的由来 在 Linux 内核源码的ARM 体系结构引入设备树之前&#x…