关键词:
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内核在操作系统中主要有以下四大功能:
- 内存管理:跟踪用于存储内容的内存量以及存储位置
- 进程管理:确定哪些进程可以使用中央处理单元 (CPU)、何时以及使用多长时间
- 文件系统管理:在非结构化的硬件之上建立了一个结构化的文件系统
- 硬件设备管理:充当硬件和进程之间的接口程序
内核对用户来说是不可见的,它在自己的称为内核空间的小世界中工作,在那里它分配内存并跟踪所有内容的存储位置。用户所看到的比如浏览器和文件等,被称为用户空间。这些应用程序通过系统调用接口 (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应用开发,深入理解... 查看详情