Linux内核设计与实现 第一章 Linux内核简介

1.1Unix的历史

1969,贝尔实验室的程序员Dennis Ritchie 和Ken Thompsin等,编写Multics失败,不甘心没有交互式操作系统,设计了一个文件系统原型,这个原型最终演化成了Unix。
Unix系统设计简洁,发布时提供源代码,用C语言整个重写了(移植性强),所以很多组织团体尝试开发它。其中,加州大学伯克利分校就开发的很成功。

Unix强大的根本原因是它有一下特点:
1)简洁:系统调用少
2)Unix中,所有的东西都被当做文件对待
3)移植能力:Unix的内核和相关的系统工具是用C语言编写的
4)策略和机制分离的设计理念:此理念就需要a)进程创建简洁;b)进程间通信机制简单稳定。如此各个单一目的的程序片段组合简单,分工协作就会使系统有清晰的层次化结构。
大多数编程问题实际上都可以分成两部分:“需要提供什么功能”(机制)和“如何使用这些功能”(策略)
解决问题的方法是将调度机制(scheduling mechanism)与调度策略(scheduling policy)分离,也就是将调度算法以某种形式参数化,而参数可以由用户进程填写。看一下数据库的例子。假设内核使用优先级调度算法,但提供一条可供进程设置(并改变)优先级的系统调用。这样,尽管父进程本身并不参与调度,但它可以控制如何调度子进程的细节。在这里,调度机制位于内核,而调度策略则由用户进程决定。

1.2追寻Linus足迹:Linux简介

1991,芬兰学生Linus,因为不能对Minix乱改,所以自己开发了使用Inter 80386微处理器的不成熟的但五脏俱全的Unix,发布到Internet,linux从此扬帆起航。
Linux是类Unix系统,但它不是unix。没有使用unix的源码,但借鉴了unix很多,不同之处也很多
linux是非商业化的产品且用途广泛
Linux的自由大致是你可以随意更改,但是随意更改后要发布改过的版本,必须允许别人随意更改

1.3操作系统和内核简介

操作系统是指在整个系统中负责完成最基本功能和系统管理的那一部分。
系统这个词其实包含了操作系统和所有运行在它之上的应用程序。
用户界面是操作系统的外在表象,内核才是操作系统的内在核心。
通常一个内核由负责响应中断的中断服务程序,负责管理多进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网路、进程间通信等系统服务程序组成。
保护机制:内核空间,用户空间。
应用程序完成工作的基本方式是通过系统调用界面陷入内核:在系统中运行的应用程序通过系统调用来与内核通信,应用程序通常调用库函数,再由库函数通过系统调用界面,让内核代其完成不同任务。

上下文:

角度一:
处理器总处于以下状态中的一种:
1、内核态,运行于进程上下文,内核代表进程运行于内核空间;
2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;
3、用户态,运行于用户空间。
1)进程上下文:当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去。在LINUX中,当前进程上下文均保存在进程的任务数据结构中。例如执行系统调用或运行内核线程。
2)中断上下文:硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。

角度二:
1)进程上下文中:进程上下文是一种内核所处的操作模式,此时内核代表当前进程执行。所以进程上下文中是指内核代表当前进程执行中
2)中断上下文中:中断上下文是一种内核所处的操作模式,此时内核抢占当前进程执行。所以中断上下文中是指内核抢占当前进程执行中
进程上下文是内核代表当前进程执行,内核代替之前执行的进程执行,做的事还是之前进程要做的,睡眠以后一定有进程继续做同样的事,正常就会在将事情推进到某处时,唤醒。
中断上下文是内核抢占当前进程执行,内核抢占后做的事与之前执行的进程和它的伙伴进程做的事肯定不一样。所以如果内核抢占当前进程执行中睡了,是没进程唤醒的。
因此,不能从中断上下文中调用某些会引起睡眠的函数。

1.4Linux内核与传统Unix内核的比较

1.5Linux内核版本

在这里插入图片描述

内核开发大致阶段:众多开发者尝试往Linux加入一些新的特性->确定加入哪些特性,不再接受新的特性->众多开发者对实现新特性的代码加入自己发现的BUG->发布稳定

1.6Linux内核开发者社区在这里插入图片描述

LWN.net对Linux内核开发的报道是详细,技术性和及时性的。也许你应该阅读“Kernel coverage at LWN.net”在网址:http://lwn.net/Kernel/.

更多GNU软件和linux关系的讨论可以在http://www.gnu.org/gnu/linux-and-gnu.html获取

vger是发布LKML服务机器的名字。服务器同样存放了大量其他linux相关邮箱。更多的信息可以在下面的网页找到:http://vger.kernel.org/

  1. 如何向linux-内核邮件列表注册?
    答:订阅前请仔细考虑。你是否希望邮箱里面出现很多的邮件?你是否那么关心linux内核开发期待每周更新一次内核,忍受bug,错误和系统崩溃的时间和精力的浪费?你是否准备好加入伟大的企鹅,并被人称为怪胎?
    好了,如果你仍然期待加入,发送 “subscribe linux-kernel your_email@your_ISP” 到majordomo@vger.kernel.org (注意,不要包含双引号字符,当然替换你自己的邮箱地址)。你将会完成订阅。我经常看到如下的报告:
    FAILED:
    : …
    <<- RCPT To:edmond@cedar-republic.com
    ->> 550 edmond@cedar-republic.com… we do not relay

反馈这个问题到网址: http://vger.kernel.org/mxverify.html。
确认你没有上述问题!详见: http://vger.kernel.org/majordomo-info.html。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值