2011.3.21学习笔记(linux内核结构)
Linux内核学习笔记

Linux系统管理员真实ID用作记账,有效ID用作确定访问权限。
ls –hl深入理解Linux内核笔记_exit()函数的作用最为简单:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;exit() 函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序,也是因为这个原因,有些人认为exit已经不能算是纯粹的系统调用。
exit()函数与_exit()函数最大的区别就在于exit()函数在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,就是"清理I/O缓冲"。
一、内存寻址二、进程三、中断中断和进程切换有一个明显的差异:由中断或异常处理程序执行的代码不是一个进程(一个内核控制路径)。
异常由专门的异常处理程序处理UDP是不可靠的,它不必保存应用程序的数据拷贝,因此无需一个真正的发送缓冲区Linux情景源代码分析一、为什么分段:算术逻辑单元是16位,而地址总线是20位,所以要分段。
二、内存管理Linux采用buddy系统来解决页外碎片,采用slab 分配器来解决页内碎片。
同时Linux采用了Node,Zone和page三级结构来描述物理内存的。
buddy系统是建立在这三级结构之上的。
slab 同时又在buddy系统之上管理着物理页之内的内存请求(小内存分配)。
Linux中,页的大小默认是4k其中zone dma 的地址范围是0~16M,是用来ISA DMA的内存区。
当然,这个zone也可以存放内核数据和用户数据。
zone normal 的地址范围是16~896M,可以存放内核数据和用户数据。
zone highmem 的地址范围是高于896M 的物理地址空间,只能用来存放用户数据。
注意,虽然在x86平台下,是如此划分的,但是在其他平台,zone dma 和highmem可能都是空的,所有的物理页框都划分在zone normal。
深入理解linux内核笔记1

郑重声明:未经本人允许,不得用于商业或非商业的转载和使用,如有需要请联系:yrj1978@hotmail.com引子为什么要写这个笔记:1,这本书的中文版翻译了太垃圾,没法阅读。
阅读英文原版,可以很好的理解作者的思路。
作此笔记备忘2,一直以来学习LINUXkernel的知识缺乏系统化,借对这本书的学习,系统化的学习一下LINUXkernel。
3,自己一直在做一个toosmall,toosimple的单进程,特权模式,64bit保护模式的称不上OS的OS,已经做完了bootloader,构思kernel的实现的时候,困惑在内存管理的实现上,阅读这本书,希望能有利于自己的OS的编写。
4,克服惰性,多读书,希望一天能阅读5页,争取半年内阅读完这本原版700多页的巨著。
不足:我不可能完全理解LINUX内存管理的精髓,肯定有很多地方理解错误。
希望大家能够指正,以便提高,谢谢。
学习方法:可能您第一次阅读的时候很多地方都不理解,不用担心。
那您可能需要阅读一些文件系统的知识。
或者阅读全部笔记后,再回头阅读,有些地方您就理解了。
言归正传:一、概要可用工具CodeViz:生成代码调用关系图的工具,这个工具我现在还没有去使用,有兴趣的可以自己试试去建立调用关系图。
http://www.csn.ul.ie/ ̄mel/projects/codeviz/Linuxcrossreference(LXR):以web的方式阅读和查找LINUX内核源代码的工具。
这个工具安装相当麻烦,我建议直接到它的官方网站直接读代码。
http://lxr.linux.no/linux+v2.6.24/模块LINUX内存管理代码模块主要分为4个部分:1.Outofmemory代码在mm/oom_kill.c貌似用于杀进程的时候对内存的操作2.虚拟内存的分配代码在mm/vmalloc.c3.物理内存页面分配代码在mm/page_alloc.cVMA(virtualmemoryaddresses)的创建和进程内的内存区域的管理4.这些模块,贯穿与其他kernel代码之中,形成更复杂的系统模块,如页面替换策略,buffer的输入输出等中间插段广告Linux文化T恤,淘宝销售,有兴趣的可以购买。
linux操作系统的结构及详细说明

linux操作系统的结构及详细说明linux的操作系统的结构你了解多少呢?下面由店铺为大家整理了linux操作系统的结构及详细说明的相关知识,希望对大家有帮助!linux操作系统的结构及详细说明:一、 linux内核内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。
系统调用接口:SCI 层提供了某些机制执行从用户空间到内核的函数调用。
这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。
SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。
在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。
1. 内存管理对任何一台计算机而言,其内存以及其它资源都是有限的。
为了让有限的物理内存满足应用程序对内存的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。
Linux 将内存划分为容易处理的“内存页”(对于大部分体系结构来说都是 4KB)。
Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。
不过内存管理要管理的可不止 4KB 缓冲区。
Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。
这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。
这样就允许该模式根据系统需要来动态调整内存使用。
为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。
由于这个原因,页面可以移出内存并放入磁盘中。
这个过程称为交换,因为页面会被从内存交换到硬盘上。
内存管理的源代码可以在 ./linux/mm 中找到。
2 .进程管理进程实际是某特定应用程序的一个运行实体。
Linux内核简要介绍(doc 9页)

Linux内核简要介绍(doc 9页)更多企业学院:《中小企业管理全能版》183套讲座+89700份资料《总经理、高层管理》49套讲座+16388份资料《中层管理学院》46套讲座+6020份资料《国学智慧、易经》46套讲座《人力资源学院》56套讲座+27123份资料《各阶段员工培训学院》77套讲座+ 324份资料《员工管理企业学院》67套讲座+ 8720份资料《工厂生产管理学院》52套讲座+ 13920份资料《财务管理学院》53套讲座+ 17945份资料《销售经理学院》56套讲座+ 14350份资料《销售人员培训学院》72套讲座+ 4879份资料器提供文件传输机制,而用户可以使用任何客户端程序;命令行的客户端和图形化界面的客户端都存在,并且谁都可以为传输文件写一个新的用户界面。
只要涉及到驱动程序,就会运用这样的功能划分。
软盘驱动程序是设备无关的——这不仅表现在磁盘是一个连续读写的字节数组上。
如何使用设备是应用程序要做的事:tar要连续地写数据,而mkfs则为要安装的设备做准备工作,mcopy 依赖于设备上存在的特殊数据结构。
在写驱动程序时,程序员应该特别留心这样的基本问题:我们要写内核代码访问硬件,但由于不同用户有不同需要,我们不能强迫用户采用什么样的特定策略。
设备驱动程序应该仅仅处理硬件,将如何使用硬件的问题留给应用程序。
如果在提供获得硬件能力的同时没有增加限制,我们就说驱动程序是灵活的。
不过,有时必须要作一些策略决策。
可以从不同侧面来看你的驱动程序:它是位于应用层和实际设备之间的软件。
驱动程序的程序员可以选择这个设备应该怎样实现:不同的驱动程序可以提供不同的能力,甚至相同的设备也可以提供不同能力。
实际驱动程序设计应该是在众多需求之间的一个平衡。
例如,不同程序可以同时使用同一个设备,而驱动程序的开发者可以完全自由地决定如何处理同步机制。
你可以实现到设备上的内存映射,而完成独立于硬件的具体能力,或者你可以提供给用户函数库,帮助应用程序的程序员在可用原语的基础上实现新策略,或者诸如此类的方法。
linux操作系统课程学习笔记,我的Linux学习笔记·Linux操作系统基础

linux操作系统课程学习笔记,我的Linux学习笔记·Linux操作系统基础今天的笔记主要是关于Linux操作系统根底的相关学问。
那就从我⾯前的电脑开端讲起。
计算机和操作系统计算机主要包括五个部分:运算器,控制器,存储器,输⼊设备和输出设备。
通常,运算器,控制器再加上其他⼀些部件如寄存器等构成了我们通常所说的CPU(central processing unit),存储器则主要是内存。
运算器,控制器和存储器可以实现数据的处理.但是数据从何⽽来,运算之后的结果去往哪⾥?这就需要输⼊设备和输出设备(I/O设备)。
我们通常⽤到的输⼊设备包括键盘⿏标等,输出设备为屏幕,打印机等。
值得⼀提的是,计算机中有个叫做硬盘的东西,它并不是存储器,⽽是⼀个I/O设备。
在将数据读取到内存时,它是⼀个输⼊设备;⽽将结果保存到磁盘时,它就变成了⼀个输出设备。
这么多设备整合在⼀起,就成了⼀台计算机。
它可以接收我们的指令(键盘⿏标),通过运算(CPU),把结果展⽰给我们(屏幕,硬盘等)。
但是这么多硬件是如何协调作⽤,共同完成⼀个任务⽽不会我⾏我素地乱来呢?我们需要⼀个东西,它可以控制硬件有序地⼯作,各⾃执⾏⾃⼰的任务,这个东西就是操作系统(Operating System)。
操作系统是⼀个特殊的软件,它的任务就是硬件管理—控制CPU的运算,控制内存的分配,控制计算机的⼏乎⼀切。
假如⼀台电脑没有操作系统,它可能只是⼀个艺术品,或者⼀堆废铁。
⼀个完整的操作系统包括内核和⼀些辅助软件。
内核的主要任务就是进⾏硬件管理,它是⼀个操作系统最基础最底层的东西。
内核若想很好地控制硬件并使其发挥相应的功能,需要和硬件相识相知相爱,他俩可以成为完美的⼀对,全都仰仗于驱动的帮忙。
驱动是硬件的灵魂,它向操作系统提供了访问和使⽤硬件的接⼝,以便在某项任务中最⾼效地调⽤硬件。
什么是LinuxLinux就是⼀个操作系统,它可以管理整个计算机硬件,并且可以接收我们的指令,来指挥硬件完成相应的任务,并把结果反馈给我们。
linux系统内核结构详解

Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。
1.进程调度(SCHED):控制进程对CPU的访问。
当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。
可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。
Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。
2.内存管理(MM)允许多个进程安全的共享主内存区域。
Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。
必要时,操作系统负责在磁盘和内存间交换程序块。
内存管理从逻辑上分为硬件无关部分和硬件有关部分。
硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。
3.虚拟文件系统(VirtualFileSystem,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。
虚拟文件系统可以分为逻辑文件系统和设备驱动程序。
逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。
4.网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。
网络接口可分为网络协议和网络驱动程序。
网络协议部分负责实现每一种可能的网络传输协议。
网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。
5.进程间通讯(IPC) 支持进程间各种通信机制。
处于中心位置的进程调度,所有其它的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。
一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。
例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被成功的发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。
linux 系统知识点总结

linux 系统知识点总结Linux系统是一个免费的开源操作系统,它基于Unix操作系统而开发,能够在不同的计算机平台上运行。
Linux系统被广泛应用于服务器、嵌入式系统以及个人计算机上,其安全性、稳定性和灵活性备受赞誉。
在本文中,我们将对Linux系统的一些重要知识点进行总结。
一、Linux系统的基本结构Linux系统由内核、shell、文件系统、进程管理器和用户界面等组成。
1. 内核(Kernel)是Linux系统的核心部分,它负责管理硬件、内存和文件系统等。
内核提供了操作系统的基本功能,如任务调度、内存管理和设备管理等。
2. Shell是用户和内核之间的接口,它允许用户通过命令行或图形界面与系统进行交互。
常见的Shell包括Bash、Korn shell、C shell等。
3. 文件系统(File System)是Linux系统中用于组织和管理文件的一种机制。
Linux支持多种文件系统,如ext、XFS、JFS等。
4. 进程管理器(Process Manager)负责管理系统中运行的进程和线程。
Linux通过进程管理器分配计算机资源,确保系统能够有效地运行。
5. 用户界面(Graphical User Interface,GUI)是Linux系统中的图形化界面,它为用户提供了更直观、更友好的操作方式。
常见的Linux GUI包括GNOME、KDE、Unity等。
二、Linux系统的安装和配置安装Linux系统需要以下步骤:1. 确定系统要安装的Linux发行版(Distribution),如Ubuntu、Fedora、CentOS等。
2. 创建安装媒体,如DVD、USB或CD-ROM。
3. 启动计算机并选择从安装媒体中启动。
4. 遵循安装向导的指示进行安装。
完成安装后,还需要进行系统配置,主要包括:1. 确定网络设置,包括IP地址、子网掩码和网关等。
2. 配置文件系统,包括分区、格式化和挂载。
linux体系结构

linux体系结构linux体系结构从⼤⾯上来说,linux体系结构分为:⽤户空间:C库、⽤户应⽤程序内核空间:系统调⽤接⼝、内核、硬件平台依赖代码具体来讲,linux可划分为5个部分:linux内核、GNU⼯具链、桌⾯环境、应⽤软件linux内核系统调⽤接⼝(SCI层):给应⽤⽤户提供⼀套标准的系统调⽤函数,上层⽤户可以通过这⼀套标准接⼝来访问底层内存管理:进程管理:⽂件管理:设备驱动管理:内存管理1.作⽤:管理物理内存、创建和管理虚拟内存为了使有限的物理内存满⾜应⽤程序对内存的需求,linux采⽤“虚拟内存”的内存管理⽅式实现,实现原理:交换空间:内核在硬盘上化⼀段存储空间来实现虚拟内存,这段存储空间称为“交换空间”页⾯:内存存储单元被分割成很多块,称为“页⾯”页⾯内存表:内核会维护⼀张表,来指明哪些页⾯位于物理内存,那么页⾯位于交换空间换出:物理内存---->交换空间换⼊:交换空间---->物理内存⼯作过程:1、内核将程序运⾏⽤到的页⾯就放到内存⾥,暂时不⽤就放到交换空间中(换出)。
2、当⽤到交换空间的页⾯时,就把它们调到内存中(换⼊),然后把物理内存其他⽤不到的页⾯换出到交换空间。
查看内存#cat /proc/meminfoMemTotal: 1035244 kB #物理内存1GMemFree: 786616 kB #空闲内存700M左右...SwapTotal: 2096472 kB #有2G的交换空间....查看内存使⽤情况#freetotal used free shared buffers cachedMem: 502360 489964 12396 0 53852 283372-/+ buffers/cache: 152740 349620Swap: 1015800 0 1015800共享内存页⾯:创建⼀写共享内存页⾯,⽤于多个进程共享使⽤。
#ipcs -m #查看共享内存页⾯key shmid owner perms bytes nattch status0x00000000 0 rich 600 52228 6 dest#owner:共享内存段的所有者#perms:权限进程管理参见⽂件管理linux内核⽂件管理采⽤虚拟⽂件系统(VFS),隐藏各种⽂件系统的具体细节,为⽂件操作提供统⼀的接⼝。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、资料收集当前,在操作系统实现方面,有以下两种主要的范型。
(1) 微内核:这种范型中,只有最基本的功能直接由中央内核(即微内核)实现。
所有其他的功能都委托给一些独立进程,这些进程通过明确定义的通信接口与中心内核通信。
例如,独立进程可能负责实现各种文件系统、内存管理等。
(当然,与系统本身的通信需要用到最基本的内存管理功能,这是由微内核实现的。
但系统调用层次上的处理则由外部的服务器进程实现。
)理论上,这是一种很完美的方法,因为系统的各个部分彼此都很清楚地划分开来,同时也迫使程序员使用"清洁的"程序设计技术。
这种方法的其他好处包括:动态可扩展性和在运行时切换重要组件。
但由于在各个组件之间支持复杂通信需要额外的CPU时间,所以尽管微内核在各种研究领域早已经成为活跃主题,但在实用性方面进展甚微。
(2) 宏内核:与微内核相反,宏内核是构建系统内核的传统方法。
在这种方法中,内核的全部代码,包括所有子系统(如内存管理、文件系统、设备驱动程序)都打包到一个文件中。
内核中的每个函数都可以访问内核中所有其他部分。
如果编程时不小心,很可能会导致源代码中出现复杂的嵌套。
因为在目前,宏内核的性能仍然强于微内核,Linux仍然是依据这种范型实现的(以前亦如此)。
但其中已经引进了一个重要的革新。
在系统运行中,模块可以插入到内核代码中,也可以移除,这使得可以向内核动态添加功能,弥补了宏内核的一些缺陷。
模块特性依赖于内核与用户层之间设计精巧的通信方法,这使得模块的热插拔和动态装载得以实现Linux 内核简介现在让我们从一个比较高的高度来审视一下GNU/Linux 操作系统的体系结构。
您可以从两个层次上来考虑操作系统,如图 2 所示。
图 2. GNU/Linux 操作系统的基本体系结构最上面是用户(或应用程序)空间。
这是用户应用程序执行的地方。
用户空间之下是内核空间,Linux 内核正是位于这里。
GNU C Library (glibc)也在这里。
它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。
这点非常重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间。
每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。
Linux 内核可以进一步划分成 3 层。
最上面是系统调用接口,它实现了一些基本的功能,例如read 和 write。
系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。
这些代码是 Linux 所支持的所有处理器体系结构所通用的。
在这些代码之下是依赖于体系结构的代码,构成了通常称为 BSP(Board Support Package)的部分。
这些代码用作给定体系结构的处理器和特定于平台的代码。
Linux 内核的属性在讨论大型而复杂的系统的体系结构时,可以从很多角度来审视系统。
体系结构分析的一个目标是提供一种方法更好地理解源代码,这正是本文的目的。
Linux 内核实现了很多重要的体系结构属性。
在或高或低的层次上,内核被划分为多个子系统。
Linux 也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。
这与微内核(微内核(英文中常译作µ-kernel或者micro kernel)。
是一种能够提供必要服务的操作系统内核;其中这些必要的服务包括任务,线程,交互进程通信(IPC,Inter-Process Communication)以及内存管理等等。
所有服务(包括设备驱动)在用户模式下运行,而处理这些服务同处理其他的任何一个程序一样。
因为每个服务只是在自己的地址空间运行。
所以这些服务之间彼此之间都受到了保护)的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。
每种内核都有自己的优点,不过这里并不对此进行讨论。
随着时间的流逝,Linux 内核在内存和 CPU 使用方面具有较高的效率,并且非常稳定。
但是对于Linux 来说,最为有趣的是在这种大小和复杂性的前提下,依然具有良好的可移植性。
Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。
一个例子是 Linux 可以在一个具有内存管理单元(MMU)的处理器上运行,也可以在那些不提供 MMU 的处理器上运行。
Linux 内核的uClinux 移植提供了对非 MMU 的支持。
Linux 内核的主要子系统现在使用图 3 中的分类说明 Linux 内核的主要组件。
图 3. Linux 内核的一个体系结构透视图系统调用接口SCI 层提供了某些机制执行从用户空间到内核的函数调用。
正如前面讨论的一样,这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。
SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。
在 ./linux/kernel 中您可以找到SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。
进程管理进程管理的重点是进程的执行。
在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。
在用户空间,通常使用进程 这个术语,不过 Linux 实现并没有区分这两个概念(进程和线程)。
内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable OperatingSystem Interface [POSIX] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSIX 机制)。
进程管理还包括处理活动进程之间共享 CPU 的需求。
内核实现了一种新型的调度算法,不管有多少个线程在竞争 CPU,这种算法都可以在固定时间内进行操作。
这种算法就称为 O(1) 调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。
O(1) 调度程序也可以支持多处理器(称为对称多处理器或 SMP)。
您可以在 ./linux/kernel 中找到进程管理的源代码,在 ./linux/arch 中可以找到依赖于体系结构的源代码。
内存管理内核所管理的另外一个重要资源是内存。
为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页 方式进行管理的(对于大部分体系结构来说都是 4KB)。
Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。
不过内存管理要管理的可不止 4KB 缓冲区。
Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。
这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。
这样就允许该模式根据系统需要来动态调整内存使用。
为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。
由于这个原因,页面可以移出内存并放入磁盘中。
这个过程称为交换,因为页面会被从内存交换到硬盘上。
内存管理的源代码可以在./linux/mm 中找到。
虚拟文件系统虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。
VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层(请参看图 4)。
图 4. VFS 在用户和文件系统之间提供了一个交换层在 VFS 上面,是对诸如 open、close、read 和write 之类的函数的一个通用 API 抽象。
在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。
它们是给定文件系统(超过 50 个)的插件。
文件系统的源代码可以在 ./linux/fs 中找到。
文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。
这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。
缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。
网络堆栈网络堆栈在设计上遵循模拟协议本身的分层体系结构。
回想一下,Internet Protocol (IP) 是传输协议(通常称为传输控制协议或 TCP)下面的核心网络层协议。
TCP 上面是 socket 层,它是通过SCI 进行调用的。
socket 层是网络子系统的标准 API,它为各种网络协议提供了一个用户接口。
从原始帧访问到 IP 协议数据单元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 层提供了一种标准化的方法来管理连接,并在各个终点之间移动数据。
内核中网络源代码可以在 ./linux/net 中找到。
设备驱动程序Linux 内核中有大量代码都在设备驱动程序中,它们能够运转特定的硬件设备。
Linux 源码树提供了一个驱动程序子目录,这个目录又进一步划分为各种支持设备,例如 Bluetooth、I2C、serial 等。
设备驱动程序的代码可以在 ./linux/drivers 中找到。
依赖体系结构的代码尽管 Linux 很大程度上独立于所运行的体系结构,但是有些元素则必须考虑体系结构才能正常操作并实现更高效率。
./linux/arch 子目录定义了内核源代码中依赖于体系结构的部分,其中包含了各种特定于体系结构的子目录(共同组成了BSP)。
对于一个典型的桌面系统来说,使用的是i386 目录。
每个体系结构子目录都包含了很多其他子目录,每个子目录都关注内核中的一个特定方面,例如引导、内核、内存管理等。
这些依赖体系结构的代码可以在 ./linux/arch 中找到。
二、资料整理1、内核版本号一般地,可以从Linux内核版本号来区分系统是否是Linux稳定版还是测试版。
以版本2.4.0为例,2代表主版本号,4代表次版本号,0代表改动较小的末版本号。
在版本号中,序号的第二位为偶数的版本表明这是一个可以使用的稳定版本,如2.2.5,而序号的第二位为奇数的版本一般有一些新的东西加入,是个不一定很稳定的测试版本,如2.3.1。
这样稳定版本来源于上一个测试版升级版本号,而一个稳定版本发展到完全成熟后就不再发展2、Linux内核源码目录Linux内核源代码位于/usr/src/linux目录下:/include子目录包含了建立内核代码时所需的大部分包含文件,这个模块利用其他模块重建内核。
/init 子目录包含了内核的初始化代码,这是内核工作的开始的起点。
/arch子目录包含了所有硬件结构特定的内核代码。
如:i386,alpha/drivers子目录包含了内核中所有的设备驱动程序,如块设备和SCSI设备。
/fs子目录包含了所有的文件系统的代码。