电子教案·《Linux基础及应用教程》课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《电子教案·《Linux基础及应用教程》课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux基础及应用教程 电子 教案 Linux 基础 应用 教程 课件
- 资源描述:
-
1、陈英 梁建武主编 中国水利水电出版社Linux基础及应用第10章 Linux内核机制陈英 梁建武主编 中国水利水电出版社10.1 Linux内核简介10.1.1 Linux内核的地位Linux操作系统由4个主要的子系统所组成:1)用户应用程序:在某个特定的Linux系统上运行的应用程序集合,它将随着该计算机系统的用途不同而有所变化,但一般会包括文字处理应用程序和Web浏览器。2)O/S服务:这些服务一般认为是操作系统的一部分(命令外壳程序等)。3)Linux内核:包括内核抽象和对硬件资源(如CPU)的间接访问。4)硬件控制器:陈英 梁建武主编 中国水利水电出版社10.1.2 系统初始化及运行
2、当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0 xFFFF0处的代码,也就是ROM-BIOS起始位置的代码。BIOS先进行一系列的系统自检,然后初始化位于地址0的中断向量表。最后BIOS将启动盘的第一个扇区装入到0 x 7C00,并开始执行此处的代码。陈英 梁建武主编 中国水利水电出版社10.1.3 内核提供的各种系统调用1系统的基本数据结构 进程控制表中的每一项都是一个task _ struct 结构,而task _ struct结构本身是在include/linux/sched.h中定义的。陈英 梁建武主编 中国水利水电出版社 进程控制表既是一个数组,又是一个
3、双向链表,同时又是一个树。其物理实现是一个包括多个指针的静态数组。此数组的长度保存在include/linux/tasks.h 定义的常量NR_ TASKS中,其缺省值为128,数组中的结构则保存在系统预留的内存页中。链表是由next_task 和prev _ task两个指针实现的,而树的实现则比较复杂。陈英 梁建武主编 中国水利水电出版社 系统启动后,内核通常作为某一个进程的代表。一个指向task _ struct的全局指针变量current用来记录正在运行的进程。某一个进程只能运行在用户方式(user mode)或内核方式(kernel mode)下。用户程序运行在用户方式下,而系统调用
4、运行在内核方式下。陈英 梁建武主编 中国水利水电出版社2创建和撤消进程1)申请一个空闲的页面来保存task _ struct。2)查找一个空的进程槽(find _ empty _ process())。3)为kernel _ stack _ page申请另一个空闲的内存页作为堆栈。4)将父进程的LDT表拷贝给子进程。5)复制父进程的内存映射信息。6)管理文件描述符和链接点。陈英 梁建武主编 中国水利水电出版社10.1.4 存取文件系统 Linux在系统内核和文件系统之间提供了一种叫做VFS(virtual file system)的标准接口。这样,文件系统的代码就分成了两部分:上层用于处理系统
5、内核的各种表格和数据结构;而下层用来实现文件系统本身的函数,并通过VFS来调用。陈英 梁建武主编 中国水利水电出版社10.2 Linux内核源代码10.2.1 了解Linux内核源码lLinux内核源码的版本号 Linux内核源码的版本号表示方法非常简单:所有偶数版(如2.0.30)都是已发行的稳定版;所有奇数版(如2.1.42)都是测试版。陈英 梁建武主编 中国水利水电出版社l显示内核版本号显示内核版本号的方法如下:#ls/boot l对内核源码的修改陈英 梁建武主编 中国水利水电出版社10.2.2 内核机制1Bottom Half处理 系统内核中可以有多达32个不同的bottom half
6、 处理程序。bh _ base中保存着指向每一个bottom half处理程序的指针。2任务队列 任务队列是系统内核将任务推迟到以后再做的方法。Linux系统有一个机制可以把任务放入到队列中等待以后处理。陈英 梁建武主编 中国水利水电出版社3计时器Linux有两种系统定时器,在某一系统时间同时被调用,但它们在实现上略有不同。第一种,即老的定时器机制,有一个包含32个指针的静态数据组和一个活跃定时器屏蔽码(timer _ active),这些指针指向timer _ struct数据结构,定时器程序与定时器表的连接是静态定义的,大多数定时器程序入口是在系统初始化时加入到定时器表中的;第二种,即新的
7、定时器机制,使用了一个链表,表中的timer _ list数据结构以递增的超时数排序。陈英 梁建武主编 中国水利水电出版社4等待队列 很多情况下处理器因等待某种系统资源而无法继续运行,例如:处理器需要一个描述目录的VFS索引节点,但该索引节点当前不在内存缓冲区中,这样处理器就必须先等到索引节点从磁盘中读到内存之后,才能继续运行。对于这种等待的处理,Linux内核使用了一种简单的数据结构等待队列,其中包括一个指向task _ struct的指针和一个指向队列中下一元素的指针。陈英 梁建武主编 中国水利水电出版社10.2.3 内核模块的装入与卸载 对于Linux的内核模块,可以用insmod或rm
8、mod命令显式地载入或卸载,或是由内 核 在 需 要 时 调 用 内 核 守 护 程 序(kerneld)进行载入和卸载。陈英 梁建武主编 中国水利水电出版社10.3 Linux内核分析10.3.1 相关源代码的分析1系统的引导和初始化 Linux 系统的引导有好几种方式:常见的有 Lilo,Loadin引导和Linux的自举引导(bootsect-loader),而后者所对应源程序为arch/i386/boot/bootsect.S,它为实模式的汇编程序;无 论 是 哪 种 引 导 方 式,最 后 都 要 跳 转 到 arch/i386/Kernel/setup.S,setup.S主要是进行
9、时模式下的初始化,为系统进入保护模式做准备;陈英 梁建武主编 中国水利水电出版社2系统初始化后运行的第一个内核程序 asmlinkage void _init start_kernel(void)是系统初始化 后 运 行 的 第 一 个 内 核 程 序,它 定 义 在/usr/src/linux/init/main.c中,通过调用usr/src/linux/arch/i386/kernel/traps.c 中的一个函数 void _init trap_init(void)把各自陷和中断服务程序的入口地址设置到 idt 表中,其中系统调用总控程序system_cal就是中断服务程序之一;陈英 梁
10、建武主编 中国水利水电出版社3中断总控程序 中断总控程序主要负责保存处理机执行系统调用前的状态,检验当前调用是否合法,并根据系统调用向量,使处理机跳转到保存在 sys_call_table 表中的相应系统服务例程的入口;从系统服务例程返回后恢复处理机状态退回用户程序;而系统调用向量则定义在/usr/src/linux/include/asm-386/unistd.h 中;sys_call_table 表定义在/usr/src/linux/arch/i386/kernel/entry.S 中;同时在/usr/src/linux/include/asm-386/unistd.h 中也定义了系统调用
11、的用户编程接口。陈英 梁建武主编 中国水利水电出版社10.3.2 对内核源码的修改1在kernel/sys.c中增加系统服务asmlinkage int sys_addtotal(int numdata)int i=0,enddata=0;while(i=numdata)enddata+=i+;return enddata;陈英 梁建武主编 中国水利水电出版社2把 asmlinkage int sys_addtotal(int)的入口地址加到sys_call_table表中arch/i386/kernel/entry.S 中的最后几行源代码修改前为:.long SYMBOL_NAME(sys_
12、sendfile).long SYMBOL_NAME(sys_ni_syscall)/*streams1*/.long SYMBOL_NAME(sys_ni_syscall)/*streams2*/.long SYMBOL_NAME(sys_vfork)/*190*/.rept NR_syscalls-190.long SYMBOL_NAME(sys_ni_syscall).endr 陈英 梁建武主编 中国水利水电出版社修改后为:.long SYMBOL_NAME(sys_sendfile).long SYMBOL_NAME(sys_ni_syscall)/*streams1*/.long S
13、YMBOL_NAME(sys_ni_syscall)/*streams2*/.long SYMBOL_NAME(sys_vfork)/*190*/*add by I*/.long SYMBOL_NAME(sys_addtotal).rept NR_syscalls-191.long SYMBOL_NAME(sys_ni_syscall).endr 陈英 梁建武主编 中国水利水电出版社3把增加的 sys_call_table 表项所对应的向量,在include/asm-386/unistd.h 中进行必要声明,以供用户进程和其他系统进程查询或调用:增加后的部分/usr/src/linux/inc
14、lude/asm-386/unistd.h 文件如下:.#define _NR_sendfile 187#define _NR_getpmsg 188#define _NR_putpmsg 189#define _NR_vfork 190/*add by I*/#define _NR_addtotal 191 陈英 梁建武主编 中国水利水电出版社4测试程序(test.c)如下:include include _syscall1(int,addtotal,int,num)main()int i,j;do printf(Please input a numbern);while(scanf(%d,
15、&i)=EOF);if(j=addtotal(i)=-1)printf(Error occurred in syscall-addtotal();n);printf(Total from 0 to%d is%d n,i,j);陈英 梁建武主编 中国水利水电出版社Linux基础及应用第11章 嵌入式Linux陈英 梁建武主编 中国水利水电出版社11.1嵌入式系统简介 11.1.1 嵌入式系统的定义 嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。Linux提供了完成嵌入功能的基本的内核和所需要的所有用户界面,它是多面的。它能处理嵌入式任务和用户界面。将Li
16、nux看作是连续的统一体,从一个具有内存管理、任务切换和时间服务及其他的分拆的、微内核到完整的服务器,支持所有的文件系统和网络服务。陈英 梁建武主编 中国水利水电出版社11.1.2 嵌入式系统的特征 嵌入式系统是面向用户、面向产品、面向应用的,如果独立于应用自行发展,则会失去市场。嵌入式处理器的功耗、体积、成本、可靠性、速度、处理能力、电磁兼容性等方面均受到应用要求的制约,这些也是各个半导体厂商之间竞争的热点。陈英 梁建武主编 中国水利水电出版社11.2 嵌入式Linux基础 11.2.1 嵌入式Linux的应用信息家电:PDA,机顶盒,Digital Telephone,Answering
17、Machine,Screen Phone;数据网络:Ethernet Switches,Router,Bridge,Hub,Remote access servers,ATM,Frame relay;远程通信;医疗电子;交通运输;计算机外设;工业控制;航空航天领域陈英 梁建武主编 中国水利水电出版社11.2.2 Linux作为嵌入式操作系统的优势1免许可证费用 嵌入式Linux的版权费是免费的,其购买费用仅为媒介成本。大多数的商业操作系统,例如Windows,Windows CE对每套操作系统收取一定的许可证费用。相对地,Linux是一个免费软件,并 且 公 开 源 代 码。只 要 不 违 反
18、 G P L(General Public License,通用版权许可协议),就可以自由应用和发布Linux。陈英 梁建武主编 中国水利水电出版社2有很高的稳定性 在PC硬件上运行时,Linux是非常可靠和稳定的,特别是和现在流行的一些操作系统相比。有两个因素会影响稳定性,一是使用了混乱的驱动程序。驱动程序的选择很有限,有些稳定有些不稳定。一旦离开了通用的PC平台,需要自己编写。二是使用了硬盘。陈英 梁建武主编 中国水利水电出版社3强大的网络功能 Linux天生就是一个网络操作系统,几乎所有的网络防议和网络接口都已经被定制在Linux中。Linux内核在处理网络防议方面比标准的Unix更具执
19、行效率,在每一个端口上有更高的吞吐量。陈英 梁建武主编 中国水利水电出版社4丰富的开发工具 Linux提供C,C+,JAVA以及其他很多的开发工具。更重要的是,爱好者可以免费获得,技术上由全世界的自由软件开发者提供支持。Linux基于GNU的工具包,此工具包提供了完整与无缝交叉平台开发工具,从编辑器到底层调试。其C编译器产生更有效率的执行代码。陈英 梁建武主编 中国水利水电出版社5实时性 在实时性能方面,RT_Linux,Hardhat Linux 等嵌入式Linux支持实时性能;稳定性好,安全性好。陈英 梁建武主编 中国水利水电出版社11.3 Linux I/O端口编程 11.3.1如何在C
20、语言下使用I/O端口一般方法 在存取任何I/O端口之前,必须让程序有如此做的权限。要完成这个目的,可以在程序一开始的地方(但是,要在任何I/O端口存取动作之前)调用ioperm()这个函数(该函数在文件unistd.h中,并且被定义在内核中)。陈英 梁建武主编 中国水利水电出版社使用语法是:ioperm(from,num,turn_on)其中from是第一个允许存取的I/O端口地址,num是接着连续存取I/O端口地址的数目。陈英 梁建武主编 中国水利水电出版社 函数ioperm()只能取得端口地址0 x000到0 x3ff的存取权限;至于较高地址的端口,需要使用函数iopl()(该函数可以一次
21、存取所有的端口地址)。将权限等级参数值设为3(例如,iopl(3)),以便程序能够存取所有的I/O端口(如果存取到错误的端口地址将对计算机造成各种不可预期的损害。同样地,调用函数iopl()必需要拥有root的权限。陈英 梁建武主编 中国水利水电出版社 接着来实际地存取I/O端口。要从某个端口地址输入一个字节(8位)的信息,调用函数inb(port),该函数会传回所取得的一个字节的信息。要输出一个字节的信息,调用函数outb(value,port)。要从某两个端口地址x和x+1(两个字节组成一个字,故使用组合语言指令inw)输入一个字(16个bit)的信息,需要调用函数inw(x);要输出一个
22、字的信息到两个端口地址,需要调用函数outw(value,x)。陈英 梁建武主编 中国水利水电出版社2替代方法:/dev/port 另一个存取I/O端口的方法是以函数open()打开文件/dev/port(一个字符设备,主设备编号为1,次设备编号为4),以便执行读与(或)写的动作(注意标准输出入函数f*()有内部的缓冲,所以要避免使用)。陈英 梁建武主编 中国水利水电出版社11.3.2 硬件中断与DMA存取 用户程序如果在用户模式下执行,不可以直接使用硬件中断(IRQ)或DMA。用户必须编写一个内核驱动程序。也就是说,在用户模式中所写的程序无法控制硬件中断的产生。陈英 梁建武主编 中国水利水电
23、出版社11.3.3 延迟时间 在用户模式中执行的进程不能精确地控制时间,因为Linux是个多用户的操作环境,在执行中的进程随时会因为各种原因被暂停大约10ms到数秒(在系统负荷非常高的时候)。然而对于大多数使用I/O端口的应用程序而言,这个延迟时间实际上算不了什么。要缩短延迟时间,需要使用函数nice将你在执行中的进程设定成高优先权,或使用即时调度法(real-time scheduling)。陈英 梁建武主编 中国水利水电出版社11.4 嵌入式Linux开发 11.4.1 构造嵌入式Linux前先要了解的几个关键问题1如何引导?在PC上运行的Linux依靠PC的BIOS来提供这些配置和OS加
24、载功能。在一个嵌入式系统里经常没有这种BIOS。这样就要提供同等的启动代码。在大多数情况下,一个最小的通电自检模块,可以检查内存的正常运行、让LED闪烁,并目驱动其它必须的硬件以使主Linux OS启动和运行。陈英 梁建武主编 中国水利水电出版社2需要虚拟内存吗?由于CPU的原因,在嵌入式Linux中保存虚拟内存代码是明智的,因为将它清除很费事。而且还有另外一个原因它支持共享文本,这样就可以使许多程序共享一个软件。虚拟内存的调入功能可以被关掉,只要将交换空间的大小设置为零。然后,如果用户写的程序比实际的内存大,系统就会当作用户的运行用尽了交换空间来处理,这个程序将不会运行。陈英 梁建武主编 中
25、国水利水电出版社3选用什么样的文件系统?实际上,许多商业性嵌入式系统,提供文件系统作为选项。许多或者是专用的文件系统或者是MS-DOS-Compatible文件系统。Linux提供MS-DOS-Compatible文件系统,同时还有其它多种选择。文件系统可以被放在传统的磁盘驱动器、Flash Memory或其它这类的介质上。而且,用于暂时保存文件,一个小RAM盘就足够了。陈英 梁建武主编 中国水利水电出版社4如何消除嵌入式Linux系统对磁盘的依赖?在一个嵌入式系统里,可能没有磁盘。有两种途径可以消除对磁盘的依赖,这要看系统的复杂性和硬件的设计。在一个简单的系统里,当系统启动后,内核和所有的应
展开阅读全文