存储

Silicon Labs(亦称“芯科科技”)最新发布的EFM32PG26(PG26) 32位微控制器(MCU)系列通过提升两倍的闪存和RAM容量,以及GPIO的数量来满足各种低功耗和高性能嵌入式物联网应用需求。面向无线连接功能的需求,PG26可作为EFR32xG26多协议无线SoC平台的软件兼容MCU版本,有助于开发人员基于同一平台设计快速且无缝地升级低功耗蓝牙、Matter、Thread、Zigbee或专有无线连接设计。

1.png

高效的PG26提供80 MHz ARM Cortex-M33内核并支持LCD控制器,不仅具有丰富的模拟和通信外设,低电流消耗等特性,还引入了更多的GPIO来解决复杂的系统设计挑战。PG26还配备了硬件人工智能和机器学习(AI/ML)硬件加速器,可以实现各种边缘人工智能(Edge AI)应用,并以更低的功耗进行更快的推理,使机器学习算法的处理速度提高了8倍,而功耗仅为原来的1/6,实现了更高的能量效率。

PG26 32位MCU关键功能特性

低功耗SoC架构

具有 DSP 指令和浮点单元以实现高效信号处理的高性能 32 位 80 MHz ARM Cortex®-M33

  • 高达 2048 kB 的闪存程序内存

  • RAM 数据内存高达 256 kB

低系统功耗

  • 44.6 μA/MHz(活动模式 (EM0),在 80 MHz 条件下)

  • 1.4 μA EM2 深度睡眠电流(16 kB RAM 保留并从 LFRCO 运行 RTC)

宽工作范围

  • 1.71 - 3.8 V 单电源

  • -40 至 +125 °C

小型封装

  • QFN68 8 x 8 x 0.85 mm

  • BGA136 7 x 7 x 0.82 mm

丰富多样的 MCU 外围设备选择:

包括IADC、VDAC、ACMP、PRS、实时计数器、脉冲计数器、看门狗定时器等外设

物联网安全技术:

通过芯科科技Secure Vault™技术和ARM TrustZone技术实现了最佳的安全性。利用芯科科技的定制化元件制造服务(CPMS),xG26产品还可以在制造过程中使用客户设计的安全密钥和其他功能进行硬编码,从而进一步增强其抵御漏洞的能力。

来源:SiliconLabs

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 9

近日,第11届EEVIA年度中国硬科技媒体论坛暨产业链研创趋势展望研讨会在深圳隆重开启。兆易创新存储器事业部产品市场经理张静受邀出席,以“持续开拓,兆易新一代存储产品助力行业创新”为题,分享了兆易创新在嵌入式存储器领域的广泛布局,以及面向产业技术变革浪潮的创新思考,共同探讨“半导体产业波动周期”下的存储器市场发展趋势。

GD Flash的开拓之路:十四载达成212亿颗出货成就

众所周知,Flash是一种非易失性的存储器,在断电和掉电的情况下,存储的内容不会发生丢失,是绝大多数电子系统必备的元器件。作为一家以存储器为起点的公司,兆易创新从2009年推出国内第一颗SPI NOR Flash,经过多年的产品研发和市场拓展,目前Flash产品的累计出货量已经超过212亿颗,且市场占有率稳步提升。

“十年前,Flash的应用场景是U盘、DVD、液晶电视等消费产品;十年后,汽车、工业、物联网、5G通信等领域成为了Flash的热门应用场景。”张静在演讲环节表示:“紧随技术变革的步伐,兆易创新Flash持续引领突破,现已提供27大产品系列、16种产品容量、4个电压范围、7款温度规格和29种封装方式的产品家族,覆盖了几乎所有需要存储代码的应用场景。”

1.png

现场展示的兆易创新存储器产品

那么,开发者如何挑选合适的Flash产品呢?张静从不同应用对Flash容量、读取性能、封装等几个角度进行了解读。

在容量上,针对不同应用与系统复杂程度,不同的嵌入式系统存储代码所需的Flash容量差别很大,例如消费电子所需Flash容量在512Kb~4Gb,而物联网设备所需Flash容量为1Mb~256Mb。目前,兆易创新NOR Flash系列提供从512Kb至2Gb容量范围,其中512Mb、1Gb、2Gb的大容量SPI NOR Flash产品更是填补了国产NOR Flash的空白;SLC NAND Flash系列提供1Gb至8Gb容量范围,赋能消费电子、PC周边、网络通信、汽车/工业等领域对于大容量存储数据的需求。

在性能上,兆易创新GD25T/LT系列是业界首款超高性能、超高可靠性的车规级4口SPI NOR Flash产品,数据吞吐量高达200MB/s,内置ECC算法和CRC校验功能,可以满足车载应用的严苛要求。GD25X/LX系列则进一步拓展,是8口SPI NOR Flash产品,数据吞吐量可以达到400MB/s,实现了业界超高水平的产品性能,赋能广泛的汽车电子应用。

在封装上,兆易创新更是存储行业的引领者,例如在64Mb容量上,兆易创新推出了业界超小尺寸的3 x 2 x 0.4 mm FO-USON8封装产品,与传统3 x 2 mm USON8封装完全兼容,而传统3 x 2 USON8封装的最大可支持容量是32Mb。这意味着开发者无需改动PCB,仅仅换一颗兆易创新FO-USON8封装的Flash即可实现容量翻倍。不仅如此,今年5月兆易创新重磅推出采用3 x 3 x 0.4 mm FO-USON8封装的GD25LE128EXH芯片,这是目前业界在128Mb容量上能实现的最小塑封封装产品,与传统3 x 4 mm USON8封装完全兼容,而传统3 x 4 mm USON8封装的最大支持容量是64Mb,开发者无需改动PCB,换上GD25LE128EXH芯片便可实现容量翻倍,能够很好地满足可穿戴电子产品对“轻、薄、小”的追求。

探索先进制程SoC的高能效应用:1.2V超低电压Flash为绿碳贡献力量

随着双碳理念的发展,高能效、低功耗的应用需求在半导体领域愈发凸显。与此同时,移动设备、云计算、汽车电子、可穿戴等应用的SoC主芯片也在走向7nm及以下的先进工艺制程;一般而言,制程节点越先进,SoC主芯片性能越高、功耗越低。此时,SoC的核心供电电压也降到了1.2V,若使用常规1.8V的NOR Flash,外围电路设计将变得复杂,产品开发难度也会提升。

如下图所示,左侧的方案是核心电压1.2V的SoC与1.8V的NOR Flash进行通信,SoC设计需要增加升压电路,将内部1.2V电压提升至1.8V,才能匹配外部NOR Flash的1.8V电压水平,这显然增加了电路设计的复杂度和提升了整体的功耗。右侧的方案则是NOR Flash核心供电和IO接口供电电压均为1.2V,与SoC核心电压1.2V保持一致,这样可以简化电源设计、SoC省去升压电路,并且降低系统功耗。

2.png

应对这一趋势,兆易创新推出了1.2V SPI NOR Flash——GD25UF产品系列,在1.2V工作电压下的数据传输速度、读写功耗等关键指标上均达到国际领先水平,可以轻松适配核心电压1.2V的先进制程SoC。同时,相比1.8V NOR Flash,1.2V GD25UF系列在Normal模式下,相同电流情况下的功耗降低33%;在Low Power模式下,相同频率下的功耗更是降低70%。这些出色的特性使得GD25UF系列成为了下一代可穿戴和可移动设备的优先之选。

3.png

另外针对于高性能低功耗的双重需求,兆易创新提出了核心供电1.8V、IO接口电压1.2V的NOR Flash解决方案——GD25NF产品系列。这款产品为先进制程SoC的电路设计提供了新的解决方案:Flash的IO接口电压为1.2V,核心电压1.2V的SoC与其通信无需增加升压电路,简化了SoC电路设计;Flash的核心供电为1.8V,可以保持超高读取和擦写性能,而整体来看,读取功耗相比常规1.8V方案最多可以降低40%。因此该方案也受到了集成商、OEM的广泛关注,目前GD25NF产品系列正处于送样阶段。

作为嵌入式存储的领导者,兆易创新不仅在容量、性能、封装、电压等关键要素发力,也持续聚焦存储器至关重要的可靠性、安全性等诸多方面,使得新一代存储芯片能够满足千行百业的应用需求,助力行业加速创新。

4.png

在研讨会同期,E维智库首届“年度硬科技产业纵横奖”评选活动及颁奖典礼圆满举行,兆易创新GigaDevice荣获“中国技术开拓奖”以及“‘E’马当先新品奖”两座奖杯!Cheers!

来源:兆易创新GigaDevice

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 21

对于初学者而言,对单片机的内存分配往往最让人头疼,很多人学了单片机几年 都不知道单片机内部的内存使用情况是如何分配的。要了解 ROM(flash)、RAM(sram)启动,首先需要对链接器 Linker 如何分配内存有一定的了解。

通常,对于栈生长方向向下的单片机,其内存一般模型是:



一个进程运行时,所占用的内存,可以分为如下几个部分:
1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。
2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS释放。
3、全局变量、静态变量:初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和和未初始化的静态变量在相邻的的另一块区域。程序结束后由系统自动释放。
4、文字常量:常量字符串就是放在这里的。这些数据是只读的,分配在RO-data(只读数据存储区),则被包含在flash中,程序结束后由系统自动释放

5、程序代码(code):存放函数体的二进制代码。

同时,单片机内存被总分为flash(rom)和sram(ram),flash里面的数据掉电可保存,sram中的数据掉电就丢失,sram的执行速度要快于flash,flash容量大于sram

上方的最低内存地址,最高地址,都是在flash和sram中

我们正常下载程序都是下载存储进flash里面,这也是为什么断电可保存的原因

单片机的程序存储分为code(代码存储区)、RO-data(只读数据存储区)、RW-data(读写数据存储区) 和 ZI-data(零初始化数据区)

  • Flash 存储 code和RO-data
  • Sram 存储 RW-data 和ZI-data


在使用MDK编译时可以看到


Code为程序代码部分 = 程序代码区(code)

RO-data 表示 程序定义的常量 = 文字常量区

RW-data 表示 已初始化的全局变量 = 栈区(stack)堆区(heap)全局区(静态区)(static)

ZI-data 表示 未初始化的全局变量

部分参考自:http://blog.chinaunix.net/uid-15473693-id-388637.html

版权声明:
本文为CSDN博主「Z小旋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/as480133937/article/details/87608816

围观 169

全新4 Mb EEPROM存储器将为设计人员提供更高的灵活性和可靠性

便携式消费品和医疗设备,包括健身追踪器、助听器和血糖监测器,以及工业、汽车和其他系统等,通常使用特定客户数据集来优化消费者体验。这些非易失性数据集,包括校准常数、背景条件,用户偏好和不断变化的噪声环境等,通常由终端系统或用户进行每次几个字节的调整。串行电可擦可编程只读存储器(EEPROM)是这些应用的首选存储器,它具备非易失性、字节级控制、方便使用和低功耗的特点。Microchip Technology Inc.(美国微芯科技公司)宣布全新推出密度最高的EEPROM——25CSM04

这款新推出的容量为4 Mb的EEPROM是目前市场上面向开发人员的最大容量EEPROM,将此前的2 Mb密度提高了一倍。到目前为止,开发人员在所有2 Mb+ 非易失性数据集应用程序上一直采用的是低成本的NOR闪存集成电路。由于EEPROM性能超过NOR闪存,为满足客户要求,Microchip推出了容量更大的4 Mb EEPROM。新款EEPROM的优势包括:待机电流更低(从15µA降低至2µA),可执行单字节、多字节和整页写入、扇区擦除/重写时间更短(从300ms缩短至5ms)和擦除/重写次数更多(从10万次提升至100万次)。

Microchip存储器产品事业部副总裁Randy Drwinga表示:“充分挖掘串行EEPROM潜力可以为产品创新提供支持,设计人员现在可以对系统进行重新评估,并利用这项新技术来优化设计性能。”

25CSM04型EEPROM是Microchip阵容庞大的非易失性存储器产品组合的一部分。该产品组合集成了Microchip全部系统解决方案,支持8位、16位和32位单片机和微处理器。Microchip丰富的存储器产品系列包括串行EEPROM、NOR闪存,SRAM和EERAM,这些产品支持所有串行总线标准,以及从128位至64 Mb的所有标准密度。

30多年来,Microchip公司始终致力于推出新的串行EEPROM,每年向客户交付EEPROM器件约10亿件。

开发工具

Microchip的4 Mb串行EEPROM器件受MPLABÒ串行存储器产品入门工具包支持。该工具包含有串行存储器接口板、串行EEPROM入门软件包、USB电缆、包含MPLAB X的集成开发环境的光盘、Total Endurance™软件模型和串行EEPROM接口工具。

供货与定价

25CSM04 系列存储器件提供三种封装选项,10,000件起售,单价2.32美元。欲了解更多信息,请联系Microchip的销售代表、全球授权经销商或访问Microchip官方网站。要购买本文提及的产品,请访问我们的直销网站或联系Microchip授权经销商。

资源

可通过Flickr或联系编辑获取高分辨率图片(可免费发布):
应用图:https://www.flickr.com/photos/microchiptechnology/50252022133/
产品图:https://www.flickr.com/photos/microchiptechnology/50252691076/

Microchip Technology Inc. 简介

Microchip Technology Inc.是致力于智能、互联和安全的嵌入式控制解决方案的领先供应商。其易于使用的开发工具和丰富的产品组合让客户能够创建最佳设计,从而在降低风险的同时减少系统总成本,缩短上市时间。Microchip的解决方案为工业、汽车、消费、航天和国防、通信以及计算市场中12万多家客户提供服务。Microchip总部位于美国亚利桑那州Chandler市,提供出色的技术支持、可靠的产品交付和卓越的质量。详情请访问公司网站www.microchip.com

围观 8

作者:wenzid

内存映射

在一些桌面程序中,整个内存映射是通过虚拟内存来进行管理的,使用一种称为内存管理单元(MMU)的硬件结构来将程序的内存映射到物理RAM。在对于 RAM 紧缺的嵌入式系统中,是缺少 MMU 内存管理单元的。因此在一些嵌入式系统中,比如常用的 STM32 来讲,内存映射被划分为闪存段(也被称为Flash,用于存储代码和只读数据)和RAM段,用于存储读写数据。

STM32 的 Flash 和 RAM 地址范围

笔者标题所说的内存是指 STM32 的 Flash 和 RAM,下图是 ARM Cortex M3 的地址映射图:


从图中我们可以看到 RAM 地址是从 0x2000 0000 开始的,Flash地址是从 0x0800 0000 开始的,笔者将在下文中着重对这两部分进行剖析。

Flash

代码和数据是存放在 flash 中的,下面是将 flash 内部进行细分之后的一张图,图中标明了代码段,数据段以及常量在 flash 中的位置。


如上图所示,Flash 又可以细分为这么几个部分,分别是文本段 (Text),其中文本段中又包含可执行代码 (Executable Code)和常量 (Literal Value),在文本段之后就是只读数据区域 (Read Only Data),当然并不是所有架构的单片机都满足这样一个排布规律,这里只针对ARM Cortex M3 系列,只读数据段后面接着的就是数据复制段 (Copy of Data Section),第一次遇到这个概念的朋友看到数据复制可能会有所疑惑,其实这个段充当的作用是存放程序中初始化为非 0 值的全局变量的初始值,之所以要将初始值存放到这里,是因为全局变量是存放在 RAM 上的,RAM 上的值掉电便丢失,每次上电后这些变量是要进行重新赋值的,而重新赋的值就存放在这里。那为什么不存放初始化为 0 的全局变量初始值呢,原因也很简单,既然是初始化为 0,那么在上电后统一对存放初始化为 0 的全局变量的那块区域清0就好了。

下面举一个例子分析各个变量在上述中的存储位置:

#include <stdio.h>
const int read_only_variable = 2000;
int data = 500;

void my_function(void)
{
	int x = 200;
	char *str = "string";
}

在上述代码中,read_only_variable 是一个用 const 修饰的全局变量,它是只读的,存放在 flash 中的只读数据区域,编译器会给 read_only_variable 分配一个地址,并将 2000 这个数据存放到这个位置。data 这个变量将存放到 RAM 中的RW区域中 (后面将会进行详细讲解),但是 data 后面的初始值 500 将会被存放到数据复制区域中, 也就是上图中从下往上的第三个区域。在 my_function 中的变量 x 将会被存放到 RAM 中的堆栈中,将 x 赋值为 200 ,200 将被存储到 flash 里的 Text 中的常量区 (Literal Valu) 中。str 是一个 char 型的指针变量,它指向的是字符串第一个字符存放的位置,然而对于字符串 string 来讲,它是存放在Text常量区的,所以指针变量指向这个区域的一个地址,但是因为它终归中局部变量,它指向 Flash 的一个地址,但是其本身还是存放于 RAM 中的堆栈上的。

RAM

STM32单片机的片内RAM会被链接文件“分区”为如下几个段:


如上图所示,RAM 中包含了如下几个部分:

  • 栈 (Stack) : 存放局部变量和函数调用时的返回地址
  • 堆 (heap) : 由 malloc 申请,由 free 释放
  • bss : 存放未初始化或者是初始化为 0 的全局变量
  • data : 存放初始化为非 0 值的全局变量

下面举一个简单的例子来说明变量在各个段中的存储位置:

#include <stdio.h>
#include <stdlib.h>
int data_var = 500;
int bss_var0;
int bss_var1 = 0;
static int static_var;

void my_function(void)
{
	static int static_var1 = 0;
	int stack = 0;
	char *buffer;
	const int value = 1;
	buffer = malloc(10);
}

上述变量的命名已经很清楚地表明了变量处于 RAM 中的哪一个段,data_var 是已经初始化的全局变量,存放在 RAM 的 data 区,bss_var0 和 bss_var1是未初始化和初始化为0的全局变量,他们都存放于 RAM 中的 bss段,由 static 修饰的static_var 和 static_var1 都存放于 bss段,区别只在于两个变量的作用域不同。stack 是在函数内部定义的局部变量,其存放于 RAM 的栈区域,用 const 修饰的局部变量 value ,虽然他是只读的,但是它是存储于 RAM 中的栈中的,这里也说明一点,并不是所有用 const 修饰的变量都是存放于只读变量区的。buffer指针变量用 malloc 函数申请了 10 字节的内存空间,那这10字节的内存空间位于堆中。

堆栈溢出

如果在程序运行的过程中,堆的空间也一直在消耗,同时栈的空间也在增加,那么这时堆和栈如果碰到一起,那么就会造成堆栈溢出,从而导致我们的程序跑飞。

STM32中的map文件分析

在用 keil 编译 STM32 工程之后,我们会得到一个 map 文件,map 文件的最底部有这么一个信息:


上图中的各个段是和上文所述是能够进行对应起来的,正如下面这张表所示:


总结

对于 RAM 和 flash 空间都有限的 MCU 来讲,了解各个变量在内存中的存储位置是很有必要的,他能够很好地帮助我们去解决很多问题。

最后如果您觉得文章对您有所帮助,欢迎关注作者个人公众号:wenzi嵌入式软件

本文转自博客园 - wenzi
https://www.cnblogs.com/wenziw5/p/12801667.html

围观 892

这一篇主要讲讲ROM\RAM\Flash的一些零碎知识点,网上也能找到很多资料。

1、ROM

1.1 概述

只读存储器(Read-only memory, ROM),当然从广义上来讲,也有一些器件,例如Flash,EPROM等等,通过某种手段可以编程的,也属于ROM的范畴的。ROM一般用在一些程序的存储和数据的存储,这里程序多半是比较固定的程序(Firmware,固件,一种跟硬件强相关的程序,例如驱动等等),这里的数据多半是固化的表项,查找表等等不会怎么改变的表项。

1.2 基本原理

HDL设计中,对于小ROM,深度和位宽都不大,一般使用组合逻辑就可以做一个ROM。如果数据比较大,比如1K*4B这种,就换一种ROM,使用标准单元Mask ROM,来做存储,如下图所示。百度百科对MASK ROM的定义,是制造商为了要大量生产,事先制作一颗有原始数据的ROM或EPROM当作样本,然后再大量生产与样本一样的 ROM,这一种做为大量生产的ROM样本就是MASK ROM,而烧录在MASK ROM中的资料永远无法做修改。


1.3 分类

一种是真的写了就没法改的ROM;一种是可以写一次的ROM(one-time Programmable read-only memory),使用的高压反熔丝技术;一种是可擦出的能、能写多次的ROM(Erasable programmable read only memory),使用紫外线擦除;一种是电擦除的EEPROM(Electrically Erasable programmable read only memory,EEPROM),再到后来东芝搞的Flash。工业界第一种ROM和最后一种的Flash用的比较多。

2、Flash

1.1 原理

非遗失性的存储,是在ROM的基础上演进出来的。目前主流是NAND和NOR。模拟的团队来做flash。可以任意地址访问。对于连续地址读访问,NAND和NOR的带宽差距不大。NAND是存储块访问,NOR可以Byte访问。总的来说,NOR特点就是比较细的访问,基本启动程序放NOR中,稳定性和可靠性也稍微高一些;NAND访问数据块比较好,通常数据放NAND中,而且成本也较低。

图: NOR Flash的时序

ale: address lock enable;一般Flash不会直接集成到芯片中,如果集成在芯片外面,IO数量增加,NOR解决办法就是数据和地址复用,当ale为高的时候,addr上走的是地址,当ale为低且csn为低的时候,addr上走的是数据。
wen:write enable;用于指示读还是写。
rdy:对于芯片和FLash分离,因为是异步接口,所以使用rdy信号用来握手。对于MCU来讲,如果把小的NOR flash集成到芯片内部,就可以直接使用同步接口,也就是SRAM的接口。


图:NAND Flash时序

CLE:Chip Lock Enable;

可以看到NAND也是数据和地址线复用的。NAND可以大块的数据读写,多了些Command。NAND Flash在MCU中的比较少。Flash跟ROM和RAM不同,不想数字的可以直接用工具生成,这个需要模拟团队自己做。

3、RAM

1.1 基本概念

Static Random Access Memory,静态的,随机的访问。静态的,不用刷新,不像DRAM需要随时刷新,但是SRAM没有DRAM的集成度高,面积比较大。另外,速度和功耗比DRAM好一些。

图:存储一个bit的SRAM的结构

6个CMOS管子组成一个SRAM单元,Q1和Q3组成反相器,Q2和Q4组成反相器,两个反相器组成一个环路,这样,只要不掉电,这个逻辑环就不会变,跟触发器原理有点类似。Q5用于控制输入,Q6用于控制输出,两个管子相当于输入和输出的开关。

1.2 分类

single port SRAM:不会发生读写冲突,因为之后一个端口,要么读,要么写;尽量做到先写后读,或者初始化再度,否则读出来的数据有可能不对(原因是SRAM的软失效)。对于软失效,可以加一个ECC校验,例如寸10bir,其中2bit是校验位。

Two port SRAM:FOGA的读写冲突允许,但是ASIC不可以,在同一个时刻,读地址和写地址不要一样。FIFO一般是TP SRAM。

Dual port SRAM:也是两个端口A、B,可以A读B写,也可以A写B读,不在局限于只能谁读谁写。可靠性,面积和率都不是很好。

工程上,使用两个SRAM,做乒乓操作,实现TP SRAM的功能,一个读的时候,另外一个写。两个SRAM加起来面积可能比TP SRAM小一些。对于几百几K的bit位,直接用D触发器来存储比较好。

1.3 接口

SRAM有一个需要注意下,就是Redundancy接口,用于扩展SRAM的,在比较的大的memory中会用,例如cache,这个接口可选的。用法的话,举个例子这个就是说,当SRAM中有一块坏掉了,这个时候就在尾部在接一块SRAM存储,就把坏块的地址映射到新加的存储块中,这个时候就要用的Redundancy了。

1.4 时序

对于Single port SDRAM的时序,如下图:


读是在一个时钟周期完成,如果是连续写,红点处,write enable是可以一直拉低的;读的话,是要在下一个时刻才能采到数据,注意下。

本文转自:博客园 - yiwenbo,转载此文目的在于传递更多信息,版权归原作者所有。

围观 286

1 、存储器系统的层次架构

计算机系统的存储器被组织城一个 金字塔的层次结构。自上而下为:CPU 内部寄存器、芯片内部高速缓存(cache)、芯片外部高速缓存(SRAM、SDRAM、DRAM) 、主存储器(FLASH、EEPROM)、外部存储器(磁盘、光盘、CF 卡、SD 卡)和远程二级存储器(分布式文件系统 、WEB 服务器),6个层次的结构。上述设备从上而下,依次速度更慢、容量更大、访问频率更小,造价更便宜。

2、高速缓存 (cache)

(1)工作原理 :主要利用了程序的 局部性特点。地址映象是指把主存地址空间映象到 cache 的地址空间。地址变换是指当程序或数据已经装入到 cache 后,在实际运行过程中,把主存地址如何编程 cache 空间的地址。

常用的地址映象和地址变换的方式有:

A、直接映象和变换:速度快,造价低,但有局限性,不能充分利用 cache 的好处。
B、组相联地址映象和变换:速度稍慢但是命中率高。
C、全相联地址映象和变换:可以任意映射。
D、常用的 cache 替换算法:轮转法和随机替换算法。
  
(2)高速缓存的分类:

A、统一 cache 和独立的数据/指令 cache
B、写通 cache 和写回 cache
C、读操作分配 cache 和写操作分配 cache

3 、存储管理单元( MMU )

MMU 在 CPU 和物理内存之间进行地址转换,将地址从逻辑空间映射到物理空间,这个过程称为 内存映射。

MMU 主要完成下面的工作:

A. 虚拟存储空间到物理空间的映射。
B. 存储器访问权限的控制。
C. 设置虚拟存储空间的缓冲特性。

嵌入式系统中常常采用 页式存储管理。为了管理这些页引入了页表的概念。页表是位于内存中的表,它的每一行对应虚拟存储空间的一个页,该行包含了该虚拟内存页对应的物
理内存页的地址、该页的访问权限和该页的缓冲特性等。从虚拟地址到物理地址的变换过程就是 查询页表的过程。由于页表存储在内存中的,整个查询过程需要付出很大的代价。根据程序局部性的特点,增加了一个小容量、高速度的存储部件来存放当前访问需要的地址变换条目,这个存储部件称为: 地址转换后备缓冲器 (TLB)。

当 CPU 访问内存时,首先在 TLB 中查找需要的地址变换条目,如果该条目不存在,CPU 再从内存中的页表中查询,并把相应的结果添加到 TLB 中,更新它的内容。嵌入式系统中虚拟存储空间到物理空间的映射以 内存块为单位进行。即虚拟存储空间中一块连续的存储空间被映射到物理存储空间中同样大小的一块连续存储空间。在页表和 TLB 中,每一个地址变换条目实际上记录了一个虚拟存储空间的内存块的基地址与物理存储空间相对应的一个内存块的基地址之间的对应关系。在 MMU 中实现虚拟地址到物理地址的映射是通过 两级页表来实现的。禁止 MMU 时,所有物理地址和虚拟地址相等,即使用 平板存储模式。

4 、内存保护

操作系统通常利用 U MMU 来实现操作系统内核与应用程序之间的隔离,以及应用程序与应用程序之间的隔离。

内存保护包含两个方面的内容:

A. 防止地址越界,每个应用程序都有自己独立的地址空间。
B. 防止越权操作,每个应用程序都有自己的访问权限。

5 、实模式与保护模式

在嵌入式系统中,常见的存储管理方案可以分为两大类: 实模式和 保护模式。

(1)实模式:内存的平面使用模式。特点有:

A. 不划分“系统空间”与“用户空间”,无须进行地址映射。
B. 操作系统与应用程序之间不再有物理的边界。
C. 系统中的“任务”或“进程”,实际上全是内核线程。

在实模式下, 内存布局可以分为5个段:

A. 代码段:包含操作系统和应用程序的所有代码。
B. 数据段:所有带有初始值的全局变量。
C. BSS 段:所有未带初始值的全局变量。
D. 堆空间:动态分配的内存空间。
E. 栈空间:保存上下文以及函数调用时的局部变量和形参。

在实模式存储管理方案下,主要的工作在于 堆空间的管理,即如何来管理空闲的堆空间、如何来分配内存、如何来回收内存等等。

(2)保护模式:处理器中必须有 U MMU 硬件并启用。特点有:

A. 系统内核和用户程序都有各自独立的地址空间。
B. 每个应用程序只能访问自己的地址空间,不能去破坏操作系统和其他应用程序的代码和数据。

6 、分区存储管理

为了实现多道程序系统而采用的最简单的内存管理。基本思路:把整个内存划分为两大区域,即系统区和用户区,然后再把用户区划分为若干个分区,每个任务占有其中的一个分区。这样,在内存当中就同时保留多个任务,让他们共享整个用户区,从而实现多个任务的并发运行。

分区存储管理又可以分为两类: 固定分区和 可变分区。

(1)固定分区:各个用户分区的个数、位置和大小一旦确定后,就固定不变,不能再修改。

优点:易于实现,系统开销较小。

缺点:内存利用率不高,分区总数固定。

(2)可变分区:动态创建,在装入一个程序时,系统将根据它的需求和内存空间的使用情况来决定是否分配。

优点:动态变化,非常灵活。

缺点:可能存在外碎片。

在实现可变存储管理技术的时候,需要考虑三个方面的问题:

A. 内存管理的数据结构
B. 内存的分配算法
C. 内存的回收算法

7 、地址映射

地址映射也叫地址重定位。逻辑地址和物理地址是完全不同的,不能用逻辑地址来直接访问内存单元。为了保证 CPU 在执行指令的时候,可以正确地访问内存单元,需要将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址。这个过程称为: 地址映射。地址映射由存储管理单元 MMU 来完成。

(1)地址映射主要有两种方式:静态地址映射和动态地址映射。

A、静态地址映射:当用户程序被装入内存时,直接对指令代码进行修改,一次性地实现逻辑地址到物理地址的转换。

B、动态地址映射:当用户程序被装入内存时,不对指令代码做任何修改,而是在程序的运行过程中,当它需要访问内存单元的时候,再来进行地址转换。在具体实现时,这项转换工作一般是由硬件的地址映射机制来完成的。通常设置一个 基地址寄存器 ,或者叫重定位寄存器。当一个任务被调度运行时,就把它所在分区的起始地址装入到整个寄存器中。然后 ,在程序运行的过程中,当需要访问某个内存单元时,硬件就会自动地将其中的逻辑地址加上基地址寄存器中的内容,从而得到实际的物理地址,并且按照这个物理地址区执行。这个基地址寄存器位于 MMU 的内部,整个地址映射过程是自动运行的。从理论上说,每访问一次内存都要进行一次地址映射。

8 、页式存储管理(重点)

(1)基本思路:把物理内存划分为许多固定大小的内存块,称为 物理页面;把逻辑地址空间也划分为大小相同的块,称为 逻辑页面。当一个用户程序被装入内存时,不是以整个程序为单位,把它存放在一整块连续的区域,而是以页面为单位来进行分配的。对于一个大小为 N 的页面程序,需要有 N 个空闲的物理页面来把它装载。这些物理页面不一定是要连续的。在页式存储管理中需要解决三个问题:数据结构、内存分配与回收、地址映射。

数据结构有两个:页表和物理页面表。

A. 页表:给出了任务逻辑页面号和内存中物理页面号之间的对应关系。
B. 物理页面表:描述内存空间中,各个物理页面的使用情况。

内存的分配过程:

A. 对于一个新来的任务,计算它所需要的页面数 N,然后查看位示图,看是否还有 N 个空闲的物理页面。
B. 如果有足够的空闲物理页面,就去申请一个页表,其长度为 N,并把页表的起始地址填入到该任务的控制块中。
C. 分配 N 个空闲的物理页面,把他们的变换填到页表中,建立逻辑页面与物理页面直接的对应关系。
D. 修改位示图,对刚刚被占用的那些物理页面进行标记。

(2)地址映射的基本思路:

A. 逻辑地址分析:对逻辑地址,找到它所在的逻辑页面,以及它在页面内的偏移地址。
B. 页表查找:根据逻辑页面号,从页表中找出它对应的物理页面号。
C. 物理地址合成:根据物理页面号和页内偏移地址,最终确定物理地址。
  
(3)逻辑地址分析:

页面的大小都是2的整数次幂。对于给定的一个逻辑地址,可以直接把它的高位部分作为逻辑页面号 ,把它的低位部分作为页内偏移地址。例如,假设页面的大小是4KB,即2的12次幂,逻辑地址为32为,那么在一个逻辑地址当中,最低12位为页内偏移地址,而剩下的20位就是逻辑页面号。

计算方法:
逻辑页面号=逻辑地址/页面大小
页内偏移量=逻辑地址%页面大小

页表查找:
页表作为操作系统的一个数据结构,通常保存在内核的地址空间中。页表基地址寄存器用来指向页表的起始地址;页表长度寄存器用来指示页表的大小,即对于当前任务,它总共包含有多少个页面。

物理地址合成:
假设物理页面号为 f,页内偏移地址为 offset,每个页面大小为2n ,那么相应的物理地址为: f×2n+offset。

9 、虚拟存储管理

(1)程序局部性原理: 时间局限性和 空间局限性。
(2)虚拟页式存储管理:在页式管理的基础上,增加了 请求调页和 页面置换的功能。

(3)基本思路 :当一个用户程序需要调入内存去运行时,不是将这个程序的所有页面都装入内存,而是只装载部分的页面,就可以启动这个程序运行。在运行过程中,如果发现要执行的指令或者访问的数据不在内存当中,就向系统发出缺页中断请求,然后系统在处理这个中断请求时,就会将保存在外存中的相应页面调入内存,从而使该程序能继续运行。在虚拟页式存储管理中,页表包含:逻辑页面号、物理页面号、驻留位、保护位、修改位和访问位。  

(4)常用的页面置换算法:

A. 最优页面置换算法:理想化算法。
B. 最近最久未使用算法:链表法和栈方法。寻找长时间没有被访问的页面。
C. 最不常用算法:每个页面设置一个访问计数器。
D. 先进先出算法:性能比较差。
E. 时钟页面置换算法:把页面组成环形链表,类似时钟面。

一般来说,当一个任务刚刚启动的时候,它会不断去访问一些新的页面,然后逐步建立一个比较稳定的工作集。 工作集是指当前任务正在使用的逻辑页面的集合。如果分配给一个任务的物理页面数太少,不能包含整个的工作集,任务将会造成很多缺页中断,需要频繁地进行页面置换,这种现象称为“ 抖动”。

转自: 沉舟侧畔

围观 630
订阅 RSS - 存储