《Linux内核设计与实现》知识整合与讲解-第一章
第一章主要对Linux的内核进行一个大致的介绍,让大家对Linux的内核有一个比较全面的印象。众所周知Linux起源于unix系统,它们之间有着千丝万缕的联系,伟大的linux之父linus不满于当时unix对于源码更改的限制,花费一学年的时间写出了内核雏形,并在91年年底在互联网上发布了Linux,虽然Linux与unix的内核有着几乎相同的接口,但是它们内核相同接口的实现在一般情况下却有着很大的区别。
这时候就有小伙伴就会发问:“操作系统到底是什么呢?操作系统的内核又是什么呢?”因此,我来详细的说明一下什么是操作系统。操作系统种类与实现的多样化使得他们很难有着一个准确的定义,在书中作者给出的定义如下:
-
操作系统:操作系统是指在整个系统中负责完成最基本功能和系统管理的那部分。主要包括下面几个部分:
-
内核:操作系统的核心成分,亦是本书的核心,我会在下面详细的介绍这个部分;
-
设备驱动程序:通俗来讲,设备驱动程序就是操作系统用来对硬件设备进行操作的接口,只有有了设备驱动程序某些硬件才能够正常运转;
-
启动引导程序:计算控制系统的一个初始化过程,可以形象的理解为开机过程;
-
命令行shell或者其他种类的用户界面:交互界面,使用户可以通过操作系统对计算机进行控制;
-
基本的文件管理工具和系统工具
-
当然,本书的主题是内核,用户界面等是计算机的外在表象,只有内核才是操作系统的内在核心。内核常常被称作是管理者,通常情况下一个内核有以下几部分组成:
-
内核:操作系统的核心部分;组成成分:
-
负责响应中断的中断服务程序
-
负责管理多个进程从而分享处理器时间的调度程序
-
负责管理进程地址空间的内存管理程序和网络
-
进程间通信
可能有些同学看到这么多木有见过的概念就蒙圈了,不用担心,这些都会在后面详细的讲述,现在只是给一个大致的轮廓而已。
-
内核如此的特殊,所以它独立于普通的应用程序,他一般处于系统态,拥有着受保护的内存空间和访问硬件设备的全部权限,这种系统态和被保护起来的内存空间我们将它统称为内核空间。相对应的,应用程序在用户空间执行,只可以看到允许被他们使用的部分的系统资源,并且只是使用某些特定的系统功能,不能访问硬件不能够访问划分给别人的内存空间。
了解了内核与普通应用程序的大致的概念之后,可能就会产生这样的疑惑:既然应用程序有着这么多的限制,怎么能够将计算机的功能发挥到极致呢?操作系统解决这个问题的方法是:虽然应用程序不能够直接进入应用程序来运行,但是它可以通过与内核通信的方式让内核代为执行自己需要的功能与获得自己需要的资源。我们将实现这一功能的过程称作系统调用。
一般情况下应用程序会选择调用库函数,再借由库函数来实现系统调用,但是对于某些比较复杂的库函数中系统调用只是这个函数实现过程中的一个简单步骤;拿一个大家都很熟悉的printf()函数来说,它提供了数据的缓存和格式化等的操作,而系统调用write()函数将数据写到控制台上只是一个其中的很重要的步骤罢了。应用程序执行一条系统调用我们说内核正在代其执行,此时内核称为运行在进程的上下文中,这种交互关系使应用程序完成其工作的基本方式。
内核还要负责管理系统的硬件设备,当硬件设备想和系统通信的时候,他首先要发出一个异步的中断信号,这个信号的作用是打断处理器的执行,每一个中断信号都对应着一个中断号,内核通过这个中断号找到相对应的中断服务程序,并调用这个程序相应和处理中断,对于绝大多数的操作系统来说,中断并不属于任何的进程,他被提取出来,单独的属于一个运行在内核态的程序中。
-
处理器在任何时间上只可能概括于下列三者之一:
-
运行于用户空间,执行用户进程;
-
运行于内核空间,处于进程上下文,代表某个特定进程的运行;
-
运行于内核空间,处理中断上下文,与任何进程无关,处于某个特定的中断;
-
Unix与Linux同宗同源有着近乎一样的API接口,Unix内核是一个巨大且静态的可执行库,故它必须要以静态的单独的可执行的形式在一个单独的地址空间中运行,这样显然是笨重的,因此Unix内核需要硬件提供一种页机制(MMU)来管理里内存,本书中我们重点关注支持MMU的Linux系统。
操作系统的内核主要可以分成两大部分:单内核与微内核:
-
单内核:单内核与微内核相比是一种较为简单的设计,在早期所有的内核都设计为单内核,所谓单内核就是将其当作一个整体的大过程来实现,常作为一个单个的二进制文件存储在硬盘中,所有的内核服务都是在这样的一个大内核地址空间上运行,服务之间的通信是微不足道的,性能比较高;
-
微内核:微内核的功能被划分成多个独立的过程,每一个过程都叫一个服务器,只有强烈请求特权服务的服务器运行在特权模式下,其他服务器运行在用户空间,由于不同服务的分散它们不能像单内核直接调用,而是依靠进程间的通信(IPC)机制,如此互换信息互换服务,增强了系统的稳定性;