为什么说Linux内核是宏内核?
为什么说Linux内核是宏内核?
在AI时代,还需要了解操作系统的相关知识吗?
我觉得很有必要,尤其是现在AI Agent的发展,需要对操作系统、虚拟化及容器、包管理等各种技术有深入的了解,才能对AI Agent实现的基础设施有个大概的认识。Linux内核与Linux系统
一个Linux系统是指运行Linux的一台设备,有大有小,可以是一个小的手环、录音笔,也可以是一个超大的服务器,比如nvidia的AI服务器。从软件角度定义,一个Linux系统是指围绕Linux内核构建的一个完整、可用的操作系统。- GNU工具集: 提供了绝大多数基本的命令行工具(如bash, grep, gcc, cp, rm等)。这正是为什么许多人(尤其是GNU项目)更倾向于称其为 “GNU/Linux系统” 的原因。
【说明】这里提到的bash就是我们通常看到的Linux的命令行,这是Linux启动后的第一个交互工具,必不可少。对于嵌入式系统是busybox这样的工具,这些工具都属于用户态工具■ 软件包管理系统: 如APT(Debian/Ubuntu)、YUM/DNF(Fedora/RHEL)、Pacman(Arch),用于安装和管理软件。【说明】当软件系统越来越复杂,软件版本依赖关系越来越重要,需要各种包管理工具来搭建一个Linux系统,自己手工选择软件会变得极其困难。■ 图形化桌面环境: 如GNOME, KDE Plasma, XFCE等,提供用户熟悉的窗口界面。【说明】对于Linux设备来讲,多数场景下都用不到这些桌面环境,嵌入式系统会自己做显示界面,服务器会通过网络对外提供服务,很少有人会用Linux的桌面来办公。■ 各种应用程序: 从文本编辑器、浏览器到办公套件、媒体播放器。■ 系统服务和守护进程: 如网络管理、打印服务、日志服务等。【说明】对于Linux服务器来讲,最重要的是通过网络提供各种业务服务,webservice是常见的一种选择,也可以是其他各种的网络服务,有各种网络协议要支持。Ubuntu, Fedora, Debian, openSUSE, Arch Linux, CentOS 等等。为什么需要这些发行版?
因为基于Linux内核来构造一个可以运行的系统,技术挑战还是相当高的,所以需要有人帮忙提前做好,有收费的,也有免费的。通常来讲,一个发行版在标准的PC或服务器上可以直接运行,这是因为发行版已经集成了对这些通用硬件的驱动程序和支持。如果是自己开发一个硬件设备,那么就需要根据设备的硬件配置和软件需求,在通用的发行版的基础上,自行进行裁剪,Linux的系统组合千变万化,所以需要具备一定的技术水平才能做到。Linux与开源社区
最早接触Linux的时候,有个很大的误区,以为Linux就代表了开源。后来才理解,Linux内核仅仅是开源社区的一个代表性贡献,实际上Linux能够运行,也依赖开源社区提供的其他大量工具和软件的支持,比如GNU,FSF等。下面是DeepSeek给出的GNU和FSF的介绍,及三者的关系:GNU 是GNU‘s Not Unix! 的递归缩写,是理查德·斯托曼在1983年发起的一个宏伟计划,目标是创建一个完全由自由软件构成的、类Unix的完整操作系统。核心成就:在1990年代初,GNU项目已经完成了几乎整个操作系统所需的所有关键工具和库,除了最核心的部分——内核。Glibc: GNU C语言标准库,几乎所有程序都依赖它。Bash: 功能强大的命令行解释器(Shell)。Coreutils: 包含ls, cp, cat等所有基础命令行工具。FSF是自由软件基金会,由斯托曼于1985年创立。它是GNU计划的指导、管理和法律支持机构。主要贡献有:哲学定义:提出了“自由软件”的严格哲学,强调用户有运行、学习、修改和分发软件的自由(四大自由)。法律武器:创造了GNU通用公共许可证,即著名的GPL。这是一个“著佐权”许可证,确保任何基于GPL软件衍生的作品也必须以GPL发布,从而在法律上保障了软件的自由属性能够传递下去。【说明】基于Linux软件开发的都知道GPL License,就是这个许可证保证了对Linux内核本身的修改或与之静态链接的衍生作品,在分发时必须开源。Linux是由林纳斯·托瓦兹于1991年独立发起的一个类Unix的操作系统内核项目。它本身不是GNU计划的一部分。历史性结合:当Linux内核开发出来后,人们发现,将GNU项目已经完成的海量工具、编译器和库,与Linux内核组合在一起,就形成了一个完整、可用的操作系统。这是技术与历史的偶然,也是自由软件理念的必然结果。为什么说Linux内核是宏内核?
宏内核是一种操作系统内核的设计范式,其核心思想是:l将操作系统的核心功能(如进程管理、内存管理、文件系统、设备驱动、网络协议栈等)全部运行在内核空间(Kernel Space)的一个单一、大的可执行模块中。l系统启动时或运行时可以动态加载/卸载内核模块(Loadable Kernel Modules, LKM),但这些模块一旦加载,就运行在内核态。Linux 内核是宏内核,因为它将操作系统的主要功能(调度、内存、文件系统、网络、驱动等)全部实现在内核空间,通过高效的函数调用协作,而非依赖用户态服务和消息传递。【说明】Linux内核的所有核心组件和加载的内核模块都在同一个地址空间运行是非常重要的概念,意味着各种内核软件彼此都可以看到,各个软件的特权级别是一样的。也就意味着,非常重要的内核调度、文件系统、网络模块等,与小白开发的任何一个内核模块,都是在一个地址空间。如果小白开发的内核模块有问题,就可能出现“踩内存”(非法内存访问)的情况,会导致整个Linux系统崩溃,也就是kernel panic的情况。这是宏内核的最大问题,所以内核模块的开发一定要非常小心,非必要不要在内核态进行开发,最好都在用户态进行开发,使用stable的内核版本,减少改动。宏内核的最大好处也是同一地址空间带来的,下图总结了Linux宏内核的优势和劣势:Linux内核介绍
下面是网站主页,红色框的longterm版本是开发首选版本,如果不需要新版本的功能,尽量选择不太新的版本更安全,但也不能太旧,以免软件兼容性有问题。【注意】在Linux下,文件名是分大小写的,而Windows下文件名是不分大小写的,所以下载的tar包如果是Windows下解压会有一些报错,只能大概看看,只有Linux系统下查看才是完整的。Linux内核对CPU架构的支持是非常丰富的,打开arch目录就是Linux支持的各种处理器架构,我们常用的用红框标识,如下图:Linux内核是怎么对外提供服务的?下次再接着写。
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。