Linux操作系统预备知识课件.ppt
《Linux操作系统预备知识课件.ppt》由会员分享,可在线阅读,更多相关《Linux操作系统预备知识课件.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1Linux内核分析The Analysis of the Linux KernelLinux 操作系统分析2教材Linux内核源代码情景分析毛德操 胡希明著浙江大学出版社2001年9月第1版 Linux 操作系统分析3参考书目Linux Kernel 中文版,David A Rusling 著Linux 内核完全注释,赵炯著,www.oldlinux.org,2003 年1.2.2 修正版Linux 内核2.4 版源代码分析大全,李善平等著,机械工业出版社,2002 年1 月第1 版UNIX 操作系统设计,M J Bach 著,机械工业出版社,2001 年 现代操作系统 英文,Andrew
2、S.Tanenbaum 著,机械工业出版社,2002 年 动手写自己的操作系统,于渊编著,电子工业出版社,2005 年8 月Linux 操作系统分析4本课程需要的基础知识 具备操作系统的基础知识 具备C 语言程序设计的基础知识 粗通汇编语言编程 熟悉UNIX 用户界面,略知微机系统结构,尤其是保护模式,分段、分页机制。Linux 操作系统分析5第一章 预备知识 本章主要内容q Linux 内核的基础知识*为什么分析操作系统?*为个么选择Linux?*Linux 和Linux 内核的关系*Linux 的技术特点*Linux 内核的组成结构及版本*Linux 源代码的分析方法、工具q 其他相关基础
3、知识*Linux 内核源代码中的C 语言代码的特点*Linux 内核源代码中的汇编语言代码的特点*x86 的虚拟存储技术Linux 操作系统分析6为什么分析操作系统?分析操作系统的目的q 深入理解一个操作系统的内在机制及其实现机理q 学习系统软件的设计方法和实现技巧q 研究和分析制约操作系统性能的原因 不同于学习操作系统的使用q 普通用户学习通过操作界面使用操作系统q 程序设计者学习通过系统调用使用操作系统q 操作系统的设计目的就是为上述两类用户提供统一的使用方式Linux 操作系统分析7为什么选择分析Linux?从其发展历史看,它属于现在得到广泛应用的UNIX 家族,并已被大量用户认可和接受
4、 集中了全世界众多操作系统黑客的技术精华 在嵌入式和实时操作系统方面有大量的社会需求 源代码开放,容易获取并学习未来24个月嵌入式操作系统的应用调查(2000.9)Linux 操作系统分析8Linux内核的组成 存储管理 进程管理 设备管理 文件系统 进程间通信 网络Linux 操作系统分析9Linux的内核结构图Linux 操作系统分析10Linux内核源代码目录结构(1)arch 这个子目录包含了此核心源代码所支持的硬件体系结构相关的核心代码。如对于X86 平台就是x86。include 这个目录包括了核心的大多数include 文件。另外对于每种支持的体系结构分别有一个子目录。init
5、此目录包含核心启动代码。mm 此目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm 目录下,如对应于X86 的就是arch/x86/mm/fault.c。drivers 系统中所有的设备驱动都位于此目录中。它又进一步划分成几类设备驱动,每一种也有对应的子目录,如声卡的驱动对应于drivers/sound。ipc 此目录包含了核心的进程间通讯代码。Linux 操作系统分析11Linux内核源代码目录结构(2)modules 此目录包含已建好可动态加载的模块。fs Linux 支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext2 文件系统对应的就是
6、ext2 子目录。kernel 主要核心代码。同时与处理器结构相关代码都放在arch/*/kernel 目录下。net 核心的网络部分代码。里面的每个子目录对应于网络的一个方面。lib 此目录包含了核心的库代码。与处理器结构相关库代码被放在arch/*/lib/目录下。scripts 此目录包含用于配置核心的脚本文件。Documentation 此目录是一些文档,起参考作用。Linux 操作系统分析12Linux内核源代码的获取方式 商业发行版本附带的发行版内核,通常不是最新的 官方网站:http:/www.kernel.org 中国自由软件库http:/(最新版)发行商网站q 大学网站q N
7、 操作系统分析13Linux源代码的阅读方法和工具(1)Linux 源代码的阅读方法q 阅读顺序*纵向,就是顺着程序的执行顺序逐步进行*横向,就是分模块进行*划分不绝对的,而是经常结合在一起进行q Linux 的启动的代码就可以顺着linux 的启动顺序一步一步地读,大致流程如下(以X86 平台为例):*./arch/x86/boot/bootSect.S*./arch/x86/boot/setup.S*./arch/x86/kernel/head.S*./init/main.c 中的start_kernel()q 对于内存管理等部分,可以单独拿出来按模块进行阅读分析。Linux 操作系统分析
8、14Linux 操作系统分析15Linux源代码的阅读方法和工具(2)q windows 环境下利用Source Insight 阅读工具可从http:/天试用版本q linux 环境下利用lxr(linux cross reference)或glimpse等阅读工具进行阅读 建议q 开始最好按顺序阅读启动代码q 然后进行专题阅读,如进程部分,内存管理部分等。在每个功能函数内部应该一步步来q 实际上这是一个反复的过程,不可能读一遍就理解Linux 操作系统分析16Source Insight软件使用方法 选择Project 菜单下的new,新建一个工程,输入工程名 把欲读的源代码加入(可以整个
9、目录加)后,该软件就分析你所加的源代码。分析完后,就可以进行阅读了。打开相要阅读的文件 如果想看某一变量的定义q 先把光标定位于该变量q 然后点击工具条上的相应选项或从右键菜单中选择q 该变量的定义就显示出来 对于函数的定义与实现也可以同样操作Linux 操作系统分析17Linux内核源代码的C语言代码(1)内核的主体是以GNU 的C 语言编写的,GNU 对C 语言本身在ANSI C 的基础上作了不少扩充 使用gcc 作为编译工具,gcc 同时又是C+编译工具q 内核具有很多C+语言的特点q gcc 从C+语言中吸收了inline 和const比define 更安全,如可定义数据类型等等q 内
10、核的版本与gcc 的版本间有依赖关系Long long int,用于支持64 位的CPU 结构 为了防止扩展的属性和保留字与变量名的冲突q“_ 保留字_”等价于“保留字”q attribute_(属性),如 aligned,packedLinux 操作系统分析18Gcc 从 C+语言中吸收了“inline”和“const”。其实,GNU 的 C 和 C+是合为一体的,gcc 既是 C 编译又是 C+编译,所以从 C+中吸收一些东西到 C 中是很自然的。从功能上说,inline 函数的使用与#define 宏定义相似,但更有相对的独立性,也更安全。使用 inline 函数也有利于程序调试。如果编
11、译时不加优化,则这些 inline 函数就是普通的,独立的函数,更便于调试。调试好以后,再采用优化重新编译一次,这些 inline 函数就像宏操作一样融入了引用处的代码中,有利于提高运行效率。由于 inline 函数的大量使用,相当一部分代码从.c 文件移入了.h 文件中。Linux 操作系统分析19Linux内核源代码的C语言代码(2)Do while(0)的作用q 使 之间的代码构成一个块q 执行空操作,如为进程切换作准备 举例 如果没有Do while(0)Linux 操作系统分析20Linux内核源代码的C语言代码(3)双链数据结构q 使得针对这些队列的操作可用于不同数据结构 宿主数据
12、结构举例Linux 操作系统分析21Linux内核源代码的C语言代码(4)宿主结构起始地址的定位 举例当前结构中list 的地址 当page 结构刚好位于地址0 时的list 地址Linux 操作系统分析22Linux内核中的汇编语言代码 为什么使用汇编语言?q C 语言没有对应的硬件操作语言,如inb,outb 等q C 语言没有对应的CPU 特殊指令,如开关中断、寄存器操作等q 提高时间效率,如系统调用的陷入或返回q 提高空间效率,如系统第一扇区的引导程序 由于Linux 使用的编译器是GNU 的gcc,所以源代码的汇编大多是GNU 汇编语言q GNU 采用的汇编语言是一种介于386 汇编
13、语言和C 语言之间的中间语言形式 Linux 源代码中汇编语言的使用形式q 完全汇编代码q 嵌在C 语言程序的汇编片断q 几个用于引导的Intel 格式的汇编语言程序AT&T 格式的GNU 汇编Linux 操作系统分析23GNU的x86汇编语言 按UNIX 领域的用户习惯,GNU 使用了AT&T 格式 AT&T 格式与Intel 格式的区别(教材P2223)q Intel 格式大多使用大写字母,而AT&T 格式则都使用小写字母q AT&T 格式中寄存器名要加“”前缀,而Intel 格式则不用q AT&T 格式的源操作数在前,而Intel 格式则是目标操作数据在前q AT&T 格式的命令用后缀b
14、、w、l 表示操作数精度,而Intel 格式则用操作数前缀“BYTE PTR”、”WORD PRT”、”DWORD PRT”q AT&T 格式的直接操作数用$作前缀,而Intel 格式则什么也不用q AT&T 格式的jump/call 的目标地址前要加上*号,而Intel 格式则不用Linux 操作系统分析24嵌在C语言中的汇编语言 要解决汇编中的寄存器和C 语言中的变量结合的问题 嵌在C 语言中的386 汇编语言程序段,一般由四部分构成(指令部:输出部:输入部:损坏部)q 指令部必须有,也就是汇编语言本身*其中的寄存器的样板操作数%0,%1 表示由gcc 指定通用寄存器*具体的寄存器前面就要
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 操作系统 预备 知识 课件
限制150内