1991年8月25日,21岁的Linus Torvalds(以下简称Linus)做了一个免费的操作系统“Linux”,并在这一天向外界公布这个由“业余爱好”主导的个人项目;如今,全球超级计算机500强和超过70%的智能手机都在运行Linux,因此,8月25日也被许多Linux的爱好者视为Linux真正的诞生日期。

30 年前,Linus Torvalds 首次发布 Linux 内核时还是赫尔辛基大学的一名 21 岁学生。他的声明是这样开始的,“我正在做一个(免费的)操作系统(只是一个爱好,不会很大和专业......)”。三十年后,排名前 500 的超级计算机都在运行 Linux,所有智能手机的 70% 以上都是如此。Linux 显然既庞大又专业。

三十年来,Linus Torvalds 领导了 Linux 内核开发,激励了无数其他开发人员和开源项目。2005 年,Linus 还创建了 Git来帮助管理内核开发过程,此后它成为最受欢迎的版本控制系统,受到无数开源和专有项目的信赖。

Linux历史

OS史前历史

Linux的历史

Linux系统

Linux系统软件架构

Linux系统由硬件、kernel、系统调用、shell、c库、应用程序组成,架构层次分明,Linux内的各种层功能独立,程序在用户空间和内核空间之间的分离,能支持更多应用。

用户模态 用户应用 例如:Bash,LibreOffice,GIMP,Blender,0 A.D.,Mozilla Firefox等
低层系统构件 系统守护进程
systemd,runit,logind,networkd,PulseAudio等
窗口系统
X11,Wayland,SurfaceFlinger(Android)
其他库
GTK+, Qt, EFL, SDL, SFML, FLTK, GNUstep等
图形
Mesa,AMD Catalyst等
C标准库 open()exec()sbrk()socket()fopen()calloc(),... (直到2000个子例程)
glibc目标为POSIX/SUS兼容,musl和uClibc目标为嵌入式系统,bionic为Android而写等
内核模态 Linux内核 statsplicedupreadopenioctlwritemmapcloseexit等(大约380个系统调用)
Linux内核系统调用接口(SCI,目标为POSIX/SUS兼容)
进程调度子系统 IPC子系统 内存管理子系统 虚拟文件子系统 网络子系统
其他构件:ALSA,DRI,evdev,LVM,device mapper,Linux Network Scheduler,Netfilter
Linux安全模块:SELinux,TOMOYO,AppArmor, Smack
硬件(CPU,内存,数据存储设备等。)

Linux内核代码架构

Linux代码包含核心几个子系统,比如内存子系统I/O子系统CPU(调度)子系统设备驱动子系统网络子系统虚拟文件子系统等。这里简单介绍一些比较重要的子系统。

调度子系统

进程调度是Linux内核中最重要的子系统,它主要提供对CPU的访问控制。因为在计算机中,CPU资源是有限的,而众多的应用程序都要使用CPU资源,所以需要“进程调度子系统”对CPU进行调度管理。

进程调度子系统包括4个子模块(见下图),它们的功能如下:

  1. Scheduling Policy,实现进程调度的策略,它决定哪个(或哪几个)进程将拥有CPU。

  2. Architecture-specific Schedulers,体系结构相关的部分,用于将对不同CPU的控制,抽象为统一的接口。这些控制主要在suspend和resume进程时使用,牵涉到CPU的寄存器访问、汇编指令操作等。

  3. Architecture-independent Scheduler,体系结构无关的部分。它会和“Scheduling Policy模块”沟通,决定接下来要执行哪个进程,然后通过“Architecture-specific Schedulers模块”resume指定的进程。

  4. System Call Interface,系统调用接口。进程调度子系统通过系统调用接口,将需要提供给用户空间的接口开放出去,同时屏蔽掉不需要用户空间程序关心的细节。

内存子系统

内存管理同样是Linux内核中最重要的子系统,它主要提供对内存资源的访问控制。Linux系统会在硬件物理内存和进程所使用的内存(称作虚拟内存)之间建立一种映射关系,这种映射是以进程为单位,因而不同的进程可以使用相同的虚拟内存,而这些相同的虚拟内存,可以映射到不同的物理内存上。

内存管理子系统包括3个子模块(见下图),它们的功能如下:

  1. Architecture Specific Managers,体系结构相关部分。提供用于访问硬件Memory的虚拟接口。

  2. Architecture Independent Manager,体系结构无关部分。提供所有的内存管理机制,包括:以进程为单位的memory mapping;虚拟内存的Swapping。

  3. System Call Interface,系统调用接口。通过该接口,向用户空间程序应用程序提供内存的分配、释放,文件的map等功能。

虚拟文件子系统(Virtual Filesystem, VFS)

传统意义上的文件系统,是一种存储和组织计算机数据的方法。它用易懂、人性化的方法(文件和目录结构),抽象计算机磁盘、硬盘等设备上冰冷的数据块,从而使对它们的查找和访问变得容易。因而文件系统的实质,就是“存储和组织数据的方法”,文件系统的表现形式,就是“从某个设备中读取数据和向某个设备写入数据”。

随着计算机技术的进步,存储和组织数据的方法也是在不断进步的,从而导致有多种类型的文件系统,例如FAT、FAT32、NTFS、EXT2、EXT3等等。而为了兼容,操作系统或者内核,要以相同的表现形式,同时支持多种类型的文件系统,这就延伸出了虚拟文件系统(VFS)的概念。VFS的功能就是管理各种各样的文件系统,屏蔽它们的差异,以统一的方式,为用户程序提供访问文件的接口。

我们可以从磁盘、硬盘、NAND Flash等设备中读取或写入数据,因而最初的文件系统都是构建在这些设备之上的。这个概念也可以推广到其它的硬件设备,例如内存、显示器(LCD)、键盘、串口等等。我们对硬件设备的访问控制,也可以归纳为读取或者写入数据,因而可以用统一的文件操作接口访问。Linux内核就是这样做的,除了传统的磁盘文件系统之外,它还抽象出了设备文件系统、内存文件系统等等。这些逻辑,都是由VFS子系统实现。

VFS子系统包括6个子模块(见下图),它们的功能如下:

  1. Device Drivers,设备驱动,用于控制所有的外部设备及控制器。由于存在大量不能相互兼容的硬件设备(特别是嵌入式产品),所以也有非常多的设备驱动。因此,Linux内核中将近一半的Source Code都是设备驱动,大多数的Linux底层工程师(特别是国内的企业)都是在编写或者维护设备驱动,而无暇估计其它内容(它们恰恰是Linux内核的精髓所在)。

  2. Device Independent Interface, 该模块定义了描述硬件设备的统一方式(统一设备模型),所有的设备驱动都遵守这个定义,可以降低开发的难度。同时可以用一致的形势向上提供接口。

  3. Logical Systems,每一种文件系统,都会对应一个Logical System(逻辑文件系统),它会实现具体的文件系统逻辑。

  4. System Independent Interface,该模块负责以统一的接口(快设备和字符设备)表示硬件设备和逻辑文件系统,这样上层软件就不再关心具体的硬件形态了。

  5. System Call Interface,系统调用接口,向用户空间提供访问文件系统和硬件设备的统一的接口。

网络子系统(Net)

网络子系统在Linux内核中主要负责管理各种网络设备,并实现各种网络协议栈,最终实现通过网络连接其它系统的功能。在Linux内核中,网络子系统几乎是自成体系,它包括5个子模块(见下图),它们的功能如下:

  1. Network Device Drivers,网络设备的驱动,和VFS子系统中的设备驱动是一样的。

  2. Device Independent Interface,和VFS子系统中的是一样的。

  3. Network Protocols,实现各种网络传输协议,例如IP, TCP, UDP等等。

  4. Protocol Independent Interface,屏蔽不同的硬件设备和网络协议,以相同的格式提供接口(socket)。

  5. System Call interface,系统调用接口,向用户空间提供访问网络设备的统一的接口。

Linux内核版本时间线:

Linux内核支持各种硬件架构

Linux内核最成功的地方之一就是支持各种硬件架构,为软件提供了公共的平台:

基于Linux的系统是一个模块化的类Unix操作系统。Linux操作系统的大部分设计思想来源于20世纪70年代到80年代的Unix操作系统所建立的基本设计思想。Linux系统使用宏内核,由Linux内核负责处理进程控制、网络,以及外围设备和文件系统的访问。在系统运行的时候,设备驱动程序要么与内核直接整合,要么以加载模块形式添加。

Linux具有设备独立性,它内核具有高度适应能力,从而给系统提供了更高级的功能。GNU用户界面组件是大多数Linux操作系统的重要组成部分,提供常用的C函数库,Shell,还有许多常见的Unix实用工具,可以完成许多基本的操作系统任务。大多数Linux系统使用的图形用户界面建立在X窗口系统之上,由X窗口(XWindow)系统通过软件工具及架构协议来建立操作系统所用的图形用户界面.

基于Linux内核各种衍生OS系统

各种发行版本

当前比较流行发行版是:DebianUbuntuFedoraCentOSArch LinuxopenSUSE等,每个发行版都有自己优势地方,都有一批忠实用户。

基于Linux内核著名OS

Android

Android(读音:英:['ændrɔɪd],美:[ˈænˌdrɔɪd]),中文用户多以非官方名称“安卓”称之,是一个基于Linux内核与其他开源软件的开放源代码的移动操作系统,Android的内核是根据Linux内核的长期支持的分支,具有典型的Linux调度和功能。截至2018年,Android的目标是Linux内核的4.4、4.9或是4.14版本。

ChromeOS

Chrome OS 是由Google设计基于Linux内核的操作系统,并使用Google Chrome浏览器作为其主要用户界面。因此,Chrome OS主要支持Web应用程序[6],2016年起开始陆续兼容Android应用程序(可通过Google Play商店下载)和Linux应用程序。

鸿蒙OS

鸿蒙HarmonyOS,开发代号Ark[1])是华为自2012年开发的一款可兼容Android应用程序的跨平台分布式操作系统[2]。系统性能包括利用“分布式”技术将各款设备融合成一个“超级终端”,便于操作和共享各设备资源。[3][4][5]系统架构支持多内核,包括Linux内核、LiteOS和鸿蒙微内核,可按各种智能设备选择所需内核,例如在低功耗设备上使用LiteOS内核。[6][7]2019年8月华为发布首款搭载鸿蒙操作系统的产品“荣耀智能屏”,之后于2021年6月发布搭载鸿蒙操作系统的智能手机、平板电脑和智能手表。

如何成为linux内核开发者?

Linux 内核是最大且变动最快的开源项目之一,它由大约 53,600 个文件和近 2,000 万行代码组成。在全世界范围内超过 15,600 位程序员为它贡献代码,Linux 内核项目的维护者使用了如下的协作模型。

如果你有深入linux内核的激情极客精神,可以为Linux项目贡献源码,具体如何提交第一个补丁,可以详细阅读下面文章,这里篇幅有限不展开:

https://opensource.com/article/18/8/first-linux-kernel-patch

Linux 开源代码仓库:

https://github.com/torvalds/linux

提交给kernel的补丁,刚开始可能不需要高深的技术,比如这个补丁,可以 是简单的对于已有内容的格式或拼写错误的修正,比如这个来自4岁小朋友的补丁:

Linux内核学习资源

源码:

https://elixir.bootlin.com/linux/latest/source

在线交叉索引看源码,包括Linux几乎所有版本;

https://github.com/torvalds/linux

内核github仓库,可以下载本地,编译,修改和开发。

网站

http://www.kernel.org

可以通过这个网站上下载内核的源代码和补丁、跟踪内核bug等

http://lwn.net

Linux 内核最新消息,提供给了定期的与内核开发相关的报道

https://www.wiki.kernel.org/

各种子模块wiki列表

http://www.linuxdoc.org

Linux Documentation Project(Linux文档项目),拥有大量称为“HowTo”
的文档,其中一些是技术性的,并涉及到一些内核相关的主题。

http://www.kerneltravel.net/

国内Linux内核之旅开源社区

http://www.linux-mm.org
该页面面向Linux内存管理开发,其中包含大量有用的信息,并且还包含大量与内核相关的Web站点链接。

http://www.wowotech.net

博客专注分享linux内核知识(偏嵌入式方向), 很多文章都非常精华和透彻,值得内核学习者学习;

https://blog.csdn.net/gatieme

操作系统优质博客,可以学习linux 调度相关内核知识;

https://blog.csdn.net/dog250

dog250的文章都比较深刻,属于Linux内核进阶,可能不太适合入门,建议入门后,再看这里文章,会让你醍醐灌顶。

https://www.kernel.org/doc

‍‍‍‍‍‍‍‍‍‍内核文档

书籍

《深入理解Linux内核》

《深入Linux内核架构》

《Linux内核设计与实现》

《Linux内核源代码情景分析》

《深入理解LINUX网络内幕》

《深入理解Linux虚拟内存管理》

《Linux设备驱动程序》

Git分布式版本控制系统

2005 年,Linus还创建了 Git,这是非常流行的分布式源代码控制系统。迅速将 Linux 内核源代码树从专有 Bitkeeper 迁移到新创建的开源 Git。

git 架构

Git 是出于需要而创建的,不是因为发现源代码控制很有趣,而是因为其他多数源代码控制系统不好用,不能满足当时开发需求,并且 git 在 Linux 开发模型中确实运行得相当好,BitKeeper变得站不住脚。

完美适应现代开源软件的开发模式,分布式版本管理:

Linux内核名人堂

让我们膜拜一下对Linux内核做出核心贡献的大神们:

‍林纳斯·班奈狄克·托瓦兹(1969年12月28日-),生于芬兰赫尔辛基市,拥有美国国籍,Linux内核的最早作者,随后发起了这个开源项目,担任Linux内核的首要架构师与项目协调者,是当今世界最著名的电脑程序员、黑客之一。他还发起了开源项目Git,并为主要的开发者。

大卫·史提芬·米勒(英语:David Stephen Miller,1974年11月26日-),网络昵称为 DaveM,生于美国新泽西州新布朗斯维克,著名程式员与骇客,负责Linux核心网络功能以及SPARC平台的实作。他也参与其他开源软件的开发,是GCC督导委员会的成员之一。根据2013年8月的统计,米勒是Linux核心源代码第二大的贡献者,自2005年开始,已经提交过4989个patch。

葛雷格·克罗-哈曼(英语:Greg Kroah-Hartman,姓名缩写为GKH), Linux核心开发者,目前为 Linux 核心中稳定分支(-stable)的维护者[2],他也是staging 子系统[2]、USB[2]driver core、debugfs、kref、kobject、sysfs kernel 子系统[2]、 TTY layer [2]、linux-hotplug、Userspace I/O(与 Hans J. Koch 共同维护)等专案的维护者[2],也创立了udev专案。除此之外,他亦协助维护Gentoo Linux中上述程式及 kernel 的套件。

艾伦·考克斯(英语:Alan Cox,1968年7月22日-)是一名英国程序员,生于英格兰索利赫尔。他自1991年开始投入Linux内核的开发工作,在开发者社群中有很高的地位,是Linux开发工作中的关键人物之一。他负责维护Linux内核 2.2版这个分支,在2.4版中也提供许多程式码,拥有自己的分支版本。他住在威尔斯斯旺西,他的妻子于2015年逝世[1][2][3]。2020年他再婚[4][5]。他于1991年在斯旺西大学获得计算机科学理学学士学位,2005年在那里获得工商管理硕士学位[6]

英格·蒙内(匈牙利语:Ingo Molnár),匈牙利软件程序员与骇客,在linux内核上有许多贡献,也拥有自己的linux分支版本。对于操作系统的安全性与效能提升方面,他的声名卓著,在linux内核中,他于Linux-2.6.0版加入O(1)排程器,在 Linux-2.6.23版中加入完全公平调度器CFS(Completely Fair Scheduler)。

米格尔·德伊卡萨(西班牙语:Miguel de Icaza ,1972年11月23日-),生于墨西哥市,著名墨西哥籍自由软件开发者,为GNOME项目与Mono项目的发起人。但后来[何时?]退出了GNOME项目。

罗伯特·马修·拉姆(英语:Robert Matthew Love,1981年9月25日-),生于美国佛罗里达州,为著名自由软件程式开发者、作家,现职为google软件工程师。现居于波士顿。他是linux核心的主要开发者之一,主要负责程式排程、先占式核心、虚拟内存子系统、核心事件层。他也加入了GNOME计划。目前他在google,主要负责Android系统的开发。

安德鲁·基斯·保罗·莫顿(英语:Andrew Keith Paul Morton,1959年-),生于英国英格兰,澳洲软件工程师与著名骇客。他是Linux核心开发社群的领导者之一,现为ext3的共同维护者,负责区块装置的日志层(Journaling layer for block devices,JBD)。他也是mm tree的负责人。

埃里克·斯蒂芬·雷蒙(英语:Eric Steven Raymond,1957年12月4日-),是一名程序员,《大教堂与市集》的作者、《新黑客词典》("Jargon File")的维护人、著名黑客。作为《新黑客词典》的主要编撰人以及维护者,雷蒙很早就被认为是黑客文化的历史学家以及人类学家。但是在1997年以后,雷蒙被广泛公认为是开放源代码运动的主要领导者之一,并且是最为大众所知道(并最具争议性)的黑客。

西奥多·曹(英语:Theodore Y. Ts'o,1968年1月23日-),小名泰德·曹(Ted Tso),汉名曹子德[1],生于美国加利福尼亚州帕罗奥图,著名的自由软件工程师,专长于文件系统设计。他是Linux内核在北美最早的开发者,负责ext2、ext3与ext4文件系统的开发与维护工作。他也是e2fsprogs的开发者。为自由标准组织的创始者之一,也曾担任Linux基金会首席技术官。

由于互联网发达,当前不管是从个人爱好,还是工作原因,对内核贡献的国人越来越多:

http://www.remword.com/kps_result/all_whole_line_country.html

最后

30年的时间,Linux从一个个人玩具变成现在庞然大物,估值超过100亿美元,Linux还带来一股开源潮流,让开源软件百花齐放,对计算机发展和开源文化起到极大促进作用。

Linux 庞大的生态与发展过程,Linus伟大而富有创造力并不足以在一篇文章中尽述。

匆匆30 年,Linux 已经不仅仅是改变了世界,而且已经成为了这个世界不可或缺的一部分感谢 Linus Torvalds,感谢为之致力的一切贡献者!

最后,为了致敬Linux,希望大家三连支持,让更多人可以看到!

参考和扩展‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

h‍‍‍‍‍‍‍‍‍‍‍‍‍ttp://‍‍‍‍‍‍‍‍‍‍‍‍‍‍www.atguigu.com/jsfx/5694.html

https://opensource.com/article/16/12/yearbook-9-lessons-25-years-linux-kernel-development

https://www.reddit.com/r/linux/comments/2pqqla/kernel_commit_4_year_old_girl_fixes_formatting_to/utm_source=amp&utm_medium=&utm_content=post_title

http://oss.org.cn/ossdocs/linux/kernel/a1/index.html

http://www.wowotech.net/linux_kenrel/11.html

https://www.wikiwand.com/zh/Linux

https://zh.wikipedia.org/wiki/Category:Linux%E6%A0%B8%E5%BF%83%E9%A7%AD%E5%AE%A2

http://www.chromium.org/chromium-os/chromiumos-design-docs/software-architecture

- END -


看完一键三连在看转发,点赞

是对文章最大的赞赏,极客重生感谢你

推荐阅读

图解Linux 内核TCP/IP 协议栈实现|Linux网络硬核系列

Linux网络子系统

开源, yyds!

操作系统的起源|开源运动的兴起

硬核致敬Linux !30岁生日快乐!相关推荐

  1. Linus:“免费”不是最重要的,“源代码公开”才是,Linux 30岁生日快乐!

    [编者按]1991年8月25日,21岁的Linus Torvalds(以下简称Linus)做了一个免费的操作系统"Linux",并在这一天向外界公布这个由"业余爱好&qu ...

  2. 为什么VDI(桌面虚拟化)对于硬核UNIX/Linux工程应用程序是有意义的?

    ​Why VDI Makes Sense for Hard-Core UNIX and Linux Engineering Applications 为什么VDI(桌面虚拟化)对于硬核UNIX/Lin ...

  3. 转载 硬核图解!30张图带你搞懂!路由器,集线器,交换机,网桥,光猫有啥区别?

    硬核图解!30张图带你搞懂!路由器,集线器,交换机,网桥,光猫有啥区别?... 煎鱼(EDDYCJY) 于 2022-01-17 08:51:00 发布 1219 已收藏 22 文章标签: 交换机 网 ...

  4. 30岁生日快乐图片_50岁生日快乐心理

    30岁生日快乐图片 Today marks the 50th anniversary of the first showing of Alfred Hitchcock's movie Psycho i ...

  5. Linux 30岁,这些年经历了什么?

    关注+星标公众号,不错过精彩内容 来源 | CSDN 整理 | Carol 3月19日,Linux基金会在Twitter上发布推文宣布,其小企鹅的标志"Tux"已经30周岁了,还为 ...

  6. Linux 30岁啦,这些历史你知道多少呢?

    整理 | Carol 出品 | CSDN(ID:CSDNnews) 3月19日,Linux基金会在Twitter上发布推文宣布,其小企鹅的标志"Tux"已经30周岁了,还为其设计了 ...

  7. 史上最硬核的Linux依赖问题解决方案

    最近正好在研究dpkg和rpm,对Linux依赖有了更深的认识. 在网上看了很多,所有docker.虚拟机.编译安装.以及各种另辟蹊径的答案 都是面向日常繁重的业务没时间折腾而不得已做出的妥协和让步. ...

  8. Linux 30 岁了,你了解它的吉祥物企鹅 “Tux“ 吗?

    Linux 基金会发布推文庆祝 Tux 30 岁生日 (#TuxTurns30),并为它设计了一系列庆祝海报,以方便大家转发分享至社交媒体. 相信开发者对上面这只小企鹅应该不会陌生,它就是 Linux ...

  9. 生日快乐网站_华晨宇30岁生日快乐:曾经“异类”,如今顶尖!

    [作者 / 乐评人:青烟岭] 2月7日,歌手华晨宇30岁的生日,也是新一季<歌手>节目的开播日. <歌手2020>今日开播 1月初,湖南卫视官宣新一季节目参赛阵容,最后一位公布 ...

最新文章

  1. tensorflow从入门到精通100讲(二)-IRIS数据集应用实战
  2. 单例带来的线程安全问题
  3. i.mx6ul 移植Openwrt
  4. C++学习笔记4[循环语句]
  5. [Java基础] Java中List.remove报错UnsupportedOperationException
  6. GoogLeNet系列解读
  7. c语言基础回顾 —— 其他知识点
  8. python语言format用法_详解Python中的format格式化函数的使用方法
  9. 绘制不规则位图方法总结,多种实现方法,全面测试比较
  10. .Net学习笔记----2015-06-28(值类型和引用类型)
  11. 华为P50真机谍照曝光:璀璨粉色机身 牢牢锁定女性用户
  12. java流对象_Java对象流的使用
  13. pytorch3d在linux下安装
  14. vmx进程已提前退出_如何优雅地停止Java进程
  15. 利用栈将html源码解析为节点树
  16. php 调用永中云,永中优云:是时候给大家介绍真正的云端Office了
  17. Xcode - Plugins And Themes
  18. 单片机电子时钟设计(期末课程设计)
  19. 判断字符串是否为纯英文或纯中文
  20. 我的 sfml 学习笔记

热门文章

  1. FastDFS集群部署
  2. js 实现2的n次方计算函数_JS中数据结构与算法---排序算法
  3. Linux文件系统和文本编辑器
  4. HID接口设备-简介
  5. Perl 教学 Perl5中的引用(指针)
  6. 2019年我总结的前端面试题
  7. Delphi的System.Str - 将数字格式化为字符串
  8. 小技巧:with用法 pycharm控制台输出带颜色的文字 打印进度条的
  9. 【翻译】Nginx的反向代理
  10. 通过OWA修改密码,提示输入的密码不符合最低安全要求