导航:首页 > 源码编译 > 编译逻辑地址

编译逻辑地址

发布时间:2022-09-05 09:57:06

㈠ C语言:全局变量和局部动态变量,编译后逻辑地址就确定了吗

对啊,整个程序运行的地址要在运行时由操作系统来分配的,而逻辑地址则是在编译时就定下了。

㈡ 高级语言源程序编译后产生的地址是逻辑地址还是物理地址

由于操作系统技术的发展,可重用二进制程序技术使用了内存重定位技术,所以从汇编的角度来看即不是逻辑地址也不是物理地址。而且这个概念有些不同,编译后产生的地址是相对地址,是相对于可执行头部位置的地址。而逻辑地址是指在指令系统内部使用的用来访问内存的一个逻辑表示,通常表现为相对于某个段基地址的偏移量。
当可执行程序被载入内存之后,才会有逻辑地址存在,此时可执行程序被如何加载于何处,地址为多少,由操作系统决定,此时cpu访问程序用的是逻辑地址。一个程序一旦被编译确定之后基本上变量初始化的顺序固定,资源分配位置也固定,设置有编译器使用预分配机制,然后采用相对地址引用。
注意:某些工具书也称二进制可执行文件内所有的相对地址范围是逻辑地址空间,相对地址就是逻辑地址。因为两者的访问方式相似,逻辑地址变换依赖cpu或者附加变换机构(硬件),而二进制程序地址空间变换需要操作系统插手管理。
反汇编分析中常常将二进制内部地址称为逻辑地址,因为反汇编器不能还原原来汇编代码的地址跳转空间特性,因此得到一个相对于二进制数据起点位置的相对地址,而和内存和物理存储都没有关系。

㈢ 请问程序在编译和链接的时候,逻辑地址是否是连续的请高手解答。谢谢。

函数内部是连续的吧,因为一起分配的栈; 不同函数的栈可能就不连续了啊

㈣ C语言,所有变量的逻辑地址都是编译后确定的吗

是的。程序都是在运行阶段分配内存,所有变量的逻辑地址都是在编译后就确定了,但都是相对的偏移地址,只不过全局变量是相对数据段的偏移,局部变量是相对程序栈顶的偏移。

㈤ 什么是逻辑地址和物理地址

有网友问到我:什么是逻辑地址和物理地址?怎么转换?针对此问题,我为大家分享了具体的操作 方法 ,希望对你有帮助!

什么是逻辑地址

是指由程式产生的和段相关的偏移地址部分。例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地址(假定代码段、数据段如果完全相同)。应用程式员仅需和逻辑地址打交道,而分段和分页机制对你来说是完全透明的,仅由系统编程人员涉及。应用程式员虽然自己能直接操作内存,那也只能在 操作系统 给你分配的内存段操作。

什么是物理地址

用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。 ——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像。 虚拟内存(virtual memory) 这是对整个内存(不要与机器上插那条对上号)的抽像描述。它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数组中0x08000000 - 1那个地址元素;之所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即虚拟内存(virtual memory)。进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。这个“转换”,是所有问题讨论的关键。有了这样的抽像,一个程序,就可以使用比真实物理地址大得多的地址空间。(拆东墙,补西墙,银行也是这样子做的),甚至多个进程可以使用相同的地址。不奇怪,因为转换后的物理地址并非相同的。 ——可以把连接后的程序反编译看一下,发现连接器已经为程序分配了一个地址,例如,要调用某个函数A,代码不是call A,而是call 0x0811111111 ,也就是说,函数A的地址已经被定下来了。没有这样的“转换”,没有虚拟地址的概念,这样做是根本行不通的。打住了,这个问题再说下去,就收不住了。逻辑地址(logical address) Intel为了兼容,将远古时代的段式内存管理方式保留了下来。逻辑地址指的是机器语言指令中,用来指定一个操作数或者是一条指令的地址。以上例,我们说的连接器为A分配的0x08111111这个地址就是逻辑地址。 ——不过不好意思,这样说,好像又违背了Intel中段式管理中,对逻辑地址要求,“一个逻辑地址,是由一个段标识符加上一个指定段内相对地址的偏移量,表示为 [段标识符:段内偏移量],也就是说,上例中那个0x08111111,应该表示为[A的代码段标识符: 0x08111111],这样,才完整一些” 线性地址(linear address)或也叫虚拟地址(virtual address) 跟逻辑地址类似,它也是一个不真实的地址,如果逻辑地址是对应的硬件平台段式管理转换前地址的话,那么线性地址则对应了硬件页式内存的转换前地址。

逻辑地址和物理地址拓展知识

存储器中每一个单元的地址可以用两种方法表示:

1.逻辑地址:其表达形式为“段地址:段内偏移地址”。

2.物理地址:CPU与存储器进行数据交换时在地址总线上

提供的20位地址信息称为物理地址。

物理地址=段地址×10H+段内偏移量

CPU一次处理的数据是16位,地址总线实际上代表CPU的寻址能力,地址线为20条那么CPU实际的寻址能力就是2的20次方就是1M。实际的物理地址是这样形成的:

段地址*10H+偏移地址,偏移地址用IP指向,IP是16位的。

例如段地址是1234H,偏移地址是4321H

那么实际的物理地址怎么算呢:1234H*10H+4321H=12340H+4321H=16661H

实际上可以这么来理解,就是段地址左移一位后加上偏移地址就得出实际的物理地址。

这里逻辑地址和物理地址的关系又可以用一个比喻来说明:

比如你的学号是0102,这是你的真实地址亦即物理地址,那么又假如01表示你的班级名称,02表示你相对整个班级的位置,这就是逻辑地址,道理是一样的,只不过在实际由逻辑地址合成物理地址的时候需要将物理地址左移一位,再加上偏移地址。

逻辑地址到物理地址的转换方法

以一个例子的形式讲解逻辑地址到物理地址的转换:

某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下:

则逻辑地址0A5C(H)所对应的物理地址是什么?要求:写出主要计算过程。

解题过程:

首先要知道页式存储管理的逻辑地址分为两部分:页号和页内地址。物理地址分为两部分:

关系为:逻辑地址=页号+页内地址d

物理地址=块号*块长度( 等于页面长度 L )+页内地址;

页号: p = lnt( 逻辑地址 A / 页面长度 L ); d = 逻辑地址 A % 页面长度 L (取余)

分析题:已知:用户编程空间共32个页面,2ˆ5=32得知页号部分占5位,由“每页为1KB”,1K=2^10,可知内页地址占10位。

由“内存为16KB”,2^4=16得知块号占4位。

逻辑地址0A5C(H)所对应的二进制表示形式是:0000101001011100,后十位1001011100是页内地址,

00010(本题特例,因为页面长度为1KB)为为页号,页号化为十进制是2,在对照表中找到2对应的物理块号是11,11转换二进制是1011,11* 2^10 + d即可求出物理地址为10111001011100,化成十六进制为2 E5C;

即则逻辑地址0A5C(H)所对应的物理地址是2E5C;

猜你喜欢:

1. IP地址和物理地址有什么区别

2. 物理地址和逻辑地址的区别

3. 虚拟地址与物理地址的概念

4. 物理地址什么意思

5. 逻辑地址如何转换成物理地址

6. 物理地址有什么用

7. 物理地址作用是什么

㈥ 什么是逻辑地址,什么是物理地址,它们之间有什么关系

http://ke..com/view/893778.htm

http://ke..com/view/883168.htm

这是网络里的介绍 我就不复制了

然后说下我自己的理解吧
在计算机存储单元中,是以字为单位存储的,而且数目众多,管理起来必须需要地址
逻辑地址为人可以理解的地址,分为段地址和基地址
段地址顾名思义,就是对大段的空间编排的地址如4G个字的内存空间,需要2^32个地址表示
把每2^16个空间分为一段,则一共有2^16个段,给每段一个地址,每段中每个单元一个偏移地址
则段地址1-2^16,确定大段位置,偏移址1-2^16就确定了单元位置
具体表示时 2^16 可用四位十六进制数表示
举例来说 实际物理地址 000a 0001 H (16进制的意思)的单元,是实际的地址
段地址000aH 偏移址0001 H ,这两个是逻辑地址,经过人为分段

实际中这样使用比较少 一般为段地址左移4位(乘以16)加上偏移址为物理地址,表示16M字空间

微机原理学得有点早了 可能有疏漏的地方 大概意思应该是对的

㈦ 计算机操作系统知识点

计算机操作系统知识点

网络的神奇作用吸引着越来越多的用户加入其中,正因如此,网络的承受能力也面临着越来越严峻的考验―从硬件上、软件上、所用标准上......,各项技术都需要适时应势,对应发展,这正是网络迅速走向进步的催化剂。下面是关于计算机操作系统知识点,希望大家认真阅读!

4.1.1操作系统的概念

操作系统:是管理计算机软硬件资源的程序,同时它又是用户与计算机硬件的接口。

4.1.2操作系统的构成

进程管理、内存管理、文件管理、输入/输出系统管理、二级存储管理、联网、保护系统、命令解释程序

4.2.1操作系统的类别

经过多年的发展,操作系统多种多样。为提高大型计算机系统的资源利用率,操作系统从批处理,多道程序发展为分时操作系统。为了满足计算机处理实时事件的需要,就有实时操作系统。为适应个人计算机系统的需要又出现了桌面操作系统。为适应并行系统的需要,就有了多处理器操作系统。为满足网络和分布计算的需要,就有了网络操作系统和分布式操作系统。此外,还有为支持嵌入式计算机的嵌入式操作系统。

4.2.2计算环境

从计算机诞生至今,操作系统总是与具体的计算环境相联系,它总是在某种计算环境中设置和使用,就目前来看计算环境可分为以下几类:

1.传统计算环境

指普通意义下的独立或联网工作的通用计算机所形成的计算环境。

2.基于Web的计算环境

互联网的普及使得计算被延伸到Web环境。

3.嵌入式计算环境

嵌入式计算机就是安装在某些设备上的计算部件,其计算相对比较简单。

4.3.1进程的概念

什么是进程?它与程序有什么区别?

程序:用户为完成某一个特定问题而编写的操作步骤。

进程:可以简单地被看作是正在执行的程序。但是进程需要一定的资源来完成它的任务(例如CPU时间、内存、文件和I/O设备)。

进程与程序的区别在于进程是动态的、有生命力的,而程序是静态的。一个程序加载到内存,系统就创建一个进程,程序执行结束后,该进程也就消亡了。

在计算机中,由于多个程序共享系统资源,就必然引发对CPU的争夺。如何有效地利用CPU资源,如何在多个请求CPU的进程中选择取舍,这就是进程管理要解决的问题。

4.3.3进程控制块PCB(略)

为了控制进程,操作系统就必须知道进程存储在哪里,以及进程的一些属性。

进程控制块是进程实体的一部分,是操作系统中记录进程的专用数据结构。一个新的进程创建时,操作系统就会为该进程建立一个进程控制块。操作系统根据进程控制块对并发进程进行控制。

4.3.4进程调度及队列图

计算机采用多道程序的目的是使得计算机系统无论何时都有进程运行,单处理器的计算机在某一时刻CPU只能运行一个进程,如果存在多个进程,其它进程就需要等待CPU空闲时才能被调度执行。

当一个进程处于等待或CPU时间片用完时,操作系统就会从该进程中拿走CPU控制权,然后再交给其它进程使用,这就是进程的调度。

4.3.5CPU调度及其准则

在设计CPU调度程序时主要应该考虑的准则包括:

(1)CPU使用率。让CPU尽可能地忙。

(2)吞吐量。让CPU在一定时间内完成的进程数尽可能多。

(3)周转时间。让进程从提交到运行完成的时间尽可能短。

(4)等待时间。让进程在就绪队列中等待所花时间之和尽可能短。

(5)响应时间。让进程从提交请求到产生第一响应之间的时间尽可能短。

主要的CPU调度算法

1、先到先服务

2、最短作业优先

3、优先权

4、轮转

5、多级队列

6、多级反馈队列

4.3.7进程的同步与互斥

进程的同步就是指相互协作的进程不断调整它们之间的相对速度,以实现共同有序地推进。

换句话说,在操作系统中,允许多个进程并发运行。然而,有些进程之间本身存在某种联系,它们在系统中需要一种协作,以保证进程能正确有序地执行并维护数据的一致性。

在操作系统中,可能存在着多个进程。而系统中一些资源一次只允许一个进程使用,这类资源被称为临界资源。在进程中访问临界资源的那段程序称为临界区。当一个进程进入临界区执行时,其它进程就不允许进入临界区执行,否则就会导致错误结果。由此得出:

多个进程并发执行时,只允许一个进程进入临界区运行,这就是进程的互斥。

例如:多个进程在竞争使用打印机时表现为互斥。

一个文件可供多个进程共享,其中有一个进程在写操作时,其它进程则不允许同时写或读,表现为互斥。

4.3.8进程的死锁及处理方法

在多道程序设计中,多个进程可能竞争一定数量的资源。一个进程在申请资源时,如果所申请资源不足,该进程就必须处于等待状态。如果所申请的资源被其它进程占有,那么进程的等待状态就可能无法改变,从而形成进程之间相互一直等待的局面,这就是死锁。

竞争资源引起死锁

引起死锁的四个必要条件:

互斥:任一时刻只能有一个进程独占某一资源,若另一进程申请该资源则需延迟到该资源释放为止。

占有并等待:即该进程占有部分资源后还在等待其它资源,而该资源被其它进程占有。

非抢占:某进程已占用资源且不主动放弃它所占有的资源时,其它进程不能强占该资源,只有等其完成任务并释放资源。

循环等待:在出现死锁的系统中,一定存在这样一个进程链,其中每个进程至少占有其它进程所必需的资源,从而形成一个等待链。

处理死锁问题的三种方式:

可使用协议预防和避免死锁,确保系统从不会进入死锁状态。

可允许系统进入死锁状态,然后检测出死锁状态,并加以恢复。

可忽略进程死锁问题,并假装系统中死锁从来不会发生。即没有必要把精力花在小概率事件上。

处理死锁优先考虑的顺序:先预防和避免再检测和恢复

4.4内存管理

内存是现代操作系统的核心。内存用于容纳操作系统和各种用户进程,是可以被CPU和I/O设备所共同访问的数据仓库。计算机的所有程序运行时都要调入内存。

内存管理的主要工作是:为每个用户进程合理地分配内存,以保证各个进程之间在存储区不发生冲突;当内存不足时,如何把内存和外存结合起来,给用户提供一个比实际内存大得多的虚拟内存,使得程序能顺利执行。内存管理包括内存分配、地址映射、内存保护和扩充。

4.4.1用户程序执行与地址映射

用户编写程序在执行前,需要多个处理步骤,这些步骤可将源程序转变为二进制机器代码,然后在内存中等待执行。当然有时并非每个步骤都是必需的。

通常,将指令和数据的.地址映射成内存地址可以发生在以下三个执行阶段。(了解)

1.编译阶段:如果在编译时就知道进程将在内存中的什么位置驻留,那么编译器就可以直接以生成绝对地址代码。

2.加载阶段:不知道进程将驻留在什么位置,那么编译器就必须生成程序的逻辑地址,在加载阶段再转变成内存的绝对地址。

3.执行阶段:如果进程在执行时可以从一个内存段移动到另一个内存段,那么进程的绝对地址映射工作只能延迟到执行时进行。

4.4.2物理地址空间与逻辑地址空间

物理地址:是计算机内存单元的真实地址。

物理地址空间:由物理地址所构成的地址范围。

逻辑地址:用户程序地址,从0开始编址。

逻辑地址空间:由逻辑地址所构成的地址范围。

地址映射:用户程序在运行时要装入内存,这就需要将逻辑地址变换成物理地址,这个过程称为地址映射,也称重定位。

用户编写的源程序是不考虑地址的,源程序经CPU编译后产生逻辑地址。从CPU产生的逻辑地址转换为内存中的物理地址的映射是由计算机中被称为内存管理单元的硬件设备来实现的,将逻辑地址与内存管理单元中存放的内存基址相加就得到了物理地址。

4.4.3进程使用内存的交换技术

为了更加有效地使用内存,进程在不运行时,可以暂时从内存移至外存上,直到需要再运行时再重新调回到内存中。也就是说内存管理程序可将刚刚运行过的进程从内存中换出以释放出占用的内存空间,然后将另一个要运行的进程占据前者释放的内存空间。

计算机工作时,为了将多个进程放入到内存就必须考虑在内存中如何放置这些进程。

4.4.4内存分配方案-连续

对于连续内存分配方案,开始时所有内存是一个大的孔,随着内存分配的进行就会形成位置上不连续的大小不一的孔。在连续内存分配方案中,当新进程需要内存时,为其寻找合适的孔,实现内存分配。该方案为每个进程所分配的内存物理地址空间在位置上是连续的。

4.4.5内存分配方案-分页式

分页管理基本思想:

o内存物理地址空间划分为若干个大小相等的块(页框)

o进程的逻辑地址空间也划分为同样大小的块(页面)

o内存分配时每个页面对应地分配一个页框,而一个进程所分得页框在位置上不必是连续的。

页表:操作系统为每个用户程序建立一张页表,该表记录用户程序的每个逻辑页面存放在哪一个内存物理页框。

4.5虚拟内存方案

虚拟内存是一个容量很大的存储器的逻辑模型,它不是任何实际的物理存储器,它一般是借助硬盘来扩大主存的容量。

虚拟内存:对于一个进程来讲,如果仅将当前要运行的几个页面装入内存便可以开始运行,而其余页面可暂时留在磁盘上,待需要时再调入内存,并且调入时也不占用新的内存空间,而是对原来运行过的页面进行置换。这样,就可以在计算机有限的内存中同时驻留多个进程并运行。而对用户来讲感觉到系统提供了足够大的物理内存,而实际上并非真实的,这就是虚拟内存。

4.5.2页面请求与页面置换算法

页面请求:在虚拟内存技术中,进程运行时并没有将所有页面装入到内存,在运行过程中进程会不断地请求页面,如果访问的页面已在内存,就继续执行下去;但如果要访问的页面尚未调入到内存,便请求操作系统将所缺页面调入内存,以便进程能继续运行下去。

页面置换:如果请求页面调入内存时,分配给该进程的页框已用完,就无法立即装入所请求页面。此时,必须将进程中的某个页面从内存的页框调出到磁盘上,再从磁盘上将所请求的页面调入到内存的该页框中。这个过程叫做页面置换。

4.6文件管理

文件管理是操作系统最常见的组成部分。文件管理主要提供目录及其文件的管理。

4.6.1文件的概念

文件:保存在外部存储设备上的相关信息的集合。

文件命名:文件主名+扩展名

文件存取属性:

只读:只允许授权用户进行读操作。

读写:只允许授权用户进行读和写的操作。

文档:允许任何用户进行读写操作。

隐藏:不允许用户直接看到文件名。

文件系统:是对文件进行操作和管理的软件,是用户与外存之间的接口。这个系统将所有文件组织成目录结构保存在外存,一个文件对应其中的一个目录条。目录条记录有文件名、文件位置等信息。

操作系统对文件的基本操作包括:

创建文件、文件写、文件读、文件重定位、文件删除、文件截短。

对文件的其它操作包括:文件复制、重命名、更改属性等。

;

㈧ 什么是逻辑地址空间物理存储空间

逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及。应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作。线性地址(Linear Address) 是逻辑地址到物理地址变换之间的中间层。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。物理地址(Physical Address) 是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。虚拟内存(Virtual Memory) 是指计算机呈现出要比实际拥有的内存大得多的内存量。因此它允许程序员编制并运行比实际系统拥有的内存大得多的程序。这使得许多大型项目也能够在具有有限内存资源的系统上实现。一个很恰当的比喻是:你不需要很长的轨道就可以让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就可以完成这个任务。采取的方法是把后面的铁轨立刻铺到火车的前面,只要你的操作足够快并能满足要求,列车就能象在一条完整的轨道上运行。这也就是虚拟内存管理需要完成的任务。在Linux 0.11内核中,给每个程序(进程)都划分了总容量为64MB的虚拟内存空间。因此程序的逻辑地址范围是0x0000000到0x4000000。有时我们也把逻辑地址称为虚拟地址。因为与虚拟内存空间的概念类似,逻辑地址也是与实际物理内存容量无关的。 逻辑地址与物理地址的“差距”是0xC0000000,是由于虚拟地址->线性地址->物理地址映射正好差这个值。这个值是由操作系统指定的。

㈨ 在编译时为内存分配了逻辑地址,之后连接生成了可执行文件,逻辑地址在运行时会发生变化吗

应该不会冲突,每个程序在内存中占用的空间都是独立的,逻辑地址只是在它自己的空间里的相对地址,正常情况下不会有交集。

㈩ 操作系统中 区分编译后的形成逻辑地址和链接后的形成的最终逻辑地址 什么意思啊

编译后产生若干个目标模块,编译后的逻辑地址指的是每个模块都从0号单元开始编址,而链接将这些模块链接在一起,形成一个完整的装入模块,此时的逻辑地址会重新编址,也就是说链接后的逻辑地址是将整个模块从0号单元开始编址。

阅读全文

与编译逻辑地址相关的资料

热点内容
卡尔曼滤波算法书籍 浏览:769
安卓手机怎么用爱思助手传文件进苹果手机上 浏览:844
安卓怎么下载60秒生存 浏览:803
外向式文件夹 浏览:240
dospdf 浏览:431
怎么修改腾讯云服务器ip 浏览:392
pdftoeps 浏览:496
为什么鸿蒙那么像安卓 浏览:736
安卓手机怎么拍自媒体视频 浏览:186
单片机各个中断的初始化 浏览:724
python怎么集合元素 浏览:481
python逐条解读 浏览:833
基于单片机的湿度控制 浏览:499
ios如何使用安卓的帐号 浏览:883
程序员公园采访 浏览:812
程序员实战教程要多长时间 浏览:979
企业数据加密技巧 浏览:135
租云服务器开发 浏览:814
程序员告白妈妈不同意 浏览:337
攻城掠地怎么查看服务器 浏览:601