跳转到内容

Linux内核:修订间差异

轻之舟百科,让知识轻装启航
删除的内容 添加的内容
云云​(留言 | 贡献)
创建页面,内容为“{{Infobox|标题=Linux内核|内容={{!}}- ! 英文名 {{!}} Linux kernel<ref name=":1" /> {{!}}- ! 开发者 {{!}} 林纳斯·托瓦兹(Linus Torvalds)及全球社区贡献者<ref name=":1" /><ref name=":9" /> {{!}}- ! 首次发布 {{!}} 0.02版 / 1991年10月5日<ref name=":1" /><ref name=":2" /> {{!}}- ! 当前版本 {{!}} 稳定版:7.1.1(2026年6月19日)<ref name=":3" /><br>长期支持版(LTS):6.18.21(2026年4月2日)<re…”
 
TeodoroSeccombe​(留言 | 贡献)
小 创建页面,内容为“。”
第1行: 第1行:
{{Infobox|标题=Linux内核|内容={{!}}-
{{Infobox
| 标题 = SQLite
! 英文名
| 内容 =
{{!}} Linux kernel<ref name=":1" />
{{!}}-
{{!}}-
! 开发者
! 开发者
{{!}} D. Richard Hipp
{{!}} [[林纳斯·托瓦兹]](Linus Torvalds)及全球社区贡献者<ref name=":1" /><ref name=":9" />
{{!}}-
{{!}}-
! 首次发布
! 首次发布
{{!}} 2000年8月
{{!}} 0.02版 / 1991年10月5日<ref name=":1" /><ref name=":2" />
{{!}}-
{{!}}-
! 当前版本
! 稳定版本
{{!}} 3.x(持续更新)
{{!}} 稳定版:7.1.1(2026年6月19日)<ref name=":3" /><br>长期支持版(LTS):6.18.21(2026年4月2日)<ref name=":3" />
{{!}}-
{{!}}-
! 编程语言
! 编程语言
{{!}} ANSI-C
{{!}} [[C语言]]、[[汇编语言]]、[[Rust]]<ref name=":3" /><ref name=":8" />
{{!}}-
{{!}}-
! 操作系统
! 内核类别
{{!}} 跨平台
{{!}} [[整块性核心]](Monolithic kernel)<ref name=":0" /><ref name=":7" />
{{!}}-
! 类型
{{!}} 嵌入式关系数据库引擎
{{!}}-
{{!}}-
! 许可证
! 许可证
{{!}} [[公有领域]]
{{!}} [[GNU通用公共许可证]]第二版(GPL-2.0-only)<ref name=":4" /><ref name=":5" />
{{!}}-
{{!}}-
! 官方网站
! 官方网站
{{!}} https://sqlite.org
{{!}} [https://www.kernel.org/ www.kernel.org]}}'''Linux内核'''(英语:Linux kernel)是一个[[自由及开放源代码软件|自由及开放源代码]]的[[类Unix系统|类Unix]][[操作系统内核]]<ref name=":1">[[wikipedia:Linux_kernel|Linux kernel — Wikipedia]]</ref><ref name=":9">[https://baike.baidu.com/item/Linux%E5%86%85%E6%A0%B8 Linux内核 — 百度百科]</ref>。该内核由芬兰开发者[[林纳斯·托瓦兹]](Linus Torvalds)于1991年创建,最初是为在[[英特尔]][[x86]]架构上提供自由免费的类Unix操作系统而开发<ref name=":0">[https://baike.baidu.com/item/Linux%20Kernel Linux Kernel — 百度百科]</ref><ref name=":10">[https://baike.baidu.com/item/linux%E5%86%85%E6%A0%B8 Linux内核 — 百度百科]</ref>。Linux内核是[[Linux]]操作系统家族的核心组件,被广泛应用于个人计算机、服务器、移动设备(如[[Android]])及各类嵌入式系统<ref name=":1" /><ref name=":9" />。内核采用[[C语言]]编写,遵循[[GNU通用公共许可证]]第二版(GPL-2.0)发布<ref name=":4">[https://www.kernel.org/ Linux内核官方网站 — kernel.org]</ref><ref name=":5">[https://docs.kernel.org/process/license-rules.html Linux内核许可规则 — kernel.org]</ref>,由全球数千名开发者共同维护<ref name=":9" />。Linux内核是一个[[整块性核心]](monolithic kernel)系统,其核心功能包括内存管理、进程调度、文件系统操作及设备驱动等<ref name=":0" /><ref name=":7">[https://baike.baidu.com/item/单内核 单内核 — 百度百科]</ref>。
}}

'''SQLite'''是一个嵌入式关系[[数据]]库引擎,以自包含(self-contained)、无[[服务器]](serverless)、零配置(zero-configuration)及事务性(transactional)为设计特征。<ref name=":0">[https://sqlite.org/different.html Distinctive Features Of SQLite - sqlite.org]</ref> 由美国开发者D. Richard Hipp于2000年创建,其源代码处于公有领域,可自由用于任何目的。<ref name=":1">[https://sqlite.org/src SQLite Source Repository - sqlite.org]</ref> 整个[[数据库]][[存储]]于单个[[跨平台]]磁盘文件中,应用程序通过链接SQLite库直接读写该文件,无需独立的服务器进程或管理配置。<ref name=":0" /> 据官方估计,[[全球]]活跃的SQLite数据库数量超过一万亿个,使其成为历史上部署最广泛的数据库引擎。<ref name=":2">[https://neomano.com/en/the-programmers-who-gave-away-empires/ The Programmers Who Gave Away Empires - Neomano]</ref>


== 历史 ==
== 历史 ==
1991年,林纳斯·托瓦兹在[[赫尔辛基大学]]学习期间开始开发一个自由的类Unix操作系统内核<ref name=":1" /><ref name=":9" />。该项目的灵感来源于[[Minix]]操作系统,但托瓦兹希望创建一个可以在[[英特尔]]80386处理器上充分利用其32位特性的内核<ref name=":0" /><ref name=":7" />。1991年9月17日,托瓦兹在[[comp.os.minix]]新闻组上发布了Linux内核的0.01版本<ref name=":0" /><ref name=":7" />。同年10月5日,0.02版本公开发布,这是第一个可用的版本<ref name=":1" /><ref name=":2">[https://zh.wikipedia.org/wiki/Linux%E5%86%85%E6%A0%B8 Linux內核 — 维基百科(繁体中文)]</ref>。1991年12月,0.11版本发布,成为第一个可以自行编译(self-hosted)的内核版本<ref name=":2" />。


SQLite诞生于2000年春季,创始人D. Richard Hipp当时受雇于General Dynamics,为美国海军导弹驱逐舰项目开发[[软件]]。<ref name=":3">[https://db.cs.cmu.edu/events/databaseology-2015-richard-hipp-sqlite/ SQLite, A Database for the Edge of the Network - Carnegie Mellon Database Group]</ref> 项目最初使用HP-UX系统与IBM Informix数据库,但数据库服务器频繁故障导致应用程序崩溃,促使Hipp思考"为什么我们需要一个服务器?"<ref name=":2" /> 这一疑问催生了SQLite的设计理念:一个无需安装、无需管理、直接嵌入应用程序的数据库引擎。
1992年2月,0.12版本发布,托瓦兹在此版本中将许可证切换为[[GNU通用公共许可证]](GPL)<ref name=":2" /><ref name=":6">[https://www.gnu.org/licenses/licenses.html GNU许可证 — GNU工程]</ref>。这一决定使得Linux内核能够与[[GNU计划]]的工具链结合,形成完整的[[GNU/Linux]]操作系统<ref name=":1" />。1994年3月14日,Linux 1.0.0版本正式发布,标志着内核的第一个稳定版本<ref name=":0" /><ref name=":7" />。1996年6月9日,Linux 2.0版本发布,引入了对多处理器(SMP)架构的支持<ref name=":0" /><ref name=":2" />。


2000年8月,SQLite 1.0正式发布,最初基于[[GNU]] Database Manager(gdbm)构建。<ref name=":4">[https://www.tutorialspoint.com/sqlite/sqlite_overview.htm SQLite - Overview - TutorialsPoint]</ref> 随后SQLite 2.0以自定义B树实现替代gdbm,并加入事务支持。2004年6月,SQLite 3.0.2 beta发布,引入了动态类型系统、UTF-8/UTF-16支持及更灵活的数据库模式,奠定了现代SQLite的[[架构]]基础。<ref name=":4" />
2003年12月,Linux 2.6版本发布,带来了对[[64位]]计算、本机POSIX线程库(NPTL)等多项重大改进<ref name=":2" />。2011年,Linux 3.0版本发布,恰逢内核诞生20周年<ref name=":2" />。此后内核采用更快的发布周期,约每2至3个月发布一个新版本<ref name=":2" />。2015年,Linux 4.0版本发布,引入了内核热补丁(live patching)功能<ref name=":2" />。2019年,Linux 5.0版本发布<ref name=":2" />。2026年4月14日,Linux 7.0内核正式发布,版本号由6.19变更为7.0,主要因托瓦兹认为6.19版本号过长<ref name=":10" />。Linux 7.0正式结束了[[Rust]]语言的“试验期”,确立了其在内核中的长期支持地位<ref name=":10" />。


2006年,SQLite被纳入[[Android]][[操作系统]];2007年,被纳入[[Apple]] [[iOS]]。<ref name=":5">[https://www.hackers-arise.com/post/the-sqlite-database-the-ubiquitous-database-that-few-understand The SQLite Database: The Ubiquitous Database that Few Understand - Hackers Arise]</ref> 此后,SQLite迅速渗透至各类计算平台。2011年,Hipp宣布计划为SQLite添加UNQL接口,并开发文档型数据库UNQLite。<ref name=":4" />
== 架构与设计 ==
Linux内核采用[[整块性核心]](monolithic kernel)架构,即整个操作系统内核运行在单一的地址空间中<ref name=":0" /><ref name=":7" />。所有内核模块(如设备驱动程序、文件系统、网络协议栈等)共享同一内存空间,模块之间通过直接调用函数进行通信<ref name=":7" />。这种设计简化了内核内部的交互,提高了运行效率<ref name=":7" />。


SQLite的源代码由Hipp及其小型团队通过Fossil分布式版本控制系统维护,不接受外部贡献,以确保代码完全处于公有领域。<ref name=":1" /> Hipp将SQLite测试至航空软件标准,实现了100%分支覆盖率,此后Android等平台的bug报告显著减少。<ref name=":2" />
尽管是整块性核心,Linux内核支持动态加载和卸载内核模块(Loadable Kernel Modules,LKM)<ref name=":1" /><ref name=":9" />。设备驱动程序可以以模块化的形式设置,并在系统运行期间直接装载或卸载,无需重新编译整个内核或重启系统<ref name=":0" /><ref name=":7" />。


== 技术特性 ==
Linux内核支持多种[[指令集架构]],包括[[x86]]、[[ARM]]、[[RISC-V]]、[[PowerPC]]、[[SPARC]]等<ref name=":8">[https://baike.baidu.com/item/linux%E5%86%85%E6%A0%B8/10142820?view=home Linux内核 — 百度百科(移动版)]</ref><ref name=":10" />。内核通过架构抽象层(Arch abstraction layer)抹去不同硬件架构之间的差异,提供统一的接口<ref name=":5" />。


== 主要子系统 ==
=== 无服务器架构 ===
Linux内核由多个子系统组成,主要包括<ref name=":0" /><ref name=":5" /><ref name=":7" />:


与传统客户端/服务器数据库不同,SQLite没有独立的服务器进程。<ref name=":6">[https://www.sqlite.org/serverless.html SQLite Is Serverless - sqlite.org]</ref> 应用程序通过函数调用直接与数据库文件交互,在同一进程内完成数据读写,避免了进程间通信的开销。<ref name=":0" /> 任何能够访问磁盘的程序均可使用SQLite数据库,无需安装、配置或启动服务。
* '''系统调用接口'''(System Call Interface,SCI):提供从用户空间到内核空间的函数调用机制,是应用程序与内核交互的入口<ref name=":5" />。
* '''进程管理'''(Process Management):负责进程的创建、调度、终止以及进程间通信(IPC)。进程调度器(Process Scheduler)管理CPU资源,确保各进程以公平的方式访问CPU<ref name=":5" /><ref name=":8" />。
* '''内存管理'''(Memory Management):管理系统的物理内存和虚拟内存,提供内存分配、回收、分页及交换等功能<ref name=":0" /><ref name=":5" />。
* '''虚拟文件系统'''(Virtual File System,VFS):为不同的文件系统(如[[ext4]]、[[XFS]]、[[Btrfs]]等)提供统一的抽象接口<ref name=":5" /><ref name=":0" />。
* '''网络堆栈'''(Network Stack):实现各种网络协议(如[[TCP/IP]]),管理网络设备的通信<ref name=":0" /><ref name=":5" />。
* '''设备驱动程序'''(Device Drivers):控制和管理硬件设备,是内核与硬件交互的桥梁<ref name=":0" /><ref name=":7" />。


== 版本与发布 ==
=== 零配置 ===
Linux内核使用语义化版本号,格式为A.B.C<ref name=":2" /><ref name=":7" />。主版本号A在内核发生重大变化时递增(历史上仅发生过数次)<ref name=":7" />。次版本号B为偶数时代表稳定版本(stable),适合生产环境使用;为奇数时代表开发版本(development),包含实验性功能<ref name=":2" /><ref name=":7" />。补丁版本号C用于修复bug和安全问题<ref name=":7" />。


SQLite无需安装程序、配置文件或管理权限。不存在需要创建的数据库实例,也无需分配[[用户]]访问权限或进行恢复操作。<ref name=":0" /> 系统崩溃或断电后无需人工干预即可自动恢复。这一特性使其特别适合嵌入式系统、移动应用及需要简化部署流程的场景。
内核同时维护多个版本的发布渠道<ref name=":3">[https://zh.wikipedia.org/wiki/Linux%E5%86%85%E6%A0%B8 Linux內核 — 维基百科(繁体中文)]</ref>:


=== 单文件存储 ===
* '''主线版本'''(Mainline):由托瓦兹维护,每2至3个月发布一个新版本<ref name=":3" />。
* '''稳定版本'''(Stable):在主线版本发布后,继续修复关键bug和安全问题<ref name=":3" />。
* '''长期支持版本'''(Long-Term Support,LTS):为特定版本提供长达数年的维护支持,适用于需要长期稳定的生产环境<ref name=":3" /><ref name=":4" />。


完整的SQLite数据库——包括表、索引、触发器、视图及数据本身——存储于单个跨平台磁盘文件中。<ref name=":7">[https://www.loc.gov/preservation/digital/formats/fdd/fdd000461.shtml SQLite, Version 3 - Library of Congress]</ref> 该文件格式可在32位与64位系统之间、大端序与小端序架构之间自由复制。数据库文件大小仅受限于底层文件系统,理论上限约140TB。<ref name=":7" />
== 许可证 ==
Linux内核根据[[GNU通用公共许可证]]第二版(GPL-2.0-only)的条款发布<ref name=":4" /><ref name=":5" />。内核源代码在COPYING文件中明确指定了许可证条款,并包含Linux系统调用例外(Linux-syscall-note),允许用户空间程序通过系统调用接口与内核交互而不受GPL的“传染性”约束<ref name=":4" /><ref name=":5" />。单个源文件可以拥有不同的许可证,但必须与GPL-2.0兼容<ref name=":5" />。


== 应用与影响 ==
=== 事务与并发 ===
Linux内核是全球使用最广泛的操作系统内核之一<ref name=":1" />。基于Linux内核的操作系统(即[[Linux发行版]])被部署在个人计算机、服务器、超级计算机、移动设备([[Android]])及各类嵌入式设备(如路由器、智能电视、网络附加存储等)中<ref name=":1" /><ref name=":9" />。Android作为基于Linux内核的操作系统,运行在全球数十亿移动设备上<ref name=":1" />。


SQLite支持完全兼容ACID(原子性、一致性、隔离性、持久性)的事务,即使在系统崩溃或断电后也能保证数据完整性。<ref name=":0" /> 其采用数据库级锁定机制,在事务开始时锁定整个数据库文件。在嵌入式数据库中,SQLite是唯一允许多个应用程序同时访问同一数据库的实现。<ref name=":6" />
Linux内核的开发由[[Linux基金会]]协调,全球数千名开发者参与贡献<ref name=":10" />。内核的开发模式对开源软件运动产生了深远影响,被视为大规模分布式协作开发的典范<ref name=":1" />。

=== 体积与性能 ===

SQLite核心库体积小巧,完整配置下不足400KiB,省略可选功能后可降至250KiB以下。<ref name=":0" /> 引擎以ANSI-C编写,不依赖外部库,可直接编译为单一源文件嵌入其他项目。<ref name=":7" /> 尽管体积极小,SQLite实现了SQL92标准的大部分功能,包括子查询、事务、触发器及视图等。

== 应用领域 ==

SQLite的部署范围极为广泛。它内置于Android、iOS、[[macOS]]、[[Windows]] 10及主流[[Linux]]发行版中,亦是[[Chrome]]、[[Firefox]]、[[Safari]]等[[浏览器]]的组成部分。<ref name=":7" /> 此外,Skype、iTunes、Dropbox、TurboTax、QuickBooks及Adobe Photoshop Lightroom等应用均采用SQLite作为本地数据存储方案。<ref name=":5" /> 在[[编程]]语言层面,[[PHP]]、[[Python]]及Tcl/Tk的标准库均包含SQLite绑定。

在嵌入式与物联网领域,SQLite被用于汽车多媒体系统、机顶盒、智能电视及航空电子系统(如Airbus A350)。<ref name=":2" /> 其作为应用文件格式的角色亦日益重要,例如OGC GeoPackage地理数据格式即基于SQLite构建,质谱数据格式mzDB亦采用其作为基础。<ref name=":7" />

== 与客户端/服务器数据库的比较 ==

SQLite与[[MySQL]]、PostgreSQL、Oracle等客户端/服务器数据库的设计目标不同。后者旨在实现企业级数据的共享存储,支持高并发、多用户及复杂查询优化;SQLite则专注于为单个应用程序提供本地数据存储,强调零管理开销与嵌入式部署。<ref name=":7" />

在客户端/服务器架构中,独立的服务器进程可提供更强的内存隔离与更精细的并发控制;SQLite的无服务器设计则消除了安装、配置与维护服务器的负担,但在高写入并发场景下性能受限。<ref name=":6" /> 因此,SQLite适用于移动应用、桌面软件、嵌入式设备及中小型网站,而传统客户端/服务器数据库更适合高并发[[Web]]服务、数据仓库及企业级应用。


== 参考文献 ==
== 参考文献 ==

<references />
<references />

2026年7月15日 (三) 21:04的版本

SQLite是一个嵌入式关系数据库引擎,以自包含(self-contained)、无服务器(serverless)、零配置(zero-configuration)及事务性(transactional)为设计特征。[1] 由美国开发者D. Richard Hipp于2000年创建,其源代码处于公有领域,可自由用于任何目的。[2] 整个数据库存储于单个跨平台磁盘文件中,应用程序通过链接SQLite库直接读写该文件,无需独立的服务器进程或管理配置。[1] 据官方估计,全球活跃的SQLite数据库数量超过一万亿个,使其成为历史上部署最广泛的数据库引擎。[3]

历史

SQLite诞生于2000年春季,创始人D. Richard Hipp当时受雇于General Dynamics,为美国海军导弹驱逐舰项目开发软件。[4] 项目最初使用HP-UX系统与IBM Informix数据库,但数据库服务器频繁故障导致应用程序崩溃,促使Hipp思考"为什么我们需要一个服务器?"[3] 这一疑问催生了SQLite的设计理念:一个无需安装、无需管理、直接嵌入应用程序的数据库引擎。

2000年8月,SQLite 1.0正式发布,最初基于GNU Database Manager(gdbm)构建。[5] 随后SQLite 2.0以自定义B树实现替代gdbm,并加入事务支持。2004年6月,SQLite 3.0.2 beta发布,引入了动态类型系统、UTF-8/UTF-16支持及更灵活的数据库模式,奠定了现代SQLite的架构基础。[5]

2006年,SQLite被纳入Android操作系统;2007年,被纳入Apple iOS。[6] 此后,SQLite迅速渗透至各类计算平台。2011年,Hipp宣布计划为SQLite添加UNQL接口,并开发文档型数据库UNQLite。[5]

SQLite的源代码由Hipp及其小型团队通过Fossil分布式版本控制系统维护,不接受外部贡献,以确保代码完全处于公有领域。[2] Hipp将SQLite测试至航空软件标准,实现了100%分支覆盖率,此后Android等平台的bug报告显著减少。[3]

技术特性

无服务器架构

与传统客户端/服务器数据库不同,SQLite没有独立的服务器进程。[7] 应用程序通过函数调用直接与数据库文件交互,在同一进程内完成数据读写,避免了进程间通信的开销。[1] 任何能够访问磁盘的程序均可使用SQLite数据库,无需安装、配置或启动服务。

零配置

SQLite无需安装程序、配置文件或管理权限。不存在需要创建的数据库实例,也无需分配用户访问权限或进行恢复操作。[1] 系统崩溃或断电后无需人工干预即可自动恢复。这一特性使其特别适合嵌入式系统、移动应用及需要简化部署流程的场景。

单文件存储

完整的SQLite数据库——包括表、索引、触发器、视图及数据本身——存储于单个跨平台磁盘文件中。[8] 该文件格式可在32位与64位系统之间、大端序与小端序架构之间自由复制。数据库文件大小仅受限于底层文件系统,理论上限约140TB。[8]

事务与并发

SQLite支持完全兼容ACID(原子性、一致性、隔离性、持久性)的事务,即使在系统崩溃或断电后也能保证数据完整性。[1] 其采用数据库级锁定机制,在事务开始时锁定整个数据库文件。在嵌入式数据库中,SQLite是唯一允许多个应用程序同时访问同一数据库的实现。[7]

体积与性能

SQLite核心库体积小巧,完整配置下不足400KiB,省略可选功能后可降至250KiB以下。[1] 引擎以ANSI-C编写,不依赖外部库,可直接编译为单一源文件嵌入其他项目。[8] 尽管体积极小,SQLite实现了SQL92标准的大部分功能,包括子查询、事务、触发器及视图等。

应用领域

SQLite的部署范围极为广泛。它内置于Android、iOS、macOS、Windows 10及主流Linux发行版中,亦是Chrome、Firefox、Safari等浏览器的组成部分。[8] 此外,Skype、iTunes、Dropbox、TurboTax、QuickBooks及Adobe Photoshop Lightroom等应用均采用SQLite作为本地数据存储方案。[6] 在编程语言层面,PHP、Python及Tcl/Tk的标准库均包含SQLite绑定。

在嵌入式与物联网领域,SQLite被用于汽车多媒体系统、机顶盒、智能电视及航空电子系统(如Airbus A350)。[3] 其作为应用文件格式的角色亦日益重要,例如OGC GeoPackage地理数据格式即基于SQLite构建,质谱数据格式mzDB亦采用其作为基础。[8]

与客户端/服务器数据库的比较

SQLite与MySQL、PostgreSQL、Oracle等客户端/服务器数据库的设计目标不同。后者旨在实现企业级数据的共享存储,支持高并发、多用户及复杂查询优化;SQLite则专注于为单个应用程序提供本地数据存储,强调零管理开销与嵌入式部署。[8]

在客户端/服务器架构中,独立的服务器进程可提供更强的内存隔离与更精细的并发控制;SQLite的无服务器设计则消除了安装、配置与维护服务器的负担,但在高写入并发场景下性能受限。[7] 因此,SQLite适用于移动应用、桌面软件、嵌入式设备及中小型网站,而传统客户端/服务器数据库更适合高并发Web服务、数据仓库及企业级应用。

参考文献