地址空间的抽象理解(个人理解)

          用户程序在运行时不希望介入到这些复杂的存储器管理过程中,作为普通的程序,它需要的是一个简单的执行环境,有一个单一的地址空间、有自己的CPU,好像整个程序占有整个计算机而不用关心其它的程序(当然程序间通信的部分除外,因为这是程序主动要求跟其它程序通信和联系)。
          所谓的地址空间是个比较抽象的概念,你可以把它想象成一个很大的数组,每个数组的元素是一个字节,而这个数组大小由地址空间的地址长度决定,比如32bit的地址空间的大小为  2^32 =  4294967296 byte,即4GB,地址空间有效的地址是0 ~ 4294967295  , 用十六进制表示为 0x 0000 0000 ~ 0x ffffFFFF。

     地址空间分两种:虚拟地址空间(Virtual Address Space)和物理地址空间(Physical Address Space)。
     物理地址空间是实实在在存在的,存在于计算机中,而且对于每一台计算机来说只有唯一的一个,你可以把物理地址空间想象为物理内存,比如:你的计算机用的是Intel 的 Pentium4 的CPU,那么它是32bit的机器,即计算机地址线有32条(实际上是36条地址线,不过我们暂时认为它只是32条),那么物理地址空间就有4GB。 但是你的计算机上只装了 512MB的内存,那么其实物理地址的真正有效部分只有 0x 0000 0000 ~ 0x1FFFffff,其他部分都是无效的(实际上还有一些外部I/O设备映射到物理空间的,也是有效的,但是我们暂时无视其存在)。
     
          虚拟地址空间是指虚拟的、人们想象出来的地址空间,其实他并不存在,每个进程都有自己独立的虚拟空间,而且每个进程只能访问自己的地址空间,这样就有效地做到了进程隔离。

2^32 = 4294967296       =   0x1 0000 0000

2^31 = 2147483648       =   0x  8000  0000

1  KiB = 2^10 byte = 1024 byte     (0x0 ~ 0x 400)
1  MiB = 1024  X 1 KiB   =  2 ^ 10   X  2 ^10 byte =  2 ^20 byte     (0x0 ~ 0x 10 0000)
1  GiB = 1024 X 1 Mib = 2^10  X 1 MiB = 2^10 X 2^20byte = 2^30 bye(0x 0 ~0x4000 0000)

512MB 的地址空间  (1GB/2)所以 2^30 /2 = 2^29   = 0x 4000 0000  /2 = 0x 2000 0000

能够表示的地址 0x 0000 0000 ~ 0x1FFFffff


在32位x86 CPU的Linux中  最多访问4GB 空间  2^32 ,内核态只能访问 最高的1GB内存空间
0xc0000000以上的地址空间只能在内核态下访问,0x00000000至0xbfffffff的地址空间在两种状态下都可以访问。(注意:这里所说的地址空间是逻辑地址而不是物理地址)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值