




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 Linux的内核,本章学习目标 掌握LINUX内核版本的含义 理解并掌握进程的概念 掌握管道的概念及实现 了解内核的数据结构 了解LINUX内核的算法 掌握LINUX内核升级的方法,3.1 Linux系统内核简述,内核是LINUX的心脏,是在系统引导时所装入的程序,用于提供用户程序和硬件之间的接口,执行发生在多任务系统中的实际任务转换,处理读写磁盘的需求,处理网络接口,以及管理内存等。 LINUX内核精短、稳定性高、可扩展性好、硬件需求低、免费、网络功能丰富且适用于多种CPU。 主要用作嵌入式设备、专业的路由器、防火墙、高端服务器的操作系统。现在也有很多PC的桌面系统也使用LINUX。
2、,3.1.1 Linux内核的版本,内核源代码树以linux-X.X.XX.tar.gz文件形式出现,其中,X.X.XX为内核的版本号。 内核版本号的形式 major.minor.patchlevel 主版本号.次版本号.当前内核版本的修订次数 如:Red Hat Linux 8.0 的内核版本为kernel 2.4.18-14,表示对内核2.4版本的第18次修改,修改了14处。 再如:Fedora Core 6.0 的内核版本为Kernel 2.6.18-19,表示对内核2.6版本的第18次修改,修改了19处。 版本号说明 次版本号是偶数,表示内核为稳定发布版本,是奇数,表示为不稳定的开发版
3、本。 显示内核信息 #uname r 内核版本号 #uname s 内核名称 #uname v 内核版本发布时间 #uname a 所有信息,3.1.2 什么是内核,内核是操作系统(OS)的内在核心程序,提供了对计算机设备的管理调用功能。用户界面是OS的外在表象。 OS代码分成两部分 内核空间(内核所在的地址空间) 外部空间(外部管理程序与用户进程所占的地址空间) 外部管理程序是内核以外的统称,是对外围设备的管理和界面操作。,3.1.2 什么是内核(续),传统的UNIX的单一内核(monolithic kernel)结构 所有OS的相关功能都被封装在kernel中,与外部程序处于不同的内存地址
4、空间。 通过各种方式防止外部程序直接访问内核结构。 内核代码由C语言编写,所有内核代码都是被静态编译联入。,3.1.2 什么是内核(续),目前流行的微内核(micro kernel)结构 OS内核只提供最基本的、最核心的部分操作(如:创建和删除任务、内存管理、中断管理等) 其他管理程序(如:文件系统、网络协议栈等)尽可能放在内核之外,这些外部管理程序独立运行,并为外部用户程序提供OS服务,服务之间使用进程间通信机制(IPC)进行交互,只有在需要内核的协助时,才通过一套接口对内核发出调用请求。 微内核结构优缺点 优点:OS具有良好的灵活性、内部结构简单清晰、程序代码维护方便。 缺点:内核与独立运
5、行的外部管理程序不能很好的优化整体性能。,3.1.2 什么是内核(续),Linux内核结构的特点 使用单一内核结构 与传统的UNIX的单一内核结构不同的是,LINUX可以动态装入和卸载内核中的部分代码。 LINUX将这些代码段称为模块(module),并给予强有力的支持,可根据需要自动装入和卸载。 内核为非抢占式的,即不能通过改变优先权来影响内核当前的执行流程。不是一个“硬”实时OS。 不支持用户态线程,LINUX通过LWP(light weight thread)机制来实现用户态线程的概念,通过系统调用函数clone()创建新的线程。,3.1.3 内核的基本概念,1、进程和任务 从运行在LI
6、NUX下的进程来看,LINUX的内核是一个服务的提供者。 单独的进程互相并行独立地存在,且不能相互直接影响。 每个进程特有的内存区域被保护起来,以防止其他进程修改。,进程的工作原理,进程就是任务(观察角度不同),一个进程的运行状态图,进程的运行状态,运行状态 任务是激活的,只能通过中断或者系统调用退出。 中断例程状态 当硬件发出异常情况时(如:通过键盘键入新的字符),中断例程处于活动状态。 系统调用状态 由软件中断启动。 等待状态 该状态下的进程在等待一个外部事件,当外部事件出现后,才继续它的工作 从系统调用返回状态 该状态在每次系统调用和某些中断调用之后被自动采用。 就绪状态 进程竞争CPU
7、的处理权,进程和线程,进程 进程是正在执行的程序。程序是静态的。 在较高的层次上,进程是一个抽象概念,是描述并发运行的一种模型。 在较低的层次上,包括进程映像的结构、执行的细节和在进程间切换处理机的方法。 只要在计算机上运行一个程序,相应的一个进程就诞生了,而且它伴随着整个操作过程,直到程序终止 。 进程的生命周期 进程有三种状态:就绪、执行、等待。,进程和线程(续),线程 线程是在共享内存空间中并发的多道执行路径,它们共享一个进程的资源,工作在相同的内存上。 在两个普通进程(非线程)间进行切换时,内核准备从一个进程的上下文切换到另一个进程的上下文要花费很大的开销,切换的主要任务是保存老进程C
8、PU状态,并加载新进程的保存状态,用新进程的内存映像替换老进程的内存映像。 线程允许进程在几个正在运行的任务之间进行切换,而不必执行前面提到的完整的上下文。,进程和线程(续),超线程(Hyper-Threading,HT) Intel Xeon 处理器引入的一种新技术。对于OS来说,HT使单个CPU可以象两个逻辑CPU那样运行。使用了该技术,由于每个逻辑CPU可以并行执行线程,所以它允许物理CPU同时执行多个线程,显著提高性能。 LINUX没有对进程和线程进行区分,而是以任务来代替。 但LINUX内核从2.4版本以后,Linux 对称多处理(SMP)内核都支持超线程。,多处理器系统,LINUX
9、内核从2.0版本以后,Linux 支持对称多处理(Symmetric Multiprocessor , SMP) 现在多个CPU可以同时处理内核代码,3.2 重要的数据结构,与模块相关的主要数据结构 module symbol_table module 用于记录模块的信息和相互调用关系 symbol_table 用于将模块动态链接到内核,主要记录模块提供的函数和变量、模块的引用信息。,3.2.1 内核结构,完整的OS 硬件、OS内核、OS服务、用户应用程序 LINUX内核源程序 放置在/usr/src/linux目录下 Arch 子目录包括了所有和体系结构相关的内核代码,每个子目录都代表一种体
10、系结构。 Include 子目录包括编译内核所需要的大部分头文件 与平台无关的头文件 include/linux 目录 与Intel CPU相关的头文件 include/asm-i386 目录 有关SCSI设备的头文件 include/scsi 目录 Init 包含内核的初始化代码(不是系统引导代码),包含main.c和version.c两个文件。这是研究内核如何工作的好的起点。,3.2.1 内核结构(续),LINUX内核源程序 放置在/usr/src/linux目录下 Mm 子目录包括所有独立于CPU体系结构的内存管理代码。 Kernel 主要的内核代码 Drivers 放置系统所有设备的驱
11、动程序,每种驱动程序占用一个代码 Scripts 包含用于配置内核的脚本文件 每个目录下都有一个.depend文件和makefile文件,是编译时使用的辅助文件。 仔细阅读这两个文件,对搞清楚各个文件之间的联系和依托关系很有帮助。,3.2.2 Linux内核组成,1、进程调度(SCHED) SCHED控制进程对CPU的访问 2、内存管理(MM) MM允许多个进程安全地共享主内存区域,支持虚拟内存管理。 3、虚拟文件系统(VFS,Virtual File System) VFS隐藏了各种硬件的细节,为所有设备提供了统一的接口。VFS分两部分: 逻辑文件系统(ext2、ext3、FAT等) 设备驱
12、动程序(设备驱动模块) 4、网络接口(NET) NET提供了对各种网络标准存取和各种网络硬件的支持。分为网络协议和网络驱动程序。 5、进程间通信(IPC) IPC支持进程间的各种通信机制,3.2.2 Linux内核组成(续),6、各个子系统之间的依赖关系 内存管理与进程调度相互依赖 进程间通信与内存管理 虚拟文件系统与网络接口 内存管理与虚拟文件系统 各种过程与系统调用 7、系统数据结构(使用频率高的) Task_struct Linux内核利用一个数据结构(Task_struct)代表一个进程,代表进程的数据结构的指针形成一个task数组。数组默认大小是512,表明linux中同时运行的最多
13、进程数。 Mm_struct 每个进程的虚拟内存由一个mm_struct结构来代表。 Inode VFS中的文件、目录均由对应的索引节点(inode)代表。,3.2.2 Linux内核组成(续),8、linux 的具体结构 是指系统的实现结构 9、linux内核源代码 放置在/usr/src/linux目录下 对内核的修改是用补丁文件的方式发布的,patch实用程序用来对内核源文件进行一系列修改。 例:现有内核2.2.xx,想升级到2.4.18。则需要先获得2.4.18的补丁文件,应用patch来修改2.2.xx文件。 # cd /usr/src/linux # patch pl patch-
14、2.4.18,3.2.2 Linux内核组成(续),10、linux内核源代码的结构 位于/usr/src/linux目录下 /include 包含了建立内核代码时所需的大部分头文件。 /init 包含了内核的初始化代码,是内核工作的起点。 /arch 包含了所有硬件结构相关的内核代码。 /drivers 包含了系统所有设备的驱动程序。 /fs 包含了所有文件系统代码,ext3、fat等。 /net 包含了内核的联网代码。 /mm 包含了所有内存管理代码。 /ipc 包含了进程间相互通信的代码。 /kernel 包含了主内核代码。,3.2.2 Linux内核组成(续),11、阅读源代码 在基于
15、intel的系统上,当loadlin.exe 或者lilo把内核装入到内存并把控制权传递给内核时,内核开始启动。 内存管理 位置:/mm ,arch/*/mm 文件:/mm/memory.c,/mm/filemap.c, /mm/buffer.c,/mm/swap_state.c, /mm/swapfile.c 内核 位置:arch/*/kernel,include/linux 文件:sched.c ,fork.c interrupt.h,sched.h PCI 伪驱动:drivers/pci/pci.c, 定义:include/linux/pci.h IPC Include/linux/ip
16、c.h,ipc/msg.c,ipc/shm.c,ipc/sem.c,ipc/pipe.c 中断处理 代码:arch/i386/kernel/irq.c 定义:include/asm-i386/irq.h,3.2.3 动态内存管理,以页面为基础管理内存,每个页面2 12字节 请求空闲页面 struct page *_alloc_pages(int gfp_mask,unsigned long order); unsigned long _get_free_pages(int gfp_mask,unsigned long order); /* order描述要保留的页面数*/ 释放已有的页面 vo
17、id_free_pages(struct page *page,unsigned long order); noid free_pages(unsigned long addr,unsigned long order); 程序设计时 通过malloc()、free()函数管理内存 内核void *kmalloc(size_t size,int flags); void kfree(const void *objp),3.3 算法简介,算法是在有限步骤内求解某一问题时所使用的一组定义明确的规则。解题过程中,无论是思路还是编写程序,都是在实施某种算法。算法应具有的特征: 有穷性:一个算法必须保证执
18、行有限步之后结束。 确切性:算法的每一步骤必须有确切的定义。 输入:有0个或多个输入条件。 输出:对输入进行加工后的结果。 可行性:原则上能够精确地运行。,3.3.1 信号,信号的种类数目与具体的平台有关 LINUX内核定义的常见信号,3.3.1 信号(续),进程可以选择对某种信号所采取的特定操作 忽略信号:进程可忽略产生的信号,但SIGKILL和SIGSTOP。 阻塞信号:进程可选择阻塞某些信号。 该信号通过进程处理 由内核进行默认处理,3.3.2 Linux系统的中断,内核中的中断 硬件中断 软件中断(异常) 1、中断的分类 物理硬件设备产生的中断 异常 陷阱 系统调用int80 2、中断
19、的产生 中断事件-中断处理程序查询状态寄存器,针对不同的事件进行不同的处理。 3、IRQ(IRQ1IRQ15) PC的中断线使用前必须进行申请,申请之前轮询看哪条中断线有空闲。 IRQ是非常宝贵的资源,占用方式有两种:独占、共享,3.3.3 定时器中断,所有OS都需要测量时间,并保持系统时间。 系统时间是通过安排硬件以指定的间隔触发中断来实现的 LINUX的系统时间以系统开始工作时的滴答声测量。 一个滴答声是10ms,即定时器中断每秒将触发100次。 定时器时钟消耗CPU时间 LINUX支持间隔定时器(与进程相关) 定时器到期时,会向定时器的所属进程发送信号。 Real 定时器实时更新 Vir
20、tual 只在进程运行时更新 Profile 内核代表进程运行时更新,3.3.4 调度程序,调度程序负责各个进程分配处理器(占用处理器时间),有以下几项内容: 各种调度类 各种调度函数 实时优先级 调度算法 详细内容参见P59页,自己看。不作要求。,3.4 Linux操作系统的进程,进程(OS进行资源分配的单位) 系统进程:完成OS的各种功能的进程,是运行状态下的OS本身。 用户进程:用户启动的进程,3.4.1 进程以及进程间通信机制,程序是静态的指令和数据 进程是运行中的、动态的程序 进程在运行过程中要使用许多计算机资源(CPU、RAM、文件、寄存器、IRQ等) LINUX是多任务OS,可能
21、同时会有多个进程使用同一资源-进程和资源管理。 进程间的切换由调度程序完成。 每个进程都有自己的虚拟地址空间。如何避免进程之间的相互影响,或者希望多个进程完成同一个任务,LINUX提供许多机制,利用这些机制,进程之间可以通信共同完成某项任务。 IPC(进程间通信)常用的两种机制 信号 管道,3.4.2 Linux进程,Linux内核利用一个数据结构(task_struct)代表一个进程。代表进程的数据结构指针形成一个task数组。 task_struct结构 1、标识号:进程标识号惟一识别一个进程 2、状态信息:运行、停止、等待、僵死 3、调度信息:用于调度程序完成进程间的切换 4、有关进程间
22、通信的信息:实现进程间通信 5、进程链信息:父进程、子进程,所有进程的根就是init进程。 6、时间和定时器:记录进程占用CPU的时间信息及到时告警。 7、文件系统信息:进程打开系统中的文件的描述信息 8、和进程相关的上下文信息:进程可被看作是系统状态的集合。,3.4.3 关于Linux线程,进程 进程是运行中的程序,其构成要素有: 代码、数据、堆栈、文件、I/O和虚拟内存信息。 系统对进程的处理要花费更多的资源开销。 线程(也称轻量级进程) 进程中指令的不同执行路线。 例:EXCEL、WORD编辑过程中,主线程处理用于录入、编辑等工作,其他并行运行的线程必须时可在后台保存用户的文档。 利用线
23、程可共享进程的基本要素来减轻系统开支。,3.4.3 关于Linux线程(续),线程可分:用户线程和内核线程 用户线程 不需要内核支持,因而不占用内核开销。但当一个线程因I/O处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会。 内核线程 内核线程需要内核参与,由内核完成调度,内核线程用户线程的上述限制,但却占用更多的系统开支。,3.4.3 关于Linux线程(续),Linux线程 Linux支持内核空间的多线程 Internet上有用户线程库可供下载 Linux线程、内核线程的实现 与WINDOWS等OS的内核线程实现不同,WINDOWS等OS是单独定义线程,增加了
24、内核和调度程序的复杂性。 Linux将线程定义为“执行上下文”,实际上只是进程的另外一个“执行上下文”。所以在Linux中,内核只需区分进程,只需一个进程/线程数组。 调度程序仍然是进程的调度程序, Linux的clone()系统调用可用来建立新的线程。,3.4.4 会话和进程组,Linux是多用户系统,同一时刻系统中运行有属于不同用户的多个进程。如何管理呢? Linux内核通过维护会话和进程组而管理多用户进程。 会话 用户从终端登录到Linux系统,代表一个会话开始。 进程组 为完成某个任务,把相关的进程放在一个进程组里。每个进程是一个进程组的成员,每个进程组又是某个会话的成员。 会话与控制
25、终端成一一对应关系 同一会话中的进程通过该会话的领头进程和一个终端相连。这个终端就是控制终端,一个会话只能有一个控制终端,一个终端只能控制一个会话。 同一会话中只能有一个前台进程组。其他均是后台进程,可能属于不同的后台进程组。,3.4.5 进程调度,进程的运行模式有两种 调度程序 LINUX中无法停止当前正在运行的进程,只能被动地由调度程序将其选择为运行进程,或切换为等待状态。 抢先式的调度方法,每个进程最多运行200ms(时间片)。 切换进程的选择,依据一定的优先级来选择可运行进程。 可运行进程(在等待CPU资源的进程) 不可运行进程(在等待其他资源的进程),3.4.5 进程调度(续),进程
26、切换,进程1:PID1 Task_struct(CPU、寄存器状态、相关指令的执行上下文),进程2:PID2 Task_struct(CPU、寄存器状态、相关指令的执行上下文),调度程序切换进程,保存PID1的状态信息,恢复PID1的状态信息,3.4.5 进程调度(续),进程有两种类型 一般进程(优先级低) 实时进程(优先级高) Priority(优先级) 系统为进程设定的优先级,实际上是允许进程运行的时间值,从进程开始运行时算起。 Counter(计数器) 进程运行的时间值,开始运行时设置为priority (200ms) ,每次时钟中断该值减1 , Rt_ priority (实时优先级)
27、 系统为进程设定的相对优先级 实时进程的调度策略 循环赛(round robin) 先进先出(first in first out),Linux内核对SMP的支持,每个处理器都在运行着进程,当运行在某个处理器上的进程耗尽其时间片或该进程处于等待状态时,该处理器将单独运行调度程序来选择新的进程。 每个处理器有个自己的空闲进程,都有自己的当前进程。 Task_struct结构包含: Processor字段,当前运行该进程的处理器编号 Last_ processor字段,上次运行该进程的处理器编号 Processor_musk字段,该字段第N位为1,表示该进程可以运行在第几个处理器上。利用该字段可以
28、将某个进程限制在单个处理器上运行。,3.4.6 进程的创建,初始进程(P65) 系统启动时,启动进程运行在内核模式,且只有这一个进程,即初始进程,系统初始化结束后,初始进程启动一个内核线程(即init),而自己则处于空循环状态,当系统中没有可运行进程时,调度程序将运行这一空闲进程。空闲进程的task_struct是惟一的一个非动态分配的任务结构。该结构在内核编译时分配,称为init_task。 Init 内核线程/进程的标识号为1,是系统的第1个真正进程,负责初始的系统设置工作,例如打开控制台、挂装文件系统等。接下来,init进程执行系统的初始化程序(可能是/etc/init、/bin/ini
29、t或/sbin/init)。,3.4.6 进程的创建(续),初始进程 init进程将/etc/inittab当作脚本文件运行以建立系统中新的进程,这些新的进程又可以建立新的进程。例如,getty进程可建立login进程来接受用户的登录请求。 进程的创建 新的进程通过“克隆”旧的程序(当前程序)而建立 Fork和clone系统调用可用来建立新的进程。 “克隆”进程时,允许两个进程共享相同的资源(文件、信号处理程序、虚拟内存等),3.4.7 管道,管道 最常用的IPC机制,当输入输出数据量很大时,效率特别高。 利用管道,一个进程的输出可直接成为另一个进程的输入,无需通过文件传递。 将一个命令的输出传送给另一个命令, 作为另一个命令的输入。相当于排球里的二传手功能。 管道实现 通过将两个file结构指向同一个临时的VFS索引节点,而两个VFS索引节点又指向同一个物理页而实现管道。 管道格式:命令1|命令2|命令n 例如:ls l /etc |more,3.5 升级内核,Linux内核源代码公开、漏洞修补、优秀代码加入、最新软件技术的加入,都会导致内核的快速升级。 3.5.1 为什么要升级内核 内核承担LINUX操作系统最核心的任务,是其他程序和硬件运行过程中的仲裁者。 内核要管理所有进程的内存,保证进程都能平等地得到CPU的时隙。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大班幼儿在教育中的五大领域目标及发展指导
- 2025年android自学教程!面试官都被搞懵了建议收藏-刚学安卓很懵逼
- 赛事商城测评题目及答案
- 2023-2024学年山西省太原市高二下学期期末学业诊断数学试题(解析版)
- 2023-2024学年湖南省长沙市浏阳市高二下学期期末质量监测数学试卷(解析版)
- 2025届河南省开封市等3地高三二模语文试题(解析版)
- 2024-2025学年云南省保山市高一上学期期末考试语文试题(解析版)
- 汽车解押的授权委托书
- 玻璃衬纸合同范本
- 脐部抗感染治疗方案讲课件
- 2024年高考政治选择性必修1《当代国际政治经济》(思维导图+核心考点+易混易错)
- 《积极心理学(第3版)》 课件 第3章 积极情绪的价值
- 语言学导论智慧树知到答案2024年广东外语外贸大学
- DL∕T 1909-2018 -48V电力通信直流电源系统技术规范
- 博士高校面试答辩模板
- JT-T-1211.1-2018公路工程水泥混凝土用快速修补材料第1部分:水泥基修补材料
- 上海市嘉定区2023-2024学年三年级下学期期末数学试卷
- DL-T5181-2017水电水利工程锚喷支护施工规范
- 在线网课知道知慧《战舰与海战》单元测试答案
- 走近核科学技术智慧树知到期末考试答案2024年
- 钢结构36米桁架吊装安全监理实施细则1
评论
0/150
提交评论