欢迎来到天天文库
浏览记录
ID:51082254
大小:1.46 MB
页数:56页
时间:2020-03-18
《公共关系原理与实务.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux操作系统分析中国科学技术大学计算机系陈香兰(0512-87161316)Autumn2009上次课内容回顾源代码简介启动代码简介Linux内核代码组成分析Linux的启动层次Linux的启动分析10/1/20212LinuxOSAnalysis内存寻址内容提要X86微处理器的存储器寻址Linux在X86上的寻址实现10/1/20214LinuxOSAnalysis存储器地址在intelx86处理器下,有三种不同的地址逻辑地址:每个逻辑地址由一个段(segment)和偏移量(offset)组成线性地址:32位无符号整数,可表示4G大
2、小的地址空间物理地址:芯片级内存单元寻址。它们与从CPU的地址引脚发送到内存总线上的电信号相对应地址转换过程物理地址线性地址分段单元分页单元逻辑地址10/1/20215LinuxOSAnalysis为什么需要内存寻址机制?保护内核不受恶意或者无意的破坏隔离各个用户进程方便程序的编写,使程序员可以抛开对物理内存的考虑,而且理论上可以使用任意大小的空间10/1/20216LinuxOSAnalysis硬件的分段单元(1)段寄存器(segmentregister)I386体系结构采用分段机制逻辑地址=段:段内偏移使用16位段寄存器来指明当前所使用
3、的段有六个:cs,ss,ds,es,fs和gsCPU规定了3个寄存器的专门的用途cs代码段寄存器,指向存放程序指令的段ss堆栈段寄存器,指向存放当前堆栈的段ds数据段寄存器,指向存放数据的段10/1/20217LinuxOSAnalysis从80386开始,Intel微处理器以两种不同的方式执行地址转换实模式(20位)16位段寄存器只记录段基址的高16位,因此段基址必须4位对齐(末4位为0)不采用虚拟地址空间,直接采用物理地址空间物理地址=段寄存器值*16+段内偏移保护模式(32位)16位段寄存器无法直接记录段的信息,因此需要与全局描述符表
4、GDT配合使用GDT中记录了每个段的信息(段描述符),段寄存器只需记录段在GDT中的序号10/1/20218LinuxOSAnalysis注意:cs寄存器还有一个很重要的功能:它含有一个两位的域,用以指明CPU的当前特权级CPL(currentprivilegelevel),值为0代表最高优先级,值为3代表最低优先级线性地址=段基地址+段内偏移其中,段基地址是根据段寄存器所指明的GDT中的段描述符中的信息得到的物理地址:根据页表对线性地址进行转换而得到10/1/20219LinuxOSAnalysisGDT和段描述符(segmentdesc
5、riptor)每个段由一个段描述符来表示,一个段描述符长度为8个字节全局描述符表GDT(globaldescriptiontable)就用来存放段描述符GDT表也存放在RAM中,并使用一个专门的寄存器GDTR来指示GDT表在RAM中的位置(物理起始地址)局部描述符表LDT(LocalDescriptionTable)根据x86,每个进程可以设置一个LDTLDT表也存放在RAM中,使用LDTR来指示当前的LDT表10/1/202110LinuxOSAnalysis由于段的用途不一样,Intelx86提供下列几种段描述符数据段描述符(DataS
6、egmentDescriptor)可以描述各种用户数据段和堆栈段代码段描述符(CodeSegmentDescriptor)描述一个用户代码段任务状态段描述符(TaskStateSegmentDescriptor)描述一个任务的状态段局部描述符表描述符描述一个LDT段系统段描述符(SystemSegmentDescriptor)10/1/202111LinuxOSAnalysis段描述符主要描述如下内容段的物理起始地址(base字段,32位)段长度(limit字段,20位)段长度的单位(粒度,G标志,1位)0:字节为单位1:4KB为单位是否系
7、统段(S标志,1位)0:系统段1:普通的段10/1/202112LinuxOSAnalysis类型字段(Type字段,4位)例如代码段、数据段、任务状态段、局部描述符段等等段的特权级描述字段(DPL字段,2位)00b:只能被CPL=00b的内核代码段访问..11b:可以被任意代码段访问段存在标志(1位)0:该段当前不在内存中1:该段当前在内存中…DescriptorPrivilegeLevel10/1/202113LinuxOSAnalysis段描述符的格式段基址、段长度、其他属性例如,0x00cf9a000000ffff10/1/2021
8、14LinuxOSAnalysis段选择子(SegmentSelector)16位段寄存器与GDT或LDT配合起来对相应的段进行寻址段寄存器中的值称为段选择子,16位13位的索引
此文档下载收益归作者所有