理解linux操作系统之母-linux内核

踩点 踩点     2022-10-27     111

关键词:

        Linux操作系统在我们的信息化生产环境中,起着举足轻重的作用,在使用的过程中,我们发现,要在发行版Linux操作系统上安装某个软件,在下载rpm安装包前要查查内核版本是多少以便于找到对应内核版本的rpm包;遇到一些硬件与使用的发行版Linux操作系统不兼容时,也查查内核版本是多少,看看是不是因为内核版本太低了不兼容;遇到了某个特定问题时也查查内核版本是多少,看看是不是已知的内核版本BUG等。甚至有时候为了解决某些问题,还要将Linux内核进行升级,但有时也不是所有问题都是能够通过内核升级就能解决的,还需要发生版操作系统具备相应的功能能力。从其中不难发现,我们使用的各类Linux操作系统,如CentOS、SuSE、redhat linux等等,它们都是用的同一套内核程序,只是各发行版上使用的Linux内核版本不同而已,Linux内核是名符其实的Linux操作系统之母了。

        那到底什么是Linux内核(kernel)?Linux内核是怎么来的?Linux内核能做什么,有哪些主要功能?又有哪些人或组织在参与Linux内核开发维护?使用Linux内核代码有哪些要求等。带着这一系列问题,开展下面分析学习。

一、什么是Linux内核

        Linux内核是运行于Linux 操作系统 (OS)中最基础却又最重要的组件,是计算机硬件与其进程之间的核心接口。它在两者之间进行通信,实现对资源管理的核心程序。

        内核就像硬壳中的种子一样,存在于操作系统中并控制硬件的所有主要功能,包括手机、电脑、服务器等任何类型的智能计算设

二、Linux内核由来

        Linux可以视为一个站在巨人肩膀上创建出来的产品,在它被发布以前,操作系统已经经过了长期的发展。

        1979年,Ken Thompson(C语言之父)利用汇编语言开发了FIle Server System(Unics,即Unix的原型);

        1973年,Dennis Ritchie和Ken Thompson发明了C语言,而后写出了Unix的内核;

        1979年,Unix发布System V,用于个人计算机;

        1984年,因为Unix规定:“不能对学生提供源码”,Tanenbaum老师自己编写兼容于Unix的Minix,用于教学;

        1991年,芬兰赫尔辛基大学计算机系研究生LinusTorvalds(林纳斯·托瓦兹)负债DIY了一台性能彪悍的计算机,他准备用这台计算机运行在操作系统课上学会的Minix操作系统并黑进学校性能更加强大的计算机系统来上网或者看新闻。然而,Minix系统的价格让Linus望而却步,且当时Minix系统的协议只支持教学用途,于是决定开发一套自己的操作系统,1991年2月4日,Linux内核系统0.00版延生,只有两个进程,分别显示AAABBB;

        1991年9月17日,Linux内核系统(当时叫Freax)的0.01版被上传至FTP服务器,作为第一个正式向外公布的Linux内核版本,从此拉开了一个传奇的序幕……

        Linux它最初是构思试图创建一个用来替代 MINIX ,并且免费和开源共享的操作系统,借鉴 Unix的原理和设计,被看作是Unix的克隆。

        Linux®已由LinusTorvalds在美国、德国、欧盟和日本注册商标。

三、内核主要功能

        Linux内核虽然非常复杂,但它不是一个可供用户直接使用的完整操作系统,要提供给一般用户使用,仅靠内核是远远不够的,缺乏应用功能,还需基于内核之上,根据外围硬件设备开发驱动、用户灵活操作的图形化界面、应用程序软件等,才能构成一个可供用户使用的功能性操作系统。

 

        Linux内核在操作系统中主要有以下四大功能:

  1. 内存管理:跟踪用于存储内容的内存量以及存储位置
  2. 进程管理:确定哪些进程可以使用中央处理单元 (CPU)、何时以及使用多长时间
  3. 文件系统管理:在非结构化的硬件之上建立了一个结构化的文件系统
  4. 硬件设备管理:充当硬件和进程之间的接口程序

        内核对用户来说是不可见的,它在自己的称为内核空间的小世界中工作,在那里它分配内存并跟踪所有内容的存储位置。用户所看到的比如浏览器和文件等,被称为用户空间。这些应用程序通过系统调用接口 (SCI) 与内核交互。

        如果将运行Linux操作系统的机器视为具有 3 层,内核的位置应该属于中间层:

1.硬件:物理机器,在系统的底部或基础,由内存 (RAM) 和处理器或中央处理单元 (CPU) 以及存储、网络等输入/输出 (I/O) 设备组成,,CPU 执行计算并从内存读取和写入内存。

2.Linux 内核:操作系统的核心。处于硬件之上,用户进程之下的中间层,它是驻留在内存中的软件,它告诉 CPU 要做什么。

3.用户进程:这些是内核管理的运行程序。用户进程是共同构成用户空间的东西。用户进程也称为进程。内核还允许这些进程和服务器相互通信。

        系统执行的代码以两种模式之一在 CPU 上运行:内核模式或用户模式。在内核模式下运行的代码可以不受限制地访问硬件,而用户模式则限制对 SCI 的 CPU 和内存的访问。内存(内核空间和用户空间)也存在类似的分离。这两个小细节构成了一些复杂操作的基础,例如安全权限分离、构建容器和虚拟机。

        这也意味着,如果一个进程在用户模式下失败,损害是有限的,可以由内核恢复。但是,由于它对内存和处理器的访问,内核进程崩溃可能会使整个系统崩溃。由于有适当的保护措施和跨越边界所需的权限,用户进程崩溃通常不会导致太多问题。此外,由于 Linux 内核可以在线升级修补。

四、内核维护组织

        Linux内核由Linux Kernel Organization(是一家加州公益组织)进行维护,这个组织成立于 2002 年,成立的目的为免费向公众分发 Linux 内核和其他开源软件。Linux Kernel Organization由Linux基金会负责管理,为运行和维护 kernel.org 基础设施提供全面的技术、资金和人员支持。

        Linux基金会,共有白金、金牌、银牌三个级别的会员(成员)1298个,这些成员都是数字技术的先驱,是推动Linux项目进步的力量。

1、白金会员(14个)

2、金牌会员(19个)

 

3、银牌会员(1258个)

......

 

....

        要声明一点的是,Linux基金会维护了有很多的项目,这些会员并不代表都是参与内核项目的成员单位,而“Linux内核项目成员在官网上无公布,但在每一个版本发布时,都会公布代码贡献量的雇主与个人排名。

五、Linux内核代码贡献

        只有Linux内核项目成员,才能提交内核代码提交合并请求,下面以Linux内核5.10版为例,列举代码贡献者排名信息。

1、个人开发者代码贡献排名

        共有 1,971 名个人开发者为Linux内核 5.10 做出了贡献,期中有有 252 名个人开发在首次在 5.10版本中做出代码贡献。

  • 5.10版本合并代码个人开发者贡献占比排名

2、雇主(公司组织)代码贡献排名

        总共有 228 家公司(所知道的)在5.10 内核版本中有做出代码贡献。

  • 5.10版本合并代码雇主(公司组织)贡献占比排名
  •  

  有一件值得骄傲的事情是,在5.10版内核程序新合并代码的贡献排名中,按照代码集为单位,我国的华为技术公司贡献量排第一名,占比8.9%;按照代码行为单位,我国的华为技术公司贡献量排第二名,占比5.3%。

六、Linux内核协议

        Linux内核发展到2022年10月2日已经发布的6.0版,合并了很多贡献者的代码,形成了很多个功能模块,Linux内核已经积累成为一个很庞大的系统了,各个模块使用的开源协议也不尽相同,形成了一个Linux内核使用了多种开源协议,当前在使用的协议主要有如下:

BSD-2-Clause

BSD-3-Clause

BSD-3-Clause-Clear

GPL-2.0

LGPL-2.0

LGPL-2.1

MIT

        Linux为一个全开源的内核,意味着任何人都可以运行、学习、共享和修改软件,修改后的代码也可以重新发布,甚至发行成自己的产品与出售,但是必须在相同协议下进行,也就是说,修改后的代码以及发行的产品,是需要继续开源,还是可以闭源,需要根据基于内核程序中的各个模块的开源协议而定。

扫码关注IT圈黎俊杰公众号,一起探讨IT技术人生!

 

坚持原创发表,如发现有不妥与不正确之处,欢迎指正。IT圈黎俊杰虚心向大家学习!

linux系统调用

...要求1.    学习Linux内核的配置和编译;2.    深入理解Linux系统调用;3.    理解ARM和x86的CPU模式(系统模式、用户模式)的不同;4.    掌握内核模块的编写方法。 二、     实验器材1.    Linux实验... 查看详情

深入理解系统调用(代码片段)

准备工作配置和编译Linux内核下载和解压Linux内核,此次实验使用的是5.4.34版本使用makemenuconfig来配置内核,主要配置以下几个选项来开启内核调试功能Kernelhacking--->Compile-timechecksandcompileroptions--->[*]Compilethekernelwithdebuginfo[*]Prov... 查看详情

探秘linux-文件管理(inode理解)及管道和io重定向

...x系统上各主要目录的简介/根,所有文件的起点 bin存放操作系统启动时的引导程序,以及操作系统内核文件 boot存放操作系统启动时的引导程序,以及操作系统内核文件 dev存放设备文件和特殊文件(如字符设备) etc存放... 查看详情

深入理解linux内核之进程睡眠(下)

4.用户态睡眠以sleep为例来说明任务在用户态是如何睡眠的。首先我们通过strace工具来看下其调用的系统调用:$ strace sleep 1...close(3)                                = 0clock_nanosleep(CLOCK_REALTIME, 0, tv_sec=... 查看详情

linux内核,驱动,应用程三者的概念和之间的关系

...样写代码,怎么移植,但不知道如何下载。首先,要理解操作系统的概念,操作系统是用户和硬件之间的一层媒介程序。不管是Linux还是Windows或者安卓、IOS,它的主要功能有两点:1、有效管理硬件。2、方便用户操作。其次,Linu... 查看详情

book

...他的生平、思想及论文解读》《计算机系统概论》《深入理解Linux内核》《深入Linux内核架构》《TCP/IP详解卷1:协议》《Linux系统编程(第2版)》《Linux内核设计与实现(第3版)》《深入理解计算机系统(原书第2版)》《计算机... 查看详情

如何理解 Linux 内核模块的“构建单独的文件”?

】如何理解Linux内核模块的“构建单独的文件”?【英文标题】:Howtounderstand"BuildingSeparateFiles"foraLinuxkernelmodule?【发布时间】:2014-08-0105:26:39【问题描述】:摘自Linux内核documentation:2.4构建单独的文件Itispossibletobuildsinglefi... 查看详情

学习linux/unix编程方法的建议,学习linux的四个步骤(转)

...你是计算机科班出身,计算机系的基本课程如数据结构、操作系统、体系结构、编译原理、计算机网络你全修过我想大概可以分为4个阶段,水平从低到高从安装使用=>linux常用命令=>linux系统编程=>内核开发阅读内核源码其... 查看详情

深入理解系统调用

1.系统调用的概念用户态与内核态: 32位Linux进程地址空间: 系统调?概述:  Linux的系统调?:  2.环境准备编译选项:    编译内核并运行:由于还未挂载根文件系统,因此出现kernelpanic。 &... 查看详情

linux内核创建一个新进程的过程

...ux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000操作系统的三大功能进程管理内存管理文件系统task_struct用来描写叙述进程的数据结构,能够理解为进程的属性。进程状态、进程调度信息、各种标识符、进程通信有关信... 查看详情

linux内核创建一个进程的过程分析(代码片段)

...都是以进程为载体的,所以理解进程的创建对于理解操作系统的原理是非常重要的,本文是我在学习linux内核中所做的笔记,如有错误还请大家批评指正。注:我所阅读的内核版本是0.11。一、关于PCB对于一个进程... 查看详情

linux系统调用

...要求1.    学习Linux内核的配置和编译;2.    深入理解Linux系统调用;3.    理解ARM和x86的CPU模式(系统模式、用户模式)的不同;4.    掌握内核模块的编写方法。 二、     实验器材1.    Linux实验... 查看详情

linux为啥要编译内核

...需不需要购置平台,要看你的学习目的了。追问还是不太理解。比如,我装了redhat9,内核版本是2.6,我在官网下载了3.0的内核代码,然后我在机器上编译后,结果是什么?这些编译的结果代替了我现有系统,也就是我的redhat内... 查看详情

学习linux底层驱动开发有啥经典的参考书?

结构、操作系统、体系结构、编译原理、计算机网络你全修过我想大概可以分为4个阶段,水平从低到高从安装使用=>linux常用命令=>linux系统编程=>内核开发阅读内核源码其中学习linux常用命令时就要学会自己编译内核,优... 查看详情

linux关于权限的理解

...双击D盘盘符.或者运行起来一个应用程序).shell就相当于操作系统的外壳,用户先输入指令到shell外壳,外壳在进行过滤,将命令传给操作系统,反馈结果在通过内核运行出结果,通过shell解析给用户。用户直接和操作系统直接交... 查看详情

linux系统i/o模型及select、poll、epoll原理和应用

...先要了解一些基本概念,才能理解这些IO模型设计的依据操作系统使用虚拟内存来映射物理内存,对于32位的操作系统来说,虚拟地址空间为4G(2^32)。操作系统的核心是内核,为了保护用户进程不能直接操作内核,保证内核安... 查看详情

深入理解linux内核之进程睡眠(下)

4.用户态睡眠以sleep为例来说明任务在用户态是如何睡眠的。首先我们通过strace工具来看下其调用的系统调用:$ strace sleep 1...close(3)                                = 0clock_nanosleep(CLOCK_REALTIME, 0, tv_sec=... 查看详情

嵌入式linux怎么学

...习个三分熟(推荐书籍:《LKD--linux内核开发》《ULK-深入理解linux内核》《LDD-linux驱动开发),同时要学习c语言,学习基础的汇编语法。然后学习,linux嵌入式开发基础,理解嵌入式开发流程。然后学习,linux应用开发,深入理解... 查看详情