Linux内核结构详解教程

ajax

贡献于2010-09-07

字数:0 关键词: Linux

红联的个人空间 Linux内核结构详解教程 作者:红联 Linux内核结构详解教 程 ─────Linux内核教程 linux内核就像人的心脏,灵魂,指挥中心。 内核是一个操作系统的核心,它负责管理系统的进程,内存,设备驱动程序,文件和网络系统,决定着 系统的性能和稳定性。内核以独占的方式执行最底层任务,保证系统正常运行。协调多个并发进程, 管理进程使用的内存,使它们相互之间不产生冲突,满足进程访问磁盘的请求等等. 严格说Linux并不能称做一个完整的操作系统.我们安装时通常所说的Linux,是有很多集合组成的.应称 为GNU/Linux. 一个Linux内核很少1.2M左右,一张软盘就能放下. 内容基础,语言简短简洁 红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章及教程基本能满足不同水平的朋 友学习。 红联Linux门户: www.linux110.com 红联Linux论坛: www.linuxdiyf.com/bbs 红联Linux 论坛大全,所有致力点都体现在这 http://www.linuxdiyf.com/bbs/rf/linux/07.htm 博客:http://www.linux286.com/6/12/?3 1/13 制作于:2006-11-16 Powered by X-Space红联的个人空间 Linux内核结构详解教程 作者:红联 目录 Linux内核结构详解 Linux内核主要五个子系统详解 各个子系统之间的依赖关系 系统数据结构 Linux的具体结构 Linux内核源代码 Linux 内核源代码的结构 从何处开始阅读源代码 海量Linux技术文章 博客:http://www.linux286.com/6/12/?3 2/13 制作于:2006-11-16 Powered by X-Space红联的个人空间 Linux内核结构详解教程 作者:红联 Linux 内核结构详解 发布时间 :2006-11-16 19:05:29   Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。 博客:http://www.linux286.com/6/12/?3 3/13 制作于:2006-11-16 Powered by X-Space红联的个人空间 Linux内核结构详解教程 作者:红联 Linux 内核主要五个子系统详解 发布时间 :2006-11-16 19:05:54   1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得 运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运 行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。   2.内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中 运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在 内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑 上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为 内存管理硬件提供了虚拟接口。   3.虚拟文件系统(VirtualFileSystem,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口 ,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系 统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块 。   4.网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网 络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每 一种可能的硬件设备都有相应的设备驱动程序。   5.进程间通讯(IPC) 支持进程间各种通信机制。   处于中心位置的进程调度,所有其它的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。一般情 况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。例如,当一个进程 通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被成功的发 送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其他子系统以相似的理由依赖于进程调 度。 博客:http://www.linux286.com/6/12/?3 4/13 制作于:2006-11-16 Powered by X-Space红联的个人空间 Linux内核结构详解教程 作者:红联 各个子系统之间的依赖关系 发布时间 :2006-11-16 19:06:20   进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序环境下,程序要运行必须为之创建 进程,而创建进程的第一件事情,就是将程序和数据装入内存。   进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机制允许 两个进程除了拥有自己的私有空间,还可以存取共同的内存区域。   虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统(NFS),也利用内存管 理支持RAMDISK设备。   内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期由调 度程序调度,这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理向 文件系统发出请求,同时,挂起当前正在运行的进程。   除了这些依赖关系外,内核中的所有子系统还要依赖于一些共同的资源。这些资源包括所有子系统都用到 的过程。例如:分配和释放内存空间的过程,打印警告或错误信息的过程,还有系统的调试例程等等。 博客:http://www.linux286.com/6/12/?3 5/13 制作于:2006-11-16 Powered by X-Space红联的个人空间 Linux内核结构详解教程 作者:红联 系统数据结构 发布时间 :2006-11-16 19:06:52 在linux的内核的实现中,有一些数据结构使用频度较高,他们是: task_struct. Linux内核利用一个数据结构(task_struct)代表一个进程,代表进程的数据结构指针形成了一个task数组 (Linux中,任务和进程是相同的术语),这种指针数组有时也称为指针向量。这个数组的大小由NR_TASKS(默认 为512),表明Linux系统中最多能同时运行的进程数目。当建立新进程的时候,Linux为新进程分配一个 task_struct结构,然后将指针保存在task数组中。调度程序一直维护着一个current指针,他指向当前正在运行 的进程。 Mm_struct 每个进程的虚拟内存由一个mm_struct结构来代表,该结构实际上包含了当前执行映像的有关信息,并且包含 了一组指向vm_area_struct结构的指针,vm_area_struct结构描述了虚拟内存的一个区域。 Inode 虚拟文件系统(VFS)中的文件、目录等均由对应的索引节点(inode)代表。每个VFS索引节点中的内容由文件系 统专属的例程提供。VFS索引节点只存在于内核内存中,实际保存于VFS的索引节点高速缓存中。如果两个进 程用相同的进程打开,则可以共享inade的数据结构,这种共享是通过两个进程中数据块指向相同的inode完成 。 博客:http://www.linux286.com/6/12/?3 6/13 制作于:2006-11-16 Powered by X-Space红联的个人空间 Linux内核结构详解教程 作者:红联 Linux 的具体结构 发布时间 :2006-11-16 19:07:17   所谓具体结构是指系统实现的结构。   Linux的具体结构类似于抽象结构,这种对应性是因为抽象结构来源于具体结构,我们的划分没有严格依照 源代码的目录结构,且和子系统的分组也不完全匹配,但是,它很接近源代码的目录结构。   尽管前面的讨论的抽象结构显示了各个子系统之间只有很少的依赖关系,但是具体结构的5个子系统之间 有高度的依赖关系。我们可以看出,具体结构中的很多依赖关系并没有在抽象结构中出现。 博客:http://www.linux286.com/6/12/?3 7/13 制作于:2006-11-16 Powered by X-Space红联的个人空间 Linux内核结构详解教程 作者:红联 Linux 内核源代码 发布时间 :2006-11-16 19:07:44   目前,较新而又稳定的内核版本是2.4.x和2.6.x,因为版本不同稍有差别,因此如果你想让一个新的驱动程 序既支持2.4.x,又支持2.6.x,就需要根据内核版本进行条件编译,要作到这一点,就要支持宏 LINUX_VERSION_CODE,假如内核的版本用a.b.c来表示,这个宏的值就是216a+28b+c。要用到指定内核版 本的值,我们可以用KERNEL_VERSION宏,我们也可以自己去定义它。   对内核的修改用补丁文件的方式发布的。Patch实用程序用来用来对内核源文件进行一系列的修改。例如 :你有2.2.9的源代码,但想移到2.2.10。就可以获得2.2.10的补丁文件,应用patch来修改2.2.9源文件。例如 :   $ cd /usr/src/linux   $ patch -pl < patch-2.2.10 博客:http://www.linux286.com/6/12/?3 8/13 制作于:2006-11-16 Powered by X-Space红联的个人空间 Linux内核结构详解教程 作者:红联 Linux 内核源代码的结构 发布时间 :2006-11-16 19:08:05 Linux内核源代码位于/usr/src/linux目录下。 /include子目录包含了建立内核代码时所需的大部分包含文件,这个模块利用其他模块重建内核。 /init 子目录包含了内核的初始化代码,这是内核工作的开始的起点。 /arch子目录包含了所有硬件结构特定的内核代码。如:i386,alpha /drivers子目录包含了内核中所有的设备驱动程序,如块设备和SCSI设备。 /fs子目录包含了所有的文件系统的代码。如:ext2,vfat等。 /net子目录包含了内核的连网代码。 /mm子目录包含了所有内存管理代码。 /ipc子目录包含了进程间通信代码。 /kernel子目录包含了主内核代码。 博客:http://www.linux286.com/6/12/?3 9/13 制作于:2006-11-16 Powered by X-Space红联的个人空间 Linux内核结构详解教程 作者:红联 从何处开始阅读源代码 发布时间 :2006-11-16 19:08:23 在Internet,有人制作了源代码导航器,为阅读源代码提供了良好的条件,站点为lxr.linux.no/source。 下面给出阅读源代码的线索: 系统的启动和初始化: 在基于Intel的系统上,当loadlin.exe或LILO把内核装入到内存并把控制权传递给内核时,内核开始启动。关于 这一部分请看,arch/i386/kernel/head.S,head.S进行特定结构的设置,然后跳转到init/main.c的main()例程。 内存管理: 内存管理的代码主要在/mm,但是特定结构的代码在arch/*/mm。缺页中断处理的代码在/mm/memory.c ,而内 存映射和页高速缓存器的代码在/mm/filemap.c 。缓冲器高速缓存是在/mm/buffer.c 中实现,而交换高速缓存是 在mm/swap_state.c和mm/swapfile.c。 内核: 内核中,特定结构的代码在arch/*/kernel,调度程序在kernel/sched.c,fork的代码在kernel/fork.c,内核例程处理程 序在include/linux/interrupt.h,task_struct数据结构在inlucde/linux/sched.h中。 PCI: PCI伪驱动程序在drivers/pci/pci.c,其定义在inclulde/linux/pci.h。每一种结构都有一些特定的PCI BIOS代码, Intel的在arch/alpha/kernel/bios32.c中。 进程间通信: 所有的SystemVIPC对象权限都包含在ipc_perm数据结构中,这可以在include/linux/ipc.h中找到。SystemV消 息是在ipc/msg.c中实现。共享内存在ipc/shm.c中实现。信号量在ipc/sem.c中,管道在/ipc/pipe.c中实现。 中断处理: 内核的中断处理代码几乎所有的微处理器特有的。中断处理代码在arch/i386/kernel/irq.c中,其定义在 include/asm-i386/irq.h中。 博客:http://www.linux286.com/6/12/?3 10/13 制作于:2006-11-16 Powered by X-Space红联的个人空间 Linux内核结构详解教程 作者:红联 海量 Linux 技术文章 发布时间 :2006-11-15 11:32:55 下面是linux技术文章快速入口。需要联网: Linux 技术交流 http://www.linuxdiyf.com/bbs/forum-3-1.html Linux 应用 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=1 Linux 安装及学习指导 http://www.linuxdiyf.com/bbs/forum-45-1.html Linux 系统安装 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=45&filter=type&typeid=11 Linux 学习指导 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=45&filter=type&typeid=12 Linux 软件安装 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=45&filter=type&typeid=13 shell http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=3 Linux 壁纸 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=4 红旗 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=5 Redhat http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=6 SuSE http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=7 博客:http://www.linux286.com/6/12/?3 11/13 制作于:2006-11-16 Powered by X-Space红联的个人空间 Linux内核结构详解教程 作者:红联 Linux 认证 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=9 Linux下载分享{酷件、书籍、视频分享 } http://www.linuxdiyf.com/bbs/forum-6-1.html 服务器应用 http://www.linuxdiyf.com/bbs/forum-7-1.html 数据库应用 http://www.linuxdiyf.com/bbs/forum-8-1.html Linux 编程与内核 http://www.linuxdiyf.com/bbs/forum-9-1.html UniX 技术文章 http://www.linuxdiyf.com/bbs/forum-32-1.html Linux 业界声音、新闻 http://www.linuxdiyf.com/bbs/forum-11-1.html Linux 人才招聘信息 http://www.linuxdiyf.com/bbs/forum-46-1.html 博客:http://www.linux286.com/6/12/?3 12/13 制作于:2006-11-16 Powered by X-Space红联的个人空间 Linux内核结构详解教程 作者:红联 制作:红联Linux论坛 祝您阅读愉快! 博客:http://www.linux286.com/6/12/?3 13/13 制作于:2006-11-16 Powered by X-Space

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 20 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档

相关文档