linux系统的初始化

Linux系统的初始化
本文的内容是讲述从Linux系统启动部分。即当你按下power键到你看到login:的整个过程牵扯的东西很多很多。所以专门写一个专题来将将这个东西。
本文不局限于Linux的启动过程的分析,同时兼顾对系统结构方面的介绍。本文的另外一个目的是为了自己工作,复习一下相关的知识。
与这个部分相关的代码主要是:
1、Bootsect.s,setup.S和head.S
2、Init 目录下面的main.c
/arch/i386下面的其他代码也是很重要的。
1、基础知识
1.1 386的体系结构
80386的芯片内部被分为独立的六个处理部件:总线接口部件,执行部件和分段部件,分页部件,指令
预取和指令译码部件。其中分段部件和分页部件统称为MMU内存管理部件。这六个部件是并行工作的,构成了一个6级流水体系结构,从而大大提高了处理效率。对于程序设计人员来讲要了解386的寄存器结构要比知道物理上的实现更加重要。80386的内部有30多个寄存器。其中可以分为如下五类:通用寄存器,段寄存器,系统地址寄存器,控制寄存器,以及调试和测试寄存器。
1.1.1通用寄存器:
在应用程序用来对程序的数据进行存取和计算。80386有8个32位的通用寄存器,如下图1.2所示。他们是在16位寄存器的扩展。故命名为EAX,EBX,ECX,EDX,EBP,ESI,EDI 和ESP。数据可以是1位,8位,16位,32位和64位(MMX)。访问寄存器的尺寸可以为8位,16位,和32位,并给不同的尺寸赋予不同的名字。比如EAX是32位,AX是16位,AL和AH是8位。
两个附加寄存器保留了当前指令流的状态信息。EIP寄存器包含的是当前指令的下一条指令的偏移地址。EFLAGS中包含了与各个指令相关的信息位。EIP或IP与CS段寄存器共同指出了下一条被执行指令的存储器地址。
无限空间EFLAGS的寄存器包含如下字段:
图1.1 EFLAGS寄存器(图来源于IA32手册)
CF 进位标志
PF 奇偶标志当某个算术运算操作生成有偶数个1时,该位被置位
AF 辅助进位标志当AL的寄存器低半个字节发生进位时被置位。由BCD码控制。
ZF 0标志,如果运算结果为0,该为被置1
SF 符号标志当SF=1时,表明结果是负数。
TF trace标志。如果TF=1,那么下一条指令执行完后立即触发INT 1
IF 中断允许标注如果IF =1 是响应中断的。
DF是方向标志当DF=1时字符串操作从高地址向地址操作。 STD,CLD
OF指令是溢出标志
IOPL是个双位字段可以取0~3 IOPL是限定了CPU的安全级别。
NT 任务嵌套标志当调用、中断、trace或者异常引起任务切换时,设置该位为1
RF 是重新启动的标志
VM是虚拟86模式的标注
AC 此位仅用于80486中
图1.2 通用寄存器
1.1.2 段寄存器
段寄存器中比较重要的是 CS寄存器,CS寄存器只能通过CALL, RET 和 JMP 指令进行修改。别的指令修改都是违规的。另外段寄存器都配置了一个描述符高速缓存,它保存了段寄存器的起始地址和段界限和访问权限。这个高速缓存是不能访问的,又称为影子寄存器。
堆栈的实现是通过段寄存器的SS和通用寄存器ESP, EBP组成的。栈是倒挂的栈,在调用一个子程序段的时候一般先要开辟一段空间作为栈空间,然后按照CSDEL或者pascal_DEL的顺序进行将参数压栈,C的是从右到左,这些参数通过堆栈进行传递其中EBP 一般指向这些参数。
高中班级宠物女孩小诗1.1.3系统地址寄存器
系统地址寄存器是一般用来管理保护模式下使用的系统表。系统描述表有全局描述符表(GDT)和中断描述符表(IDT)、局部描述符表(LDT)和用来存储任务内容的任务状态段(TSS)。因此就对应了4个系统地址寄存器。
经历我的1957年GDTR 是48位寄存器。存放的是GDT的32位线性地址和16位的GDT的界限值。
IDTR  是48位寄存器。存放的是IDT的32位线性地址和16位的IDT的界限值。
TR    是16位的寄存器,放的是任务状态段的TSS的16位选择字。在GDT中去查表。
LDTR 是16位的寄存器。放的是局部描述符表的LDT的16位选择字。
GDTR和IDTR必须在进入保护模式前设置好,这两个寄存器在实模式下可以访问。LDTR和TR仅能在保护模式下使用。
图1.3 系统地址寄存器
1.1.4控制寄存器
80386内部有3个32位的控制寄存器CR0,CR2,CR3,用来控制分页和数学协处理器的操作,保存机器的各个全局状态。其中的CR0最重要。
PE是保护模式允许位。通过此位切换到保护模式
MP表示协处理器是不是存在
博客圈TS 是任务切换标志
EM 模拟协处理器位,当此位被清除时,协处理器指令才会在协处理器上执行
PG 分页允许控制位。PG=0禁止分页部件工作。
PG PE 工作模式
0 0 实模式
dna探针
0 1 不分页保护模式
1 0 无定义
1 1 分页保护模式
CR1没有定义
CR2是页面故障线性地址寄存器
CR3是页目录基地址寄存器 CR3中放着页目录表的基地址。
调试寄存器很少用到就不说了。
1.2 IA32 CPU的工作模式
Intel CPU的早期的CPU只存在一种操作模式,即现在所说的实模式(Real Mode,以下简称RM)。在Intel推出80286之后,为了增强CPU的处理能力,同时也为了适应当时的软件开发需求,Intel提出了保护模式(Protected Mode,以下简称PM),但在80286下的PM由于CPU本身设计的问题,并没有使其发挥出很大的功效。在80386推出之后,Intel完善了CPU的设计形成了最终的IA-32架构,并提出了另一种虚拟X86模式。
实模式RM:此模式是主机在加电或复位后自动进入的模式,在此模式下其可以执行16位指令
保护模式:在此模式下,CPU能够支持其自身的32位特性,使自身处于最高性能表现。这些特性主要包括:
1.最大可访问4GB内存空间。
2.虚拟存储。处于PM下的CPU其内存管理单元(MMU)支持这项特性。前面我已经说到,在PM下CPU最大寻址空间为4GB,而在实际中,我们并没有如此大的物理内存空间。因此通过MMU,可以将外存设备(如:硬盘)的一部分空间模拟成物理内存进行使用。3.地址映射。即MMU可以在地址使用前对其进行转换,即所谓的映射。
4.改进的分段机制。
5.内存保护与任务保护。即在PM状态下,引入了权限机制。通过权限控制可以达到保护相关代码和数据的目的。
6.改进的寻址模式。在RM下,只有常数,BX或BP,SI或DI可以用来形成地址,而在RM下可以通过任意寄存器进行寻址,并且可以包含一个为2,4或8的比例因子。
7.多任务支持。在PM下,CPU提供了特殊的机制能够进行快速的上下文切换。
虚拟86模式:就是为了向下兼容原来8086下的程序。
月亮的心愿教学设计图1.4 三种模式之间的切换
1.2.1保护模式
由于CPU在32位保护模式下才能发挥真正的实力,所以我们详细讲述保护模式的原理。在介绍保护模式之间,先简单区分几个专业词汇:
逻辑地址、虚拟地址、线性地址和物理地址
逻辑地址是当一个程序访问存储器而并不需要考虑操作方式和具体物理硬件细节时,它所使用的地址就是逻辑地址。也就是说逻辑上的地址。
虚拟地址,当然要对应虚拟内存。虚拟地址是由两个逻辑地址构成的。一个段地址,一个段内偏移。而对于同一个虚拟地址由于分页机制的存在可能在不同的时间对应的是不同的物理存储地址。
线性地址:由两个部分的实模式下的分段地址和保护模式下的虚拟地址最终被转换成一个线性地址。在早期的8086 80286下线性地址就是物理地址。在80386后,需要通过分页机制转换才变成物理地址。
物理地址:硬件地址。
在讨论保护模式的时候我们将按照分段和分页模式分别讨论。
分段管理
在保护模式下运行程序的虚拟地址就像在实地址模式下运行程序的分段地址一样。虚拟地址有两个部分构成,一个16位的段选择器和一个32位的地址偏移量。段选择器通过在描述符表中选取一个描述符,而描述符描述了段的基地址和控制信息。通过段基址和offset得到线性地址。如果分页部件是关闭的那么就得到了物理地址。这种机制和实模式下的区别在于段选择器和多出来的描述符表。
那描述符表究竟是什么东西呢?
描述符表是一个存放在存储器的系统数据结构。他决定了如何将虚拟地址转化为线性地址。既然所有的段选择器(CS,DS,ES,SS等)都是通过描述符表来实现的。那么他们之间必然需要一些机制来区分。因此描述符表中除了实际的段基址外还有一些控制信息。根据这些控制信息,可以将描述符分为如下类别:
一般描述符

本文发布于:2024-09-23 03:28:42,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/231525.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议