《linux操作系统结构课件》由会员分享,可在线阅读,更多相关《linux操作系统结构课件(30页珍藏版)》请在金锄头文库上搜索。
1、Linux Kernel架构架构黄松青黄松青linux操作系统结构操作系操作系统(OS)的概念的概念 v一个系一个系统管理程序,管理管理程序,管理计算机的算机的资源,源,给用用户一个使用一个使用这些些资源的平台源的平台v一个服一个服务程序,操作系程序,操作系统都是都是为用用户应用程序用程序服服务的,服的,服务的方式是通的方式是通过系系统调用用 system callvLinux是一个多任是一个多任务,跨平台的跨平台的现代操作系代操作系统linux操作系统结构为什么要有操作系什么要有操作系统v多任多任务的要求的要求v统一的服一的服务接口,合理使用接口,合理使用资源,如内存源,如内存v管理并管理并
2、发时对资源使用冲突源使用冲突v减少开减少开发的的难度度v安全性的要求安全性的要求v网网络(TCP/IP)的使用)的使用v GUI的使用要求的使用要求v应用程序移植性的要求用程序移植性的要求v用用户操作的方便性操作的方便性linux操作系统结构操作系操作系统的的组成成v进程管理模程管理模块v内存管理模内存管理模块v文件系文件系统管理模管理模块v设备管理模管理模块v异常和中断管理模异常和中断管理模块v网网络协议模模块v linux操作系统结构进程管理程管理v进程程(process)的概念的概念v系系统的第一个的第一个进程程Initv用用户进程如何运行和退出程如何运行和退出v记录进程的信息,程的信息
3、,进程控制程控制块 PCB v系系统调度度,不同的系不同的系统有不同的策略有不同的策略 v用用户进程程进入系入系统的唯一途径的唯一途径, system calllinux操作系统结构内存管理内存管理v内存是系内存是系统资源的一种源的一种 v内存的分内存的分类 SRAM, SDRAM, FB, Registers, 外外设片上内存片上内存v物理内存的管理物理内存的管理 v虚虚拟内存的管理内存的管理,内核空内核空间与用与用户空空间 v内核与用内核与用户内存的分配内存的分配 v内存碎片的内存碎片的产生和避免生和避免linux操作系统结构文件系文件系统管理管理v永久性存永久性存储设备,disk, fl
4、ash, sd, cf v分区、格式化及文件分区、格式化及文件 v一个一个简单的文件系的文件系统的例子的例子 v系系统看存看存储地址是地址是线性性 v进程看待文件的程看待文件的统一化和抽象化一化和抽象化linux操作系统结构设备管理管理vHAL层的概念的概念, 开放性的理念开放性的理念 v设备的的驱动 v系系统要要记录和管理和管理设备的存在的存在 v安全使用安全使用设备v设备是一种特殊的文件是一种特殊的文件v进程如何使用程如何使用设备,open/close, read/write, ioctllinux操作系统结构Linux kernel历史史v1991年由当年由当时的芬的芬兰学生学生linu
5、s torvalds编写并以写并以GNU GPL的方式的方式发布到布到Internet上上,称称为0.11版版v1994年年,出出1.0.0版本版本v1996年年,出出2.0版本版本v1999年年,出出2.2版本版本v2001年年,出出2.4版本版本v2003年年,出出2.6版本版本,至今都至今都稳定在定在该版本版本linux操作系统结构Linux kernel的特点的特点v类Unix,遵循遵循POSIX标准准v支持很多的体系支持很多的体系结构构,如如X86,Arm,Mips等等等等,有极有极强的平台可的平台可伸伸缩性性 vOpen Source(GNU GPL)v单内核内核,开放可开放可扩展
6、展v真正的多任真正的多任务多用多用户 v具有具有强大的网大的网络功能功能 ,尤其尤其对Tcp/ip支持支持v开开发功能功能强,开开发环境免境免费v设备独立性独立性, 系系统把所有外部把所有外部设备统一当作成文件来看待及操作一当作成文件来看待及操作v可靠的系可靠的系统安全安全v linux操作系统结构Linux系系统软件件层次次结构构linux操作系统结构Linux中中处理器的运行理器的运行vLinux Kernel初始化完初始化完毕后,程序运行在以后,程序运行在以下的上下文空下的上下文空间中:中: 1)运行于用)运行于用户空空间,执行用行用户程序程序 2)运行于内核空)运行于内核空间,处于当前
7、于当前进程的程的 上下文上下文 3)运行于中断,)运行于中断,处于中断上下文,与于中断上下文,与进程无程无关关,因因为中断的不可中断的不可预知知linux操作系统结构fread()文件的文件的执行行举例例v用用户进程在用程在用户空空间,使用,使用C库fread()读文件文件vFread()调用用read()系系统调用,用,进入系入系统空空间,执行系行系统代代码v系系统根据文件根据文件对存存储设备进行数据行数据请求,在数据没准求,在数据没准备就就绪是是让出出CPU使其他使其他进程运行。程运行。v存存储设备数据准数据准备就就绪,向,向CPU发出中断出中断请求,求,CPU响响应进入中断上下文,并入中
8、断上下文,并唤醒醒该文件的文件的读进程程v在某在某时刻,刻,读文件的文件的进程再次运行,取到数据,返回程再次运行,取到数据,返回用用户空空间linux操作系统结构获取取Linux内核源代内核源代码v从官方网站从官方网站获取取:,主要主要 是是X86平台的版本平台的版本v以以BSP包的方式包的方式获取取,主要在嵌入式的平台上主要在嵌入式的平台上用的方式用的方式v补丁丁,从版本从版本2.6.20升升级到到2.6.21 #cd 到到2.6.20 linux 目目录 #patch p1 退出退出-保存后保存后产生生.config 文件文件,文件中包含有各种文件中包含有各种选择了的配置了的配置选项,以供
9、以供Makefile使用使用,Makefile在会根据在会根据.config的的选项来来产生生 autoconf.h, autoconf.h是以是以C语言的形式定言的形式定义的各的各编译选项,供供kernel的源文件的源文件includelinux操作系统结构Linux 2.6内核配置与内核配置与编译v选择相相应的配置的配置时,有三种,有三种选择,它,它们分分别代表的含代表的含义如下:如下: Y Y- -将将该功能功能编译进内核内核 N N- -不将不将该功能功能编译进内核内核 M M- -将将该功能功能编译成模成模块,可以在需要,可以在需要时动态插入到内核中插入到内核中make xconfi
10、g,使用鼠标就可以选择对应的选项。make menuconfig,则需要使用空格键进行选取。v如果有不明白的地方,按如果有不明白的地方,按 shift+ shift+?的?的组合合键来来查看看说明明linux操作系统结构Linux 2.6内核配置与内核配置与编译v配置的原配置的原则1)大部分选项可以使用其缺省值或者BSP选用缺省值,只有小部分需要根据用户不同的需要选择。2)将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块。有利于减小内核的长度,减小内核消耗的内存;3)不需要的功能就不要选;4)与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。linux操作系统结构L
11、inux 2.6内核配置与内核配置与编译v配置工作配置工作过程程: MakefileMakefile分布在 Linux 内核源代码中的 Makefile,定义 Linux 内核的编译规则;顶层目录的Makefile管理整个Linux内核的配置编译。 配置工具配置工具不同的内核配置方式,通过不同的配置工具完成。script目录下提供了这些配置工具。如menuconfig目标使用mconf。 Kconfig Kconfig文件文件2.6内核引入的配置文件,是内核配置选项的源文件。arch/$(ARCH)/Kconfig文件是主Kconfig文件,主Kconfig文件调用其他目录的Kconfig文件
12、。这些Kconfig文件形成树状关系-树状菜单。linux操作系统结构Linux 2.6内核配置与内核配置与编译v配置工作配置工作过程程:v当用当用户执行配置命令行配置命令,Makefile调用配置工具用配置工具mconf, mconf从从arch/$(ARCH)/Kconfig开始搜索各目开始搜索各目录中的中的Kconfig文件文件,并根据并根据这些文件形成些文件形成图形化的配形化的配置界面置界面,给用用户进行配置行配置vKconfig文件是文件是产生生.config文件的文件的输入文件入文件,也就是也就是说.config中的中的选项是由是由Kconfig决定的决定的v这是是Linux2.6
13、内核独有的配置系内核独有的配置系统v用用户可以根据需要增加和修改其中的配置可以根据需要增加和修改其中的配置选项linux操作系统结构Linux 2.6内核配置与内核配置与编译v配置的注意配置的注意选项Code maturity level options - 应该选择* Prompt for development and/or incomplete code/drivers这将会在设置界面中显示还在开发或者还没有完成的代码与驱动. 因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。linux操作系统结构Linux 2.6内核配置与内核配置与编译v配置的注意配置的注意选项2 G
14、eneral setup -大部分保持默认* Support for paging of anonymous memory (swap) 应该选择这个选项将使你的内核支持虚拟内存。Pc上应该选择,而嵌入式上一般不选 * System V IPC 应该选择为进程提供通信机制。有些程序只有在选Y的情况下才能运行,这里一定要选。* POSIX Message Queues POSIX的消息队列,它同样是一种IPC,应该选择* Support for hot-pluggable devices 支持热插拔的,若是为普通电脑配置内核,则最好选择linux操作系统结构Linux 2.6内核配置与内核配置与
15、编译v配置的注意配置的注意选项3 Loadable module support -* Enable loadable module support 应该选择这个选项可以让你的内核支持模块。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。* Module unloading 应该选择这个选项可以让你卸载不再使用的模块,如果不选的话你将不能卸载任何模块* Forced module unloading强行卸载模块,可以把正在使用中的模快卸载掉。做内核开发或者驱动开发的时候,有一定的好处。但一般用户不应该选择。linux操作系统结构Linux 2.6内核配置与内核配置与编译v配置的注意
16、配置的注意选项4 Executable -* Kernel support for ELF binaries 一定要选5 Device Drivers -Memory Technology Devices (MTD) - 存储设备层,大部分的flash芯片驱动都基于MTD。用于嵌入式系統。Block devices Loopback device support可以将一个文件挂成一个文件系统。mount iso文件linux操作系统结构Linux 2.6内核配置与内核配置与编译v配置的注意配置的注意选项6 -必须将根文件系统直接编译到内核中。并且在这里选择系统支持的文件系统。linux操作系统
17、结构Linux 2.6内核配置与内核配置与编译vcd到到ARM Linux 2.6的安装目的安装目录中中v#make 在当前目在当前目录中将中将产生生vmlinux即即为内核文件内核文件v#make modules #make modules_install 将将产生在内核代生在内核代码树中以模中以模块方式方式编译的模的模块linux操作系统结构Linux内核启内核启动流程流程vbootloader加加载kernel到内存到内存varch/mips/kernel/head.Svinit/main.c start_kernel() - 体系体系结构的初始化构的初始化setup_arch() - 内存管理初始化内存管理初始化 mem_init() - 调度系度系统初始化初始化 sched_init() - 中断系中断系统初始化初始化 trap_init(), init_IRQ() - 各子系各子系统数据数据结构初始化构初始化 - 各各设备驱动和网和网络初始化初始化 do_basic_setup() - 挂接根文件系挂接根文件系统 mount_root() - 建立系建立系统第一个第一个init进程程 exec(“/sbin/init”,)linux操作系统结构linux操作系统结构