认识各种内存地址

什么是物理地址?

物理地址就是内存单元的绝对地址,物理地址0x0000就表示内存条的第一个存储单元,0x0010(16进制)就表示内存条的第17个存储单元,一个存储单元是1byte(8bit)。

你问为什么是1byte?
1
一个内存条是由若干个黑色的内存颗粒构成的。每一个内存颗粒叫做一个chip。
在这里插入图片描述
每个chip中又叠了若干bank
在这里插入图片描述
在每个bank内部,就是电容的行列矩阵结构了,每一个元素有8个小电容,存储8个bit,也就是一个字节。

什么是线性地址和虚拟地址?

在80286系列以前,CPU只支持实模式操作模式。16位寄存器想要对20位地址线进行寻址,使用分段机制,段基址(16位) x 16(左移4位) + 段内偏移地址(4位)就是物理地址了。
这样的好处是所见即所得,程序员指定的地址就是物理地址,物理地址对程序员是可见的。同时也带来了一些问题:
1) 无法支持多任务。
2) 程序的安全性无法得到保证。
(根本原因就是一个程序直接修改了其他程序的内存,导致崩溃)

80286系列则是被设计来解决这些问题,段式访存得到的改进,原来段基址+段内偏移得到的地址不再是实际的物理地址,而是被称作为线性地址,要经过一个转换层转换才变成一个物理地址。这种CPU操作模式就被称为保护模式了。保护的是:分清楚各个程序使用的存储区域,不允许随便跨界访问。

80286系列之后就进入32位CPU时代了,32位寄存器可以直接访问32位地址总线。但是在保护模式下,地址仍然采用“段地址:偏移地址”的方式来表示。
段值仍然由原来的16位的cs、ds等寄存器表示,但是此时它们仅仅是一个索引,这些个索引指向一个数据结构的表项,表项中详细定义了一个段的起始地址、界限、属性等内容,这个数据结构,叫做GDT(其实还可能是LDT),GDT中的每一个表项,叫做描述符。
这里我们就详细看一下保护模式的寻址方式吧。
在这里插入图片描述
1) 寻址时,先找到gdtr寄存器,从中得到GDT的基址。
2) 有了GDT的基址,又有段寄存器中保存的索引,可以得到段寄存器“所指”的那个表项,即所指的那个描述符。
3) 得到了描述符,就可以从描述符中得到该描述符所描述的那个段的起始地址。
4) 有了段的起始地址,将偏移地址拿过来与之相加,便能得到最后的线性地址。
5) 有了线性地址,经过变换,即可得到相应的物理地址。

保护模式虽然解决了内存不被跨界访问,但是其也带来了新的问题,那就是内存碎片。
首先我们了解一下内存碎片为何产生:
首先假设我们有10B内存:

ID首地址尾地址长度状态
00910空闲

当程序申请一个长度为3的内存空间后:

ID首地址尾地址长度状态
0023
1397空闲

当程序再申请一个长度为2,以及长度为4的内存空间后:

ID首地址尾地址长度状态
0023
1342
2584
3991空闲

此时,只剩1个可用空间。如果这时程序再来申请长度大于1的空间,就申请不了,也就是内存不够。
现在,释放掉ID=1的空间:

ID首地址尾地址长度状态
0023
1342空闲
2584
3991空闲

我们发现,现在可用内存空间为3,但是,这3个空闲空间,并不是连续的。
所以,如果程序现在申请长度为3的内存空间,同样会申请不了,会出现内存不够。我们把这种情况,称之为内存碎片

那内存碎片怎么解决呢?于是就有了分页机制,接下来我们详细讲一下分页:
首先,把物理内存,按照某种尺寸,进行平均分割。比如我现在以2个内存单位,来分割内存,也就是每两个连续的内存空间,组成一个内存页:

地址页ID状态
00空闲
1
21空闲
3
42空闲
5
63空闲
7
84空闲
9
接着,系统同样需要维护一个内存信息表:
ID使用的内存页ID

现在,程序申请长度为3的内存空间,不过由于现在申请的最小单位为页面,而一个页面的长度为2,因此现在需要申请2个页面,也就是4个内存空间。你看,这就浪费了1个内存空间。

地址页ID状态
00
1
21
3
42空闲
5
63空闲
7
84空闲
9
ID使用的内存页ID
00,1

接着,程序再申请长度为1,长度为2的空间:

地址页ID状态
00
1
21
3
42
5
63
7
84空闲
9
ID使用的内存页ID
00,1
12
23

释放掉ID=1,内存页ID为2的那条内存空间信息:

地址页ID状态
00
1
21
3
42空闲
5
63
7
84空闲
9
ID使用的内存页ID
00,1
23

现在,就出现了之前的情况:目前一共有4个内存空间,但是不连续。
不过,因为现在是分页管理机制,因此,现在仍然可以继续申请长度为4的内存空间。
没有碎片,能够尽量地全部用完空间。但仔细想想,这种优势背后,也是需要付出大量代价的。
分页的方式下,程序需要记录内存页ID,每次使用时,需要从内存页ID翻译成实际内存地址,多了一次转换。
而且这种模式,会浪费一些内存,比如上面申请3个内存空间,实际分配了2个页面共4个内存空间,浪费了1个内存空间。

还有一个要注意的地方,这个时候"段基址+段内偏移地址"经过段部件处理后得到的线性地址就不再是物理地址了,而是虚拟地址了。
从下图我们能够清楚的看出来我们最后的线性地址表示的是页表的地址,而不是物理地址了。
在这里插入图片描述

什么是逻辑地址和有效地址?

无论CPU在什么模式下,段内偏移地址又称为有效地址或者逻辑地址(只是叫法不一样罢了),例如实模式下mov ax, [0x7c00]0x7c00就是逻辑地址(或有效地址),但这条指令最终操作的物理地址是DS*16+0x7c00
Linux最初就是在32位的80386系列上设计的,并且没有使用分段机制,所以在Linux上逻辑地址和线性地址就是一回事了。

总结

一图以概括:
在这里插入图片描述

我的博客:https://geanqin.github.io/

  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
电脑代理服务器地址和端口号全文共16页,当前为第1页。电脑代理服务器地址和端口号全文共16页,当前为第1页。竭诚为您提供优质文档/双击可除 电脑代理服务器地址和端口号全文共16页,当前为第1页。 电脑代理服务器地址和端口号全文共16页,当前为第1页。 电脑代理服务器地址和端口号   篇一:代理服务器设置大放送   篇二:电脑端口大全   例如局域网路由网关是192.168.0.1   但是获取网关却是0.2,当然不可以上网了还必须手动更改设置才能上网。   原因:在网络中不知道谁又加了个路由器,开了dhcp服务。所以获取网关是不对的,把它的dhcp关后一切正常   有过一些黑客攻击方面知识的读者都会知道,其实那些所谓的黑客并不是像人们想象那样从天而降,而是实实在在从您的计算机"大门"中自由出入。计算机的"大门"就是我们平常所说的"端口",它包括计算机的物理端口,如计算机的串口、并口、输入/输出设备以及适配器接口等(这些端口都是可见的),但更多的是不可见的软件端口,在本文中所介绍的都是指"软件端口",但为了说明方便,仍统称为"端电脑代理服务器地址和端口号全文共16页,当前为第2页。电脑代理服务器地址和端口号全文共16页,当前为第2页。口"。本文仅就端口的基础知识进行介绍,   一、端口简介   随着计算机网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等输入/输出接口)已不能满足网络通信的要求,Tcp/Ip协议作为网络通信的标准协议就解决了这个通信难题。Tcp/Ip协议集成到操作系统的内核中,这就相当于在操作系统中引入了一种新的输入/输出接口技术,因为在Tcp/Ip协议中引入了一种称之为"socket(套接字)"应用程序接口。有了这样一种接口技术,一台计算机就可以通过软件的方式与任何一台具有socket接口的计算机进行通信。端口在计算机编程上也就是"socket接口"。   有了这些端口后,这些端口又是如何工作呢?例如一台服务器为什么可以同时是web服务器,也可以是FTp服务器,还可以是邮件服务器等等呢?其中一个很重要的原因是各种服务采用不同的端口分别提供不同的服务,比如:通常Tcp/Ip协议规定web采用80号端口,FTp采用21号端口等,而邮件服务器是采用25号端口。这样,通过不同端口,计算机就可以与外界进行互不干扰的通信。   据专家们分析,服务器端口数最大可以有65535个,但是实际上常用的端口才几十个,由此可以看出未定义的端口相当多。这是那么多黑客程序都可以采用某种方法,定义出一个特殊的端口来达到入侵的目的的原因所在。为了定义出电脑代理服务器地址和端口号全文共16页,当前为第3页。电脑代理服务器地址和端口号全文共16页,当前为第3页。这个端口,就要依靠某种程序在计算机启动之前自动加载到内存,强行控制计算机打开那个特殊的端口。这个程序就是"后门"程序,这些后门程序就是常说的木马程序。简单的说,这些木马程序在入侵前是先通过某种手段在一台个人计算机中植入一个程序,打开某个(些)特定的端口,俗称"后门"(backDoor),使这台计算机变成一台开放性极高(用户拥有极高权限)的FTp服务器,然后从后门就可以达到侵入的目的。   二、端口的分类   端口的分类根据其参考对象不同有不同划分方法,如果从端口的性质来分,通常可以分为以下三类:   (1)公认端口(wellKnown   ports):这类端口也常称之为"常用端口"。这类端口的端口号从0到1024,它们紧密绑定于一些特定的服务。通常这些端口的通信明确表明了某种服务的协议,这种端口是不可再重新定义它的作用对象。例如:80端口实际上总是hTTp通信所使用的,而23号端口则是Telnet服务专用的。这些端口通常不会像木马这样的黑客程序利用。为了使大家对这些常用端口多一些认识,在本章后面将详细把这些端口所对面应的服务进行列表,供各位理解和参考。   (2)注册端口(Registered   ports):端口号从1025到49151。它们松散地绑定于一电脑代理服务器地址和端口号全文共16页,当前为第4页。电脑代理服务器地址和端口号全文共16页,当前为第4页。些服务。也是说有许多服务绑定于这些端口,这些端口同样用于许多其他目的。这些端口多数没有明确的定义服务对象,不同程序可根据实际需要自己定义,如后面要介绍的远程控制软件和木马程序中都会有这些端口的定义的。记住这些常见的程序端口在木马程序的防护和查杀上是非常有必要的。常见木马所使用的端口在后面将有详细的列表。   (3)动态和/或私有端口(Dynamicand/orprivate   ports):端口号从49152到65535。理论上,不应把常用服务分配在这些端口上。实际上,有些较为特殊的程序,特别是一些木马程序就非

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值