
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、linux中的地址空间分配原则有这么一系列的问题,是否在困扰着你:用户程序编译衔接形成的地址空间在什么范围内?内核编译后地址空间在什么范围内?要对外设举行拜访,i/o的地址空间又是什么样的?先回答第一个问题。最频繁的可执行文件格式为elf(executable and linkable format)。在elf格式的可执行代码中,ld总是从0x8000000开头支配程序的“代码段”,对每个程序都是这样。至于程序执行时在物理内存中的实际地址,则由内核为其建立内存映射时暂时分配,详细地址取决于当初所分配的物理内存页面。我们可以用linux的有用程序objdump对你的程序举行反汇编,从而知晓其地址
2、范围。例如:假定我们有一个容易的c程序hello.cincludegreeting ( )printf(“hello,world!n”);main()greeting();之所以把这样容易的程序写成两个函数,是为了解释命令的转移过程。我们用gcc和ld对其举行编译和衔接,得到可执行代码hello。然后,用linux的有用程序objdump对其举行反汇编:$objdump -d hello得到的主要片段为:08048568 :8048568:pushl %ebp8048569:movl %esp, %ebp804856b:pushl $0x809404 8048570:call 8048474
3、8048575:addl $0x4, %esp 8048578:leave 8048579:ret 804857a:movl %esi, %esi 0804857c :804857c:pushl %ebp 804857d:movl %esp, %ebp 804857f:call 8048568 8048584:leave 8048585:ret 8048586:nop 8048587:nop其中,像08048568这样的地址,就是我们常说的虚地址(这个地址实实在在的存在,只不过由于物理地址的存在,显得它是“虚”的罢了)。虚拟内存、内核空间和用户空间linux虚拟内存的大小为232(在32位的x
4、86机器上),内核将这4g字节的空间分为两部分。最高的1g字节(从虚地址0xc0000000到0xffffffff)供内核用法,称为“内核空间”。而较低的3g字节(从虚地址0x00000000到0xbfffffff),供各个进程用法,称为“用户空间”。由于每个进程可以通过系统调用进入内核,因此,linux内核空间由系统内的全部进程分享。于是,从详细进程的角度来看,每个进程可以拥有4g字节的虚拟地址空间(也叫虚拟内存)。 每个进程有各自的私实用户空间(03g),这个空间对系统中的其他进程是不行见的。最高的1gb内核空间则为全部进程以及内核所分享。另外,进程的“用户空间”也叫“地址空间”,在后面的
5、讲述中,我们对这两个术语不再区别。用户空间不是进程分享的,而是进程隔离的。每个进程最大都可以有3gb的用户空间。一个进程对其中一个地址的拜访,与其它进程对于同一地址的拜访绝不矛盾。比如,一个进程从其用户空间的地址0x1234abcd处可以读出整数8,而另外一个进程从其用户空间的地址0x1234abcd处可以读出整数20,这取决于进程自身的规律。随意一个时刻,在一个cpu上惟独一个进程在运行。所以对于此cpu来讲,在这一时刻,囫囵系统只存在一个4gb的虚拟地址空间,这个虚拟地址空间是面对此进程的。当进程发生切换的时候,虚拟地址空间也随着切换。由此可以看出,每个进程都有自己的虚拟地址空间,惟独此进
6、程运行的时候,其虚拟地址空间才被运行它的cpu所知。在其它时刻,其虚拟地址空间对于cpu来说,是不行知的。所以尽管每个进程都可以有4 gb的虚拟地址空间,但在cpu眼中,惟独一个虚拟地址空间存在。虚拟地址空间的变幻,随着进程切换而变幻。从上面我们知道,一个程序编译衔接后形成的地址空间是一个虚拟地址空间,但是程序终于还是要运行在物理内存中。因此,应用程序所给出的任何虚地址终于必需被转化为物理地址,所以,虚拟地址空间必需被映射到物理内存空间中,这个映射关系需要通过硬件体系结构所规定的数据结构来建立。这就是我们所说的段描述符表和页表,linux主要通过页表来举行映射。于是,我们得出一个结论,假如给出
7、的页表不同,那么cpu将某一虚拟地址空间中的地址转化成的物理地址就会不同。所以我们为每一个进程都建立其页表,将每个进程的虚拟地址空间按照自己的需要映射到物理地址空间上。既然某一时刻在某一cpu上只能有一个进程在运行,那么当进程发生切换的时候,将页表也更换为相应进程的页表,这就可以实现每个进程都有自己的虚拟地址空间而互不影响。所以,在随意时刻,对于一个cpu来说,只需要有当前进程的页表,就可以实现其虚拟地址到物理地址的转化。.内核空间到物理内存的映射内核空间对全部的进程都是分享的,其中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据,不管是内核程序还是用户程序,它们被编译和
8、衔接以后,所形成的命令和符号地址都是虚地址(参见2.5节中的例子),而不是物理内存中的物理地址。虽然内核空间占领了每个虚拟空间中的最高1gb字节,但映射到物理内存却总是从最低地址(0x00000000)开头的,4.2所示,之所以这么规定,是为了在内核空间与物理内存之间建立容易的线性映射关系。其中,3gb(0xc0000000)就是物理地址与虚拟地址之间的位移量,在linux代码中就叫做page_offset。我们来看一下在include/asm/i386/page.h头文件中对内核空间中地址映射的解释及定义:define _page_offset(0xc0000000) define page_offset(unsigned long)_page_offset)define _pa(x)(unsigned long)(x)-page_offset)define _va(x)(void *)(unsigned long)(x)+page_offset)对于内核空间而言,给定一个虚地址x,其物
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025南昌市西湖区疾病预防控制中心招聘工作人员1人模拟试卷及答案详解(各地真题)
- 2025第五师医院招聘劳务派遣人员(2人)模拟试卷附答案详解(典型题)
- 2025河南省职工医院普外科招聘2人考前自测高频考点模拟试题及答案详解(必刷)
- 2025内蒙古赤峰龙韵城市建设有限公司所属子公司员工招聘进入人员及相关考前自测高频考点模拟试题附答案详解
- 2025广西贵港市公安局覃塘分局招聘警务辅助人员80人考前自测高频考点模拟试题附答案详解
- 2025南华大学附属南华医院招聘62人(湖南)考前自测高频考点模拟试题附答案详解(完整版)
- 2025河南开封教投教育集团招聘116人考前自测高频考点模拟试题带答案详解
- 2025河北邯郸市丛台区选聘农村党务(村务)工作者42人模拟试卷附答案详解(考试直接用)
- 2025店铺租赁合同范本版
- 2025广西桂林医科大学第一附属医院公开选拔超声医学科主任1人考前自测高频考点模拟试题及答案详解(名师系列)
- 学堂在线 英文科技论文写作与学术报告 期末考试答案
- 护理安全警示教育案例
- 车辆损坏和解协议书
- 《围城》介绍课件
- 品控管理制度大全
- 洗衣房院感知识培训课件
- XX附属学校职称评聘及岗位聘任实施办法(完整版)
- DBJ51-T 040-2021 四川省工程建设项目招标代理操作规程
- 创新方法大赛理论知识考核试题题库及答案
- 电机车点检表及点检标准
- 高一英语必修一单词表默写版
评论
0/150
提交评论