《Linux内核设计与实现》知识整合与讲解-第一章

时间:2021-06-15 17:42:16   收藏:0   阅读:0

Linux内核简介

第一章主要对Linux的内核进行一个大致的介绍,让大家对Linux的内核有一个比较全面的印象。众所周知Linux起源于unix系统,它们之间有着千丝万缕的联系,伟大的linux之父linus不满于当时unix对于源码更改的限制,花费一学年的时间写出了内核雏形,并在91年年底在互联网上发布了Linux,虽然Linux与unix的内核有着几乎相同的接口,但是它们内核相同接口的实现在一般情况下却有着很大的区别。

这时候就有小伙伴就会发问:“操作系统到底是什么呢?操作系统的内核又是什么呢?”因此,我来详细的说明一下什么是操作系统。操作系统种类与实现的多样化使得他们很难有着一个准确的定义,在书中作者给出的定义如下:

当然,本书的主题是内核,用户界面等是计算机的外在表象,只有内核才是操作系统的内在核心。内核常常被称作是管理者,通常情况下一个内核有以下几部分组成:

内核如此的特殊,所以它独立于普通的应用程序,他一般处于系统态,拥有着受保护的内存空间和访问硬件设备的全部权限,这种系统态和被保护起来的内存空间我们将它统称为内核空间。相对应的,应用程序在用户空间执行,只可以看到允许被他们使用的部分的系统资源,并且只是使用某些特定的系统功能,不能访问硬件不能够访问划分给别人的内存空间。

了解了内核与普通应用程序的大致的概念之后,可能就会产生这样的疑惑:既然应用程序有着这么多的限制,怎么能够将计算机的功能发挥到极致呢?操作系统解决这个问题的方法是:虽然应用程序不能够直接进入应用程序来运行,但是它可以通过与内核通信的方式让内核代为执行自己需要的功能与获得自己需要的资源。我们将实现这一功能的过程称作系统调用。

一般情况下应用程序会选择调用库函数,再借由库函数来实现系统调用,但是对于某些比较复杂的库函数中系统调用只是这个函数实现过程中的一个简单步骤;拿一个大家都很熟悉的printf()函数来说,它提供了数据的缓存和格式化等的操作,而系统调用write()函数将数据写到控制台上只是一个其中的很重要的步骤罢了。应用程序执行一条系统调用我们说内核正在代其执行,此时内核称为运行在进程的上下文中,这种交互关系使应用程序完成其工作的基本方式。

内核还要负责管理系统的硬件设备,当硬件设备想和系统通信的时候,他首先要发出一个异步的中断信号,这个信号的作用是打断处理器的执行,每一个中断信号都对应着一个中断号,内核通过这个中断号找到相对应的中断服务程序,并调用这个程序相应和处理中断,对于绝大多数的操作系统来说,中断并不属于任何的进程,他被提取出来,单独的属于一个运行在内核态的程序中。

Unix与Linux同宗同源有着近乎一样的API接口,Unix内核是一个巨大且静态的可执行库,故它必须要以静态的单独的可执行的形式在一个单独的地址空间中运行,这样显然是笨重的,因此Unix内核需要硬件提供一种页机制(MMU)来管理里内存,本书中我们重点关注支持MMU的Linux系统。

操作系统的内核主要可以分成两大部分:单内核与微内核:

 

但是Linux却是单内核的,它的内核运行在单独的内存空间地址上,但是它吸取了微内核的精华,实现了模块化设计,抢占式内核,支持内核线程以及动态加载内核模块的设计。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!