当前位置:首页 » 文件传输 » 分页访问的外部数据存储器
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

分页访问的外部数据存储器

发布时间: 2022-07-16 10:58:22

❶ 关于单片机访问外部数据存储器,P2口问题。

当单片机读写外部存储器过后,P2口在访问完之后,就又变回IO口的通用状态(即0xFF)。实际上,它的输出“0xFF”状态是一直存在的,这也是为什么在访问外部存储器前需要将P0,P2置为0xFF的原因。

❷ 单片机存储器的详细说明

楼上说的不全给你补充完整

data 直接访问内部数据存储器(128字节),访问速度最快
bdata 可位寻址内部数据存储器(16字节),允许位与字节混合访问
idata 间接访问内部数据存储器(256字节),允许访问全部内部地址
pdata 分页访问外部数据存储器(256字节),用MOVX @Ri指令访问
xdata 外部数据存储器(64KB),用MOVX @DPTR指令访问
code 程序存储器(64KB),用MOVC @DPTR指令访问

❸ 分页存储管理的实现原理

采用分页存储器允许把一个作业存放到若干不相邻的分区中,既可免去移动信息的工作,又可尽量减少主存的碎片。分页式存储管理的基本原理如下:

1、 页框:物理地址分成大小相等的许多区,每个区称为一块;
2、址分成大小相等的区,区的大小与块的大小相等,每个称一个页面。
3、 逻辑地址形式:与此对应,分页存储器的逻辑地址由两部分组成,页号和单元号。逻辑地址格式为 页号 单元号(页内地址) 采用分页式存储管理时,逻辑地址是连续的。所以,用户在编制程序时仍只须使用顺序的地址,而不必考虑如何去分页。

4、页表和地址转换:如何保证程序正确执行呢?
采用的办法是动态重定位技术,让程序的指令执行时作地址变换,由于程序段以页为单位,所以,我们给每个页设立一个重定位寄存器,这些重定位寄存器的集合便称页表。页表是操作系统为每个用户作业建立的,用来记录程序页面和主存对应页框的对照表,页表中的每一栏指明了程序中的一个页面和分得的页框的对应关系。绝对地址=块号*块长+单元号 以上从拓扑结构角度分析了对称式与非对称式虚拟存储方案的异同,实际从虚拟化存储的实现原理来讲也有两种方式;即数据块虚拟与虚拟文件系统. 数据块虚拟存储方案着重解决数据传输过程中的冲突和延时问题.在多交换机组成的大型Fabric结构的SAN中,由于多台主机通过多个交换机端口访问存储设备,延时和数据块冲突问题非常严重.数据块虚拟存储方案利用虚拟的多端口并行技术,为多台客户机提供了极高的带宽,最大限度上减少了延时与冲突的发生,在实际应用中,数据块虚拟存储方案以对称式拓扑结构为表现形式. 虚拟文件系统存储方案着重解决大规模网络中文件共享的安全机制问题.通过对不同的站点指定不同的访问权限,保证网络文件的安全.在实际应用中,虚拟文件系统存储方案以非对称式拓扑结构为表现形式. 虚拟存储技术,实际上是虚拟存储技术的一个方面,特指以CPU时间和外存空间换取昂贵内存空间的操作系统中的资源转换技术 基本思想:程序,数据,堆栈的大小可以超过内存的大小,操作系统把程序当前使用的部分保留在内存,而把其他部分保存在磁盘上,并在需要时在内存和磁盘之间动态交换,虚拟存储器支持多道程序设计技术 目的:提高内存利用率 管理方式
A 请求式分页存储管理 在进程开始运行之前,不是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其他页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面

B 请求式分段存储管理 为了能实现虚拟存储,段式逻辑地址空间中的程序段在运行时并不全部装入内存,而是如同请求式分页存储管理,首先调入一个或若干个程序段运行,在运行过程中调用到哪段时,就根据该段长度在内存分配一个连续的分区给它使用.若内存中没有足够大的空闲分区,则考虑进行段的紧凑或将某段或某些段淘汰出去,这种存储管理技术称为请求式分段存储管理

❹ 操作系统请求分页存储方式的基本原理是什么谢谢

3.请求分页系统(1)请求分页对页表的扩充
在请求分页系统中所使用的主要数据结构仍然是页表。它对页式系统中的页表机制进行了扩充但其基本作用是实现由用户地址空间到物理内存空间的映射。由于只将应用程序的一部分装入内存,还有一部分仍在磁盘上,故需在页表中增加若干项,供操作系统实现虚拟存储器功能时参考。常见的系统中,一般对页表的表项进行如下扩充:除了页号对应的物理块号,还增加了状态位、修改位、外存地址和访问字段等。
·状态位,用于指示该页是否已经调入了内存。该位一般由操作系统软件来管理,每当操作系统把一页调人物理内存中时,置位。相反,当操作系统把该页从物理内存调出时,复位。CPU对内存进行引用时,根据该位判断要访问的页是否在内存中,若不在内存之中,则产生缺页中断。
·修改位,表示该页调入内存后是否被修改过。当CPU以写的方式访问页面时,对该页表项中的修改位置位。该位也可由操作系统软件来修改,例如,当操作系统将修改过页面保存在磁盘上后,可将该位复位。
·外存地址,用于指出该页在外存上的地址,供调人该页时使用。
·访问宇段,用于记录本页在一定时间内被访问的次数,或最近已经有多长时间未被访问。提供给相应的置换算法在选择换出页面时参考。
(2)对缺页中断的支持
在请求分页系统中,CPU硬件一定要提供对缺页中断的支持,根据页表项中的状态位判断是否产生缺页中断。缺页中断是一个比较特殊的中断,这主要体现在如下两点:
·在指令的执行期间产生和处理缺页信号。通常的CPU外部中断,是在每条指令执行完毕后检查是否有中断请求到达。而缺页中断,是在一条指令的执行期间,发现要访问的指令和数据不在内存时产生和处理的。
·一条指令可以产生多个缺页中断。例如,一条双操作数的指令,每个操作数都不在内存中,这条指令执行时,将产生两个中断。CPU提供的硬件支持,还要体现在当从中断处理程序返回时,能够正确执行产生缺页中断的指令。
(3)页面调度策略
虚拟存储器系统通常定义三种策略来规定如何(或何时)进行页面调度:调入策略、置页策略和置换策略。
(4)置换算法(replacementalgorithm)决定在需要调入页面时,选择内存中哪个物理页面被置换。置换算法的出发点应该是,把未来不再使用的或短期内较少使用的页面调出。而未来的实际情况是不确定的,通常只能在局部性原理指导下依据过去的统计数据进行预测。常用的算法有以下几种:
·最佳算法(optimal,OPT)。选择“未来不再使用的”或“在离当前最远位置上出现的”页面被置换。这是一种理想情况,是实际执行中无法预知的,因而不能实现,只能用作性能评价的依据。
·最近最久未使用算法(LeastRecentlyUsed,LRU)。选择内存中最久未使用的页面被置换,这是局部性原理的合理近似,性能接近最佳算法。但由于需要记录页面使用时间的先后关系,硬件开销太大。LRU可用如下的硬件机构帮助实现:
一个特殊的栈:把被访问的页面移到栈顶,于是栈底的是最久未使用页面。每个页面设立移位寄存器:被访问时左边最高位置1,定期右移并且最高位补0,于是寄存器数值最小的是最久未使用页面。
·先进先出算法(FIFO)。选择装入最早的页面置换。可以通过链表来表示各页的装入时间先后。FIFO的性能较差,因为较早调入的页往往是经常被访问的页,这些页在FIFO算法下被反复调入和调出,并且有Belady现象。所谓Belady现象是指:采用FIFO算法时,如果对—个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象。Belady现象可形式化地描述为:一个进程户要访问M个页,OS分配舻个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(占,N)。当N增大时,PE(S,N)时而增大时而减小。Belady现象的原因是FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的。
·时钟(clock)算法。也称最近未使用算法(NotRecentlyUsed,NRU),它是LRU和FIFO的折中。每页有一个使用标志位(usebit),若该页被访问则置userbit=l,这是由CPU的硬件自动完成的。置换时采用一个指针,从当前指针位置开始按地址先后检查各页,寻找usebit=0的面作为被置换页。指针经过的userbit=l的页都修改userbit=O,这个修改的过程是操作系统完成的,最后指针停留在被置换页的下一个页。
·最不常用算法(LeastFrequentlyUsed,LFU)。选择到当前时间为止被访问次数最少的页面被置换。每页设置访问计数器,每当页面被访问时,该页面的访问计数器加1。发生缺页中断时,淘汰计数值最小的页面,并将所有计数清零。
·页面缓冲算法(pagebuffering)。它是对FIFO算法的发展,通过建立置换页面的缓冲,这样就有机会找回刚被置换的页面,从而减少系统I/0的开销。页面缓冲算法用FIFO算法选择被置换页,把被置换的页面放人两个链表之一。即是如果页面未被修改,就将其归人到空闲页面链表的末尾,否则将其归人到已修改页面链表。空闲页面和已修改页面,仍停留在内存中一段时间,如果这些页面被再次访问,只需较小开销,被访问的页面就可以返还作为进程的内存页。需要调入新的物理页面时,将新页面内容读人到空闲页面链表的第一项所指的页面,然后将第一项删除。当已修改页面达到一定数目后,再将它们一起调出到外存,然后将它们归人空闲页面链表。这样能大大减少I/O操作的次数。

❺ 单片机访问外部数据存储器采用什么指令

用MOVX指令。
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

❻ Keil C51下如何让编译器优先使用片内RAM

C51内存结构深度剖析
在编写应用程序时,定义一个变量,一个数组,或是说一个固定表格,到底存储在什么地方;当定义变量大小超过MCU的内存范围时怎么办;如何控制变量定义不超过存储范围;以及如何定义变量才能使得变量访问速度最快,写出的程序运行效率最高。以下将一一解答。

1 六类关键字(六类存储类型)
data idata xdata pdata code bdata

code: code memory (程序存储器也即只读存储器)用来保存常量或是程序。code memory 采用16位地址线编码,可以是在片内,或是片外,大小被限制在64KB
作用:定义常量,如八段数码表或是编程使用的常,在定义时加上code 或明确指明定义的常量保存到code memory(只读)
使用方法:
char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
此关键字的使用方法等同于const

data data memory (数据存储区)只能用于声明变量,不能用来声明函数,该区域位于片内,采用8位地址线编码,具有最快的存储速度,但是数量被限制在128byte或更少。
使用方法:
unsigned char data fast_variable=0;

idata idata memory(数据存储区)只能用于声明变量,不能用来声明函数. 该区域位于片内,采用8位地址线编码,内存大小被限制在256byte或更少。该区域的低地址区与data memory地址一致;高地址区域是52系列在51系列基础上扩展的并与特殊功能寄存器具有相同地址编码的区域。即:data memory是idata memory的一个子集。

xdata xdata memory 只能用于声明变量,不能用来声明函数,该区域位于MCU
外部,采用16位地址线进行编码,存储大小被限制在64KB以内。
使用方法:
unsigned char xdata count=0;

pdata pdata memory 只能用于声明变量,不能用来声明函数,该区域位于MCU外部,采用8位地址线进行编码。存储大小限制在256byte. 是xdata memory的低256byte。为其子集。
使用方法
unsigned char pdata count=0;

bdata bdata memory 只能用于声明变量,不能用来声明函数。该区域位于8051内部位数据地址。定义的量保存在内部位地址空间,可用位指令直接读写。
使用方法:
unsigned char bdata varab=0

注:有些资料讲,定义字符型变量时,在缺省unsigned 时,字符型变量,默认为无符号,与标准C不同,但我在Keil uVision3中测试的时候发现并非如此。在缺省的情况下默认为有符号。或许在以前的编译器是默认为无符号。所以看到有的资料上面这样讲的时候,要注意一下,不同的编译器或许不同。所以我们在写程序的时候,还是乖乖的把unsigned signed 加上,咱也别偷这个懒。
2函数的参数和局部变量的存储模式
C51 编译器允许采用三种存储器模式:SMALL,COMPACT 和LARGE。一个函数的存储器模式确定了函数的参数的局部变量在内存中的地址空间。处于SMALL模式下的函数参数和局部变量位于8051单片机内部RAM中,处于COMPACT和LARGE模式下的函数参数和局部变量则使用单片机外部RAM。在定义一个函数时可以明确指定该函数的存储器模式。方法是在形参表列的后面加上一存储模式。

示例如下:
#pragma large //此预编译必须放在所有头文前面
int func0(char x,y) small;
char func1(int x) large;
int func2(char x);
注:
上面例子在第一行用了一个预编译命令#pragma 它的意思是告诉c51编译器在对程序进行编译时,按该预编译命令后面给出的编译控制指令LARGE进行编译,即本例程序编译时的默认存储模式为LARGE.随后定义了三个函数,第一个定义为SMALL存储模式,第二个函数定义为LARGE第三个函数未指定,在用C51进行编译时,只有最后一个函数按LARGE存储器模式处理,其它则分别按它们各自指定的存储器模式处理。
本例说明,C51编译器允许采用所谓的存储器混合模式,即允许在一个程序中将一些函数使用一种存储模式,而其它一些则按另一种存储器模式,采用存储器混合模式编程,可以充分利用8051系列单片机中有限的存储器空间,同时还可以加快程序的执行速度。

3绝对地址访问 absacc.h(相当重要)

#define CBYTE ((unsigned char volatile code *) 0)
#define DBYTE ((unsigned char volatile data *) 0)
#define PBYTE ((unsigned char volatile pdata *) 0)
#define XBYTE ((unsigned char volatile xdata *) 0)
功能:CBYTE 寻址 CODE区
DBYTE 寻址 DATA区
PBYTE 寻址 XDATA(低256)区
XBYTE 寻址 XDATA区
例: 如下指令在对外部存储器区域访问地址0x1000
xvar=XBYTE[0x1000];
XBYTE[0x1000]=20;

#define CWORD ((unsigned int volatile code *) 0)
#define DWORD ((unsigned int volatile data *) 0)
#define PWORD ((unsigned int volatile pdata *) 0)
#define XWORD ((unsigned int volatile xdata *) 0)

功能:与前面的一个宏相似,只是它们指定的数据类型为unsigned int .。
通过灵活运用不同的数据类型,所有的8051地址空间都是可以进行访问。

DWORD[0x0004]=0x12F8;
即内部数据存储器中(0x08)=0x12; (0x09)=0xF8

注:用以上八个函数,可以完成对单片机内部任意ROM和RAM进行访问,非常方便。还有一种方法,那就是用指钟,后面会对C51的指针有详细的介绍。

4寄存器变量(register)
为了提高程序的执行效率,C语言允许将一些频率最高的那些变量,定义为能够直接使用硬件寄存器的所谓的寄存器变量。定义一个变量时,在变量类型名前冠以“register” 即将该变量定义成为了寄存器变量。寄存器变量可以认为是一自动变量的一种。有效作用范围也自动变量相同。由于计算机寄存器中寄存器是有限的。不能将所有变量都定义成为寄存器变量,通常在程序中定义寄存器变量时,只是给编译器一个建议,该变量是否真正成为寄存器变量,要由编译器根据实际情况来确定。另一方面,C51编译器能够识别程序中使用频率最高的变量,在可能的情况下,即使程序中并未将该变量定义为寄存器变量,编译器也会自动将其作为寄存器变量处理。被定义的变量是否真正能成为寄存器变量,最终是由编译器决定的。

5内存访问杂谈
1指钟
指钟本身是一个变量,其中存放的内容是变量的地址,也即特定的数据。8051的地址是16位的,所以指针变量本身占用两个存储单元。指针的说明与变量的说明类似,仅在指针名前加上“*”即可。
如 int *int_point; 声明一个整型指针
char *char_point; 声明一个字符型指针
利用指针可以间接存取变量。实现这一点要用到两个特殊运算符
& 取变量地址
* 取指针指向单元的数据

示例一:
int a,b;
int *int_point; //定义一个指向整型变量的指针
a=15;
int_point=&a; //int_point指向 a
*int_point=5; //给int_point指向的变量a 赋值5 等同于a=5;
示例二:
char i,table[6],*char_point;
char_point=table;
for(i=0;i<6;i++)
{
char_point=i;
char_point++;
}
注:
指针可以进行运算,它可以与整数进行加减运算(移动指针)。但要注意,移动指针后,其地址的增减量是随指针类型而异的,如,浮点指针进行自增后,其内部将在原有的基础上加4,而字符指针当进生自增的时候,其内容将加1。原因是浮点数,占4个内存单元,而字符占一个字节。

宏晶科技最新一代STC12C5A360S2系列,每一个单片机出厂时都有全球唯一身份证号码(ID号),用户可以在单片机上电后读取内部RAM单元F1H~F7H的数值,来获取此单片机的唯一身份证号码。使用MOV @Ri 指令来读取。下面介绍C51 获取方法:
char id[7]={0};
char i;
char idata *point;
for(i=0;i<7;i++)
{
id[i]=*point;
point++;
}

(此处只是对指针做一个小的介绍,达到访问内部任何空间的方式,后述有对指针使用的详细介绍)
2对SFR,RAM ,ROM的直接存取
C51提供了一组可以直接对其操作的扩展函数
若源程序中,用#include包含头文件,io51.h 后,就可以在扩展函数中使用特殊功能寄存器的地址名,以增强程序的可读性:

注 此方法对SFR,RAM,ROM的直接存取不建议使用.因为,淡io51.h这个头文件在KEIL中无法打开,可用指针,或是采用absacc.h头文件,

❼ 访问外部数据存储器和程序存储器可以用那些指令来实现举例说明

51单片机
访问片外RAM
MOVX A,@DPTR
MOVX A,@R0
MOVX A,@R1

MOVX @DPTR,A
MOVX @R0,A
MOVX @R1,A

访问程序存储器
MOVC A,@A+DPTR
MOVC @A+DPTR,A

❽ 分页存储管理的基本思想

分页式存储管理的基本原理:采用分页存储器允许把一个作业存放到若干不相邻的分区中,既可免去移动信息的工作,又可尽量减少主存的碎片。分页式存储管理的基本原理如下:
1、 页框:物理地址分成大小相等的许多区,每个区称为一块;
2、址分成大小相等的区,区的大小与块的大小相等,每个称一个页面。
3、 逻辑地址形式:与此对应,分页存储器的逻辑地址由两部分组成,页号和单元号。逻辑地址格式为
页号 单元号(页内地址)
采用分页式存储管理时,逻辑地址是连续的。所以,用户在编制程序时仍只须使用顺序的地址,而不必考虑如何去分页。
4、页表和地址转换:如何保证程序正确执行呢?采用的办法是动态重定位技术,让程序的指令执行时作地址变换,由于程序段以页为单位,所以,我们给每个页设立一个重定位寄存器,这些重定位寄存器的集合便称页表。页表是操作系统为每个用户作业建立的,用来记录程序页面和主存对应页框的对照表,页表中的每一栏指明了程序中的一个页面和分得的页框的对应关系。绝对地址=块号*块长+单元号
以上从拓扑结构角度分析了对称式与非对称式虚拟存储方案的异同,实际从虚拟化存储的实现原理来讲也有两种方式;即数据块虚拟与虚拟文件系统.
数据块虚拟存储方案着重解决数据传输过程中的冲突和延时问题.在多交换机组成的大型Fabric结构的SAN中,由于多台主机通过多个交换机端口访问存储设备,延时和数据块冲突问题非常严重.数据块虚拟存储方案利用虚拟的多端口并行技术,为多台客户机提供了极高的带宽,最大限度上减少了延时与冲突的发生,在实际应用中,数据块虚拟存储方案以对称式拓扑结构为表现形式.
虚拟文件系统存储方案着重解决大规模网络中文件共享的安全机制问题.通过对不同的站点指定不同的访问权限,保证网络文件的安全.在实际应用中,虚拟文件系统存储方案以非对称式拓扑结构为表现形式.
虚拟存储技术,实际上是虚拟存储技术的一个方面,特指以CPU时间和外存空间换取昂贵内存空间的操作系统中的资源转换技术
基本思想:程序,数据,堆栈的大小可以超过内存的大小,操作系统把程序当前使用的部分保留在内存,而把其他部分保存在磁盘上,并在需要时在内存和磁盘之间动态交换,虚拟存储器支持多道程序设计技术
目的:提高内存利用率
管理方式
A 请求式分页存储管理
在进程开始运行之前,不是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其他页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面
B 请求式分段存储管理
为了能实现虚拟存储,段式逻辑地址空间中的程序段在运行时并不全部装入内存,而是如同请求式分页存储管理,首先调入一个或若干个程序段运行,在运行过程中调用到哪段时,就根据该段长度在内存分配一个连续的分区给它使用.若内存中没有足够大的空闲分区,则考虑进行段的紧凑或将某段或某些段淘汰出去,这种存储管理技术称为请求式分段存储管理

❾ C51编译器支持的存储器类型有哪些

c51存储器类型有bit
sbit
data
xdata
bdata
pdata
sfr
code等,可能不全面有遗漏
对应的物理存储器是:
bit,即位数据:数据存储器位寻址区,即20h~2fh的范围,共16个字节,16*8=128个位,位地址00h~7fh,连续的。
sbit:特殊功能寄存器中的位数据:只有能够被8整除的那些特殊功能寄存器中的各个位才能被称为sbit,位地址80h~ffh,不连续的,间断的。
data:数据区,对51为00h~7fh共128个字节,对52为00h~ffh,共256个字节,用mov寻址,前128用直接寻址或寄存器(r0~r7)寻址,后128用r0、r1间接寻址。
xdata:外部数据区,0000h~ffffh连续,用dptr间接寻址(movx指令)
bdata:位寻址去的字节,20h~2fh
sfr:特殊功能寄存器(80h~ffh),直接寻址
pdata:外部数据区,p2口保持数据,用r0r1间接寻址(movx指令)
code:程序存储器,用movc指令只读

❿ 单片机:访问内部数据存储器和外部数据存储器有什么区别

eeprom
424c01-24c1024,数据不大可以用24c16就可以了,16k位,也就是2k字节的数据。
我也有程序,网上搜索我找我要