ITPub博客

首页 > > > 漫画学习方法,速学掌握Linux内核

漫画学习方法,速学掌握Linux内核

作者:dapan 时间:2023-02-20 11:14:29 0 删除 编辑

一、内核专业术语

1、什么是操作系统OS

2、操作系统的的组成

3、什么是内核kernel

4、内核的操作

5、内核的分类

6、Linux操作系统

7、Linux内核

8、内核源码结构

9、Linux内核与硬件的关系

10、是什么使Linux内核与其他经典Unix内核不同?

11、Linux内核架构

12、Linux内核接口

13、Linux可加载内核模块 (The Linux Loadable Kernel Module (LKM) )

*-------------------------------------------------------------------------------------*

1、什么是操作系统OS

操作系统(简称为OS)是一种软件平台,可创建一个环境,用户可以在该环境中在计算设备上运行不同的应用程序。 操作系统充当软件程序和系统硬件组件之间的桥梁。 它被移动设备,标签,台式机,Web服务器,视频游戏机等不同的设备所利用。市场上有各种操作系统可用,例如Windows,Linux,Unix和Mac OSX。

2、操作系统的的组成

Bootloader:它负责设备的启动过程。

Shell:Shell是一种编程语言,它可以控制其他文件,进程以及所有其他程序。

Kernel:它是操作系统的主要组件,管理内存,CPU和其他相关组件。

Desktop Environment:这是用户通常与之交互的环境。

Graphical server(图形服务器):它是操作系统的子系统,用于在屏幕上显示图形

Applications: 这些是执行不同用户任务(例如word,excel等)的程序集。

Daemons : 后台服务提供商。

3、什么是内核kernel

内核是操作系统的关键组件。 它借助进程间通信和系统调用,在硬件级别上充当应用程序和数据处理之间的桥梁。

每当将操作系统加载到内存中时,首先,将加载内核并将其保留在那里,直到操作系统关闭。 内核负责处理低级任务,例如任务管理,内存管理,风险管理等。

内核的任务

用于应用程序执行的流程管理

内存和I / O(输入/输出)管理

系统调用控制(内核的核心行为)

借助设备驱动程序进行设备管理

内核空间,用户空间是什么?

内核空间

内核处于提升的系统状态,其中包括受保护的内存空间以及对设备硬件的完全访问权限。 此系统状态和内存空间统称为内核空间。 在内核空间内,对硬件和系统服务的核心访问进行管理,并作为服务提供给系统的其余部分。

用户空间

用户空间或用户域是在操作系统内核环境之外运行的代码,用户空间定义为操作系统用来与内核连接的各种应用程序或程序或库。

用户的应用程序是在用户空间中执行的,它们可以通过内核系统调用访问计算机可用资源的一部分。 通过使用内核提供的核心服务,可以创建用户级别的应用程序,例如游戏或办公软件。

4、内核的操作

内核是任何操作系统的心脏,因为它控制系统中的所有其他程序。 当设备启动时,内核会经历一个初始化的过程,例如检查内存。 它负责内存分配部分,并创建了一个运行应用程序的环境,而没有任何干扰。

内核充当服务提供者,因此程序可以请求内核完成多项任务,例如请求使用磁盘,网卡或其他硬件,并且内核为CPU设置中断以启用多任务处理。 它不让错误的程序进入其他程序的操作功能,从而保护了计算环境。 它通过不允许存储空间来阻止未经授权的程序进入入口,并限制它们消耗的CPU时间。

5、内核的分类

通常有三类内核:

Monolithic kernel: 它包含许多设备驱动程序,可在设备的硬件和软件之间创建通信接口。

它是操作系统广泛使用的内核。 在单片架构中,内核由可以动态加载和卸载的各种模块组成。 这种体系结构将扩展OS的功能,并允许轻松扩展内核。

使用单片式体系结构,内核的维护变得容易,因为当需要修复特定模块中的错误时,它允许相关模块进行加载和卸载。 因此,它消除了繁琐的工作,即降低并重新编译整个内核以进行很小的更改。 在单片内核中,卸载不再使用的模块更加容易。

Micro kernel: 它只能执行基本功能。

微内核已经发展成为单片内核的替代产品,以解决单片内核无法做到的内核代码不断增长的问题。 这种体系结构允许某些基本服务(例如协议栈,设备驱动程序管理,文件系统等)在用户空间中运行。 这样可以以最少的代码增强OS的功能,提高安全性并确保稳定性。

它通过使系统的其余部分正常运行而不会造成任何中断,从而限制了对受影响区域的损坏。 在微内核体系结构中,所有基本OS服务都可以通过进程间通信(IPC)提供给程序。 微内核允许设备驱动程序和硬件之间的直接交互。

Hybrid kernel: 它结合了单片内核和微内核的各个方面。

混合内核可以决定要在用户模式和主管模式下运行什么。 通常,在混合内核环境中,设备驱动程序,文件系统I / O之类的内容将在用户模式下运行,而服务器调用和IPC则保持在管理者模式下。 它提供了两个世界的最佳体验。

6、Linux操作系统

Linux是Linus Torvalds在1991年开发的开源平台。 它在各种设备中用作操作系统,例如在计算机,服务器,移动设备,大型机和其他嵌入式设备中。 由于它是开源软件,因此用户可以根据需要自定义此操作系统。 它支持几乎所有主要的计算机平台,例如ARM,x86,SPARK等。Linux的最常见用法是用于Server,但也用于台式机,电子书阅读器,智能手机等。

7、Linux内核

内核是任何基于Linux的操作系统的核心组件。 它代表了台式机和服务器的Linux发行版的核心方面。 它具有整体架构,并且操作系统完全在内核空间中运行。 整体内核不仅包围中央处理器,IPC和内存,而且具有系统服务器调用,设备驱动程序和文件系统管理。 Linux内核充当设备软件和硬件之间的一层。

内核可以是单片,微内核或混合内核(例如OS X和Windows 7)。 Linux内核是类似于UNIX系统的单片计算机操作系统内核。 Linux操作系统系列(通常称为Linux发行版)基于此内核。与微内核不同,单块内核不仅包含中央处理单元,内存和IPC,还具有设备驱动程序,系统服务器调用和文件系统管理。他们最擅长与硬件通信并同时执行多项任务。由于这个原因,此处的过程反应速度很快。

但是,很少的挫折是所需的巨大安装和内存占用空间以及安全性不足,因为一切都以管理员模式运行。相反,随着用户服务和内核的分离,微内核对应用程序调用的反应可能会很慢。因此,与整体内核相比,它们的尺寸更小。微内核很容易扩展,但是编写微内核需要更多代码。 Linux内核是用C和Assembly编程语言编写的。

8、内核源码结构

在Linux系统中查看内核源码如下:

arch 特定体系结构的代码

block 块设备I/O层

crypo 加密API

Documentation 内核源码文档

drivers 设备驱动程序

firmware 使用某些驱动程序而需要的设备固件

fs VFS和各种文件系统

include 内核头文件

init 内核引导和初始化

ipc 进程间通信代码

kernel 像调度程序这样的核心子系统

lib 同样内核函数

mm 内存管理子系统和VM

net 网络子系统

samples 示例,示范代码

scripts 编译内核所用的脚本

security Linux 安全模块

sound 语音子系统

usr 早期用户空间代码(所谓的initramfs)

tools 在Linux开发中有用的工具

virt 虚拟化基础结构

9、Linux内核与硬件的关系

内核可以通过所谓的中断来管理系统的硬件。 当硬件要与系统接口时,会发出一个中断,中断处理器,从而对内核执行相同的操作。 为了提供同步,内核可以禁用中断,无论是单个中断还是全部中断。 但是,在Linux中,中断处理程序不是在进程上下文中运行,而是在不与任何进程相关联的中断上下文中运行,这种特殊的中断上下文仅是为了让中断处理程序快速响应单个中断然后最终退出而存在 。

是什么使Linux内核与其他经典Unix内核不同?

Linux内核和经典 Unix内核之间存在显着差异,如下所示:

Linux支持内核模块的动态加载

Linux内核是抢占式的

Linux具有对称的多处理器支持

Linux具有开放软件特性,因此是免费的

Linux忽略了内核开发人员称为“设计不良”的某些标准Unix功能

Linux提供了带有设备类,可热插拔事件和用户空间设备文件系统的面向对象的设备模型

Linux内核无法区分线程和正常进程

10、Linux内核架构

内核仅仅是资源管理器。 被管理的资源可以是进程,内存或硬件设备。 它管理和仲裁多个竞争用户之间对资源的访问。 Linux内核存在于用户空间下方的内核空间中,该空间是执行用户应用程序的位置。 为了使用户空间与内核空间进行通信,已合并了一个GNU C库,该库为系统调用接口提供了一个论坛,以连接到内核空间并允许转换回用户空间。

Linux内核可以分为三个主要级别:

系统调用界面:这是最高层,并承担诸如读取和写入之类的基本操作。

内核代码:它位于系统调用接口下方,这是Linux支持的所有处理器体系结构的共同点,有时也定义为与体系结构无关的内核代码。

依赖于体系结构的代码:它在独立于体系结构的代码下,形成通常称为板级支持程序包(BSP)的程序-该程序包包含一个称为引导加载程序的小程序,它将操作系统和设备驱动程序放入内存。

Linux内核的体系结构主要包括:系统调用接口,进程管理,虚拟文件系统,内存管理,体系结构和设备驱动程序,这些称为Linux内核的主要子系统。

系统调用界面(System call interface)

简单来说,系统调用就是用户程序和硬件设备之间的桥梁。用户程序在需要的时候,通过系统调用来使用硬件设备。系统调用是一种编程过程,用于承担从用户空间到内核的函数调用,其中程序从操作系统内核请求服务。 该接口可能取决于体系结构。它包括各种硬件服务,例如与硬件设备连接以及在内核的各个组成部分之间创建通信接口。 系统调用在操作系统和进程之间创建有效的接口。

进程管理 (Process management)

执行进程,内核负责创建和删除不同的进程,并监视它们与外部世界的连接。例如输入和输出。 它通过信号,进程间通信原语或管道来处理不同方法之间的通信。 除了所有这些之外,它还有一个调度程序,用于控制共享CPU的进程。

内存管理(Memory management)

内存是操作系统的重要组成部分,内存在所谓的页面中进行管理以提高效率。 Linux包括管理可用内存的方法以及用于物理和虚拟映射的硬件机制,还提供交换空间。内存管理不仅仅管理4KB缓冲区,还远远不止于此。 Linux还提供了4kb缓冲区以外的抽象(称为slab分配器)。 Slab分配器使用4kb缓冲区作为基础,然后通过监视诸如页面已满,为空和部分使用之类的内容从内部分配结构。 这使方案可以动态增长,并可以支持系统的更重要需求。

虚拟文件系统(Virtual file system)

虚拟文件系统(VFS)是内核的重要组成部分,它为文件系统提供了标准的接口抽象。 它提供了系统调用接口和内核支持的文件系统之间的切换层。 VFS在内核支持的文件系统和SCI(系统调用接口)之间创建一个交换层。除了上述内容之外,Linux还支持各种类型的文件系统,这些文件系统需要以不同的方式组织数据以物理格式存储。 例如,可以使用常用的FAT文件系统,Linux标准ext3文件系统或其他几种格式来格式化磁盘。

设备驱动(Device drivers)

内核的大部分源代码存储在设备驱动程序中,这使特定的硬件设备可用。 Linux提供了一个驱动程序子目录,该子目录又分为支持的各种设备,例如I2蓝牙,串行等。

体系结构(Architecture-dependent code)

即使大多数Linux在其独立体系结构上运行,也应考虑某些因素以提高体系结构效率和正常运行。 Linux有许多子目录,每个体系结构子目录有许多其他子目录。 而且,这些子目录专注于内核的特定任务,例如内存管理,引导,内核等。

接口

系统调用和中断(System calls and Interrupts)

应用程序通过系统调用将信息传递给内核。 库包含应用程序可以使用的功能。 然后,这些库通过系统调用界面指示内核执行应用程序所需的任务。

中断提供了一种通过Linux内核管理系统硬件的方法。 如果硬件必须与系统通信,则可以通过处理器上的中断来解决问题,并将其传递给Linux内核。

11、Linux内核接口

Linux内核为执行不同任务和具有不同属性的用户空间应用程序提供了不同的接口。

它由两个独立的应用程序编程接口(API)组成:一个是内核用户空间,另一个是内核内部。

Linux API是内核用户空间API, 它使用户空间中的程序可以访问内核的系统资源和服务, 它由系统调用接口和GNU C库中的子例程组成。

Linux ABI

指的是内核用户空间ABI(Application Binary Interface), 它存在于程序模块之间,是两个二进制程序模块之间的接口:模块之一是操作系统工具或库,第二个模块是用户运行的程序。

比较API和ABI时,不同之处在于ABI用于访问已编译的外部代码,而API是用于管理软件的结构。 定义重要的ABI主要是Linux发行版的工作,而不是Linux内核。 应该为每个指令集定义一个特定的ABI,例如x86-64。 Linux产品的最终用户对ABI而不是API感兴趣。

它不过是内核用户空间ABI(应用程序二进制用户界面)。 它存在于程序模块之间。 ABI用于访问已编译并准备使用的代码。 ABI是两个二进制程序模块之间的接口:这些模块之一是操作系统工具或库,第二个模块是用户运行的程序。

模块化内核

以前版本的Linux内核的方式是将其所有部分静态固定为一个整体。 但是,现代Linux内核的大部分功能包含在动态放入内核的模块中。 与单片类型相反,这称为模块化内核。 这样的设置允许用户加载或替换正在运行的内核中的模块,而无需重新启动。

12、Linux可加载内核模块 (The Linux Loadable Kernel Module (LKM) )

如果要向Linux内核添加代码,则要做的第一件事就是向内核源代码树中添加一些源文件。 在某些情况下,您可能需要在运行时向内核添加代码,此过程称为可加载内核模块。

LKM的好处:

LKM节省时间并避免错误

它有助于快速发现bugs

LKM可以节省内存,因为它们仅在需要时才加载到内存中

它提供了更快的维护和调试时间

二、看漫画学内核

1、随便先说下

Linux 内核非常庞大,我说的非常大并不是为了吓唬大家,确实是非常多的代码,超过 600 万行的代码,所以我写文章介绍 Linux 内核,也不可能每一行代码去分析,但是我会提炼其中的重点出来,告诉大家,Linux 内核的构成,包含哪些东西,我们不管学习什么,最关键的是学会其中的思想,但是我们如果什么都还不会的时候,可以学着由表透里,就像我打篮球一直不会后仰跳投,但是我可以把科比的研究一遍又一遍,总有一天我也能听到自己打铁的哐哐声。

但是我希望我的文字略带微笑着去面对这些代码,去面对 Linux 森林,然后你从这个森林走出来后,可以明白森林里的有哪些路,你下一次想带个妹子进去约会,可以找到属于自己的旮旯。

虽然 Linux 内核非常庞大,但是横向对比计算机的发展史, Linux 的历史非常的简短,计算机出现的时候,还没有什么花里胡哨的包装,都是光着身子跑,用技术的语言说就是它只能执行一个任务,执行一个进程,也可以叫“裸跑”,学习计算机的同学应该很快明白什么是裸机程序,裸机程序只可以让一个进程使用硬件资源,这无形上对硬件资源的浪费。

可以拿我们的手机来比喻,裸机的话,我们玩王者荣耀的时候,有人打电话进来的话,王者荣耀是要被终止的,后来就有了操作系统,操作系统可以保证多任务执行,同样的 CPU 芯片,有了操作系统,我可以开微信,QQ ,还同时做其他很多事情。

所以就出来了很多操作系统,操作系统我认为可以分为实时操作系统和通用操作系统,实时操作(RTOS 全称Real Time Operating System)系统可以理解为对时间要求非常苛刻,可以用一个词“必须”来理解,就是在某个时间片之内必须要做某件事情。

而通用操作系统,我们可以很常见,比如电脑 windows,Android 手机等,Linux 也可以认识是通用 OS,因为他们对时间上要求不是很严苛。

Linux 可以通过配置某个宏定义变成实时操作系统,但是我们使用 Linux 主要是针对他的通用 OS,多用户,多任务等特别突出的性能。

世界上的嵌入式操作系统数不胜数,我有一个很厉害的师弟,前几年也参与了一个国内嵌入式操作系统的开发,当然了,他们是以盈利为目的了,还有我认识的周立功先生,他们公司也研发了一个嵌入式操作系统,但是对于我们开发者来说,做项目的时候,选择适合自己项目的系统就好了,对于学习来说,我认为,应该学习最先进的操作系统,这样才能让自己的技术有更大的先进性。

VxWorks

VxWorks 是美国 WindRiver 公司的产品,市场占有率比较高的嵌入式操作系统。VxWorks 实时操作系统由 400 多个相对独立、短小精悍的目标模块组成,用户可根据需要选择适当的模块来裁剪和配置系统,具有优先级的任务调度、任务间同步与通信、中断处理、定时器和内存管理等功能,符合 POSIX (可移植操作系统接口)规范的内存管理,多处理器控制程序,并且具有简明易懂的用户接口,在核心方面甚至町以微缩到 8 KB。

这个操作系统不敢吹太多,可以自己去了解下,因为稳定性太好了,应用到了航空,卫星,军事等各个领域,实用性非常强,所以很多培训机构也针对这个操作系统开了培训课程。

μC/OS-II

μC/OS-II是在μC-OS的基础上发展起来的,是美国嵌入式系统专家 Jean J.Labrosse 用 C 语言编写的一个结构小巧、支持抢占式的多任务实时内核。μC/OS-II 能管理 64 个任务,并提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。

μClinux

μClinux 是一种优秀的嵌入式 Linux 版本,其全称为 micro-control Linux,从字面意思看是指微控制 Linux。同标准的 Linux 相比,μClinux 的内核非常小,但是它仍然继承了 Linux 操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的 API,以及 TCP/IP 网络协议等。因为没有 MMU 内存管理单元,所以其多任务的实现需要一定技巧。

eCos

eCos(embedded Configurable operating system),即嵌入式可配置操作系统。它是一个源代码开放的可配置、可移植、面向深度嵌入式应用的实时操作系统。最大特点是配置灵活,采用模块化设计,核心部分由小同的组件构成,包括内核、C 语言库和底层运行包等。每个组件可提供大量的配置选项(实时内核也可作为可选配置),使用 eCos 提供的配置工具可以很方便地配置,并通过不同的配置使得 eCos 能够满足不同的嵌入式应用要求。

2、内核的工作

我们使用的计算机大家都知道是操作系统,那内核是什么呢?那我们先简单说说操作系统,操作系统是面向用户的,计算机用户可以使用计算机操作系统来工作,聊天,玩游戏,我们使用的这些东西都是应用软件,对应用程序来说,内核就是它的操作系统,这个系统可以为应用程序工作,管理应用程序。

内核还有一个比较重要的工作,就是管理应用,为应用程序准备好运行内存,管理应用程序的执行,让应用程序通行无阻,当然了,这个是理想的情况,不理想的情况就是导致内存或者资源不够用的情况,应用出现崩溃等异常。

除了管理应用以外,内核还需要管理硬件设备,Linux 内核下面有非常多的设备驱动代码,如果一个内核开发工程师说他不懂设备驱动,那简直就是一个笑话,内核跟 CPU 和硬件设备关系非常密切,在整个操作系统中的地位,具有承上启下的作用。

3、UNIX 的诞生

生日:UNIX 在 1969 年出生。

他的父亲和母亲:是 Dennis Ritchie 和 Ken Thompson 两个人擦出了灵感的火花创造出来的。

出生户籍地址:贝尔实验室

贝尔实验室logo图片:

4、出生具体流程:

1965 年,贝尔实验室要做一个项目,这个项目叫PDP-7计算机计划,发起人是通用电气和麻省理工学院,他们给这个操作系统起了一个漂亮的名字叫做「MULTICS 操作系统」("Multiplexed Information and Computing Service"的缩写)。做事情总是有个计划,他们给这个操作系统给出的计划是,这个操作系统可以多个人使用,按照我们现在的人来说就是多用户系统,多任务,多层次等等。

到了1969 年,发起人觉得这个进度太慢了,本来想早点制造出来我们好用来玩电脑游戏的,结果你们这几个科学家整了这么久还是没整出来,那只好停掉了,停掉了投资方就不再提供后备的资源了,留下的东西就自己瞎整吧,投资方也不管了。

计划被停下来了,当时,Ken Thompson 在调试一个程序,这个程序名字叫做 “星级旅游”,这个程序运行在一个叫做 GE-635 的机器上面,但是因为这个机器的硬件设备比较落后,运行速度非常慢,这让Ken Thompson感觉非常不爽,然后他发现之前做「PDP-7计算机计划」项目的时候还有一台PDP-7计算机,这个计算机就是图片下面的那个计算机,当时应该没有人想到计算机可以做到这么小,然后他们就把 GE-635 程序移植到 PDP-7 计算机上面。

到了1970年,PDP-7 可以运行 GE-635程序了,但是却只能支持两个用户,当时 Brian Kernighan 就开玩笑的称他们的系统是 “UNiplexed Information and Computing Service”,这个缩写就是 UNICS,再后来,大家就取谐音,称为 UNIX。所以1970 年可以称为 UNIX元年。

汤姆逊和丹尼斯里奇:

PDP-7计算机

5、BSD操作系统

伯克利软件套件(英语:Berkeley Software Distribution,缩写为 BSD ),也被称为伯克利UNIX(Berkeley UNIX),是一个操作系统的名称。衍生于UNIX(类UNIX),1970年代由伯克利加州大学的学生比尔·乔伊(Bill Joy)开创,也被用来代表其衍生出的各种套件。

BSD 常被当作工作站级别的 UNIX 系统,这得归功于 BSD 用户许可证非常地宽松,许多 1980 年代成立的计算机公司,不少都从 BSD 中获益,比较著名的例子如 DEC 的 Ultrix,以及 Sun 公司的 SunOS。1990 年代,BSD 很大程度上被 System V 4.x 版以及 OSF/1 系统所取代,但其开源版本被采用,促进了因特网的开发。

BSD 比 Linux 早出现,稳定性和安全性都在 Linux 之上,甚至 Windows 和 OS X 都有来自 BSD 的代码,但是现在一提到开源自由软件,人们首先想到的是Linux,而不是资格更老的BSD。

UNIX创始人之一的 Ken Thompson 曾如此评价 Linux,「Linux不过是反微软思潮下的产物」,这个家伙觉得 Linux 不可能有多大的成就,非常自信的觉得 BSD 在任何时候都可以击败 Linux,甚至觉得Linux 是一个低端和下流的操作系统内核。

但是事实证明,Linux 赢得了这场战争,有实力,也有些运气,Linux 在发展的时候,BSD 当时正被官司缠上,没有多余的心思应战 Linux,而BSD腹背受敌的原因很明显是因为他们的商业化,而Linux正是因为开源而更受全世界开发者的青睐。

一个事情的成功,90% 是由他的领导者决定的,就好像一个球队能走多远,队长和教练可以决定它的深度,Linux 也一样,Linus Torvalds 是位杰出的领袖人物,他成功的让一群性格迥异的、绝非泛泛之辈的黑客共同合作开发,而没有如其他开源项目一般分崩离弃。

还有一点,Linux 的硬件支持比 BSD 好,这在各种终端设备上来说简直就是一种惊喜,随着PC不断被边缘化,移动端的产品急需找到一款适合他们的操作系统,Linux 是最好不过的人选了。

GNU 的大力支持,GNU 的许可证与 BSD 不兼容,因此 Linux 的出现让两者完美结合,所以现在Linux 全名叫 GNU/Linux。

BSD 走的是教堂式的学院派路线,而 Linux 则是代表了市集式的骇客精神,BSD很自信,觉得自己是贵族出生,应该享受这世界上的荣华富贵,而Linux再一次验证了农村包围城市的必然性,成王败寇,功败垂成。

BSD原本就有极佳的根基,缺乏的可能是一点运气,未来或许大有可为。

5、GNU计划的产生

理查·斯托曼:

因为 UNIX 操作系统的商业化,原来的 UNXI 系统已经不能再被随意的使用,很多人都希望能有一款免费好用的操作系统,因为并不是每个人都很有钱,也不是每个人都有能力自己去写操作系统,此时,理查·斯托曼在麻省理工学院人工智能实验室发起 GNU 计划,希望发展出一套完整的开放源代码操作系统来取代 UNIX,计划中的操作系统,名为 GNU。

1983年9月27日,理查·斯托曼在 net.UNIX-wizards 和 net.usoft 新闻组中公布这项计划。在此项计划中,开发出了很多我们现在熟悉的常用的工具,包括GNU编译器套装(GCC)、GNU的C库(glibc)、以及 GNU 核心工具组(coreutils)。另外也是 GNU 除错器(GDB)、GNU 二进制实用程序(binutils)的 GNU Cash shell中 和 GNOME 桌面环境。

当然,GNU计划的目的还是开发出一款自由传播的操作系统,这个操作系统的名字叫 Hurd,但是由于二手手机购买平台地图对操作系统的要求过高,以至于 Hurd 一直处于测试阶段,本意是一个好事情,但是能力有限啊,开发的东西老是出bug,再好的创意那也是徒劳了。

不过 Linus 大神通过 GNU 发布了自己的 Linux 系统后,就火起来了,真的就一发不可收拾,这也是为什么 GNU 和 Linux 关系密切的原因。

6、UNIX 衍生系统发展图

用文字来描述事实总是感觉有点欠缺,就好像两个人发生争执,可以通过吵嘴解决问题,也可以通过大家解决问题,但是我认为打架应该是最直接的,你说得再多也没有枪杆子来得实在。

本书的重心主要放在 Linux 上,可以观察 Linux 的发展轨迹,还是非常给力的,当然了,BSD 目前来说市场占有率不能跟 Linux 相提并论,但是他在整个 UNIX 上也有有着自己的一席之地的。

7、Linux的导火索MINIX

8、MINIX启动界面

在 UNIX 产生后,版权在 AT&T 手里,在 Version 7 UNIX 发布之后,发布新的授权条款,将UNIX 源码私有化,在大学不得再使用 UNIX 源码,荷兰阿姆斯特丹自由大学计算机科学系的塔能鲍姆教授(Andrew Stuart "Andy" Tanenbaum)为了教学,自己写了一个类 UNIX 的小系统,命名为 MINIX(意为mini-UNIX)。

永远不要小看任何一个人,如果这个人能够编写出自己的教学操作系统,你更加不要随便惹他,你可能不可以,但是下面的这个家伙是可以的,大家可能都不知道什么是“宏内核”和“微内核”,但是这个家伙和 Linus 的辩论轰动一时,不管怎么说,Linux 应该是现在的胜利者,最直接的原因是开源,让更多的开发者可以使用 Linux 内核移植到自己的设备上,包括 ARM 设备。

但是我们也不能抹杀 ast 的作用,在计算机系统的贡献上,和教学的贡献上,肯定是具有一席之地的,作为本文的撰写者,他们都是我们的始祖,技术无国界,请收下我的膝盖。

9、Linux 的出生

林纳斯 托瓦兹(Linus Torvalds)

我们的主角人物,林纳斯 托瓦兹(Linus Torvalds)1991年,林纳斯·托瓦兹在赫尔辛基大学上学时,对操作系统很好奇。由于但是 386BSD 还没有出来。可是他不喜欢他的 386 电脑上的 MS-DOS 操作系统,所以就安装了 Minix,可对 Minix 只允许在教育上使用很不满(在当时 Minix 不允许被用作任何商业使用),于是他便开始写他自己的操作系统。

Linux 的第一个版本在 1991 年 9 月被大学 FTP server 管理员 Ari Lemmke 发布在 Internet上,最初 Torvalds 称这个内核的名称为 「Freax」,意思是自由「free」和奇异「freak」的结合字,并且附上「X」这个常用的字母,以配合所谓的类 UNIX 的系统。但是 FTP 服务器管理员嫌原来的命名「Freax」的名称不好听,把内核的称呼改成「Linux」,当时仅有 10000 行代码,仍必须运行于Minix操作系统之上,而且必须使用硬盘开机,随后在10月份第二个版本(0.02版)发布,同时这位芬兰赫尔辛基的大学生在 comp.os.minix 上发布这样一则公告

Hello everybody out there using minix- I'm doing a (free) operation system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones.

1994 年 3 月,Linux1.0 版正式发布。为了让 Linux 可以在商业上使用,林纳斯·托瓦兹决定更改他原来的协议(这个协议会限制商业使用),以 GNU GPL 协议来代替。之后许多开发者致力融合 GNU 元素到 Linux 中,做出一个有完整功能的、自由的操作系统。

80386 的芯片

80386的电脑

如果单凭林纳斯一个人的力量,Linux 不可能发展到这个程度,我认为在那个时候,他做了一个非常正确的决定,就是「开源」,让世界上更多的优秀程序员加入到他的事业当中,为了让更多的人同步开发,林纳斯还写了 GIT ,这个让很多协作开发者为之兴奋的工具。

10、Linux的标志物

Linux 的标志和吉祥物是一只名字叫做 Tux 的企鹅,标志的由来是因为 Linus 在澳洲时曾被一只动物园里的企鹅咬了一口,便选择企鹅作为 Linux的标志。更容易被接受的说法是:企鹅代表南极,而南极又是全世界所共有的一块陆地。这也就代表 Linux 是所有人的 Linux。

曾经有一个笑话说林纳斯被企鹅咬了之后,因为咬过的伤口会发炎,发炎的时候伤口会有点疼,晚上写代码想打瞌睡,但是就是因为这个炎症的疼痛感刺激着自己,当然了,这个只是个传说,传说是否是真的,哪天大神心情好了可能会揭晓答案。

10、Linux的现状

今天在 Linus Torvalds 带领下,众多开发共同参与开发和维护 Linux 内核。理查德·斯托曼领导的自由软件基金会,继续提供大量支持 Linux 内核的 GNU 组件。一些个人和企业开发的第三方的非 GNU 组件也提供对 Linux 内核的支持,这些第三方组件包括大量的作品,有内核模块和用户应用程序和库等内容。Linux 社区或企业都推出一些重要的 Linux发行版,包括 Linux内核、GNU组件、非GNU组件,以及其他形式的的软件包管理系统软件。

目前这个阶段,可以说每个人都脱离不开 Linux,好吧,肯定有人跑出来抬杠,我就问你,你手机底层是 Linux 内核你可知道,你说你用的是塞班手机,那里购物的云平台,淘宝,亚马逊等都是用 Linux 开发维护的,好吧你说你是个老板,买东西都是别人给你买的,那么你炒股吧,很多股票平台都是基于 Linux 开发维护的。

11、为什么学习Linux

Linux 内核现在覆盖的领域非常广,手机、平板、路由器等等,就大家非常喜欢的苹果操作系统,底层内核也是有 Linux的影子,Linux 的普及毋庸置疑,学习 Linux 应该作为每个技术人员的标配。

刚开始参加工作的时候,很多面试官都问我,你对 Linux 是不是非常懂,我每次都回答,我对 Linux 也是刚刚入门,但是我非常喜欢Linux ,而且我也会持续在 Linux 上面做研究,学习,我也喜欢和这些 Linux 爱好者一起探讨问题。

学习完 Linux 内核你会对整个计算机体系有一个更深刻的认知,作为一个开发者,不管你从事的是驱动开发,应用开发,还是后台开发,你都需要理解计算机操作系统和内核的运行机制,才可能更好的编写你的代码,出现更少的错误。

作为开发人员,不应该只局限在自己的小领域,因为你设计的模块,看起来非常小,但是你不了解进程的调用机制,不知道进程会阻塞,就绪,执行几个状态,你怎么可能编写好一个低容错率的代码呢?

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/758/viewspace-3158153/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-08-07

  • 博文量
    4504
  • 访问量
    87093