`
java-mans
  • 浏览: 11464260 次
文章分类
社区版块
存档分类
最新评论

Linux网管笔记(17)阅读Linux的内核源码

 
阅读更多

有关此类文章确实比较多了,列出我解读代码的几点体会。

1.代码的结构

(1)阅读sched.h源码文件,加深对进程管理概念的理解

(2)阅读Linux的fork.c源码文件,分析进程的创建过程

(3)阅读msg.c,sem.c和shm.c源码文件,熟悉Linux的三种通信机制。

Linux的内核源码可以通过许多途径得到。一般来讲,在完整安装的Linux系统下,/usr/src/linux目录下的文件就是内核源码。另外,还可以从Internet上下载,http://www.kernel.org/是比较权威的下载站点。展开的源码一般包括以下几个子目录:

u arch: 该目录包含了此内核源码所支持的硬件体系结构相关的内核源码。在这个目录下,针对不同体系结构所移植的版本都有三个子目录:kernel、lib和mm。kernel子目录包含以来于体系结构实现的一般内核功能,如信号处理、时钟处理等;lib子目录包含库函数的本地实现,如果从依赖于体系结构的源码编译,则运行更快;mm子目录包含存储管理实现的代码。

u kernel:许多最常调用的内核函数放在该目录下。调度器fork()和timer.c就放在这里,以及printk.c等。与处理器结构相关的代码放在arch/*/kernel目录下。

u lib:该目录放置内核其他部分经常所需要的代码,如inflate.c就放在这里,它能够在引导时解压内核并装入内存。与处理器结构相关的库代码放在arch/*/lib目录下。

u mm: 包含了所有Linux实现虚拟内存管理的源码。与具体硬件体协结构相关的内存管理代码位于arch/*/mm目录下,如对应X86的就是arch/i386/mm/fault.c

u drivers: 这个目录拥有50%以上的内核源码,系统中所有的设备驱动程序都位于该目录中。

u include: 包括了内核的大多数头文件,另外对每种支持的体系结构分别有一个子目录。

u init: 包含了所有系统的初始化源码,许多主要的文件,如main.c就位于该目录下。该文件还包含了许多核心代码——如实现fork()的代码和最常执行的代码——cpuidle()循环。

u ipc: 处理进程间通信的全部所需的代码都放在目录下。

u modules: 已编译好的可动态加载的模块。

u fs: Linux支持的文件系统代码。不同的文件系统有不同的子目录与之对应。

u net: 所有提供网络支持的代码,每个子目录对应网络的一个方面。

u scripts: 用于配置内核的脚本文件角用户开发和维护手册。

Linux内核源码包含的内容较多,2.4.20版本的内核源码大约有40万行。

2.内核编码风格

如果用户需要修改Linux内核源码,那么一定要注意遵守下面的编码约定:

u 注释是/* */风格的,单行注释也是这样,不接受//风格的注释。

u 函数开始的大括号{}独占一行。

u if语句以下面方式编码:

if (str[0]>=’0’ && str[0]

strcpy (name, “abcd”);

strncpy (name+4, str, 1);

}else

printk (“error param”);

name [sizeof (name) -1]=0;

u 单行if语句是可以接受的:

if (!strcmp(str, “abc”)) strcpy(str, “abc”);

u 内核源码包含许多goto,差不多每80行代码就有一个goto,这是出于执行效率的考虑,如在一些while语句中,使用goto跳出代码块,而不是使用break

分享到:
评论

相关推荐

    2107381120 王孟丽 实验2 (1).docx

    2107381120 王孟丽 实验2 (1).docx

    Java项目如何打成可以运行Jar包

    Java项目如何打成可以运行Jar包

    node-v12.22.8-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    海信 LED32K360X3D(0000)BOM1 自动重启问题软件升级数据 务必确认机编一致 强制刷机 整机USB升级程序

    MT5505机芯升级方法: 1、下载数据,压缩包解压,升级软件文件夹名字为Hisense_5505,文件夹下包含“机型名.pkg”以及version.txt 2、将文件夹Hisense_5505,整个文件夹拷贝至U盘根目录下 3、电视关机,插入U盘(USB3或者靠近高频头的USB口),重新启动电视机,电视机自动检测到升级软件之后并进行升级 4、在升级过程中屏幕有相关提示,升级完成后能自动开机。(建议是升级完成之后拔下U盘设备以免下次开机进行重复性升级) 注意: 1、(U盘要求使用FAT32格式,建议4G-8G的品牌U盘,刷机成功率会高) 2、升级到结束,大约需要8-30分钟,中途绝对不能断电 3、升级重启第一次进入系统,请等完全正常进入开机桌面之后,才能拨下U盘 4、如无法升级,将Hisense 5505文件夹内“机型名.pkg”的文件重命名为“upgrade.pkg”,此时插上U盘开机,电视就会默认为强制升级模式

    batik-awt-util-1.7.jar

    Batik是为想使用svg格式图片来实现各种功能的应用程序和Applet提供的一个基于java的工具包

    node-v14.10.1-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    520表白html5爱心代码源码合集.zip

    520表白html5爱心代码520表白html5爱心代码源码合集.zip 520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zip520表白html5爱心代码源码合集.zi

    Qt 5开发及实例(第4版)含典型案例视频分析源代码+ppt超详细资料.zip

    Qt 5开发及实例(第4版)含典型案例视频分析源代码+ppt超详细资料.zip 第1部分为Qt基础,在上一版的基础上增加了Qt操作表格处理软件Excel数据和字处理软件Word数据的内容。 第2部分为Qt综合实例,重新设计了电子商城系统、MyWord字处理软件、微信客户端程序。 第3部分为Qt扩展应用OpenCV,首先配置OpenCV-3.4.3,然后介绍典型图片处理。 第4部分为QML和Qt Quick及其应用,介绍了QML及Qt Quick相关内容, 【综合实例】为多功能文档查看器。第5部分为附录,介绍了C++相关知识和Qt 5简单调试。

    JavaScript_MultiOn API.zip

    JavaScript

    eclipse安装教程.rar

    eclipse安装

    DeNoise-tensorflow-master.zip

    DeNoise-tensorflow-master.zip

    C#源码用于查看和显示电脑已连接的WIFI密码

    C#源码用于查看和显示电脑已连接的WIFI密码

    字符串的逆序:输入为字符串,输出为字符串的逆序

    字符串的逆序,输入为字符串,输出为字符串的逆序,供学习参考。

    JavaScript_你可以用来替换momentjs ESLint Plugin的函数列表.zip

    JavaScript

    node-v6.14.4-headers.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v8.6.0-headers.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于java实现的智慧医院门诊管理系统项目源码+设计文档+实验报告+详细资料.zip

    基于java实现的智慧医院门诊管理系统项目源码+设计文档+实验报告+详细资料.zip

    node-v20.1.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    JavaScript_帮助你为Reactjs、Emberjs、Angular等选择一个MV框架Todo应用.zip

    JavaScript

    node-v4.2.6-headers.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics