概述
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/
- 如何向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。
最后
以上就是乐观白昼为你收集整理的Linux内核设计与实现 第一章 Linux内核简介1.1Unix的历史1.2追寻Linus足迹:Linux简介1.3操作系统和内核简介1.4Linux内核与传统Unix内核的比较1.5Linux内核版本1.6Linux内核开发者社区的全部内容,希望文章能够帮你解决Linux内核设计与实现 第一章 Linux内核简介1.1Unix的历史1.2追寻Linus足迹:Linux简介1.3操作系统和内核简介1.4Linux内核与传统Unix内核的比较1.5Linux内核版本1.6Linux内核开发者社区所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复