分段存储器管理的地址映射
⑴ 单片机内存映射是什么意思为什么会出现映射这么一个概念它有什么作用和功能
许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还有用户需求的不断增大轮哗,应用腊汪行程序的规模也随之膨胀起来,终于一个难题在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为覆盖块(overlay)的片段。覆盖块0首先运行,陵闷结束时他将调用另一个覆盖块。虽然覆盖块的交换是由OS完成的,但是必须先由程序员把程序先进行分割,这是一个费时费力的工作,而且相当枯燥。人们必须找到更好的办法从根本上解决这个问题。不久人们找到了一个办法,这就是虚拟存储器(virtual memory).虚拟存储器的基本思想是程序,数据,堆栈的总的大小可以超过物理存储器的大小,操作系统把当前使用的部分保留在内存中,而把其他未被使用的部分保存在磁盘上。
在没有使用虚拟存储器的机器上,地址被直接送到内存总线上,使具有相同地址的物理存储器被读写;而在使用了虚拟存储器的情况下,虚拟地址不是被直接送到内存地址总线上,而是送到存储器管理单元MMU,把虚拟地址映射为物理地址。
⑵ 什么是寄存器映射
什么是存储器映射?
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给物理存储器分配逻辑地址的过程就称为存储器映射,通过这些逻辑地址就可以访问到相应的存储器的物理存储单元。如果给存储器再分配一个地址就叫存储器重映射。
内存分配:
如STM32,对于片上外设,它们以四个字节为一个单元,共32bit,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过C语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
STM32F103Z把4GB的内存空间分为8各部分,每一个部分都是是512MB。每个部分都有自己的功能。
比如我们单片机里的Flash存储器在分组block0里面,单片机里的SRAM存储器在分组Block1里面(64KB)。
外设寄存器结构体定义仅仅是一个定义,要想实现给这个结构体赋值就达到操作寄存器的效果,我们还需要找到该寄存器的地址,就把寄存器地址跟结构体的地址对应起来。
如何访问STM32寄存器内容?
寄存器就是一些有特定功能的内存单元,所以我们访问stm32寄存器就是操作stm32的内存单元。我们可以用C语言的指针来stm32的内存单元。
总线:
上面是stm32里面的3根总线,总线基地址是总线的初地址,相对外设基地址的偏移是当前总线距离上一根总线的距离地址大小也就是上跟总线所占的地址的大小。
⑶ 分区存储管理中常用哪些分配策略
1、固定分区存储管理
其基本思想是将内存划分成若干固定大小的分区,每个分区中最多只能装入一个作业。当作业申请内存时,系统按一定的算法为其选择一个适当的分区,并装入内存运行。由于分区大小是事先固定的,因而可容纳作业的大小受到限制,而且当用户作业的地址空间小于分区的存储空间时,造成存储空间浪费。
一、空间的分配与回收
系统设置一张“分区分配表”来描述各分区的使用情况,登记的内容应包括:分区号、起始地址、长度和占用标志。其中占用标志为“0”时,表示目前该分区空闲;否则登记占用作业名(或作业号)。有了“分区分配表”,空间分配与回收工作是比较简单的。
二、地址转换和存储保护
固定分区管理可以采用静态重定位方式进行地址映射。
为了实现存储保护,处理器设置了一对“下限寄存器”和“上限寄存器”。当一个已经被装入主存储器的作业能够得到处理器运行时,进程调度应记录当前运行作业所在的分区号,且把该分区的下限地址和上限地址分别送入下限寄存器和上限寄存器中。处理器执行该作业的指令时必须核对其要访问的绝对地址是否越界。
三、多作业队列的固定分区管理
为避免小作业被分配到大的分区中造成空间的浪费,可采用多作业队列的方法。即系统按分区数设置多个作业队列,将作业按其大小排到不同的队列中,一个队列对应某一个分区,以提高内存利用率。
2、可变分区存储管理
可变分区存储管理不是预先将内存划分分区,而是在作业装入内存时建立分区,使分区的大小正好与作业要求的存储空间相等。这种处理方式使内存分配有较大的灵活性,也提高了内存利用率。但是随着对内存不断地分配、释放操作会引起存储碎片的产生。
一、空间的分配与回收
采用可变分区存储管理,系统中的分区个数与分区的大小都在不断地变化,系统利用“空闲区表”来管理内存中的空闲分区,其中登记空闲区的起始地址、长度和状态。当有作业要进入内存时,在“空闲区表”中查找状态为“未分配”且长度大于或等于作业的空闲分区分配给作业,并做适当调整;当一个作业运行完成时,应将该作业占用的空间作为空闲区归还给系统。
可以采用首先适应算法、最佳(优)适应算法和最坏适应算法三种分配策略之一进行内存分配。
二、地址转换和存储保护
可变分区存储管理一般采用动态重定位的方式,为实现地址重定位和存储保护,系统设置相应的硬件:基址/限长寄存器(或上界/下界寄存器)、加法器、比较线路等。
基址寄存器用来存放程序在内存的起始地址,限长寄存器用来存放程序的长度。处理机在执行时,用程序中的相对地址加上基址寄存器中的基地址,形成一个绝对地址,并将相对地址与限长寄存器进行计算比较,检查是否发生地址越界。
三、存储碎片与程序的移动
所谓碎片是指内存中出现的一些零散的小空闲区域。由于碎片都很小,无法再利用。如果内存中碎片很多,将会造成严重的存储资源浪费。解决碎片的方法是移动所有的占用区域,使所有的空闲区合并成一片连续区域,这一技术称为移动技术(紧凑技术)。移动技术除了可解决碎片问题还使内存中的作业进行扩充。显然,移动带来系统开销加大,并且当一个作业如果正与外设进行I/O时,该作业是无法移动的。
3、页式存储管理
基本原理
1.等分内存
页式存储管理将内存空间划分成等长的若干区域,每个区域的大小一般取2的整数幂,称为一个物理页面有时称为块。内存的所有物理页面从0开始编号,称作物理页号。
2.逻辑地址
系统将程序的逻辑空间按照同样大小也划分成若干页面,称为逻辑页面也称为页。程序的各个逻辑页面从0开始依次编号,称作逻辑页号或相对页号。每个页面内从0开始编址,称为页内地址。程序中的逻辑地址由两部分组成:
逻辑地址
页号p
页内地址 d
3.内存分配
系统可用一张“位示图”来登记内存中各块的分配情况,存储分配时以页面(块)为单位,并按程序的页数多少进行分配。相邻的页面在内存中不一定相邻,即分配给程序的内存块之间不一定连续。
对程序地址空间的分页是系统自动进行的,即对用户是透明的。由于页面尺寸为2的整数次幂,故相对地址中的高位部分即为页号,低位部分为页内地址。
3.5.2实现原理
1.页表
系统为每个进程建立一张页表,用于记录进程逻辑页面与内存物理页面之间的对应关系。地址空间有多少页,该页表里就登记多少行,且按逻辑页的顺序排列,形如:
逻辑页号
主存块号
0
B0
1
B1
2
B2
3
B3
2.地址映射过程
页式存储管理采用动态重定位,即在程序的执行过程中完成地址转换。处理器每执行一条指令,就将指令中的逻辑地址(p,d)取来从中得到逻辑页号(p),硬件机构按此页号查页表,得到内存的块号B’,便形成绝对地址(B’,d),处理器即按此地址访问主存。
3.页面的共享与保护
当多个不同进程中需要有相同页面信息时,可以在主存中只保留一个副本,只要让这些进程各自的有关项中指向内存同一块号即可。同时在页表中设置相应的“存取权限”,对不同进程的访问权限进行各种必要的限制。
4、段式存储管理
基本原理
1.逻辑地址空间
程序按逻辑上有完整意义的段来划分,称为逻辑段。例如主程序、子程序、数据等都可各成一段。将一个程序的所有逻辑段从0开始编号,称为段号。每一个逻辑段都是从0开始编址,称为段内地址。
2.逻辑地址
程序中的逻辑地址由段号和段内地址(s,d)两部分组成。
3.内存分配
系统不进行预先划分,而是以段为单位进行内存分配,为每一个逻辑段分配一个连续的内存区(物理段)。逻辑上连续的段在内存不一定连续存放。
3.6.2实现方法
1.段表
系统为每个进程建立一张段表,用于记录进程的逻辑段与内存物理段之间的对应关系,至少应包括逻辑段号、物理段首地址和该段长度三项内容。
2.建立空闲区表
系统中设立一张内存空闲区表,记录内存中空闲区域情况,用于段的分配和回收内存。
3.地址映射过程
段式存储管理采用动态重定位,处理器每执行一条指令,就将指令中的逻辑地址(s,d)取来从中得到逻辑段号(s),硬件机构按此段号查段表,得到该段在内存的首地址S’, 该段在内存的首地址S’加上段内地址d,便形成绝对地址(S’+d),处理器即按此地址访问主存。
5、段页式存储管理
页式存储管理的特征是等分内存,解决了碎片问题;段式存储管理的特征是逻辑分段,便于实现共享。为了保持页式和段式上的优点,结合两种存储管理方案,形成了段页式存储管理。
段页式存储管理的基本思想是:把内存划分为大小相等的页面;将程序按其逻辑关系划分为若干段;再按照页面的大小,把每一段划分成若干页面。程序的逻辑地址由三部分组成,形式如下:
逻辑地址
段号s
页号p
页内地址d
内存是以页为基本单位分配给每个程序的,在逻辑上相邻的页面内存不一定相邻。
系统为每个进程建立一张段表,为进程的每一段各建立一张页表。地址转换过程,要经过查段表、页表后才能得到最终的物理地址。
⑷ 分页存储管理的实现原理
采用分页存储器允许把一个作业存放到若干不相邻的分区中,既可免去移动信息的工作,又可尽量减少主存的碎片。分页式存储管理的基本原理如下:
1、 页框:物理地址分成大小相等的许多区,每个区称为一块;
2、址分成大小相等的区,区的大小与块的大小相等,每个称一个页面。
3、 逻辑地址形式:与此对应,分页存储器的逻辑地址由两部分组成,页号和单元号。逻辑地址格式为 页号 单元号(页内地址) 采用分页式存储管理时,逻辑地址是连续的。所以,用户在编制程序时仍只须使用顺序的地址,而不必考虑如何去分页。
4、页表和地址转换:如何保证程序正确执行呢?
采用的办法是动态重定位技术,让程序的指令执行时作地址变换,由于程序段以页为单位,所以,我们给每个页设立一个重定位寄存器,这些重定位寄存器的集合便称页表。页表是操作系统为每个用户作业建立的,用来记录程序页面和主存对应页框的对照表,页表中的每一栏指明了程序中的一个页面和分得的页框的对应关系。绝对地址=块号*块长+单元号 以上从拓扑结构角度分析了对称式与非对称式虚拟存储方案的异同,实际从虚拟化存储的实现原理来讲也有两种方式;即数据块虚拟与虚拟文件系统. 数据块虚拟存储方案着重解决数据传输过程中的冲突和延时问题.在多交换机组成的大型Fabric结构的SAN中,由于多台主机通过多个交换机端口访问存储设备,延时和数据块冲突问题非常严重.数据块虚拟存储方案利用虚拟的多端口并行技术,为多台客户机提供了极高的带宽,最大限度上减少了延时与冲突的发生,在实际应用中,数据块虚拟存储方案以对称式拓扑结构为表现形式. 虚拟文件系统存储方案着重解决大规模网络中文件共享的安全机制问题.通过对不同的站点指定不同的访问权限,保证网络文件的安全.在实际应用中,虚拟文件系统存储方案以非对称式拓扑结构为表现形式. 虚拟存储技术,实际上是虚拟存储技术的一个方面,特指以CPU时间和外存空间换取昂贵内存空间的操作系统中的资源转换技术 基本思想:程序,数据,堆栈的大小可以超过内存的大小,操作系统把程序当前使用的部分保留在内存,而把其他部分保存在磁盘上,并在需要时在内存和磁盘之间动态交换,虚拟存储器支持多道程序设计技术 目的:提高内存利用率 管理方式
A 请求式分页存储管理 在进程开始运行之前,不是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其他页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面
B 请求式分段存储管理 为了能实现虚拟存储,段式逻辑地址空间中的程序段在运行时并不全部装入内存,而是如同请求式分页存储管理,首先调入一个或若干个程序段运行,在运行过程中调用到哪段时,就根据该段长度在内存分配一个连续的分区给它使用.若内存中没有足够大的空闲分区,则考虑进行段的紧凑或将某段或某些段淘汰出去,这种存储管理技术称为请求式分段存储管理
⑸ 分段存储管理需提供二维地址
一. 分页存储管理
1.基本思想
用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配。
2. 分页存储管理的地址机构
15 12 11 0
页号P 页内位移量W
页号4位,每个作业最多2的4次方=16页,表示页号从0000~1111(24-1),页内位移量的位数表示页的大小,若页内位移量12位,则2的12次方=4k,页的大小为4k,页内地址从000000000000~111111111111
若给定一个逻辑地址为A,页面大小为L,则
页号P=INT[A/L],页内地址W=A MOD L
3. 页表
分页系统中,允许将进程的每一页离散地存储在内存的任一物理块中,为了能在内存中找到每个页面对应的物理块,系统为每个进程建立一张页面映射表,简称页表。页表的作用是实现从页号到物理块号的地址映射。
页表:
页号 物理块号 存取控制
0 2
1 15(F)
2 14(E)
3 1
4. 地址变换
(1) 程序执行时,从PCB中取出页表始址和页表长度(4),装入页表寄存器PTR。
(2) 由分页地址变换机构将逻辑地址自动分成页号和页内地址。
例:11406D=0010|110010001110B=2C8EH
页号为2,位移量为C8EH=3214D
或11406 DIV 4096=2
11406 MOD 4096=3214
(3) 将页号与页表长度进行比较(2<4),若页号大于或等于页表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
(4) 将页表始址与页号和页表项长度的乘积相加,便得到该页表项在页表中的位置。
(5) 取出页描述子得到该页的物理块号。 2 14(E)
(6) 对该页的存取控制进行检查。
(7) 将物理块号送入物理地址寄存器中,再将有效地址寄存器中的页内地址直接送入物理地址寄存器的块内地址字段中,拼接得到实际的物理地址。
例:0010|110010001101B
1110|110010001101B=EC8EH=60558D
或 14*4096+3214=60558D
5. 具有快表的地址变换机构
分页系统中,CPU每次要存取一个数据,都要两次访问内存(访问页表、访问实际物理地址)。为提高地址变换速度,增设一个具有并行查询能力的特殊高速缓冲存储器,称为“联想存储器”或“快表”,存放当前访问的页表项。
二.分段存储管理
1.基本思想
将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。
2. 分段存储方式的引入
方便编程
分段共享
分段保护
动态链接
动态增长
3. 分段地址结构
作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。例程序段、数据段等。每个段都从0开始编址,并采用一段连续的地址空间。
段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。整个作业的地址空间是二维的。
15 12 11 0
段号 段内位移量
段号4位,每个作业最多24=16段,表示段号从0000~1111(24-1);段内位移量12位,212=4k,表示每段的段内地址最大为4K(各段长度不同),从000000000000~111111111111
4. 段表
段号 段长 起始地址 存取控制
0 1K 4096
1 4K 17500
2 2K 8192
5. 地址变换
(1). 程序执行时,从PCB中取出段表始址和段表长度(3),装入段表寄存器。
(2). 由分段地址变换机构将逻辑地址自动分成段号和段内地址。
例:7310D=0001|110010001110B=1C8EH
段号为1,位移量为C8EH=3214D
(3). 将段号与段表长度进行比较(1<3),若段号大于或等于段表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
(4). 将段表始址与段号和段表项长度的乘积相加,便得到该段表项在段表中的位置。
(5). 取出段描述子得到该段的起始物理地址。1 4K 17500
(6). 检查段内位移量是否超出该段的段长(3214<4K),若超过,产生越界中断。
(7). 对该段的存取控制进行检查。
(8). 将该段基址和段内地址相加,得到实际的物理地址。
例:0001|110010001101B
起始地址17500D+段内地址3214D=20714D
三.分页与分段的主要区别
分页和分段有许多相似之处,比如两者都不要求作业连续存放.但在概念上两者完全不同,主要表现在以下几个方面:
(1)页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要.段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要.
(2)页的大小固定,由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的.而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分.
(3)分页的作业地址空间是一维的.分段的地址空间是二维的.
四.段页式存储管理
1.基本思想:
分页系统能有效地提高内存的利用率,而分段系统能反映程序的逻辑结构,便于段的共享与保护,将分页与分段两种存储方式结合起来,就形成了段页式存储管理方式。
在段页式存储管理系统中,作业的地址空间首先被分成若干个逻辑分段,每段都有自己的段号,然后再将每段分成若干个大小相等的页。对于主存空间也分成大小相等的页,主存的分配以页为单位。
段页式系统中,作业的地址结构包含三部分的内容:段号 页号 页内位移量
程序员按照分段系统的地址结构将地址分为段号与段内位移量,地址变换机构将段内位移量分解为页号和页内位移量。
为实现段页式存储管理,系统应为每个进程设置一个段表,包括每段的段号,该段的页表始址和页表长度。每个段有自己的页表,记录段中的每一页的页号和存放在主存中的物理块号。
2.地址变换的过程:
(1)程序执行时,从PCB中取出段表始址和段表长度,装入段表寄存器。
(2)由地址变换机构将逻辑地址自动分成段号、页号和页内地址。
(3)将段号与段表长度进行比较,若段号大于或等于段表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
(4)将段表始址与段号和段表项长度的乘积相加,便得到该段表项在段表中的位置。
(5)取出段描述子得到该段的页表始址和页表长度。
(6)将页号与页表长度进行比较,若页号大于或等于页表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
(7)将页表始址与页号和页表项长度的乘积相加,便得到该页表项在页表中的位置。
(8)取出页描述子得到该页的物理块号。
(9)对该页的存取控制进行检查。
(10)将物理块号送入物理地址寄存器中,再将有效地址寄存器中的页内地址直接送入物理地址寄存器的块内地址字段中,拼接得到实际的物理地址。
⑹ 【操作系统】01--存储器的层次结构
操作系统存储器,如何对存储器进行有效的管理,直接影响着存储器的利用率和系统性能。
1、存储器的层次结构
2、程序的装入和链接
3、连续分配存储管理方式
4、分页存储管理方式
5、分段存储管理方式
内部碎片和外部碎片
逻辑地址和物理地址
内存分配策略
分页的地址变换,页表的使用
分页和分段的优缺点
1、存储的层次结构
这个图不怎么看的清,总体是三个部分:存储器的层次结构、程序的装入和链接、连续分配存储管理方式
====================
(1)内存分配——为每个进程分配一定的内存空间
(2)地址映射——把程序中所用的相对地址转换成内存的物理地址
(3)内存保护——检查地址的合法性,防止越界访问
(4)内存扩充——解决“求大于供”的问题,采用虚拟存储技术
内存分配
内存分配的主要任务是:为每一道程序分配内存空间,使它们“各得其所”;当程序撤消时,则收回它占用的内存空间。分配时注意提高存储器的利用率。
地址映射
目标程序所访问的地址是逻辑地址集合的地址空间,而内存空间是内存中物理地址的集合,在多道程序环境下,这两者是不一致的,因此,存储管理必须提供地址映射功能,用于把程序地址空间中的逻辑地址转换为内存空间中对应的物理地址。
内存保护
内存保护的任务是确保每道程序都在自己的内存空间运行,互不干扰。保护系统程序区不被用户侵犯(有意或无意的),不允许用户程序读写不属于自己地址空间的数据(系统区地址空间,其他用户程序的地址空间)。
内存扩充
内存扩充的任务是从逻辑上来扩充内存容量,使用户认为系统所拥有的内存空间远比其实际的内存空间(硬件RAM)大的多。
【缓存都在其使用的工具之前,目的是为了减少访问次数】
2.1 主存储器
主存储器是计算机系统中的一个主要部件,用于保存进程运行时的程序和数据,CPU的控制部件只能从主存储器中取得指令和数据,数据能够从主存储器中读取并将他们装入到寄存器中,或者从寄存器存入到主存储器,CPU与外围设备交换的信息一般也依托于主存储器地址空间。但是,主存储器的访问速度远低于CPU执行指令的速度,于是引入了寄存机和告诉缓冲。
2.2 寄存器
寄存器访问速度最快,能与CPU协调工作,价格昂贵,容量不大,寄存器用于加速存储器的访问速度,如用寄存器存放操作数,或用作地址寄存器加快地址转换速度等。
2.3 高速缓存
高速缓存容量大于或远大于寄存器,但小于内存,访问速度高于主内存器,根据程序局部性原理,将主存中一些经常访问的信息存放在高速缓存中, 减少访问主存储器的次数 ,可大幅度提高程序执行速度。通常,进程的程序和数据存放在主存,每当使用时,被临时复制到高速缓存中,当CPU访问一组特定信息时,首先检查它是否在高速缓存中,如果已存在,则直接取出使用,否则,从主存中读取信息。有的计算机系统设置了两级或多级高速缓存,一级缓存速度最高,容量小,二级缓存容量稍大,速度稍慢。
2.4 磁盘缓存
磁盘的IO速度远低于对主存的访问速度,因此将频繁使用的一部分磁盘数据和信息暂时存放在磁盘缓存中, 可减少访问磁盘的次数, 磁盘缓存本身并不是一种实际存在的存储介质,它依托于固定磁盘,提供对主存储器空间的扩充,即利用主存中的存储空间,来暂存从磁盘中读出或写入的信息,主存可以看做是辅存的高速缓存,因为,辅存中的数据必须复制到主存方能使用,反之,数据也必须先存在主存中,才能输出到辅存。
主存储器简称 主存或内存 , 用于保存程序运行时的指令和数据.
寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和 地址 .
通常, 处理机从指存中读出数据放入指令寄存器, 这一时间段我们称之为取指周期; 处理机从数存中读取数据放入数据寄存器, 再流入运算器, 这一时间段我们称之为执行周期.
高速缓存和磁盘缓存:
高速缓冲存储器是介于寄存器和存储器之间的存储器, 主要用于备份主存中较常用的数据, 用来减少处理机对主存储器的访问次数, 提高运行效率.
磁盘缓存主要用于暂时存放频繁使用的一部分磁盘数据和信息, 以减少访问磁盘的次数.