1.1随意先说下
Linux内核十分庞大,并不是捉弄你们,确实是特别多的代码,超过600万行,所以写文章介绍Linux内核,不可能每一行代码去剖析,并且会提炼其中的重点下来,告诉你们,Linux内核的构成,包含什么东西。
不管学习哪些,最关键的是学会其中的思想,而且假如哪些都还不会的时侯,可以学着由表透里,如同我打网球仍然不会后仰投篮,而且我可以把科比的录象研究一遍又一遍,总有三天我也会漂亮的后仰。
希望我的文字能带着你笑容的面对这种代码,面对Linux森林,从这个森林走下来后,可以明白森林里有什么路,下一次带个女生进去约会,可以找到属于自己的旮旯。
尽管Linux内核十分庞大,并且纵向对比计算机的发展史,Linux的历史十分的简略,计算机出现的时侯,还没有哪些花里胡哨的包装,都是光着身子跑,用技术的语言说就是它只能执行一个任务,执行一个进程,也可以叫“裸跑”,学习计算机的朋友应当很快明白哪些是裸机程序,裸机程序只可以让一个进程使用硬件资源,这无形上是对硬件资源的浪费。
拿我们的手机来比喻,裸机的话,我们玩王者荣耀的时侯,有人打电话进来,王者荣耀是要被中止的,后来就有了操作系统,操作系统可以保证多任务执行,同样的CPU芯片,有了操作系统,我可以开陌陌,,还可以同时做好多其他事情。
所以就下来了好多操作系统,可以分为实时操作系统和通用操作系统,实时操作(RTOS全称RealTimeOperatingSystem)系统可以理解为对时间要求十分严苛,可以用一个词“必须”来理解,就是在某个时间片之内必需要做某件事情。
而通用操作系统,很常见,例如笔记本windows,Android手机等,Linux也可以觉得是通用OS,由于她们对时间上要求不是很苛刻。
Linux可以通过配置某个宏定义弄成实时操作系统,并且我们使用Linux主要是针对他的通用OS,多用户,多任务等非常突出的性能。
世界上的嵌入式操作系统数不胜数,我有一个很厉害的师兄,前几年也参与了一个国外嵌入式操作系统的开发,其实,她们是以赢利为目的,还有我认识的周立功先生,她们公司也研制了一个嵌入式操作系统,并且对于我们开发者来说,做项目的时侯,选择适宜自己项目的系统就好了,对于学习来说,我觉得,应当学习最先进的操作系统,这样就能让自己的技术有更大的先进性。
VxWorks
VxWorks是日本WindRiver公司的产品,市场占有率比较高的嵌入式操作系统。VxWorks实时操作系统由400多个相对独立、短小精悍的目标模块组成,用户可依照须要选择适当的模块来剪裁和配置系统linux at 计划任务,具有优先级的任务调度、任务间同步与通讯、中断处理、定时器和显存管理等功能,符合POSIX(可移植操作系统插口)规范的显存管理,多处理器控制程序,而且具有简明易懂的用户插口,在核心方面甚至町以缩微到8KB。
这个操作系统不敢吹太多,可以自己去了解下,稳定性、实用性十分强,应用到了民航,卫星,军事等各个领域,所以好多培训机构也针对这个操作系统开了培训课程。
μC/OS-II
μC/OS-II是在μC-OS的基础上发展上去的,是日本嵌入式系统专家JeanJ.Labrosse用C语言编撰的一个结构精巧、支持占领式的多任务实时内核。μC/OS-II能管理64个任务,并提供任务调度与管理、内存管理、任务间同步与通讯、时间管理和中断服务等功能,具有执行效率高、占用空间小、实时性能优良和可扩充性强等特性。
μClinux
μClinux是一种优秀的嵌入式Linux版本,其全称为micro-controlLinux,从字面意思看是指微控制Linux。同标准的Linux相比,μClinux的内核特别小,而且它一直承继了Linux操作系统的主要特点,包括良好的稳定性和移植性、强大的网路功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网路合同等。由于没有MMU显存管理单元,所以其多任务的实现须要一定方法。
eCos
eCos(embeddedConfigurableoperatingsystem),即嵌入式可配置操作系统。它是一个源代码开放的可配置、可移植、面向深度嵌入式应用的实时操作系统。最大特征是配置灵活,采用模块化设计,核心部份由小同的组件构成,包括内核、C语言库和底层运行包等。每位组件可提供大量的配置选项(实时内核也可作为可选配置),使用eCos提供的配置工具可以很便捷地配置,并通过不同的配置促使eCos才能满足不同的嵌入式应用要求。
内核的工作
我们使用的计算机你们都晓得是操作系统,那内核是哪些呢?那我们先简单谈谈操作系统,操作系统是面向用户的,计算机用户可以使用计算机操作系统来工作,聊天,玩游戏,我们使用的这种东西都是应用软件,对应用程序来说,内核就是它的操作系统,这个系统可以为应用程序工作,管理应用程序。
内核还有一个比较重要的工作,就是管理应用,为应用程序打算好运行显存,管理应用程序的执行,让应用程序通行无阻,其实了,这个是理想的情况,不理想的情况就是会造成显存或则资源不够用,应用出现崩溃等异常。
不仅管理应用以外,内核还须要管理硬件设备,Linux内核下边有特别多的设备驱动代码,假如一个内核开发工程师说他不懂设备驱动,那简直就是一个笑话linux at 计划任务,内核跟CPU和硬件设备关系十分密切,在整个操作系统中的地位,具有承上启下的作用。
1.2UNIX的诞生
生日:UNIX在1969年出生。
他的妻子和女儿:是DennisRitchie和KenThompson两个人擦出了灵感的火花创造下来的。
出生户口地址:贝尔实验室
贝尔实验室
贝尔实验室的logo
出生具体流程:
1965年,贝尔实验室要做一个项目,这个项目叫PDP-7计算机计划,发起人是通用电气和麻省理工大学,她们给这个操作系统起了一个漂亮的名子称作「MULTICS操作系统」("MultiplexedInformationandComputingService"的简写)。做事情总是有个计划,她们给这个操作系统给出的计划是,这个操作系统可以多个人使用,根据我们现今的人来说就是多用户系统,多任务,多层次等等。
到了1969年,发起人认为这个进度太慢了,原本想早点制造下来我们好,拿来玩笔记本游戏的,结果大家这几个科学家整了那么久还是没整下来,那只得停掉了,停掉了投资方就不再提供后备资源,留下的东西就自己瞎整吧,投资方也不管了。
计划被停出来了,当时,KenThompson在调试一个程序,这个程序名子称作“星级旅游”,这个程序运行在一个称作GE-635的机器里面,而且由于这个机器的硬件设备比较落后,运行速率十分慢,这让KenThompson觉得十分不爽,之后他发觉之前做「PDP-7计算机计划」项目的时侯还有一台PDP-7计算机,这个计算机就是图片下边的那种计算机,当时应当没有人想到计算机可以做到如此小,之后她们就把GE-635程序移植到PDP-7计算机里面。
到了1970年,PDP-7可以运行GE-635程序了,而且却只能支持两个用户,当时BrianKernighan开玩笑称她们的系统是“UNiplexedInformationandComputingService”,这个简写就是UNICS,再后来,你们就取译音,称为UNIX。所以1970年可以称为UNIX元年。
汤姆逊和丹尼斯里奇
PDP-7计算机
1.3BSD操作系统
伯克利软件套件(英文:BerkeleySoftwareDistribution,简写为BSD),也被称为伯克利UNIX(BerkeleyUNIX),是一个操作系统的名称。衍生于UNIX(类UNIX),1970年代由伯克利加洲学院的中学生比尔·乔伊(BillJoy)开创,也被拿来代表其衍生出的各类套件。
BSD常被当成工作站级别的UNIX系统,这得归功于BSD用户许可证十分地修身,许多1980年代创立的计算机公司,不少都从BSD中受益,比较知名的事例如DEC的Ultrix,以及Sun公司的SunOS。1990年代,BSD很大程度上被SystemV4.x版以及OSF/1系统所替代,但其开源版本被采用,推动了因特网的开发。
BSD比Linux早出现,稳定性和安全性都在Linux之上,甚至Windows和OSX都有来自BSD的代码,并且现今一提及开源自由软件,人们首先想到的是Linux,而不是资格更老的BSD。
UNIX创始人之一的KenThompson曾这么评价Linux,「Linux不过是反谷歌思潮下的产物」,这个家伙认为Linux不可能有多大的成就,特别自信的认为BSD在任何时侯都可以战胜Linux,甚至认为Linux是一个高端和下流的操作系统内核。
然而事实证明,Linux博得了这场战争,有实力,也有些运气,Linux在发展的时侯,BSD当时正被官司缠上,没有多余的心思迎战Linux,而BSD腹背夹击的缘由很显著是由于她们的商业化,而Linux正是由于开源而更受全世界开发者的追捧。
一个事情的成功,90%是由他的领导者决定的,就好象一个球员能走多远,队长和教练可以决定它的深度,Linux也一样,LinusTorvalds是位杰出的领袖人物,他成功的让一群性格迥异的、绝非泛泛之辈的黑客共同合作开发,而没有如其他开源项目通常分崩背弃。
还有一点,Linux的硬件支持比BSD好,这在各类终端设备上来说简直就是一种惊喜,随着PC不断被边沿化,联通端的产品急需找到一款适宜她们的操作系统,Linux是最好不过的人选了。
GNU的大力支持,GNU的许可证与BSD不兼容,因而Linux的出现让二者完美结合,所以现今Linux全名叫GNU/Linux。
BSD走的是修道院式的大学派路线,而Linux则是代表了市集式的骇客精神,BSD很自信,认为自己出生于贵族,应当享受这世界上的荣华富贵,而Linux再一次验证了农村包围城市的必然性,成王败寇,功败垂成。
BSD原先就有绝佳的根基,缺少的可能是一点运气,未来似乎大有可为。
(点击查看大图)
1.4GNU计划的形成
理查·斯托曼
由于UNIX操作系统的商业化,原先的UNXI系统早已不能再被随便的使用,好多人都希望能有一款免费好用的操作系统,由于并不是每位人都很有钱,也不是每位人都有能力自己去写操作系统,此时,理查·斯托曼在麻省理工大学人工智能实验室发起GNU计划,希望发展出一套完整的开放源代码操作系统来代替UNIX,计划中的操作系统,名为GNU。
1983年9月27日,理查·斯托曼在net.UNIX-wizards和net.usoft新闻组中公布这项计划。在此项计划中,开发出了好多我们如今熟悉的常用的工具,包括GNU编译器套装(GCC)、GNU的C库(glibc)、以及GNU核心工具组(coreutils)。另外也是GNU除错器(GDB)、GNU二补码实用程序(binutils)的GNUCashshell中和GNOME桌面环境。
其实,GNU计划的目的还是开发出一款自由传播的操作系统,这个操作系统的名子叫Hurd,然而因为对操作系统的要求偏高,以至于Hurd仍然处于测试阶段,原意是一个好事情,而且能力有限啊,开发的东西老是出bug,再好的创意那也是徒劳。
不过Linus高手通过GNU发布了自己的Linux系统后,就火上去了,一发不可拾掇,这也是为何GNU和Linux关系密切的诱因。
1.5UNIX衍生系统发展图
用文字来描述事实总是觉得有点缺乏,就好象两个人发生口角,可以通过争吵解决问题,也可以通过打斗解决,而且我觉得斗殴应当是最直接的,说得再多也没有枪竿子来得实在。
本文的重心主要置于Linux上,可以观察Linux的发展轨迹,特别给力,其实,BSD目前来说市场占有率不能跟Linux相提并论,然而他在整个UNIX上也有着自己的一席之地。
1.6Linux的导火索MINIX
MINIX启动界面
在UNIX形成后,版权在AT&T手里,在Version7UNIX发布以后,发布新的授权条款,将UNIX源码私有化,在学院不得再使用UNIX源码,西班牙巴塞罗那自由学院计算机科学系的塔能鲍姆院士(AndrewStuart"Andy"Tanenbaum)为了教学,自己写了一个类UNIX的小系统,命名为MINIX(意为mini-UNIX)。
永远不要小看任何一个人,假如这个人就能编撰出自己的教学操作系统,你愈发不要随意惹他,你可能不可以,而且下边的这个家伙是可以的,你们可能都不晓得哪些是“宏内核”和“微内核”,并且这个家伙和Linus的辩论震惊一时,不管怎样说,Linux应当是现今的胜利者,最直接的缘由是开源,让更多的开发者可以使用Linux内核,移植到自己的设备上,包括ARM设备。
然而我们也不能抹煞ast的作用,在计算机系统的贡献上,和教学的贡献上,肯定具有一席之地linux服务器代维,作为本文的撰写者,她们都是我们的先祖,技术无国界,请收下我的肩膀。
1.7Linux的出生
林纳斯托瓦兹(LinusTorvalds)
我们的主角人物,林纳斯托瓦兹(LinusTorvalds)1991年,林纳斯·托瓦兹在莫斯科学院念书时,对操作系统很好奇。因为并且386BSD还没有下来。而且他不喜欢他的386笔记本上的MS-DOS操作系统,所以就安装了Minix,可对Minix只容许在教育上使用很不满(在当时Minix不容许被用作任何商业使用),于是他便开始写他自己的操作系统。
Linux的第一个版本在1991年9月被学院FTPserver管理员AriLemmke发布在Internet上,最初Torvalds称这个内核的名称为「Freax」,意思是自由「free」和奇特「freak」的结合字,但是附上「X」这个常用的字母,以配合所谓的类UNIX的系统。并且FTP服务器管理员嫌原先的命名「Freax」的名称不好听,把内核的尊称改成「Linux」linux移植,当时仅有10000行代码,仍必须运行于Minix操作系统之上,并且必须使用硬碟开机,此后在10月份发布第二个版本(0.02版),同时那位美国奥克兰的学院生在comp.os.minix上发布这样一则公告
Helloeverybodyoutthereusingminix-I'mdoinga(free)operationsystem(justahobby,won'tbebigandprofessionallikegnu)for386(486)ATclones.
1994年3月,Linux1.0版即将发布。为了让Linux可以在商业上使用,林纳斯·托瓦兹决定修改他原先的合同(这个合同会限制商业使用),以GNUGPL合同来取代。以后许多开发者旨在融合GNU元素到Linux中,作出一个有完整功能的、自由的操作系统。
80386的芯片
80386的笔记本
假如单凭林纳斯一个人的力量,Linux不可能发展到这个程度,我觉得在哪个时侯,他做了一个特别正确的决定,就是「开源」,让世界上更多的优秀程序员加入到他的事业当中,为了让更多的人同步开发,林纳斯还写了GIT,这个让好多协作开发者为之激动的工具。
1.8Linux的标志物
Linux的标志和吉祥物是一只名子称作Tux的企鹅,标志的来由是由于Linus在美国时曾被一只昆虫园里的企鹅咬了一口,便选择企鹅作为Linux的标志。更容易被接受的说法是:企鹅代表北极,而北极又是全世界所共有的一块陆地。这也就代表Linux是所有人的Linux。
以前有一个笑话说林纳斯被企鹅咬了以后,咬过的创口感冒,有点疼,夜晚写代码打困倦,这个增生的背痛感剌激着自己,能够坚持每晚写代码,其实,这只是个传说,真的还是假的,哪天高手心情好了可能会出炉答案。
1.9Linux的现况
明天在LinusTorvalds率领下,诸多开发共同参与开发和维护Linux内核。理查德·斯托曼领导的自由软件基金会,继续提供大量支持Linux内核的GNU组件。一些个人和企业开发的第三方的非GNU组件也提供对Linux内核的支持,那些第三方组件包括大量的作品,有内核模块和用户应用程序和库等内容。Linux社区或企业都推出一些重要的Linux发行版,包括Linux内核、GNU组件、非GNU组件,以及其他方式的的软件包管理系统软件。
目前这个阶段,可以说每位人都脱离不开Linux,好吧,肯定有人下来唱反调,我就问你,你手机底层是Linux内核你可晓得,你说你用的是塞班手机,那购物的云平台,天猫,亚马逊等都是用Linux开发维护的,好吧你说自己是个老总,买东西都是他人给你买,那你炒股吧?好多股票平台都是基于Linux开发维护的。
1.10为何学习Linux
Linux内核如今覆盖的领域十分广,手机、平板、路由器等等,例如你们十分喜欢的苹果操作系统,底层内核也有Linux的影子,Linux的普及毋庸置疑,学习Linux应当作为每位技术人员的标配。
刚开始出席工作的时侯,好多笔试官都问我,你对Linux是不是特别懂,我每次都回答,自己对Linux也是刚入门,而且我特别喜欢它,但是我也会持续在Linux里面做研究、学习,也喜欢和Linux爱好者一起阐述问题。
学习完Linux内核你会对整个计算机体系有一个更深刻的认知,作为一个开发者,不管你从事的是驱动开发,应用开发,还是后台开发,你都须要理解计算机操作系统和内核的运行机制,才可能编撰出更好的代码,出现更少的BUG。
作为开发人员,不应当只局限在自己的小领域,由于你设计的模块,看上去十分小,而且你不了解进程的调用机制,不晓得进程会阻塞,就绪,执行几个状态,你如何可能编撰好一个低容错率的代码呢?