Linux内核简介

Linux内核简介

1.1 Unix的历史

没有交互式操作系统可用,所以贝尔实验室程序员们设计了一个文件系统原型,最终演化为Unix。Unix设计简洁并且在发布时提供源代码,所以许多组织都对他进行下一步开发,1BSD—2BSD—3BSD—4BSD。演化实现了任务管理、换页机制、TCP/IP等特性,最终伯克利大学重写了虚拟内存子系统VM,推出了我们熟知的4.4BSD。
Unix特点:简洁,仅提供几百个系统调用并且有非常明确的设计目的;所有的东西都可以被当作文件对待(Sockets例外),使对数据和对设备的操作是通过同一套系统调用接口来进行的(open()、read()、write()、lseek()、close());内核和相关系统工具使用C语言编写,使之在各种硬件体系架构面前都具备超高移植能力;进程创建非常迅速,有一个独特的fork()调用;提供一套简单且稳定的进程间原语。策略与机制分离的设计理念,使之具有清晰的层次化结构(快速创建进程使Unix程序目标为一次执行保质保量完成一个任务,简单稳定进程间通信方式保证这些目的简单的程序方便的组合在一起)。
Unix是一个支持抢占式多任务、多线程、虚拟内存、换页、动态链接和TCP/IP网络的现代化操作系统。

1.2追寻Linux足迹:Linux简介

起源于大学生Linux不能修改和发布Unix源代码,也不能对开发者所做的设计轻举妄动,所以决定开发自己的操作系统。成功原因主要是,由于其许可证条款的约定,Linux迅速成为多人合作开发项目。
Linux是类Unix系统,但不是Unix。它借鉴了许多Unix设计并且实现了Unix的API(应用编程接口),但是没有直接使用Unix源代码。Linux是一个非商业化的产品,任何人都可以开发内核,内核是自由公开软件,你可以自由获取内核代码并且修改它,但是如果你希望发布你修改的内核,你得保证得到你内核的人享受你曾经享受的所有权利,包括源码。
Linux系统的基础是内核、C库、工具集和系统基本工具(如登陆程序和Shell)。

1.3操作系统和内核简介

操作系统是指在整个系统中负责完成最基本功能和系统管理的部分,包括内核、设备驱动程序、启动引导程序、命令行Shell或者其他种类的用户界面、基本文件管理工具和系统工具。系统这个词其实包含了操作系统和所有运行在他之上的应用程序。
系统其他部分必须依靠内核这部分软件提供的服务,比如管理硬件系统、分配系统资源。
内核(管理者、操作系统核心)组成部分
中断服务程序(负责响应中断)、调度程序(负责管理多个进程分享处理器时间)、内存管理程序(负责管理进程地址空间)、系统服务程序(进程间通信)。
内核独立于普通应用程序,一般处于系统态,拥有被保护的内存空间和访问硬件设备的所有权限,称为内核空间(相对于用户空间)。当内核运行时,系统进入内核空间执行,执行一个普通程序的时候,系统以用户态进入用户空间。
应用程序通过系统调用与内核通信。 通常通过库函数(如C库函数)进入系统调用界面。
但是对于一些库函数来说,调用内核只是它工作的一个步骤。例如printf()提供数据的缓存和格式化,而调用write()函数将数据写到控制台只是其中一个动作。也有一些库函数和系统调用一一对应,例如open(),除了调用open()系统调用之外几乎什么也不做。还有一些,比如strcpy()不需要直接调用系统级操作。当应用程序进行系统调用时,我们称为内核正在代其运行,或者说应用程序通过系统调用在内核空间运行,而内核被称为运行在上下文中。这种程序通过系统调用陷入内核的交互关系是其完成工作的基本行为方式。
内核负责管理系统的硬件设备。中断机制:硬件设备与系统通信前,先发出一个异步中断信号打算处理器执行,继而打算内核执行。对应一个中断号,内核通过中断号找到相应的中断服务程序,调用该程序响应处理中断。为了保证同步,内核可以停用中止(既可以停止所有中断也可以停止某个中断号对应的中断)。为了保证中断服务程序可以第一时间响应和处理中断请求,然后快速退出,中断服务程序不在进程上下文中执行,在一个与进程无关的、专门的中断上下文中运行。
处理器在任何时间必定处于三者之一
运行于用户空间,执行用户进程;
运行于内核空间,处于进程上下文,代表某个特定程序执行;
运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。
例如,当CPU空闲时,内核运行一个空进程,处于进程上下文,运行于内核空间。

1.4Linux内核和传统Unix内核比较

所有Unix都提供相同的API,Unix内核几乎都是一个不可分割的静态可执行库,也就是说,必须以巨大、单独的可执行块的形式在一个单独的地址空间中运行。Unix内核通常需要硬件系统提供页机制MMU以管理内存,MMU可以加强对内存的保护,保证每个进程可以运行在不同的虚地址空间上。Linux不依赖于MMU,不过目前嵌入式系统都开始具备内存管理单元这种高级功能了。
单内核于微内核设计之比较
单内核较为简单,把它从整体上作为一个单独的大过程来实现,运行在单独的地址空间上。通常以单个静态二进制文件的形式存放于磁盘中,所有的内核服务都在这样一个大内核地址空间上运行。内核可以直接调用函数,和用户空间的应用程序没什么区别。简单,性能高。
微内核的功能被划分为多个独立的过程,每个过程叫一个服务器。只有特权服务器运行在特权模式下,其他服务器运行在用户空间。所有服务器保持独立并运行在自己的地址空间。不能像单内核那样直接调用函数,需要通过消息传递处理微内核通信:采用进程间通信机制IPC,各个服务器通过IPC机制通信,互换服务。有效的避免了一个服务器失效祸及另一个。
因为IPC机制开销多于函数调用,并且涉及用户空间和内核空间上下文切换,所以消息传递需要一定时间。结果所有实际应用微内核的系统都让大部分或全部服务器位于内核,这样可以直接调用函数,消除频繁上下文切换,这违背了微内核设计的初衷。
Linux是一个单内核,但是汲取了微内核精华:模块化设计、抢占式内核、支持内核线程以及动态内核模块的能力。但是所有事情都运行在内核态,直接调用函数,无需消息传递。
Linux和Unix显著差异:
Linux支持动态加载内核模块,尽管单内核,但是允许动态卸除和加载部分代码;
Linux支持对称多处理SMP机制;
Linux可以抢占,允许在内核运行的任务优先执行;
Linux对于线程支持的实现很有意思:内核并不区分和线程和其他一般进程;
Linux提供具备设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统sysfs;
Linux很自由,任何改变都要能通过简洁的设计、正确可靠的实现来解决现实中确实存在问题。

1.5Linux内核版本

稳定的和开发中的,通过命名机制来区分。2.6.26.1,主版本号.从版本号.修订版本号.稳定版本号。从版本号偶数则为稳定版,奇数则为开发版。

1.6Linux开发者社区

论坛:linux kernel mailing list(lkml)
可以在http://vegr.kernel.org上订阅邮件

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值