欢迎来到天天文库
浏览记录
ID:25050128
大小:549.50 KB
页数:54页
时间:2018-11-16
《linux操作系统分析88887》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Linux操作系统分析主讲:陈香兰助教:贾永泉、毛熠璐xlanchen@ustc.edu.cn3606864-83(西区电三421)Autumn2007上次课内容回顾源代码简介启动代码简介Linux内核代码组成分析Linux的启动层次Linux的启动分析xlanchen@2007.9.182LinuxOperatingSystemsAnalysis内存寻址xlanchen@2007.9.18内容提要X86微处理器的存储器寻址Linux在X86上的寻址实现xlanchen@2007.9.184LinuxO
2、peratingSystemsAnalysis存储器地址在intelx86处理器下,有三种不同的地址逻辑地址:每个逻辑地址由一个段(segment)和偏移量(offset)组成线性地址:32位无符号整数,可以表示4G的地址空间物理地址:用于芯片级内存单元寻址。它们与从CPU的地址引脚发送到内存总线上的电信号相对应地址转换过程物理地址线性地址分段单元分页单元逻辑地址xlanchen@2007.9.185LinuxOperatingSystemsAnalysis为什么需要内存寻址机制?保护内核不受恶意或者无
3、意的破坏隔离各个用户进程方便程序的编写,使程序员可以抛开对物理内存的考虑,而且理论上可以使用任意大小的空间xlanchen@2007.9.186LinuxOperatingSystemsAnalysis硬件的分段单元(1)段寄存器(segmentregister)I386体系结构采用分段机制逻辑地址=段:段内偏移使用16位段寄存器来指明当前所使用的段有六个:cs,ss,ds,es,fs和gsCPU规定了3个寄存器的专门的用途cs代码段寄存器,指向存放程序指令的段ss堆栈段寄存器,指向存放当前堆栈的段d
4、s数据段寄存器,指向存放数据的段xlanchen@2007.9.187LinuxOperatingSystemsAnalysis从80386开始,Intel微处理器以两种不同的方式执行地址转换实模式(20位)16位段寄存器只记录段基址的高16位,因此段基址必须4位对齐(末4位为0)不采用虚拟地址空间,直接采用物理地址空间物理地址=段寄存器值*16+段内偏移保护模式(32位)16位段寄存器无法直接记录段的信息,因此需要与全局描述符表GDT配合使用GDT中记录了每个段的信息(段描述符),段寄存器只需记录段在
5、GDT中的序号xlanchen@2007.9.188LinuxOperatingSystemsAnalysis注意:cs寄存器还有一个很重要的功能:它含有一个两位的域,用以指明CPU的当前特权级CPL(currentprivilegelevel),值为0代表最高优先级,值为3代表最低优先级线性地址=段基地址+段内偏移其中,段基地址是根据段寄存器所指明的GDT中的段描述符中的信息得到的物理地址:根据页表对线性地址进行转换而得到xlanchen@2007.9.189LinuxOperatingSystems
6、AnalysisGDT和段描述符(segmentdescriptor)每个段由一个段描述符来表示,一个段描述符长度为8个字节全局描述符表GDT(globaldescriptiontable)就用来存放段描述符GDT表也存放在RAM中,并使用一个专门的寄存器GDTR来指示GDT表在RAM中的位置(物理起始地址)局部描述符表LDT(LocalDescriptionTable)根据x86,每个进程可以设置一个LDTLDT表也存放在RAM中,使用LDTR来指示当前的LDT表xlanchen@2007.9.181
7、0LinuxOperatingSystemsAnalysis由于段的用途不一样,Intelx86提供下列几种段描述符数据段描述符(DataSegmentDescriptor)可以描述各种用户数据段和堆栈段代码段描述符(CodeSegmentDescriptor)描述一个用户代码段任务状态段描述符(TaskStateSegmentDescriptor)描述一个任务的状态段局部描述符表描述符描述一个LDT段系统段描述符(SystemSegmentDescriptor)xlanchen@2007.9.1811
8、LinuxOperatingSystemsAnalysis段描述符主要描述如下内容段的物理起始地址(base字段,32位)段长度(limit字段,20位)段长度的单位(粒度,G标志,1位)0:字节为单位1:4KB为单位是否系统段(S标志,1位)0:系统段1:普通的段xlanchen@2007.9.1812LinuxOperatingSystemsAnalysis类型字段(Type字段,4位)例如代码段、数据段、任务状态段、局部描述符段等等段
此文档下载收益归作者所有