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


Bootsect.s程式是磁碟开机区块程式,编译后会驻留在磁碟的第一个磁区中(开机磁区,O磁轨(柱面),0磁头,第l个磁区)。在PC机加电ROM BIOS自检后,将被BIOS载入到记忆体0x7C00处开始执行。
Setup.s程式主要用于读取机器的硬件配置参数,並把內核模组system移动到适当的记忆体位置处。

Head.s程式会被编译连接在system模组的最前部分,主要进行硬体装置的探测设置和记忆体管理页面的初始设置工作。


5.10.3 档案系统目录S

Linux 0.12內核的档案系统採用了1.0版的MINIX档案系统,这是由於Linux是在MINIX系统上开发的,採用MINIX档案系统便於进行交叉编译,並且可以从MINIX中载入Linux分区。虽然使用的是MINIX档案系统,但Linux对其处理方式与MINIX系统不同。主要的区別在於MINIX对档案系统採用单执行绪处理方式,而Linux则採用了多执行绪方式。由於採用了多执行绪处理方式,Linux程式就必须处理多执行绪带来的竞爭条件、锁死等问题,因此Linux档案系统代码要比MINIX系统的复杂得多。为了避免竞爭条件的发生,Linux系统对资源分配进行了严格地检查,並且在內核模式下执行时,如果任务沒有主动睡眠(呼叫sleep( )),就不让內核切換任务。

Fs/目錄是档案系统实现程式的目錄,共包含18个C语言程式。这些程式之间的主要参照引用关系见 5-29所示图中每个方框代表一个档案,从上到下按基本按引用关系放置。其中各档案名均略去了尾码.c,虛框中是的程式档不属於档案系统,带箭头的线条表示引用关系,粗線条表示有相互引用关系。








由图可以看出,该目錄中程式可以划分成四个部分:高速缓冲区管理、低层档操作、档资料存取和档高层函数,在对本目錄中档案进行注释說明时,我们也将分成这四个部分来描述。

对於档案系统,我们可以将它看成是记忆体高速缓冲区的扩展部分。所有对档案系统中资料的存取,都需要首先读取到高速缓冲区中。本目錄中的程式主要用来管理高速缓冲区中缓冲区块的使用分配和区块装置上的档案系统。管理高速缓冲区的程式是buffer.c,而其他程式则主要都是用於档案系统管理。

在file table.c档中,目前仅定义了一个档案控制码(描述符)结构阵列。ioctl.c档将引用kernel/chr_drv/tty.c中的函数,实现字元装置的io控制功能。Exec.c程式主要包含一个执行程式函数do_execve( ),它是所有exec( )函数簇中的主要函数。fcntl.c程式用于实现档i/o控制的系统呼叫函数。read_write.c程式用於实现档案读/写和定位三个系统呼叫函数。Stat.c程式中实现了两个获取档案状态的系统呼叫函数。Open.c程式主要包含实现修改档案属性和建立与关闭档案的系统呼叫函数。

char_dev.c 主要包含字元装置读写函数rw_char()。pipe.c程式中包含管道读写函数和建立管道的系统呼叫。file_dev.c程式中包含基於i节点和描述符结构的档案读写函数。namei.c程式主要包括档案系统中目錄名和档案名的操作函数和系统呼叫函数。block_dev.c套件程式含块资料读和写函数。Inode.c程式中包含针对档案系统i节点操作的函数。truncate.c程式用於在刪除档案时释放档案所佔用的装置资料空间。Bitmap.c程式用於处理档案系统中i节点和逻辑资料区块的点阵图。super.c程式中包含对档案系统超级区块的处理函数。buffer.c程式主要用於对记忆体高速缓冲区进行处理。虛框中的ll_rw_block是区块装置的底层读函数,它並不在fs目錄中,而是kernel/blk_drv/ll_rw_block.c中的区块装置读写驱动函数。放在这里裡只是让我们清楚的看到,档案系统对於区块装置中资料的读写,都需要透过高速缓冲区与区块装置的驱动程式(ll_rw_block())来操作来进行,档案系统程式集本身並不直接与区块装置的驱动程式打交道。

在对程式进行注释过程中,我们将另外给出这些档案中各个主要函数之间的呼叫层次关系。


5.10.4 标头档主目錄include

标头档目錄中总共有32个.h标头档。其中主目錄下有13个,asm子目錄中有4个,linux子目錄中有lO个,sys子目錄中有5个。这些标头档各自的功能见如下简述,具体的作用和 所包含的资讯请参见对标头档的注释一章。


a.out标头档,定义了a.out执行档格式和一些巨集。
常数符号标头档,目前仅定义了i节点中i_mode栏位的各标志位元。
字元类号标头档。定义了一些有关字元类型判断和转換的巨集。
错误号标头档。包含系统中各种出错号。(Linus从minix中引进的)。
档案控制标头档。用於档及其描述符的操作控制常数符号的定义。
信号标头档。定义信号符号常数,信号结构以及信号操作函数原型。
标準参数标头档。以巨集的形式定义变数参数列表。主要說明了一个类型 (va_list)和三个巨集(va_start,va_arg和va_end),用于vsprintf、vprintf’Vfprintf函数。
标準定义标头档。定义了NULL,offsetof(TYPE,MEMBER)。
字串标头挡。主要定义了一些有关字串操作的嵌入函数。
终端输入输出标头档。主要定义控制非同步通信口的终端介面。
时间类型标头档。其中最主要定义了tm结构和一些有关时间的函数原形。
Linux标準标头档。定义了各种符号常数和类型,並声明了各种函数。如定义了_IBRARY__,则还包括系统呼叫号和內嵌组合_syscallO( )等。
用戶时间标头档。定义了存取和修改时问结构以及utime( )原型。


体系结构相关标头档子目录include/asm

这些标头档主要定义了一些CPU体系结构密切相关的资料结构、巨集函数和变数。共4个档案。


io标头档。以巨集的嵌入组合语言程式形式定义对io端口操作的函数。
记忆体拷贝标头档。含有memcpy( )嵌入式组合巨集函数。
段操作标头档。定义了有关段寄存器操作的嵌入式组合函数。
系统标头档。定义了设置或修改描述符/中断门等的嵌入式组合巨集。


Linux内核专用标头档子目录include/linux

內核配置标头档。定义键盘语言和硬碟类型(HD_TYPE)可选项。
软盘机标头档。含有软碟控制卡参数的一些定义。
档案系统标头档。定义档案表结构(file,buffer_head,m_inode等)。
硬碟参数标头档。定义存取硬碟寄存器端口,状态码,分区表等信息。
共12页: 上一页 [1] [2] [3] [4] [5] [6] [7] [8] 9 [10] [11] [12] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(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内核中的实现SYN Coo
·深入学习LINUX内核之二(图文讲解
·简析Linux与FreeBSD的syscall
·深入学习Linux内核文档一(图文讲
·Linux操作系统“警惕”内核汉化
·Linux操作系统核心的汉字显示机
·如何利用异常表处理Linux内核态

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