首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>linux 内核>文章内容
深入学习LINUX内核之六(图文讲解)
来源:http://www.unix5.com 作者:riechelr_hl 发布时间:2008-04-15  

在本章这里,我们首先要介绍的是Linux內核的编制模式和体系结构,然后详细描述了Linux內核原始码目錄中组织形式和子目錄中各个代码档的主要功能,以及基本呼叫的层次关系等。接着就是直接走入正题,从內核原始档案Linux/目錄下的第一个档Makefile开始,对每一行代码进行详细注释說明。本章內容可以看作是对內核原始码的总结概述,也可以作为閱读后续章节的参考资讯。对於较难理解的地方可以先跳过,待閱读到后面相关內容时再返回来参考本章內容。在閱读本章之前请先复习或学习有关80X86保护模式执行方式工作原理。

一个完整可用的作业 充主要由4部分组成:硬体、作业系统內核、作业系统服务和用戶应用程式,图5-l所示。用戶应用程式是指那些字处理程式、Internet浏览器程式或用户自行编制的各种应用程式;作业系统服务程式是指那些向用戶提供的服务被看作是作业系统部分功能的程式。在Linux作业系统上,这些程式包括X视窗系统、shell命令解释系统以及那些內核程式设计介面等系统程式;作业系统內核程既是本篇文章所感兴趣的部分,它主要用於对硬件资源的抽象和存取调度。






在汇流排控制器控制下,8259A晶片可以处于程式设计状态和操作状态,程式设计伏态是CPU使用IN或OUT指令对82 59A晶片进行初始化程式设计的状态。一旦完成了初始化程式设计,晶片即进入操作状态,此时晶片即可随时回应外部装置提出的中断请求(IRQ0 - IRQ15),同时系统还可以使用操作命令字随时修改其中断处理方式。透过中断判优选,晶片将选中当前最高优先顺序的中断清求作为中断服务对象,並透过CPU接脚INT通知CPU外中断请求的到来,CPU回应后,晶片从资料汇流排D7-D0将程式设计设定的当前服务对象的中断号送出,CPU由此获取对应的中断向量值,並执行中断服务程式。


5.4.3 中断向量表

上节已指出CPU是根据中断号获取中断向量值,即对应中断服务程式的入口位址直。因此为了让CPU由中断号查找到对应得中断向量,就需要在记忆体中建立一张查询表,即中断向量表(在32位元保护模式下该表称为中断描述符表,见下面說明)。80X86微机支持256个中断,对应每个中断需要安排一个中断服务程式。在80X86真实模式执行方式下,每个中断向量由4个位元组组成。这4个立元组指明了一个中断服务程式的段值和段內偏移值。因此整个向量表的长度为1024位元组。当80X86微机啟动时,ROM BIOS中的程式会在实体记
忆体开冶位址0x0000 : 0x0000处初始化並设置中断向量表,而各中断的预设中断服务程式则在BIOS中给出。由於中断向量表中向量是按中断号顺序排列,因此给定一个中断号N,那麼它对应的中断向量在记忆体中的位置就是0x0000 : N*4,即对应的中断服务程式入口位保存在实体记忆体0x0000 : N*4位置处。

在BIOS执行初始化操作时,它设置了两个8259A晶片支援的16个硬体中断向量和BIOS提供的中断号为0x10 - 0xlf 得中断呼叫功能向量等。对於实际沒有使习的向量则填入临时的哑中断服务程式位址。以后在系统开机载入作业系统时会根据实际需要修改某些中断向量的值 列如,对於DOS作业系统,它会重新役置中断0x20 – 0x2f的中断向量值。而对於Linux系统,除了在刚开始载入內核时需要用到BIOS提供的显示和磁碟读取操作中断功能,在內核正常执行之前则会在setup.s程式中重新初始化8259 A晶片並且在head.s程式中重新设置一张中断向量表(中断描述符表)。完全拋弃BIOS所提供的中断服务功能。

当Intel CPU执行在32位元保护模式下时,需要使用中断描述符表IDT (Interrupt Descriptor Table)来管理中断或异常。IDT是Intel 8086- -80186CPU中使用的中断向量表的直接替代物。其作用也类似于中断向量表,只是其中每个中断描述符项中除了含有中断服务程式位址以外,还包含有关特权级和描述符类別等资讯。Linux作业系统工作於80X86的保护模式下,因此它使用中断描述符表安来设置和保存各中断的“向量”资讯。


5.4.4Linux內核的中断处理


於于Linux內核来說,中断信号通常分两类 :硬体中断和软件中断(異常)。每个中断是由 0-255 之间的一个数字来标识。对於中断int0- -int3l(0x00- -0xff),每个中断的功能由Intel公司固定设定或保留用,属於软体中断,但Intel公司称之为異常。因为这些中断是在CPU执行指令时探测到異常晴況而引起的。通常还可分为故障(Fault)和陷阱(traps)两类。中断
int32- -int255(0x20- -0xff)可以由用戶自己设定。所有中断的分类以及执行后CPU的动作方式见表5-1所示。


Linux內核的主要用途就是为了与电脑硬件进行交流,实现对硬件部件的程式设计控制和介面操作,调度对硬件资源的存取,並为电脑上的用戶程式提供一个高级的执行环境和对硬件的虚拟介面。

在本章內容中,我们是基于Linux 0.12版的內核原始码,简明地描述Linux內核的基本体系结构、主要构成模组。然后对原始码中出现的几个重要资料结构进行說明。最后描述了建构Linux 0.12 內核编译实验环境的方法。


5.1 Linix內核模式

目前,作业系统內核的结构模式主要可分为整体式的单內核模式和层次式的微內核模式。而本文章所注释的Linux 0.12內核,则是採用了单內核模式。单內核模式的主要优点是內核代码结构紧湊,执行速度快,不足之处主要是层次结构性不強。

在单內核模式的系统中,作业系统所提供服务的流程为:应用主程序使用指定的参数值执行系统呼叫指令(int x80),使CPU从用戶态(User Mode)切換到核心态(Kernel Model),然后作业系统根据具体的参数值呼叫特定的系统呼叫服务程式,而这些服务程式则根据需要再呼叫底层的一些支援函数以完成特定的功能。在完成了应用程式所要求的服务后,作业系统又使CPU从核心态切換回用戶态,从而返回到应用程式中继续执行后面的指令。因此概要地讲,单內核模式的內核也可粗略地分为三个层次:呼叫服务的主程序层、执行系统呼叫的服务层和支援系统呼叫的底层函数。见图5-2所示。






5.2 Linux系统体系结构

Linux內核主要由5个模组构成,它们分別是:行程调度模组、记忆体管理模组、档案系统模组、行程间通信模组和网路介面模组。

共8页: 上一页 1 [2] [3] [4] [5] [6] [7] [8] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·使用 Linux 系统调用的内核命令
·Linux 2.6.11内核文件IO系统调用
·Linux操作系统的源代码目录树结
·Linux用户态与内核态的交互讲解
·Linux内核对I/O端口的管理实现(
·深入分析 Linux操作系统的内核链
·Linux内核可装载模块对设备驱动
·概述Linux系统的驱动框架及驱动
·详解Linux 2.6内核新文件系统变
·Linux系统可卸载内核模块完全指
·FreeBSD手册讲解(一)--配置FreeB
·编译Linux操作系统的内核讲解
  相关文章
·深入学习LINUX内核之五(图文讲解
·深入学习LINUX内核之七(图文讲解
·深入学习LINUX内核之四(图文讲解
·深入学习LINUX内核之三(图文讲解
·深入学习LINUX内核之二(图文讲解
·Linux系统内核漏洞分析
·深入学习Linux内核文档一(图文讲
·如何在Linux内核中的实现SYN Coo
·简析Linux与FreeBSD的syscall
·Linux操作系统“警惕”内核汉化
·Linux操作系统核心的汉字显示机
·如何利用异常表处理Linux内核态

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!