1、1Linux内核内核Linux 简介简介 2linux 操作系统核心是由操作系统核心是由25 岁的芬兰大学生岁的芬兰大学生Linus 于于1991年年8月在芬兰的赫尔辛基大学发布的。在互月在芬兰的赫尔辛基大学发布的。在互联网的背景下,成千上万的程序员加入了它的开联网的背景下,成千上万的程序员加入了它的开发中,使其成为了最流行的操作系统之一。发中,使其成为了最流行的操作系统之一。Linux并不是一个完整的操作系统。当我们在安装并不是一个完整的操作系统。当我们在安装通常所说的通常所说的Linux 时,我们实际安装的是很多工时,我们实际安装的是很多工具的集合。这些工具协同工作以组成一个功能强具的集合
2、。这些工具协同工作以组成一个功能强大的实用系统。大的实用系统。Linux本身只是这个操作系统的内本身只是这个操作系统的内核,是操作系统的心脏、灵魂、指挥中心。整个核,是操作系统的心脏、灵魂、指挥中心。整个系统应该称为系统应该称为GNU/Linux。3准确的说,准确的说,Linux其实是指其实是指Linux的的kernel(系统的系统的核心程序核心程序)。对于。对于Linux用户和系统管理员来说,用户和系统管理员来说,Linux是指包含是指包含Linux kernel、utilities(系统工具系统工具程序程序)以及以及application(应用软件应用软件)的一个完整的操的一个完整的操作系
3、统。作系统。Linux最强大的生命力还在于其公开的开发过程。最强大的生命力还在于其公开的开发过程。每个人都可以自由获取内核源程序,每个人都可每个人都可以自由获取内核源程序,每个人都可以对源程序加以修改,而后他人也可以自由获取以对源程序加以修改,而后他人也可以自由获取你修改后的源程序。你修改后的源程序。41.Linux 的产生和发展的产生和发展 Linux 操作系统的诞生、发展和成长过程依操作系统的诞生、发展和成长过程依赖于以下五个重要支柱:赖于以下五个重要支柱:UNIX 操作系统、操作系统、MINIX操作系统、操作系统、GNU 计划、计划、POSIX 标准标准和和Internet 网络。网络。
4、5UNIX操作系统操作系统 Linux 操作系统是操作系统是UNIX 操作系统的一个克隆版本。操作系统的一个克隆版本。UNIX 操作系统是美国贝尔实验室的操作系统是美国贝尔实验室的Ken.Thompson和和Dennis Ritchie 于于1969 年夏年夏在在DEC PDP-7 小型计算机上开发的一个分时操作小型计算机上开发的一个分时操作系统。系统。Ken Thompson 为了能在闲置不用的为了能在闲置不用的PDP-7 计算计算机上运行他非常喜欢的星际旅行(机上运行他非常喜欢的星际旅行(Space travel)游戏,于是在游戏,于是在1969 年夏天乘他夫人回家乡加利福年夏天乘他夫人回
5、家乡加利福尼亚渡假期间,在一个月内开发出了尼亚渡假期间,在一个月内开发出了UNIX 操作系操作系统的原型。当时使用的是统的原型。当时使用的是BCPL 语言(基本组合语言(基本组合编程语言),后经编程语言),后经Dennis Ritchie 于于1972 年用移年用移植性很强的植性很强的C语言进行了改写,使得语言进行了改写,使得UNIX 系统在系统在大专院校得到了推广。大专院校得到了推广。6MINIX操作系统操作系统 MINIX 系统是由系统是由Andrew S.Tanenbaum(AST)在在1987年开发的,主要用于学生学习操作系统原年开发的,主要用于学生学习操作系统原理。到理。到1991
6、年时版本是年时版本是1.5。目前主要有两个版本。目前主要有两个版本在使用:在使用:1.5 版和版和2.0 版。当然目前版。当然目前MINIX 系统已系统已经是免费的,可以从许多经是免费的,可以从许多FTP 上下载。上下载。对于对于Linux 系统,他后来曾表示对其开发者系统,他后来曾表示对其开发者Linus的称赞。但他认为的称赞。但他认为Linux的发展很大原因是由于他的发展很大原因是由于他为了保持为了保持MINIX 的小型化,能让学生在一个学期的小型化,能让学生在一个学期内就能学完,因而没有接纳全世界许多人对内就能学完,因而没有接纳全世界许多人对MINIX的扩展要求。的扩展要求。作为一个操作
7、系统,作为一个操作系统,MINIX并不是优秀者,但它同并不是优秀者,但它同时提供了用时提供了用C语言和汇编语言编写的系统源代码。语言和汇编语言编写的系统源代码。7GNU计划计划 软件产业在软件产业在70年代成就了两位针锋相对的领袖人物,年代成就了两位针锋相对的领袖人物,来自哈佛大学的比尔来自哈佛大学的比尔盖茨和盖茨和Richard M.Stallman。前者宣布了前者宣布了Copyright(版权版权)时代的到来,并构建了时代的到来,并构建了微软帝国的辉煌;后者于微软帝国的辉煌;后者于1984年创立自由软件体系年创立自由软件体系-GNU,拟定普遍公用版权协议(,拟定普遍公用版权协议(GPL),
8、今天),今天Linux的成功就得益于的成功就得益于GPL协议。所有协议。所有GPL协议下协议下的自由软件都遵循着的自由软件都遵循着Richard M.Stallman的的“Copyleft”(非版权非版权)原则:即自由软件允许用户自原则:即自由软件允许用户自由拷贝、修改和销售,但是对其源代码的任何修改由拷贝、修改和销售,但是对其源代码的任何修改都必须向所有用户公开。都必须向所有用户公开。常见写法:作品名称版权没有,翻印不究。但请协助改进本作品常见写法:作品名称版权没有,翻印不究。但请协助改进本作品 8GNU 计划和自由软件基金会计划和自由软件基金会FSF是由是由Richard M.Stallm
9、an 于于1984 年一手创办的。旨在开发一个类年一手创办的。旨在开发一个类似似UNIX 并且是自由软件的完整操作系统:并且是自由软件的完整操作系统:GNU 系系统。各种使用统。各种使用Linux 作为核心的作为核心的GNU 操作系统正操作系统正在被广泛的使用。虽然这些系统通常被称作在被广泛的使用。虽然这些系统通常被称作Linux,但是,但是Stallman 认为,严格地说,它们应认为,严格地说,它们应该被称为该被称为GNU/Linux系统。系统。到上世纪到上世纪90 年代初,年代初,GNU 项目已经开发出许多高项目已经开发出许多高质量的免费软件,其中包括有名的质量的免费软件,其中包括有名的e
10、macs 编辑系编辑系统、统、bash shell 程序、程序、gcc 系列编译程序、系列编译程序、gdb 调调试程序等等。这些软件为试程序等等。这些软件为Linux 操作系统的开发创操作系统的开发创造了一个合适的环境。造了一个合适的环境。9POSIX标准标准 POSIX是由是由IEEE 和和ISO/IEC 开发的一簇标准。该开发的一簇标准。该标准是基于现有的标准是基于现有的UNIX 实践和经验,描述了操作实践和经验,描述了操作系统的调用服务接口。用于保证编制的应用程序系统的调用服务接口。用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植和运可以在源代码一级上在多种操作系统上移植和运
11、行。它是在行。它是在1980 年早期一个年早期一个UNIX 用户组用户组(usr/group)的早期工作基础上取得的。该的早期工作基础上取得的。该UNIX 用户组原来试图将用户组原来试图将AT&T 的的System V 操作系统和操作系统和BerkeleyCSRG 的的BSD 操作系统的调用接口之间操作系统的调用接口之间的区别重新调和集成。并于的区别重新调和集成。并于1984 年定制出了年定制出了/usr/group 标准。标准。10在在90 年代初,年代初,POSIX 标准的制定正处在最后投票标准的制定正处在最后投票敲定的时候,那是敲定的时候,那是1991-1993 年间。此时正是年间。此时
12、正是Linux刚刚起步的时候,这个刚刚起步的时候,这个UNIX 标准为标准为Linux 提供了极为重要的信息,使得提供了极为重要的信息,使得Linux 能够在标准能够在标准的指导下进行开发,并能够与绝大多数的指导下进行开发,并能够与绝大多数UNIX 操作操作系统兼容。在最初的系统兼容。在最初的Linux 内核源代码中(内核源代码中(0.01 版、版、0.11 版)就已经为版)就已经为Linux 系统与系统与POSIX 标准标准的兼容做好了准备工作。在的兼容做好了准备工作。在Linux 0.01 版内核的版内核的/include/unistd.h 文件中就已经定义了几个有关文件中就已经定义了几个
13、有关POSXI 标准要求的符号常数,而且标准要求的符号常数,而且Linus 在注释在注释中已写道:中已写道:“OK,这也许是个玩笑,但我正在着,这也许是个玩笑,但我正在着手研究它呢手研究它呢”。11Linux的诞生的诞生 1981 年,年,IBM 公司推出了享誉全球的微型计算机公司推出了享誉全球的微型计算机IBM PC。1981-1991 年间,年间,MS-DOS 操作系统一直是微型操作系统一直是微型计算机操作系统的主宰。计算机操作系统的主宰。Apple 的的MACs 操作系统操作系统 UNIX 操作系统操作系统 MINIX 操作系统操作系统 GNU 计划已经开发出了许多工具软件计划已经开发出
14、了许多工具软件Linux的诞生的诞生 121990年,芬兰学生年,芬兰学生Linux在首都赫尔辛基大学学习操作系在首都赫尔辛基大学学习操作系统课程,因为上机需要排队等待,统课程,因为上机需要排队等待,Linux买了台买了台PC机,开机,开发了第一个程序,程序包括两个进程,向屏幕上写字母,发了第一个程序,程序包括两个进程,向屏幕上写字母,然后用定时器来切换进程。然后用定时器来切换进程。Linux需要终端仿真程序来存取需要终端仿真程序来存取Usenet新闻组的内容,于新闻组的内容,于是他写了从调制解调器上接发信息的程序,以及显示器、是他写了从调制解调器上接发信息的程序,以及显示器、键盘和调制解调器
15、的驱动程序。键盘和调制解调器的驱动程序。然后写了磁盘驱动程序、文件系统,一旦有了进程切换、然后写了磁盘驱动程序、文件系统,一旦有了进程切换、文件系统和设备驱动程序,当然就拥有了一个操作系统原文件系统和设备驱动程序,当然就拥有了一个操作系统原型,或者至少是它的一个内核。型,或者至少是它的一个内核。Linux操作系统就以这样极其古怪,但也极其自然的形式操作系统就以这样极其古怪,但也极其自然的形式问世。问世。13Linux的版本发展的版本发展 142.Linux 的特点的特点 完全免费源代码公开完全免费源代码公开多任务支持多任务支持多用户支持多用户支持多处理器支持多处理器支持移植性好,能适应多移植性
16、好,能适应多种硬件平台种硬件平台按需调入执行按需调入执行分页机制分页机制 动态外存缓存动态外存缓存共享库支持共享库支持POSIX 1003.1POSIX 1003.1支持支持多种不同格式可执行文件多种不同格式可执行文件支持支持内存保护模式内存保护模式支持不同种类的文件系统支持不同种类的文件系统强大的网络功能支持强大的网络功能支持(TCP/IP(TCP/IP、SLIPSLIP、PPP)PPP)153.Linux 内核的版本内核的版本 由于由于Linux的源程序是完全公开的,任何人只要遵的源程序是完全公开的,任何人只要遵循循GPL,就可以对内核加以修改并发布给他人使,就可以对内核加以修改并发布给他
17、人使用。用。为了确保这些无序的开发过程能够有序地进行,为了确保这些无序的开发过程能够有序地进行,Linux采用了双树系统。一个树是稳定树(采用了双树系统。一个树是稳定树(stable tree),另一个树是非稳定树(),另一个树是非稳定树(unstable tree)或者开发树(或者开发树(development tree)。)。一旦开发树经过了足够的发展,开发树就会成为一旦开发树经过了足够的发展,开发树就会成为新的稳定树。新的稳定树。16源程序版本号的形式为源程序版本号的形式为x.y.z。比如。比如2.4.20。其中。其中x是主版本号,是主版本号,y是次版本号,而是次版本号,而z 是代表改动
18、较小是代表改动较小的末版本号。的末版本号。对于稳定树来说,对于稳定树来说,y是偶数;对于开发树来说,是偶数;对于开发树来说,y比相应的稳定树大一(因此,是奇数)。比如说,比相应的稳定树大一(因此,是奇数)。比如说,某稳定内核版本号是某稳定内核版本号是2.2.10,而也许正在开发内核,而也许正在开发内核的版本号是的版本号是2.3.12。对。对2.3树的缺陷修正会回溯影树的缺陷修正会回溯影响(响(back-propagated)2.2树,而当树,而当2.3树足够成树足够成熟的时候会发展成为熟的时候会发展成为2.4.0。174.Linux 组成组成 Linux 的内核:内核是系统的核心,是运行程序的
19、内核:内核是系统的核心,是运行程序和管理像磁盘和打印机等硬件设备的心程序。和管理像磁盘和打印机等硬件设备的心程序。Linux Shell:Shell 是系统的用户界面,提供了用是系统的用户界面,提供了用户与内核进行交互操作的一种接口。户与内核进行交互操作的一种接口。Linux 文件系统文件系统:Linux文件系统是文件存放在磁文件系统是文件存放在磁盘等存储设备上的组织方法。盘等存储设备上的组织方法。Linux能支持多种目能支持多种目前浒的文件系统,如前浒的文件系统,如EXT2、EXT3、FAT、VFAT、ISO9660、NFS等。等。Linux 应用系统:标准的应用系统:标准的Linux系统都
20、有一整套称系统都有一整套称为应用程序的程序集,包括文本编辑器、编程语为应用程序的程序集,包括文本编辑器、编程语言、言、X Window、办公套件、办公套件、Internet工具、数据工具、数据库等。库等。185.Linux 的发行版本的发行版本 slackware坚持坚持KISS(Keep It Simple Stupid)的原则,就是说没有任何配的原则,就是说没有任何配置系统的图形界面工具置系统的图形界面工具 RedHat红帽创建于红帽创建于1993年,是目前世界上最资深的年,是目前世界上最资深的Linux和开放源代码提供和开放源代码提供商,同时也是最获认可的商,同时也是最获认可的Linux
21、品牌。基于开放源代码模式品牌。基于开放源代码模式 Debian大部份的基本工具则来自大部份的基本工具则来自 GNU 计划,因此我们称为计划,因此我们称为 GNU/Linux TurboLinux已在日本和中国取得了巨大的成功,在美国也有一定的已在日本和中国取得了巨大的成功,在美国也有一定的业绩。当前版本为业绩。当前版本为4.0,是基于,是基于linux 2.2.10内核的内核的 红旗红旗Linux定位是企业级的网络和应用服务器定位是企业级的网络和应用服务器 DIY一个属于自己的一个属于自己的LINUX系统系统 19Linux的技术特性的技术特性20Linux的技术特性的技术特性抢先式多任务抢先
22、式多任务 Linux将将CPU的运行周期分配给多个应用程序,允许多的运行周期分配给多个应用程序,允许多个用户同时执行不同的程序。并且可以给紧急任务以个用户同时执行不同的程序。并且可以给紧急任务以较高的优先级,从而大大提高了较高的优先级,从而大大提高了CPU资源的利用率。资源的利用率。21Linux的技术特性的技术特性进程管理进程管理 Linux采用新技术使得进程在创建时不是复制父进程物采用新技术使得进程在创建时不是复制父进程物理空间中的内容,而是复制父进程的页表。从而使得理空间中的内容,而是复制父进程的页表。从而使得父子进程共享物理空间,并将这些物理空间标记为只父子进程共享物理空间,并将这些物
23、理空间标记为只读,当父进程或子进程的其中一个要进行写操作时才读,当父进程或子进程的其中一个要进行写操作时才对所要写的页进行复制,其余内容并不复制。这种进对所要写的页进行复制,其余内容并不复制。这种进程调度算法十分科学,对系统资源的利用亦比程调度算法十分科学,对系统资源的利用亦比Unix更更为有效。为有效。22存储管理存储管理 在存储管理方面,在存储管理方面,Linux独具特色,内核支持按需调页独具特色,内核支持按需调页(demand paging)。l当程序被加载运行时,当程序被加载运行时,Liunx只为它分配虚拟空间,只有当访只为它分配虚拟空间,只有当访问某一虚拟空间而发生页中断时,才分配物
24、理内存并从磁盘问某一虚拟空间而发生页中断时,才分配物理内存并从磁盘上读取相应的程序段,这种管理方式最大限度地利用了物理上读取相应的程序段,这种管理方式最大限度地利用了物理存储器。存储器。lLiunx的多个进程可以同时使用同一段内存,当其中某个进程的多个进程可以同时使用同一段内存,当其中某个进程要对内存进行写操作时,此段内存页会被复制到别的地方,要对内存进行写操作时,此段内存页会被复制到别的地方,即即Copy-on-write技术。以此加快运行速度,同时又减少内存技术。以此加快运行速度,同时又减少内存开销开销。Linux还支持虚拟内存技术,为了增加可用内存还支持虚拟内存技术,为了增加可用内存Li
25、nux使用磁盘分页技术。使用磁盘分页技术。Linux的技术特性的技术特性23文件系统文件系统Linux 默认采用的是默认采用的是ext2或或ext3文件系统,具有较高文件系统,具有较高的系统效率。的系统效率。通过通过VFS(虚拟文件系统虚拟文件系统),Linux还可以支持还可以支持msdos、fat、ntfs(Windows)、hpfs、iso9660等文件系统。等文件系统。Linux的技术特性的技术特性24网络支持网络支持 在网络方面,在网络方面,Linux支持支持TCP/IP网络,包括网络,包括HTTP、FTP、SSH、TELNET、NFS、DNS、POP等服务,等服务,支持支持Apple
26、Talk服务器、服务器、NetWare服务器及客户端、服务器及客户端、Lan Manager服务器及客户端,支持多种网络协议如服务器及客户端,支持多种网络协议如Ipv4、Ipv6、X.25、IPX、NetBEU、IDDP等。等。Linux机器可以用作文件服务器、打印服务器、应用服机器可以用作文件服务器、打印服务器、应用服务器等,还可以用作务器等,还可以用作Web服务器、域名服务器、防火服务器、域名服务器、防火墙、墙、FTP服务器、邮件服务器甚至是代理服务器使用。服务器、邮件服务器甚至是代理服务器使用。Linux的技术特性的技术特性25LINUX的组成的组成LINUX的内核:内核是系统的核心,是
27、运行程序和管理像的内核:内核是系统的核心,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。磁盘和打印机等硬件设备的核心程序。LINUX SHELL:Shell是系统的用户界面,它是一个命令解是系统的用户界面,它是一个命令解释器,它解释用户输入的命令,并且把它们送到内核。提释器,它解释用户输入的命令,并且把它们送到内核。提供了用户与内核进行交互操作的一种接口供了用户与内核进行交互操作的一种接口。LINUX文件系统文件系统:Linux文件系统是文件存放在磁盘等存储文件系统是文件存放在磁盘等存储设备上的组织方法。设备上的组织方法。Linux能支持多种目前许多的文件系能支持多种目前许多的文件系统,
28、如统,如EXT2、EXT3、FAT、VFAT、ISO9660、NFS、SMB等。等。LINUX应用系统:标准的应用系统:标准的Linux系统都有一整套称为应用系统都有一整套称为应用程序的程序集,包括文本编辑器、编程语言、程序的程序集,包括文本编辑器、编程语言、X Window、办公套件、办公套件、Internet工具、数据库等工具、数据库等。26Linux内核内核内核概况内核概况27内核(内核(kernel)是操作系统的内部核心程序,它)是操作系统的内部核心程序,它向外部提供了对计算机设备的核心管理调用。向外部提供了对计算机设备的核心管理调用。将操作系统的代码分成两部分:将操作系统的代码分成两
29、部分:内核所在的地址空间称作内核空间。内核所在的地址空间称作内核空间。而在内核以外,剩下的程序统称为外部管理程序,它们而在内核以外,剩下的程序统称为外部管理程序,它们大部分是对外围设备的管理和界面操作。外部管理程序大部分是对外围设备的管理和界面操作。外部管理程序与用户进程所占据的地址空间称为外部空间。与用户进程所占据的地址空间称为外部空间。通常,一个程序会跨越两个空间。当执行到内核空间的通常,一个程序会跨越两个空间。当执行到内核空间的一段代码时,我们称程序处于内核态,而当程序执行到一段代码时,我们称程序处于内核态,而当程序执行到外部空间代码时,我们称程序处于用户态。外部空间代码时,我们称程序处
30、于用户态。28从从UNIX起,人们开始用高级语言编写内核代码,起,人们开始用高级语言编写内核代码,使得内核具有良好的扩展性。单一内核是当时操作使得内核具有良好的扩展性。单一内核是当时操作系统的主流,并通过各种方式防止外部程序直接访系统的主流,并通过各种方式防止外部程序直接访问内核中的数据结构。程序只有通过系统调用问内核中的数据结构。程序只有通过系统调用(system call)的界面访问内核结构。)的界面访问内核结构。近年来,微内核结构成为操作系统的主要潮流。近年来,微内核结构成为操作系统的主要潮流。在微内核结构中,操作系统的内核只需要提供最基在微内核结构中,操作系统的内核只需要提供最基本、最
31、核心的一部分操作(比如创建和删除任务、本、最核心的一部分操作(比如创建和删除任务、内存管理、中断管理等)即可,而其他的管理程序内存管理、中断管理等)即可,而其他的管理程序(如文件系统、网络协议栈等)则尽可能的放在内(如文件系统、网络协议栈等)则尽可能的放在内核之外。核之外。29这些外部程序可以独立运行,并对外部用户程序这些外部程序可以独立运行,并对外部用户程序提供操作系统服务,服务之间使用进程间通信机提供操作系统服务,服务之间使用进程间通信机制(制(IPC)进行交互,只在需要内核的协助时,才)进行交互,只在需要内核的协助时,才通过一套接口对内核发出调用请求。通过一套接口对内核发出调用请求。微内
32、核系统的优点是操作系统具有良好的灵活性。微内核系统的优点是操作系统具有良好的灵活性。微内核系统由于核心态只实现了最基本的系统操微内核系统由于核心态只实现了最基本的系统操作,这样内核以外的外部程序之间由于独立运行,作,这样内核以外的外部程序之间由于独立运行,程序代码之间相互隔离,使得系统难以进行良好程序代码之间相互隔离,使得系统难以进行良好的整体优化。的整体优化。微内核结构在效率上必然低于传统的单一内核结微内核结构在效率上必然低于传统的单一内核结构,这些效率损失将作为结构精简的代价。构,这些效率损失将作为结构精简的代价。30从总体上看,在当前的硬件条件下,微内核在效从总体上看,在当前的硬件条件下
33、,微内核在效率上的损失小于其在结构上获得的收益,故而选率上的损失小于其在结构上获得的收益,故而选取微内核成为操作系统的一大潮流。取微内核成为操作系统的一大潮流。Linux系统却恰恰使用了单一内核结构,但与传统系统却恰恰使用了单一内核结构,但与传统的单一内核的单一内核UNIX操作系统不同。操作系统不同。在在Linux中,可以动态装入和卸载内核中的部分代中,可以动态装入和卸载内核中的部分代码。码。Linux将这样代码段称为模块(将这样代码段称为模块(module),),并对模块给予了强有力的支持。在并对模块给予了强有力的支持。在Linux中,可以中,可以在需要时自动装入和卸载模块。在需要时自动装入
34、和卸载模块。31Linux并不支持用户态线程。并不支持用户态线程。线程是同时执行的共享资源的程序段,线程之间可以共线程是同时执行的共享资源的程序段,线程之间可以共享地址空间、物理内存页面,甚至打开的设备和文件。这样,享地址空间、物理内存页面,甚至打开的设备和文件。这样,在线程间切换要比在进程间切换的开销少,大量使用线程可在线程间切换要比在进程间切换的开销少,大量使用线程可以使系统的效率得到提高,从而,线程在现代操作系统中得以使系统的效率得到提高,从而,线程在现代操作系统中得到了广泛的应用。但到了广泛的应用。但Linux中线程的使用却很少见到,只是中线程的使用却很少见到,只是在内核态中定期执行某
35、个函数时才会用到线程的概念,这些在内核态中定期执行某个函数时才会用到线程的概念,这些内核态线程由于不具有上下文(内核态线程由于不具有上下文(Context),故而不能在用),故而不能在用户态使用。在用户态中,户态使用。在用户态中,Linux通过通过LWP(light weight thread)的机制来实现用户态线程的概念。)的机制来实现用户态线程的概念。Linux认为线程认为线程就是共享上下文(就是共享上下文(Context)的进程。通过系统调用)的进程。通过系统调用clone()来创建新的线程。()来创建新的线程。32Linux的内核为非抢占式的。的内核为非抢占式的。Linux并不能通过改
36、变优先权来影响内核当前并不能通过改变优先权来影响内核当前的执行流程。因此,的执行流程。因此,Linux在实现实时操作时就有在实现实时操作时就有问题。问题。Linux并不是一个并不是一个“硬硬”实时操作系统。实时操作系统。Linux从从2.0版起,其内核就对多处理器结构进行版起,其内核就对多处理器结构进行支持。支持。2.2版中对于对称多处理器(版中对于对称多处理器(SMP)进行了)进行了支持。这样,任意处理器可以执行任意程序。但支持。这样,任意处理器可以执行任意程序。但是,是,Linux中并没有针对中并没有针对SMP结构进行优化,虽然结构进行优化,虽然具有多个处理器,但所有内核代码还是顺序执行具
37、有多个处理器,但所有内核代码还是顺序执行的,不可能并发执行。的,不可能并发执行。33在在Linux内核中,包括了进程管理、定时器、内核中,包括了进程管理、定时器、中断管理、内存管理、模块管理、虚拟文件中断管理、内存管理、模块管理、虚拟文件系统接口、文件系统、设备驱动程序、进程系统接口、文件系统、设备驱动程序、进程间通信、网络管理、系统启动等操作系统功间通信、网络管理、系统启动等操作系统功能的实现。能的实现。34进程管理进程管理进程管理的重点是进程的执行。在内核中,进程管理的重点是进程的执行。在内核中,这些进程称为这些进程称为线程线程,代表了单独的处理器虚,代表了单独的处理器虚拟化(线程代码、数
38、据、堆栈和拟化(线程代码、数据、堆栈和 CPU 寄存寄存器)。在用户空间,通常使用器)。在用户空间,通常使用进程进程 这个术这个术语,不过语,不过 Linux 实现并没有区分这两个概实现并没有区分这两个概念(进程和线程)。念(进程和线程)。35 2.4 版调度器的特点:版调度器的特点:交互式作业优先交互式作业优先 轻载条件下调度轻载条件下调度/唤醒的高性能唤醒的高性能 公平共享公平共享 基于优先级调度基于优先级调度 高高 CPU 使用率使用率 SMP 高效亲和高效亲和 实时调度和实时调度和 cpu 绑定等调度手段绑定等调度手段 362.6 调度系统从设计之初就把开发重点放在更好满调度系统从设计
39、之初就把开发重点放在更好满足实时性和多处理机并行性上,并且基本实现了足实时性和多处理机并行性上,并且基本实现了设计目标。设计目标。新特性:新特性:O(1)调度算法,调度器开销恒定(与当前系统负载无调度算法,调度器开销恒定(与当前系统负载无关),实时性能更好关),实时性能更好 高可扩展性,锁粒度大幅度减小高可扩展性,锁粒度大幅度减小 新设计的新设计的 SMP 亲和方法亲和方法 优化计算密集型的批处理作业的调度优化计算密集型的批处理作业的调度 重载条件下调度器工作更平滑重载条件下调度器工作更平滑 子进程先于父进程运行等其他改进子进程先于父进程运行等其他改进 37内存管理内存管理内核所管理的另外一个
40、重要资源是内存。为内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬件管理虚拟内存,内了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的存是按照所谓的内存页内存页 方式进行管理的方式进行管理的(对于大部分体系结构来说都是(对于大部分体系结构来说都是 4KB)。)。Linux 包括了管理可用内存的方式,以及物包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制理和虚拟映射所使用的硬件机制38Linux 提供了对提供了对 4KB 缓冲区的抽象,例如缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用分配器。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪
41、缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动样就允许该模式根据系统需要来动 态调整态调整内存使用。内存使用。39虚拟文件系统虚拟文件系统虚拟文件系统(虚拟文件系统(VFS)为文件系统提供了一)为文件系统提供了一个通用的接口抽象。个通用的接口抽象。VFS 在在 SCI 和内核所和内核所支持的文件系统之间提供了一个交换层支持的文件系统之间提供了一个交换层.4041在在 VFS 上面,是对诸如上面,是对诸如 open、clos
42、e、read 和和 write 之类的函数的一个通用之类的函数的一个通用 API 抽象。在抽象。在 VFS 下面是文件系统抽象,它定下面是文件系统抽象,它定义了上层函数的实现方式。义了上层函数的实现方式。文件系统层之下是缓冲区缓存,它为文件系文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集。这个缓存层通统层提供了一个通用函数集。这个缓存层通过将数据保留一段时间从而优化了对物理设过将数据保留一段时间从而优化了对物理设备的访问。备的访问。42网络协议栈网络协议栈 Linux 操作系统的最大特性之一就是它的网操作系统的最大特性之一就是它的网络栈。它最初源于络栈。它最初源于 BSD 的网
43、络栈,具有一的网络栈,具有一套非常干净的接口,组织得非常好。其接口套非常干净的接口,组织得非常好。其接口范围从协议无关层(例如通用范围从协议无关层(例如通用 socket 层接层接口或设备层)到各种网络协议的具体层。口或设备层)到各种网络协议的具体层。4344最上面是用户空间层,或称为最上面是用户空间层,或称为应用层,其中,其中定义了网络栈的用户。定义了网络栈的用户。底部是底部是物理设备,提供了对网络的连接能力。,提供了对网络的连接能力。中间是中间是内核空间,即网络子系统。流经网络,即网络子系统。流经网络栈内部的是栈内部的是 socket 缓冲区缓冲区sk_buffs),它),它负责在源和汇点之间传递报文数据。负责在源和汇点之间传递报文数据。