LINUX操作系统就是一种系统软件。
处理器工作模式:早期的计算机如IBM-PC采用的处理器芯片是8086/8088,是一种16位或准16位的微处理器,支持操作系统是单用户、单任务的系统,最大寻址空间为1MB(2^20)单元。80386/Pentium,系列的CPU,其内部运算是32位,寻址能力是4GB(2^32),可以支持多用户、多任务的操作系统。为了兼容8086处理器,自80286以后,处理器引入了处理器的工作模式的概念,常见的工作模式有实模式、保护模式和虚拟8086模式。
实模式是80286以上的微处理器所采用的8086工作模式,不能对内存进行分页管理。由段寄存器的内容乘以16作为段基址,在加上段内偏移形成最终的物理地址。DOS操作系统就是运行实模式。
保护模式是80386以上处理器所使用的主要模式。支持多任务,提供内存分段分页管理和特权级保护等功能。这种工作模式可以引入虚拟存储的机制,WINDOWS和LINUX等操作系统都需要在保护模式下运行。
80386有4个32位的控制寄存器,分别为CR0\CR1\CR2\CR3。CR1被保留。CR0包含指示处理器工作方式的控制位,启用和禁止分页管理机制的控制位,以及控制浮点协处理器操作的控制位,CR2、CR3由分页管理机制使用。
存储管理机制
保护和地址变换是操作系统内存管理的两个关键部分。计算机中的物理内存是字节的线性数组,每个字节具有唯一的一个物理地址。操作系统在给任务分配内存时的地址是由两部分组成的逻辑地址,不能直接映射到物理地址,必须通过一种地址转换机制来将逻辑地址转化为物理地址。每个任务的转化关系不一样,因此地址转换机制也为任务之间提供了保护。
80X86使用分段和分页两种机制来实现地址转换。分段机制是将逻辑地址转换为线性地址的过程。分页机制是将线性地址转换为物理地址的过程。
逻辑地址 当程序访问存储器时,如果不考虑操作方式及物理硬件细节时,他所用的地址就称为逻辑地址,每个逻辑地址由一个段和偏移量组成。
虚拟地址 在保护模式下,程序访问存储器所使用的逻辑地址称为虚拟地址。
线性地址 经过分段机制将虚拟地址转换而成的,是线性地址空间的一个绝对地址,是一段连续的、不分段的、0~4GB范围内的地址空间。经过分页部件处理后可以转换为物理地址。
物理地址 指物理内存空间上一个实际地址。是逻辑地址转换的最终结果。
LINUX支持非常多的硬件平台,由于大部分硬件平台不支持分段机制,只有分页机制,因此LINUX为了使其具有更好的移植性而没有使用分段机制。但在IA32中不能禁止分段机制,因此LINUX将段基址定义为0,段的界限定义为4GB。
保护机制
在一个任务内,定义有4种执行特权级别,用于限制对任务中的段进行访问。特权级别用数字0、1、2、3表示, 数字0表示最高特权级别,数字3表示最低特权级别。任务在特定时刻的特权级成为当前特权级(CPL),即当前运行程序的特权级。每当一个程序试图访问一个段时,就把CPL与要访问的段的特权级进行比较,来决定是否允许这一访问。对于给定CPL执行的程序,允许访问同一级别或更低级别的数据段。
中断陷入与异常处理
8086/8088把中断分为内部中断和外部中断两大类。为了支持多任务和虚拟存储器等功能,80386把外部中断称为”中断“,把内部中断称为”异常“。80386最多处理256种中断或异常。中断与异常的区别为中断与正在执行的指令无关,而异常与正在执行的指令有关;中断是由硬件信号引发的,分为可屏蔽和不可屏蔽中断,异常由指令执行引发,比如除零异常。
为了使处理器容易识别每个中断源,给每个中断一个编号,也就是标识号,也成为向量号,从0~255.因此这个8位的无符号整数就叫做中断向量。0X80号中断是一个系统调用异常,因此操作系统在发生系统调用时,实际上是通过调用int 0x80指令来完成的。指令int 0x80会跳转到系统调用在内核定义的入口地址。这个地址被定义为system_call。
时钟中断
在计算机中都包含一个实时时钟RTC的时钟芯片,RTC是主板上一块需要电池来供电的芯片,因此即使系统断电,RTC也能正常工作,维持系统的时间和日期。在PC中一般会有两个时钟源,一个是RTC,一个是OS时钟。RTC是在系统断电时维持日期和时间。OS时钟是由系统硬件部件(定时器/计数器)和软件(时钟中断处理程序)结合而成的。在开机时,操作系统取得RTC中的时间数据来初始化OS时钟,然后通过定时/计数芯片的技术来形成OS时钟。
在操作系统初始化时,内核向定时/计数器写入控制字及计数初值,计数器便从计数初值开始计数,每收到晶振的输入脉冲信号,计数器就减1,当计数器减至0时,就会输出一个脉冲,随后便从计数初值开始重复另一次计数过程,周期性产生输出脉冲。
定时/计时器对从晶振输入的脉冲进行计数(分频),产生三个输出脉冲,分别输出到中断控制器、DRAM和扬声器。定时/计数器产生的输出脉冲接到中断控制器上,定期产生中断信号。这个中断就是时钟中断。时钟中断只是一个周期性信号,完全是硬件行为,该信号触发CPU去执行一个中断服务程序。整个操作系统的活动都受到它的激励。时钟中断是整个操作系统的脉搏。
任务切换
80X86支持多任务操作,主要通过一种任务切换机制来实现。需要硬件软件配合,每个任务有一个任务状态段TSS,保存任务的有关信息。任务是可以分配、调度、挂起的一个工作单元。
80X86对任务状态段及任务切换过程也提供了保护机制,从较高特权级的任务可以顺利的切换到较低特权级的任务。从较低特权级的任务切换到较高特权级的任务就需要通过任务门来实现。
在高版本的LINUX内核中,每个CPU仅适用了一个TSS来完成任务切换,为了简化设计,使用软件的方法来切换任务,也就是将CR3的值设成不同的值来切换。
SMP及多核技术
SMP对称多处理器技术是指在一台计算机上存在多个处理器,每个处理器都含有它自己的控制单元、算术逻辑单元和寄存器;每个处理器共享主存和I/O设备。
在对称多处理器SMP系统中存在着多个CPU,每个CPU处于同等地位,都有自己的APIC(高级可编程中断控制器)和I/O APIC(处理I/O设备引起的中断)。CPU之间通过彼此发送中断来完成之间的通信,并且通过给中断附加动作,不同的CPU可以在某种程度上彼此控制。需要软件来协助实现。
本文详细介绍了80x86处理器的工作模式及其对操作系统的影响,包括实模式、保护模式和虚拟8086模式。同时,探讨了处理器的存储管理机制,如分段和分页机制,以及Linux操作系统如何利用这些机制实现内存管理。此外,还讨论了中断处理、时钟中断、任务切换、SMP和多核技术等内容。

被折叠的 条评论
为什么被折叠?



