Chinaunix

标题: 大话Unix/Linux内核 [打印本页]

作者: lsstarboy    时间: 2015-08-03 11:36
标题: 大话Unix/Linux内核
获奖详情:http://bbs.chinaunix.net/thread-4187690-1-1.html
话题背景
      内核是一个操作系统的基本部分,负责整个系统的设备驱动、进程管理、存储管理、文件系统、输入/输出等核心工作,同时也是一个操作系统中最为复杂的部分。内核涉及到计算机系统的方方面面,已经不仅仅是软件系统的研究范围,内核的很多地方跟硬件是紧密相联的。

      现在国家大力提倡操作系统国产化,而操作系统国产化中最关键的部分就是内核的国产化,内核的国产化不是一个简单的工作,因为操作系统已经发展了几十年,已经有事实的标准和流程,不论你怎么样发展,都必须把这几十年的功课补上。另一方面,硬件水平又是我国的另一个短板。
但国产化中也有可喜的一面:很多人都投入到Unix/Linux内核的研究中,并且已经取得了非常好的成果,也出了不少这方面的专著,有了这些经验,相信在各方面的努力下,在不久的将来,国产的内核也一定能实现。



讨论话题:(包括但不限于)
1、分享一下你对内核的理解。
2、你编译过内核吗?为什么要重新编译内核?
3、怎样看待不同类别内核(单内核、双内核、微内核等)的优缺点?
4、分享一个你读/修改内核源代码的经历。
5、如果让你自己设计一个内核,你认为内核中最难或最重要的部分是哪个?



讨论时间:2015年8月4日-2015年9月4日



活动奖励:
活动结束后将选取4名讨论精彩的童鞋,每人赠送一本《深入理解UNIX系统内核》作为奖励。



奖品简介:

作者:(美)瓦哈利亚(Uresh Vahalia)著
译者:李雨,薛磊,黄庆新译
出版社: 机械工业出版社发行室
ISBN:9787111491453
版次:1
上架时间:2015-05-30 00:30:44
商品编码:1581901360
出版时间:2015-05-01



内容简介:
      这个世界上,UNIX的种类比大多数品牌冰淇淋的口味还要多。尽管整个行业推动了X/Open及其成员的发展,但是单一UNIX规范与当初宣称的目标渐行渐远。事实上,这个目标可能并不是那么重要,因为自从Interactive System提供了第一个商业版UNIX系统、Whitesmiths提供了第一个UNIX克隆之后,用户社区就一直在面对各种平台上的不同实现。
      UNIX在1969年问世,还未满10岁时,各种版本就开始泛滥了。在UNIX 20岁之前,形成了两个阵营:自由软件基金会(Open Software Foundation)和UNIX国际联盟(UNIX International),以及大量的其他版本。技术上的两个主要流派分别为AT&T(现为Novell)和加州大学伯克利分校。Maurice Bach [Bach 86]、Sam Leffler、Kirk McKusick、Mike Karels和John Quarterman [Leff 89]对这些UNIX进行了很好的介绍。
      然而,没有一本书可以提供关于各种UNIX操作系统实现的总览式介绍,而本书作者Uresh Vahalia填补了这个空白。他对SVR4、4.4BSD和Mach技术内幕的阐述是前所未有的,书中甚至还呈现了对Solaris、SunOS、Digital UNIX和HP-UX的详尽探讨。
      他的讲解非常清晰,而且不像其他某些作者那样对某种UNIX有所偏爱。最近,像Linux这种相对较新的UNIX克隆还在不断衍生新的UNIX变种,甚至伯克利UNIX的衍生版本也开始了新的分裂,像这样一本揭示UNIX内部技术并以推动UNIX发展为动机的著作,正是生逢其时。
      1972年6月,Ken Thompson和Denis Ritchie出版了《UNIX Programmer抯 Manual》第2版。两位作者在这本书的引言中提到:“UNIX的安装数量增长到了10个,已经超出预期。”恐怕他们根本没有预料到现在所发生的情况。我曾经在别的地方看到过对UNIX系统历史的介绍[Salu94],但是Vahalia在本书中对各种UNIX进行了真正独特和全面的对比剖析。



样章试读:
http://wenku.it168.com/d_001635432.shtml

作者: sleepcat    时间: 2015-08-03 17:46
呵呵,至今珍藏着这本的英文版。
作者: Godbach    时间: 2015-08-03 18:01
回复 1# lsstarboy

最近各种活动啊,支持一下。


   
作者: lsstarboy    时间: 2015-08-03 21:59
回复 3# Godbach


老大多提意见哈,我只是打个酱油,来活跃一下坛子的气氛,没有一点底气,具体内容还要靠你们多支持。   
作者: shenlanyouyu    时间: 2015-08-03 23:53
内核只玩了Linux肿么破
作者: heguangwu    时间: 2015-08-04 09:56
1、分享一下你对内核的理解。
内核就是对硬件资源管理和抽象对外提供更高级的API,同时调度用户应用程序使用这些硬件资源

2、你编译过内核吗?为什么要重新编译内核?
做嵌入式系统的时候编译过内核,原因其实主要是裁剪和加驱动(驱动其实可以不编译内核)

3、怎样看待不同类别内核(单内核、双内核、微内核等)的优缺点?
说句实话没听说过单内核双内核的概念,之前看过的是微内核和宏内核,linux就是一种宏内核,宏内核就是OS一插到底,而微内核是内核只负责调度转发,打个比方,文件系统在宏内核是直接在内核里,而微内核文件系统是在内核外,用户对文件系统的调用在宏内核里是用用户态到内核,然后由内核一直到磁盘都是内核在一层层的调用,而微内核是用户的文件系统请求发送给内核,内核将该请求转发给文件系统模块(非内核模块),然后再将文件系统的响应转发给用户。从这样看宏内核便于调试和实现但难扩展,而微内核便于扩展但调试困难

4、分享一个你读/修改内核源代码的经历。
只改过驱动,内核代码不敢碰,没这种能力

5、如果让你自己设计一个内核,你认为内核中最难或最重要的部分是哪个?
个人认为调度是最做的
作者: zymh_zy    时间: 2015-08-04 11:22
内核底层代码都是用英语来表述。那国产内核是否继续以英文作表述,还是用中文来作表述呢?这是一个值得思考的问题。。
作者: lsstarboy    时间: 2015-08-04 12:03
回复 7# zymh_zy

说实话,拼音很多时候还真不如英文好懂。

汉字临时就免了吧,看起来比英文累多了。
   
作者: wenhq    时间: 2015-08-04 13:36
1、分享一下你对内核的理解。
内核包含模块,它是Linux内核向外部提供的一个插口称为动态可加载内核模块(Loadable Kernel Module,LKM。因内核里执行的代码效率高,但究于内核可扩展性和可维护性相对较差,因此用内核来弥补其不足。
模块编程可以叫做内核编程,但因内核版本的变化导致某些函数不断变化。这样内核编程和内核的关联性就更加紧凑了。
2、你编译过内核吗?为什么要重新编译内核?
编译过内核,因项目需要修改过内核的某些模块。
3、怎样看待不同类别内核(单内核、双内核、微内核等)的优缺点?
微内核长处:
1.在不影响系统其他部分的情况下,将会更加容易地通过更高效的实现代替现有文档系统模块的工作,甚至能够在系统运行时将研发出的新系统模块或需要替换现有模块的模块直接而且迅速的加入系统。
2.另一个长处是无需的模块将不会被加载到内存中,因此微内核就能够更有效的利用内存。
单内核长处:
单内核的开销会少一些,运行效率会高一些
4、分享一个你读/修改内核源代码的经历。
我读的内核代码就是关于应用程序配置不当,导致cpu不断的soft lockup。进而crash。
5、如果让你自己设计一个内核,你认为内核中最难或最重要的部分是哪个?
最难的部分还是如何划分代码的层次。如何找到一个核心点,基于核心点做扩展。
作者: dengbao2001    时间: 2015-08-04 14:38
友情支持,路过
作者: 蛮多肉    时间: 2015-08-04 16:51
支持楼主


作者: lgplgplgplgplgp    时间: 2015-08-04 20:57
正打算看呢,03年的英文版
作者: jeffreyst    时间: 2015-08-04 21:33
1、分享一下你对内核的理解。
      个人觉得站在不同角度对内核的理解会稍有不同,但是都从某个侧面反映出了内核的作用:
      对于上层应用来说,内核实现各种服务的支持;对于PC物理硬件来说,内核就是大管家;
      对于C语言来说,可能是C语言编程的巅峰之作;对于我这个门外汉来说,内核就是一个非常好的学习系统编程及系统原理的平台;等等.
2、你编译过内核吗?为什么要重新编译内核?
      编译过,一是项目需要,二是自己瞎折腾,光看书感觉效果不太好。
3、怎样看待不同类别内核(单内核、双内核、微内核等)的优缺点?
     对这个理解不好,需要多读点书了,呵呵
     但是外内核在嵌入式领域应用应该会比较广泛些吧。
4、分享一个你读/修改内核源代码的经历。
      内核源码倒是改过,最多的地方应该就是协议栈了,抛开技术不说,
      就是一个和应用编程最大的区别,内核编程时要站在系统的角度,这是拥有最高的权限,
      需要谨慎,谨慎,再谨慎!!
5、如果让你自己设计一个内核,你认为内核中最难或最重要的部分是哪个?
      个人认为最重要的部分应该是文件系统,在系统角度说,文件是根本,在用户角度说,文件也是最重要的,系统只是个工具。
      最难的我觉得是内存管理这部分,N多资源进进出出,你来我往,内存管理的效率很大程度上影响着系统的性能...

以上仅仅是在下个人理解,纯属抛砖引玉,如果差的离谱的地方,还请大牛指正,非常感谢!!
作者: to407    时间: 2015-08-04 23:23
这本书 历史太悠久了。。。
作者: gvim    时间: 2015-08-04 23:49
好活动,支持一下!书很经典。
作者: jeffreyst    时间: 2015-08-05 19:21
讨论不激烈呀
作者: ccjsj1    时间: 2015-08-06 01:51
1、分享一下你对内核的理解。
        内核是用汇编和c语言实现的;
        内核连接物理硬件和上层应用的桥梁,应用使用硬件时,只能通过内核来完成;

2、你编译过内核吗?为什么要重新编译内核?
        编译过;
        做嵌入式系统的时候裁剪内核;

3、怎样看待不同类别内核(单内核、双内核、微内核等)的优缺点?
        只听说过大内核和微大内核,大内核是将功能都在内核中实现,如linux系统,优点是快,内核启用后,所有功能都能用,缺点是越来越臃肿,体积越来越大,扩展不方便;而微内核是将功能调用外部模块实现,如windows系统,有点事但小巧灵活,更容易扩展,缺点是慢一些,需要时调用外部模块实现功能;

4、分享一个你读/修改内核源代码的经历。
        修改网卡驱动时改错了,导致系统识别网卡;

5、如果让你自己设计一个内核,你认为内核中最难或最重要的部分是哪个?
        个人认为内存管理度是最重要的,因内存会直接影响系统的性能;
作者: cryboy2001    时间: 2015-08-06 08:33
支持活动!!
作者: lyhabc    时间: 2015-08-06 21:42
又见kernel   
作者: hiyachen    时间: 2015-08-06 23:55
本帖最后由 hiyachen 于 2015-08-06 23:58 编辑

1、分享一下你对内核的理解。

     是操作系统的基础·和·共同心脏·。
     个人觉得站在不同角度对内核的理解会稍有不同,但是都从某个侧面反映出了内核的作用:
      对于上层应用来说,内核实现各种服务的支持;对于PC物理硬件来说,内核就是大管家;
      对于C语言来说,可能是C语言编程的巅峰之作;对于我这个门外汉来说,内核就是一个非常好的学习系统编程及系统原理的平台;等等.
      是操作系统的基础·和·共同心脏·。

2、你编译过内核吗?为什么要重新编译内核?
      编译过,一是项目需要,二是自己学习,光看书感觉效果不太好。

3、怎样看待不同类别内核(单内核、双内核、微内核等)的优缺点?
     对这个理解不好,需要多读点书了,呵呵
     但是外内核在嵌入式领域应用应该会比较广泛些吧。

4、分享一个你读/修改内核源代码的经历。
      内核源码倒是改过,最多的地方应该就是协议栈了,抛开技术不说,
      就是一个和应用编程最大的区别,内核编程时要站在系统的角度,这是拥有最高的权限,
     

5、如果让你自己设计一个内核,你认为内核中最难或最重要的部分是哪个?
      个人认为最重要的部分应该是文件系统,在系统角度说,文件是根本,在用户角度说,文件也是最重要的,系统只是个工具。
      最难的我觉得是内存管理这部分,N多资源进进出出,你来我往,内存管理的效率很大程度上影响着系统的性能...

作者: tuyajie    时间: 2015-08-07 00:04
最想学的东西,没人带,自己搞好困难啊。
作者: CUTianrui007    时间: 2015-08-08 14:01
1、分享一下你对内核的理解。
内核是OS最核心的内容,也是最有技术价值的内容,它直接决定了一个OS性能和品位。
不管OS是大是小,内核都是必须要认真对待的。另外,内核设计可以说是系统设计的最高级
形式,也是OS设计的精华。它能集中体现一个人编程素质和设计能力,对编程技巧和架构能力
有着双重要求。


2、你编译过内核吗?为什么要重新编译内核?
以前尝试过自己下载源代码编译Linux内核,但是那配置步骤太复杂了,被吓到了,没有坚持下来。
自己编译内核只是为了玩,为了学习Linux知识,绝知此事要躬行啊。


3、怎样看待不同类别内核(单内核、双内核、微内核等)的优缺点?
其实内核的概念很类似于RISC和CISC一样,各有长短,真正的OS内核应该取长补短。现在的X86处理器不也是
兼容了RISC和CISC吗。现在Linux内核是单一的,但不是纯粹的单一,还是吸收了部分微内核的思想的。
单内核是指内核功能相对大而全,提供调度,文件系统,网络,设备驱动,存储管理等,
能实现的内容基本都在内核中实现。微内核正好相反,只包含一些必要的功能,比如调度,通信,设备驱动等,
像文件系统,存储管理等非核心功能都放到内核以外来实现。
双内核这个概念可能是二者兼而有之。
单内核共用一个地址空间,比较容易实现,是早期的OS普遍采用的一个实现方式,技术难度不大,缺点就是
单内核加载速度慢,各个内核模块间相关性强,不易于添加新功能。
微内核则只包含必要内容,其它的功能都作为模块动态添加,优点是大大的,你可以根据自己需要动态添加
或卸载模块,内核启动速度快,也便于移植,缺点,模块间消息传递引起开销。

4、分享一个你读/修改内核源代码的经历。
修改得不多,也就是比着《Linux边干边学》添加系统应用,
然后修改时钟Tick,再编译看看系统怎样反应。
读得比较多,只是兴趣爱好,读了就忘记了,有时间再读,乐此不彼。


5、如果让你自己设计一个内核,你认为内核中最难或最重要的部分是哪个?
内核中最难的我觉得应该是两个方面:
A:内核调度算法及实时性要求
B:内核提供什么机制

内核调度算法可以说中内核的内核,它直接对内核进行了性能定位,也直接决定了内核的使用场景。比如武器系统
中和手机的内核调度算法显然是不同的,因为其要求不同。
内核提供的机制直接决定了这个内核能为应用提供什么样的功能,它决定了内核的外延功能,是内核实用化的第一步。
同时,内核提供的机制也对内核的设计提出了特定要求。

作者: shenlanyouyu    时间: 2015-08-09 12:23
1、分享一下你对内核的理解。
我对内核的理解:内核不是一个完整的操作系统,它操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。这正是Linux kernel和Linux发行版的区别,Ubuntu、Readhat、Suse、Debian等Linux发行版是操作系统,它们都是基于Linux kernel。

2、你编译过内核吗?为什么要重新编译内核?
编译过Linux内核。编译内核的原因:做嵌入式开发,需要在内核中添加新的设备驱动程序,这些驱动程序都是添加到内核driver目录中,然后编译到内核image中。

3、怎样看待不同类别内核(单内核、双内核、微内核等)的优缺点?
我也是第一次知道单内核和双内核,看到后百度了一下,学习了。
我只了解微内核和宏内核,微内核的目标是将系统服务的实现和系统的基本操作规则分离开来。微内核只提供了很小一部分的硬件抽象,大部分功能由一种特殊的用户态程序:服务器来完成。Minix就是个微内核,Linux就是宏内核,内核代码中包含大量驱动程序,Linus就微内核和宏内核和Tanenbaum有一次论战。

4、分享一个你读/修改内核源代码的经历。
(1) 读内核源码
研究Linux内核的USB子系统,从USB设备插入系统中,被HUB driver识别,如何一步步添加到系统中,并和对应的driver 绑定到一起的过程。在分析的过程中,分析了Linux驱动子系统和sys文件系统。
(2) 修改内核代码
将Linux kernel中的通用USB蓝牙设备驱动修改来适配特定的蓝牙芯片,方法是现阅读源代码,搞懂driver的设计思想,然后添加firmware download机制,芯片reset。

5、如果让你自己设计一个内核,你认为内核中最难或最重要的部分是哪个?
我认为内核设计最难的部分是内存管理系统,内存是系统中最紧缺的资源,程序的执行都加载到内存中,内存管理系统设计好坏影响到系统性能。

作者: void_main    时间: 2015-08-10 10:21
想了解一下这方面的知识,希望有更多的大牛加入讨论
作者: wsysx    时间: 2015-08-13 08:17
1、分享一下你对内核的理解。
内核就是对硬件资源进行管理,并抽象出一系列系统调用供上层调用,是操作系统实现各种功能的必要基石。

2、你编译过内核吗?为什么要重新编译内核?
刚上班的几个月都在编译内核,当时是为了部署xen,要使用更适合的内核版本。

3、怎样看待不同类别内核(单内核、双内核、微内核等)的优缺点?
这个了解的不多,只知道基本都是和速度、体积、可扩展性相关的一下争论。

4、分享一个你读/修改内核源代码的经历。
改过一点xen内核,对整体的理解不够,改完了总会引起各种各样的问题。
概况起来就还是能力没达到可以改内核级的水平。

5、如果让你自己设计一个内核,你认为内核中最难或最重要的部分是哪个?
个人认为最重要的是文件系统,尤其对于linux这种一切皆文件的os,对文件的管理是核心。
最难的是内存管理,管理的不好会直接影响性能。
作者: nswcfd    时间: 2015-08-19 15:22
请教一下这本书的英文名是啥,Unix Internals - the new ????, 图片看不太清楚……
作者: Damenly_Su    时间: 2015-08-20 17:20
哪位有这本书的英文版闲置吗?
作者: sleepcat    时间: 2015-08-22 14:32
nswcfd 发表于 2015-08-19 15:22
请教一下这本书的英文名是啥,Unix Internals - the new ????, 图片看不太清楚……



作者: nswcfd    时间: 2015-08-26 13:06
本帖最后由 nswcfd 于 2015-08-26 13:07 编辑

回复 28# sleepcat
多谢!

很有意思的封面 :)
作者: chj90220    时间: 2015-08-28 16:44
日常工作喜欢用linux,命令行秀的飞起。支持一下!!!!
作者: sheepbao    时间: 2015-08-29 12:21
首先支持活动

1、分享一下你对内核的理解。
      我还在学内核,所以肯定讲的不全:内核就是对各种硬件进行抽象化(不知道是不是可以理解成封装),使其成为对象,然后正确有效的管理这些对象,对象的实现有些是进程,有些是文件,linux一切皆文件都是内核的功劳,她把对硬件的操作的实现抽象成对文件的操作或者直接提供抽象的内核接口,方便程序的实现。觉得内核不仅仅要实现稳定的运行,管理各个进程,接口丰富也是特别重要的,对上层软件的开发极具便利性
2、你编译过内核吗?为什么要重新编译内核?
      编译过,因为嵌入式几乎都要编译内核,而我就是开发嵌入式软件的
3、怎样看待不同类别内核(单内核、双内核、微内核等)的优缺点?
      这个不懂,就不乱说了
4、分享一个你读/修改内核源代码的经历。
      修改内核的源代码,当时是修改内的一个makefile,使其支持更大的flash
5、如果让你自己设计一个内核,你认为内核中最难或最重要的部分是哪个?
      最难重要的如何管理这么多的进程而又不出错




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2