逻辑地址与物理地址
内存寻址的三种模式

内存寻址的三种模型1. 地址的种类首先明确一下逻辑地址和线性地址这两个概念:1. 逻辑地址2. 线性地址3. 物理地址1.1 逻辑地址:逻辑地址是编译器生成的,我们使用在linux环境下,使用C语言指针时,指针的值就是逻辑地址。
对于每个进程而言,他们都有一样的进程地址空间,类似的逻辑地址,甚至很可能相同。
1.2 线性地址:线性地址是由分段机制将逻辑地址转化而来的,如果没有分段机制作用,那么程序的逻辑地址就是线性地址了。
1.3 物理地址物理地址是CPU在地址总线上发出的电平信号,要得到物理地址,必须要将逻辑地址经过分段,分页等机制转化而来。
2. 三种寻址模型x86体系结构下,使用的较多的内存寻址模型主要有三种:1. 实模式扁平模型real mode flat model2. 实模式分段模型real mode segment model3. 保护模式扁平模型protected mode flat model下面是对这三种模型的描述实模式和保护模式相对,实模式运行于20位地址总线,保护模式则启用了32位地址总线,地址使用的是虚拟地址,引入了描述符表;虽然二者都引入了段这样一个概念,但是实模式的段是64KB固定大小,只有16KB个不同的段,CS,DS等存储的是段的序号(想想为什么?)。
保护模式则引入了GDT和LDT段描述符表的数据结构来定义每个段。
扁平模型和分段模型相对,区别在于程序的线性地址是共享一个地址空间还是需要分成多个段,即为多个程序同时运行在同一个CS,DS的范围内还是每个程序都拥有自己的CS,DS:前者(flat)指令的逻辑地址要形成线性地址,不需要切换CS,DS;后者的逻辑地址,必须要经过段选择子去查找段描述符,切换CS,DS,才能形成线性地址。
3. 实模式扁平模型该模式只有在386及更高的处理器中才能出现!80386的实模式,就是指CPU可用的地址线只有20位,能寻址0~1MB的地址空间。
操作系统-存储管理(4)段页式虚拟存储

操作系统-存储管理(4)段页式虚拟存储物理地址:⼜称绝对地址,即程序执⾏所使⽤的地址空间(处理器执⾏指令时按照物理地址进⾏)逻辑地址:⼜称相对地址,即⽤户编程所使⽤的地址空间,从0开始编号,有两种形式:⼀维逻辑地址(地址)⼆维逻辑地址(段号:段内地址)主存储器空间的分配与去配:分配:进程装⼊主存时,存储管理软件进⾏具体的主存分配操作,并设置⼀个表格记录主存空间的分配情况去配:当某个进程撤离或主动归还主存资源时,存储管理软件要收回它所占⽤的全部或者部分存储空间,调整主存分配表信息主存储器空间的共享:多个进程共享主存储器资源:多道程序设计技术使若⼲个程序同时进⼊主存储器,各⾃占⽤⼀定数量的存储空间,共同使⽤⼀个主存储器多个进程共享主存储器的某些区域:若⼲个协作进程有共同的主存程序块或者主存数据块多道程序设计需要复⽤主存:按照分区复⽤:主存划分为多个固定/可变尺⼨的分区,⼀个程序/程序段占⽤⼀个分区按照页架复⽤:主存划分成多个固定⼤⼩的页架,⼀个程序/程序段占⽤多个页架装载程序/加载器(loader)把可执⾏程序装⼊内存的⽅式有:绝对装载可重定位装载动态运⾏时装载地址转换:⼜称重定位,即把可执⾏程序逻辑地址转换成绝对地址,可分为:静态地址重定位:由装载程序实现装载代码模块的加载和地址转换(⽆需硬件⽀持),把它装⼊分配给进程的内存指定区域,其中所有指令代码和数据的逻辑地址在执⾏前⼀次全部修改为内存物理地址。
早期单任务单⽤户OS使⽤。
动态地址重地位:由装载程序实现装载代码模块的加载,把它装⼊进程的内存在指定区域,但对链接程序处理过的应⽤程序逻辑地址不做修改,程序内存起始地址被置⼊重定位寄存器(基址寄存器)。
程序执⾏过程中每当CPU访问程序和数据引⽤内存地址时,由硬件地址转换机构截取此逻辑地址并加上重定位寄存器的值。
运⾏时链接地址重定位存储保护:为避免主存中的多个进程相互⼲扰,必须对主存中的程序和数据进⾏保护。
逻辑块 物理块

逻辑块物理块逻辑块与物理块之间的关系及其应用计算机系统中,逻辑块与物理块是两个重要的概念,它们的关系紧密相连。
逻辑块是指系统中的逻辑地址空间,而物理块则是指实际的物理存储空间。
在计算机系统中,逻辑块和物理块之间的映射关系是非常重要的,因为它决定了程序的运行效率和数据的存储效率。
逻辑块是指程序员在编写程序时所看到的地址空间,也就是程序中使用的地址。
这些地址是虚拟的,因为它们并不代表实际的物理存储位置。
逻辑块通常是由操作系统提供的,它们被分配给程序员以进行数据访问和程序执行。
物理块则是指实际的物理存储空间,它是由计算机系统硬件提供的。
物理块通常是由存储设备(如硬盘、内存等)提供的,它们用来存储程序和数据。
物理块的大小一般由硬件限制,如硬盘的扇区大小、内存的页大小等。
逻辑块与物理块之间的映射关系是通过地址转换实现的。
地址转换是指将逻辑地址转换为物理地址的过程。
这个过程通常由操作系统中的地址转换机制来完成。
地址转换机制通常包括地址映射表和地址转换算法两部分。
地址映射表是用来记录逻辑块和物理块之间的映射关系的数据结构。
在操作系统中,通常会有一个全局的地址映射表,用来记录所有程序的逻辑地址和物理地址之间的映射关系。
地址映射表可以存储在内存中,也可以存储在磁盘上。
地址转换算法是用来实现地址转换的算法。
常见的地址转换算法有基于分页和基于分段两种。
基于分页的算法将逻辑地址分为多个页,每个页映射到物理内存中的一个页面;而基于分段的算法将逻辑地址分为多个段,每个段映射到物理内存中的一个连续区域。
在实际的应用中,逻辑块和物理块之间的映射关系有很多应用场景。
其中最常见的应用是内存管理和文件系统。
在内存管理中,操作系统需要将程序的逻辑地址转换为物理地址,以便程序能够正确地访问内存中的数据。
在文件系统中,文件通常被存储在物理磁盘上,而逻辑块则被用来表示文件中的数据块,以便程序可以方便地访问文件中的数据。
逻辑块和物理块是计算机系统中非常重要的概念。
关于逻辑地址、线性地址、物理地址和虚拟地址

本贴涉及的硬件平台是X86,如果是其它平台,嘻嘻,不保证能一一对号入座,但是举一反三,我想是完全可行的。
一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。
所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。
也许错误的理解更利于形而上的抽像。
虚拟内存(virtual memory)这是对整个内存(不要与机器上插那条对上号)的抽像描述。
它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数组中0x08000000 - 1那个地址元素;之所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即虚拟内存(virtual memory)。
进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。
这个“转换”,是所有问题讨论的关键。
有了这样的抽像,一个程序,就可以使用比真实物理地址大得多的地址空间。
(拆东墙,补西墙,银行也是这样子做的),甚至多个进程可以使用相同的地址。
不奇怪,因为转换后的物理地址并非相同的。
——可以把连接后的程序反编译看一下,发现连接器已经为程序分配了一个地址,例如,要调用某个函数A,代码不是call A,而是call 0x0811111111 ,也就是说,函数A的地址已经被定下来了。
没有这样的“转换”,没有虚拟地址的概念,这样做是根本行不通的。
打住了,这个问题再说下去,就收不住了。
内存读写地址转行列转换

内存读写地址转行列转换三种内存地址:逻辑地址,线性地址,和物理地址一、逻辑地址:包含在机器语言指令中用来指定一个操作数或一条指令的地址。
这种寻址方式在80X86著名的分段结构中表现得尤为具体,它促使MS-DOS或Windows程序员把程序分成若干段。
每一个逻辑地址都是有一个段和偏移量组成,偏移量指明了从段开始的地方到时间地址之间的距离二、线性地址:(虚拟地址)是一个32位无符号整数,可以用来表示高达4GB的地址,也就是高达4294967296个内存单元。
线性地址通常用十六进制数字表示三、物理地址:用于内存芯片级内存单元寻址。
它们与从微处理器的地址引脚发送到内存总线上的电信号相对应。
物理地址由32位或36位无符号整数表示内存控制单元(MMU)通过一种称为分段单元的硬件电路把一个逻辑地址转换成线性地址分段单元:1,先检查段选择符的TI字段,已决定段描述符保存在哪一个描述符表中。
TI字段指明描述符是在GDT中(在这种情况下,分段单元从gdtr寄存器中得到GDT的线性基地址)还是在激活的LDT中(在这种情况下,分段单元从ldtr寄存器中得到LDT的线性基地址)2,从段选择符的index字段计算段描述符的地址,index字段的值乘以8,这个结果与gdtr或ldtr寄存器的内容相加3,把逻辑地址的偏移量与段描述符base字段的值相加就得到了线性地址第二个称为分页单元的硬件电路把线性地址转化成一个物理地址分段单元分页单元逻辑地址=============》线性地址============》物理地址实际上,分段和分页在某种程度上有点多余,因为它们都可以划分进程的物理地址空间:分段可以给每一个进程分配不同的线性地址空间,而分页可以把同一线性地址空间映射到不同的物理空间,与分段相比,Linux更喜欢使用分页方式因为:当所有进程使用相同的段寄存器值时,内存管理变得更简单,也就是说它们能共享同样的一组线性地址Linux设计目标之一是可以把它移植到绝大多数流行的处理器平台上。
名词解释2

1、物理地址:内存中各存储单元的地址由统一的基地址顺序编址,这种地址称为物理地址。
2、逻辑地址:用户程序经编译之后的每个目标模块都以0为基地址顺序编址,这种地址称为逻辑地址。
3、逻辑地址空间:由程序中逻辑地址组成的地址范围叫做逻辑地址空间。
4、内存空间:由内存中的一系列存储单元所限定的地址范围称为内存空间。
5、重定位:把逻辑地址转变为内存物理地址的过程叫做重定位。
6、静态重定位:把目标程序装入内存时所进行的重定位。
7、动态重定位:在程序执行期间,每次访问内存之前进行的重定位。
8、碎片:在分区法中,内存出现许多容量太小、无法被利用的小分区称做碎片。
9、紧缩:移动某些已分配区的内容,使所有作业的分区紧挨在一起,而把空闲区留在另一端,这种技术称为紧缩。
10、可重定位地址:当含有它的程序被重定位时,将随之被调整的一种地址。
11、文件:是被命名的相关信息的集合体,它通常存放在外存上,可作为一个独立的单位存放并实施相应的操作。
12、文件系统:操作系统中负责操纵和管理文件的一整套设施,它实现文件的共享和保护,方便用户“按名存取”13、目录项:为了加快对文件的检索,把文件控制块集中在一起进行管理。
这种文件控制块的有序集合称为文件目录。
文件控制块也是其中的目录项。
14、目录文件:全由目录项构成的文件称为目录文件。
15、路径:在树形目录结构中,从根出发经由所需子目录到达指定文件的通路。
16、当前目录:为了节省文件检索的时间,每个用户可以指定一个目录作为当前的工作目录,以后访问文件时,就从这个目录开始向下顺序检索。
这个目录称为当前目录。
17、文件的共享:是指系统允许多个用户共同使用某个或者某些文件。
18、中断:指CPU对系统发生的某个事件做出的一种反应,CPU暂时正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完改事件后,如被中断进程的优先级最高,则返回断点继续执行被“打断”的程序。
19、中断源---引起中断的事件或发出中断请求的来源称为中断源。
实验2 地址解析协议ARP

1.掌握 ARP 协议的报文格式2.掌握 ARP 协议的工作原理3.理解 ARP 高速缓存的作用4.掌握 ARP 请求和应答的实现方法5.掌握 ARP 缓存表的维护过程2 学时该实验采用网络结构二物理地址是节点的地址,由它所在的局域网或者广域网定义。
物理地址包含在数据链路层的帧中。
物理地址是最低一级的地址。
物理地址的长度和格式是可变的,取决于具体的网络。
以太网使用写在网络接口卡(NIC)上的 6 字节的标识作为物理地址。
物理地址可以是单播地址 (一个接收者) 、多播地址 (一组接收者) 或者广播地址 (由网络中的所有主机接收) 。
有些网络不支持多播或者广播地址,当需要把帧发送给一组主机或者所有主机时,多播地址或者广播地址就需要用单播地址来摹拟。
在互联网的环境中仅使用物理地址是不合适的,因为不同网络可以使用不同的地址格式。
因此,需要一种通用的编址系统,用来惟一地标识每一台主机,而不管底层使用什么样的物理网络。
逻辑地址就是为此目的而设计的。
目前 Internet 上的逻辑地址是 32 位地址,通常称为 IP 地址,可以用来标识连接在 Internet 上的每一台主机。
在 Internet 上没有两个主机具有同样的 IP 地址。
逻辑地址可以是单播地址、多播地址和广播地址。
其中广播地址有一些局限性。
在实验三中将详细介绍这三种类型的地址。
Internet 是由各种各样的物理网络通过使用诸如路由器之类的设备连接在一起组成的。
主机发送一个数据包到另一台主机时可能要经过多种不同的物理网络。
主机和路由器都是在网络层通过逻辑地址来识别的,这个地址是在全世界范围内是惟一的。
然而,数据包是通过物理网络传递的。
在物理网络中,主机和路由器通过其物理地址来识别的,其范围限于本地网络中。
物理地址和逻辑地址是两种不同的标识符。
这就意味着将一个数据包传递到一个主机或者路由器需要进行两级寻址:逻辑地址和物理地址。
需要能将一个逻辑地址映射到相应的物理地址。
操作系统第二版第五章课后习题答案

第五章存储管理作业答案2、6、10、13、15、162、解释下列概念:物理地址、逻辑地址、逻辑地址空间、内存空间、重定位、静态重定位、动态重定位、碎片、紧缩、可重定位地址。
物理地址——内存中各存储单元的地址由统一的基地址顺序编址,这种地址称为物理地址。
逻辑地址——用户程序经编译之后的每个目标模块都以0为基地址顺序编址,这种地址称为逻辑地址。
逻辑地址空间——由程序中逻辑地址组成的地址范围叫做逻辑地址空间。
内存空间——由内存中的一系列存储单元所限定的地址范围称作内存空间。
重定位——把逻辑地址转变为内存物理地址的过程叫做重定位。
静态重定位——在目标程序装入内存时所进行的重定位。
动态重定位——在程序执行期间,每次访问内存之前进行的重定位。
碎片——在分区法中,内存出现许多容量太小、无法被利用的小分区称作“碎片”。
紧缩——移动某些已分配区的内容,使所有作业的分区紧挨在一起,而把空闲区留在另一端,这种技术称为紧缩。
可重定位地址——当含有它的程序被重定位时,将随之被调整的一种地址。
6、什么是虚拟存储器?它有哪些基本特征?参考答案:虚拟存储器是用户能作为可编址内存对待的虚拟存储空间,在这种计算机系统中实现了用户逻辑存储器与物理存储器分离,它是操作系统给用户提供的一个比真实内存空间大得多的地址空间。
虚拟存储器的基本特征是:虚拟扩充——不是物理上,而是逻辑上扩充了内存容量;部分装入——每个作业不是全部一次性地装入内存,而是只装入一部分;离散分配——不必占用连续的内存空间,而是“见缝插针”;多次对换——所需的全部程序和数据要分成多次调入内存。
10、某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。
假定某时刻一个用户页表已调入内存的页面页号和物理块号如表5-1所示。
则逻辑地址0A5C(H)所对应的物理地址为。
表5-1 页表中页号和物理块号对照表参考答案:0A5C(H)换成二进制:页号为2,查表,对应物理块号为4,与页内地址拼接成物理地址:再转换为十六进制,即125C(H)13、已知段表如表5-2所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
逻辑地址与物理地址
物理地址是外部连接使用的、唯一的,它是“与地址总线相对应”;而逻辑地址是内部和编程使用的、并不唯一。
在内存中的实际地址就是所谓的“物理地址”,而逻辑地址就是逻辑段管理内存而形成的。
例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。
只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换),逻辑地址也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。
8086体系的CPU一开始是20根地址线, 寻址寄存器是16位, 16位的寄存器可以访问64K的地址空间, 如果程序要想访问大于64K的内存, 就要把内存分段, 每段64K, 用段地址+偏移量的方法来访问。
386CPU出来之后, 采用了32条地址线, 地址寄存器也扩为32位, 这样就可以不用分段了, 直接用一个地址寄存器来线性访问
4G的内存了. 这就叫平面模式.
将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址。
这里左移的4位是二进制位;如果用十六进制表达地址就是左移一位。
左移4位还可以表达为乘以16,即:段
地址×16+偏移地址。
同一个物理地址可以对应多个逻辑地址形式。
所以物理地址转换为逻辑地址,需要明确段基地址
或偏移地址,然后同上原则确定另一个地址。
逻辑地址1460H : 0100H 或1380H : 0900H
物理地址14700H
于是,对于主存14700H单元,我们可以描述为在1460H(或1380H)段的0100H(或0900H)单元,或者说主存1460H : 0100H(或1380H : 0900H)单元。
存储单元的地址可以用段基值和段内偏移量来表示,段基值确定它所在的段居于整个存储空间的位置,偏移量确定它在段内的位置,这种地址表示方式称为逻辑地址。
8086对外连接使用一个20位的线性地址唯一确定一个存储单元,也就是说:对于每个存储器单元都有的一个唯一的20位地址,我们称为该单元的物理地址或绝对地址。
8086在内部结构中和程序设计时采用逻辑段管理内存,就形成了逻辑地址。
它的表达形式
为“段基地址 : 偏移地址”。
逻辑地址=段基地址 : 偏移地址
∙段基地址(Segment)——逻辑段在主存中的起始位置,简称段地址。
由于8086规定段开始于模16地址,所以省略低4位0不显式表达,段基地址就可以用16位数据表示。
∙偏移地址(Offset)——主存单元距离段起始位置的偏移量(Displacement)。
由于限定每段不超过64KB(2^16),所以偏移地址也可以用16位数据表示。