粤嵌linux内核基础_第1页
粤嵌linux内核基础_第2页
粤嵌linux内核基础_第3页
粤嵌linux内核基础_第4页
粤嵌linux内核基础_第5页
免费预览已结束,剩余37页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux内核基础 目录认识操作系统1Linux内核体系结构2Linux内核编译3 不同角度看到的操作系统操作系统整体看操作系统设计者使用者普通开发者认识操作系统 从使用者的角度看操作系统打开计算机,首先跳入眼帘的是什么?要拷贝一个文件,具体的拷贝操作是谁完成的?需要知道文件存放在何处,在硬盘的那个柱面、磁道、扇区。数据的搬动过程怎样进行复杂的I/O操作。繁琐留给自己,简单留给用户 操作系统穿上华丽的外衣图形界面操作系统穿上朴素的外衣字符界面认识操作系统 带系统的软件结构应用程序Application设备驱动程序Driver硬件(Hardware)应用(Application)标准接口函数(A

2、PI)操作系统(OS)硬件抽象层(HAL)BSP、驱动硬件(Hardware)不带操作系统软件结构 带操作系统软件结构 两类不同的系统结构模型 从程序开发者的角度看操作系统拷贝命令的C语言实现片断inf=open(“/mnt/usbdisk/test”,O_RDONLY,0);outf=open(“/mydir/test”,O_WRONLY,0600);do read_size=read(inf,buf,4096); write(outf,buf, read_size); while(read_size);close(outf);close(inf);认识操作系统 从操作系统设计者的角度看操作

3、系统操作系统的设计目标是什么?让各种软件资源和硬件资源高效而协调地运转起来。尽可能地方便用户使用计算机。 假设在一台计算机上有三道程序同时运行,并试图在一台打印机上输出运算结果,必须考虑哪些问题 ?从操作系统设计者的角度考虑,一个操作系统必须包含以下几部分 CPU管理内存管理设备管理文件管理认识操作系统 操作系统内核 Linux内核用户程序运行在Linux内核之上的一个庞大软件集合。系统调用内核的出口,用户程序通过它使用内核提供的功能。 Linux内核操作系统的灵魂,负责管理磁盘上的文件、内存,负责启动并运行程序,负责从网络上接收和发送数据包等等。 硬件包括了Linux安装时需要的所有可能的物

4、理设备。例如,CPU、 内存、硬盘、网络硬件等等。 Linux内核体系结构Linux内核采用宏内核结构(Monolithic kernel )所有的功能放在一个大程序中。也就是内核是一个大程序,是一个系统软件,管理系统的硬件资源,组织软件的工作。庞大而复杂的核心,但是却采用子系统和分层的概念很好地进行了组织。宏内核由于全部功能集中在一块,系统花在内核功能的切换上(例如文件系统到IO驱动系统上的切换上)开销就非常小,提供给用户程序的反应就很快。同时,因为全部功能集中在一块,各个功能之间的耦合度就很紧,导致了内核难以修改和增加新功能。 Linux内核体系结构现代的Linux内核是具有微内核特点的宏

5、内核。Linux内核引入内核模块机制。通过动态加载内核模块,使得在运行过程中扩展内核的功能。不需要的时候,卸载该内核模块。内核程序映像中包含内核的基本功能,而其他的功能可以通过内核模块的方式存在。当需要内核模块所提供的功能的支持时,再加载内核模块,把内核模块通过ld链接器链接到内核中。 Linux内核体系结构 Linux内核子系统 Linux内核子系统 进程调度控制着进程对CPU的访问。 内存管理允许多个进程安全地共享主内存区域 虚拟文件系统隐藏各种不同硬供统一的接口。网络提供了对各种网络标准协议的存硬件的支持。 进程间通信(IPC) 支持进程间各种通信机制,包括共享内存、消息队列及管道等。

6、Linux 内核的五个子系统1.进程调度(SCHED)控制CPU处理进程。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了基于优先级的进程调度算法选择新的进程。 Linux 内核的五个子系统2.内存管理(MM)物理内存的管理:分配、释放、回收等Linux内核采用虚拟内存技术,每个进程的虚拟内存空间为4GB。其中0-3G属于用户空间,称为用户段,3G-4G属于内核空间,称为内核段。允许多个进程安全的共享主内存区域。 Linux 内核的五个子系统3.虚拟文件系统(Virtual

7、FileSystem,VFS)实现了一种通用文件模型。屏蔽了各种不同文件系统的内在差别,使得用户可以使用同样的方式访问各种不同格式的文件系统。为用户访问不同的文件系统提供统一的通用的接口。 Linux 内核的五个子系统4.网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。 Linux 内核的五个子系统5.进程间通讯(IPC) 支持进程间各种通信机制,包括共享内存、消息队列及管道等。Linux的IPC是把Unix系统的

8、进程间通讯机制移植过来的。 Linux 内核的五个子系统各个子系统之间的依赖关系处于中心位置的进程调度,所有其它的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被成功的发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其他子系统以相似的理由依赖于进程调度。 Linux 内核的五个子系统各个子系统之间的依赖关系进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序环境下,程序要运行必

9、须为之创建进程,而创建进程的第一件事情,就是将程序和数据装入内存。 进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机制允许两个进程除了拥有自己的私有空间,还可以存取共同的内存区域。 虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统(NFS),也利用内存管理支持RAMDISK设备。 内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时,挂起当前正在运行的进程。 Linux

10、的系统调用系统调用是内核提供的一系列函数,提供给用户程序调用的一组“特殊”接口。是应用程序和内核的交互接口。用户进程是不能存取内核使用的内存段,也不能调用内核函数。当用户进程请求内核服务时,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务。 Linux的系统调用例如进程的创建。用户进程通过fork、vfork创建子进程。用户进程通过系统调用fork陷入内核空间,使用内核函数do_fork和分配内核数据结构task_struct等。 Linux的系统调用为什么需要系统调用出于安全的考虑。使得用户进程不能随便的进入内核空间,访问内核变量和内核函数。用户进程只有只能通过系统调用获取系统内

11、核服务,规定了用户进程进入内核的具体位置 ,也就是用户访问内核的路径是事先规定好的,只能从规定位置进入内核,执行规定的内核函数(功能)。 Linux的系统调用为什么需要系统调用用户程序通过系统调用才能够获取内核服务,是对内核的保护。用户进程通过系统调用,从用户态切换到内核内核,在内核态完成任务后再返回用户态。Linux的系统调用 Linux的系统调用跟很多Unix和windows系统相比,简洁和高效。 (Linux设计精髓)Linux系统调用继承Unix的部分系统调用(最基本和最有用的系统调用),所以Linux全部系统调用只有300个左右。 按照功能大致可分为进程控制文件系统控制系统控制存储管

12、理网络管理socket控制用户管理进程间通信 使用man 2 syscalls 命令查看系统调用的说明 Linux的系统调用系统调用并非直接和程序员打交道,程序员调用的是用户编程接口API。Linux的API遵循POSIX标准,定义了一系列API,通过C库(glibc)实现。除了定义标准的C函数外,提供了一套封装例程将系统调用在用户空间封装后供用户编程使用。 Linux 内核的技术特点 Linux内核最注重实用和效率。 内核可定制。选择适合自己的功能,将不需要的部分剔除出内核。Linux内核对设备驱动或新文件系统等采用了 (loadable kernel module) LKM机制,用户在需要

13、时可以现场动态加载,使用完毕可以动态卸载。将模块从内核中独立出来,不必预先绑定在 kernel codes 中。这样做有三种优点:1 将来修改 kernel 时,不必全部重新compile2 若需要安装新的 modules ,不必重新 compile kernel,只要插入 (通过insmode指令) 对应的modules 3 减少内核对系统资源的占用,内核可以集中精力做最基本的事情,把一些扩展功能交由modules实现。 Linux内核版本 0.01Linux(第一版) 0.13版 产品化版本 实验版本 1.0.0 1.1.0(1.0.0的拷贝) 1.0.X(修改) 1.1.X(增加新功能,

14、进行测试) 2.4.18 2.6.37Linux内核版本Linux内核版本号X.Y.ZY是偶数的是稳定版,Z是修订号,这是2.6内核前的版本管理办法 在2.6稳定版的基础上增加新功能和新补丁现在一共有三个2.6版内核:第一个是稳定版内核2.6.x,由托沃兹负责维护;第二个是2.6-mm版内核,用于新技术加入稳定版前进行测试;第三个是2.6.x.y版内核(简称为.y版内核),它的用途是测试补丁。 Linux内核源代码结构Linux 内核源代码的结构Linux内核源代码位于/usr/src/linux目录下/include子目录包含了建立内核代码时所需的大部分包含文件/init 子目录包含了内核的

15、初始化代码 /arch子目录包含了所有硬件结构特定的内核代码/drivers子目录包含了内核中所有的设备驱动程序 /fs子目录包含了所有的文件系统的代码 /net子目录包含了内核的网络连接代码 /mm子目录包含了所有内存管理代码 /ipc子目录包含了进程间通信代码 /kernel子目录包含了主内核代码 Linux内核配置编译编译内核的需要Linux作为一个自由软件,不断增加许多新的特性。想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等。L

16、inux内核配置编译编译内核的需要自己定制编译的内核运行更快系统将拥有更多的内存不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些 新版本内核的获取和更新官方网站是 新版本的内核的发布有两种形式一种是full/Source版本,一般是tar.gz或者是.bz2文件。另外一种是patch文件,即补丁。 patch文件一般只有几十K到几百K,但是patch文件是针对于特定的版本的,你需要找到自己对应的版本才能使用。例如:你有2.6.9的源代码,但想移到2.6.10。就可以获得2.6.10的补丁文件,应用patch来修改2.6.9源文件

17、。$ cd /usr/src/linux $ patch pl 树状菜单。Kbuild构建系统Kconfig文件arch/$(ARCH)/Kconfig文件是主Kconfig文件,主Kconfig文件调用其他目录的Kconfig文件。这些Kconfig文件形成树状关系-树状菜单。script目录下提供不同的配置工具去读取Kconfig文件形成不同的配置方式。如menuconfig目标使用mconf。Documentation/kbuild/kconfig-language.txt提供了kconfig文件的书写语法。 Linux内核配置编译内核配置命令:#make config(基于文本的最为传统的配置界面,不推荐使用) #make menuconfig(基于文本菜单的配置界面,字符终端下推荐使用) #make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用) #make gconfig(基于gtk的图形配置界面)Linux内核配置编译选择相应的配置时,有三种选择,它们分别代表的含义如下: Y-将该功能编译进内核 N-不将该功能编译进内核 M-将该功能编译成模块,可以在需要时动态插入到内核中make xconfig,使用鼠标就可以选择对应的选项。make menuconfig,则需要使用空格

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论