硬核致敬Linux !30岁生日快乐!
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內核 | stat,?splice,?dup,?read,?open,?ioctl,?write,?mmap,?close,?exit等(大約380個系統調用) Linux內核系統調用接口(SCI,目標為POSIX/SUS兼容) | ||||
| 進程調度子系統 | IPC子系統 | 內存管理子系統 | 虛擬文件子系統 | 網絡子系統 | |
| 其他構件:ALSA,DRI,evdev,LVM,device mapper,Linux Network Scheduler,Netfilter Linux安全模塊:SELinux,TOMOYO,AppArmor, Smack | |||||
Linux內核代碼架構
Linux代碼包含核心幾個子系統,比如內存子系統,I/O子系統,CPU(調度)子系統,設備驅動子系統,網絡子系統,虛擬文件子系統等。這里簡單介紹一些比較重要的子系統。
調度子系統
進程調度是Linux內核中最重要的子系統,它主要提供對CPU的訪問控制。因為在計算機中,CPU資源是有限的,而眾多的應用程序都要使用CPU資源,所以需要“進程調度子系統”對CPU進行調度管理。
進程調度子系統包括4個子模塊(見下圖),它們的功能如下:
Scheduling Policy,實現進程調度的策略,它決定哪個(或哪幾個)進程將擁有CPU。
Architecture-specific Schedulers,體系結構相關的部分,用于將對不同CPU的控制,抽象為統一的接口。這些控制主要在suspend和resume進程時使用,牽涉到CPU的寄存器訪問、匯編指令操作等。
Architecture-independent Scheduler,體系結構無關的部分。它會和“Scheduling Policy模塊”溝通,決定接下來要執行哪個進程,然后通過“Architecture-specific Schedulers模塊”resume指定的進程。
System Call Interface,系統調用接口。進程調度子系統通過系統調用接口,將需要提供給用戶空間的接口開放出去,同時屏蔽掉不需要用戶空間程序關心的細節。
內存子系統
內存管理同樣是Linux內核中最重要的子系統,它主要提供對內存資源的訪問控制。Linux系統會在硬件物理內存和進程所使用的內存(稱作虛擬內存)之間建立一種映射關系,這種映射是以進程為單位,因而不同的進程可以使用相同的虛擬內存,而這些相同的虛擬內存,可以映射到不同的物理內存上。
內存管理子系統包括3個子模塊(見下圖),它們的功能如下:
Architecture Specific Managers,體系結構相關部分。提供用于訪問硬件Memory的虛擬接口。
Architecture Independent Manager,體系結構無關部分。提供所有的內存管理機制,包括:以進程為單位的memory mapping;虛擬內存的Swapping。
System Call Interface,系統調用接口。通過該接口,向用戶空間程序應用程序提供內存的分配、釋放,文件的map等功能。
虛擬文件子系統(Virtual Filesystem, VFS)
傳統意義上的文件系統,是一種存儲和組織計算機數據的方法。它用易懂、人性化的方法(文件和目錄結構),抽象計算機磁盤、硬盤等設備上冰冷的數據塊,從而使對它們的查找和訪問變得容易。因而文件系統的實質,就是“存儲和組織數據的方法”,文件系統的表現形式,就是“從某個設備中讀取數據和向某個設備寫入數據”。
隨著計算機技術的進步,存儲和組織數據的方法也是在不斷進步的,從而導致有多種類型的文件系統,例如FAT、FAT32、NTFS、EXT2、EXT3等等。而為了兼容,操作系統或者內核,要以相同的表現形式,同時支持多種類型的文件系統,這就延伸出了虛擬文件系統(VFS)的概念。VFS的功能就是管理各種各樣的文件系統,屏蔽它們的差異,以統一的方式,為用戶程序提供訪問文件的接口。
我們可以從磁盤、硬盤、NAND Flash等設備中讀取或寫入數據,因而最初的文件系統都是構建在這些設備之上的。這個概念也可以推廣到其它的硬件設備,例如內存、顯示器(LCD)、鍵盤、串口等等。我們對硬件設備的訪問控制,也可以歸納為讀取或者寫入數據,因而可以用統一的文件操作接口訪問。Linux內核就是這樣做的,除了傳統的磁盤文件系統之外,它還抽象出了設備文件系統、內存文件系統等等。這些邏輯,都是由VFS子系統實現。
VFS子系統包括6個子模塊(見下圖),它們的功能如下:
Device Drivers,設備驅動,用于控制所有的外部設備及控制器。由于存在大量不能相互兼容的硬件設備(特別是嵌入式產品),所以也有非常多的設備驅動。因此,Linux內核中將近一半的Source Code都是設備驅動,大多數的Linux底層工程師(特別是國內的企業)都是在編寫或者維護設備驅動,而無暇估計其它內容(它們恰恰是Linux內核的精髓所在)。
Device Independent Interface, 該模塊定義了描述硬件設備的統一方式(統一設備模型),所有的設備驅動都遵守這個定義,可以降低開發的難度。同時可以用一致的形勢向上提供接口。
Logical Systems,每一種文件系統,都會對應一個Logical System(邏輯文件系統),它會實現具體的文件系統邏輯。
System Independent Interface,該模塊負責以統一的接口(快設備和字符設備)表示硬件設備和邏輯文件系統,這樣上層軟件就不再關心具體的硬件形態了。
System Call Interface,系統調用接口,向用戶空間提供訪問文件系統和硬件設備的統一的接口。
網絡子系統(Net)
網絡子系統在Linux內核中主要負責管理各種網絡設備,并實現各種網絡協議棧,最終實現通過網絡連接其它系統的功能。在Linux內核中,網絡子系統幾乎是自成體系,它包括5個子模塊(見下圖),它們的功能如下:
Network Device Drivers,網絡設備的驅動,和VFS子系統中的設備驅動是一樣的。
Device Independent Interface,和VFS子系統中的是一樣的。
Network Protocols,實現各種網絡傳輸協議,例如IP, TCP, UDP等等。
Protocol Independent Interface,屏蔽不同的硬件設備和網絡協議,以相同的格式提供接口(socket)。
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系統
各種發行版本
當前比較流行發行版是:Debian、Ubuntu、Fedora、CentOS、Arch Linux和openSUSE等,每個發行版都有自己優勢地方,都有一批忠實用戶。
基于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岁生日快乐!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux网络子系统
- 下一篇: 攻克数据结构与算法