为什么在Linux中将操作系统和内核分开对待?[关闭]


9

对于包括Ubuntu在内的任何Linux操作系统,人们倾向于区分内核操作系统。这对于Windows和OS X家族是正确的,但是为什么在Linux社区中如此普遍呢?有没有一种方法可以在不更新操作系统本身的情况下更新操作系统内核?或相反亦然?如果是这样,那将如何有用?


3
简单:自由。随意创建自己想要的版本的自由。核心?贝壳?桌面。去吧。
林茨温德'17

6
因为他们分开的?为何将窗口管理器与X服务器分开对待(因为它们是分开的),以及为什么将Shell与终端仿真器分开对待(也是因为它们也是分开的)的原因相同。现在,如果您要问为什么要这样设计……
user253751 '17

Ubuntu现在还运行在Windows 10内核之上,这表明它是真正的分离。当然,Windows并不带有X服务器,这会使事情有些复杂,但是如果缺少部件,这是可以预期的。
MSalters

@MSalters Windows中的窗口管理器有点棘手,是的。但是,如果有人真的想在Windows上运行X,则有很多方法可以解决该问题。对于局外人来说,最简单的方法可能是在现有窗口管理器之上的服务器“仿真器”,尽管我不知道它的映射程度(我上次见到X内部时,我并不十分希望)。我不会屏住呼吸-听起来好像没有很多人对在Windows上运行X感兴趣。
Lu安

Answers:


12

整个GNU / Linux系统是使用模块化方法构建的。您几乎可以升级(通常替换)单个模块,而无需接触其他模块。有问题的模块可以是引导加载程序,内核,外壳,命令,桌面环境,GUI应用程序等等。

当然,只要您能够正确管理依赖项,就可以。在围绕Ubuntu的发行版集中,APT用于自动解决依赖关系。

您可以使用以下命令安装另一个内核版本:

sudo apt install linux-image-<version>

只要APT允许,您就应该能够重新引导并使用选定的内核版本(通用,低延迟等)。或者您自己构建内核版本,例如Real-Time Linux,并将其与当前系统一起使用。


非常感谢,但是会一致吗?说,Ubuntu 14.04 LTS的内核版本为3.19.0,如果更新内核,则不再是14.04 LTS,对吗?因此,如果我稍后尝试更新整个系统,或者内置的更新机制(软件更新程序)为我带来了新版本,它将知道更新的内核版本吗?是否能够单独检查模块并仅进行必需的更改,而不会影响已更新的模块?
Dreams Wind'5

1
packages.ubuntu.com/search?keywords=linux-image长期的内核版本,每个版本的Ubuntu支持的列表。Ubuntu版本是由与内核版本不同的事物决定的,但是我真的不知道是哪个。。。如果您对此感兴趣,可以提出另一个问题。
Melebius'5

1
@AleksandrMedvedev很久以后,我发现了它!软件包/etc/issue提供的文件中注明了Ubuntu版本base-files。正如我已经写的那样,它与内核版本无关。
Melebius

5

众所周知,内核是OS的重要组成部分,在GNU / Linux发行版中,您可以轻松更新内核,而无需接触OS的其他部分。但是,我们只是在更新操作系统的一部分。

操作系统由内核空间和用户空间两部分组成。

因此,是的,如果只有新版本与您的当前用户空间兼容,则可以在不影响用户空间的情况下更新内核空间。

关于更新用户空间工具,这是另一回事。

运行时:

sudo apt-get upgrade

如果内核有可用更新,您将获得:

The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic

因此,您只在更新用户空间以及运行类似

sudo apt-get dist-upgrade

您正在更新包括内核在内的所有内容。

要将内核仅升级到较新版本,请使用以下方法:

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print $1}' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic

查找较新内核的列表,然后将其作为新软件包安装,例如:

sudo apt install linux-image-4.10.0-14-generic

绝对不是这样。
mook765 '17

纠正我;),所以我学到新的东西:)
拉韦西纳

3
sudo apt upgrade如果有新版本可用,也将升级内核。sudo apt full-upgrade会很好地删除packets的屁股,asudo apt upgrade不会做什么。
索伦A

由于我现在升级到新内核是一种安装,并且在使用upgrade子命令时,它将不会安装任何新软件包,也不会删除任何软件包,这就是我们使用的原因 dist-upgrade。至少apt-get以这种方式工作;)所以我更新了命令以防止任何混乱。
拉韦西纳

1
我对apt-command很有经验,经过简短研究后,看来您的答案现在是正确的,apt并且apt-get处理其他问题,请参阅hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt -command /…。因此,我们俩都需要一些知识……
mook765 '17

3

首先,有一些澄清,因为我觉得您不了解GNU / Linux系统是如何形成的。如果这对您来说不是什么新鲜事,请耐心等待:

“内核”不仅仅是运行的另一个程序,它还是提供基本功能的操作系统的一部分:如果要启动程序(例如,在命令行中键入“ ls”),则必须加载二进制文件从磁盘(包括用于定位文件的某些文件系统操作和用于读取文件的某些文件处理)创建的“进程环境”:分配内存,发出进程号等,等等。以前的所有活动(FS,从文件读取...)由系统库处理,但后者是内核函数。从某种意义上说,内核“就是操作系统”,而其他所有东西都只是围绕着它的装饰。

实际上,“ Linux”(仅仅是!)是一个内核,周围没有操作系统的其他部分。Linus Torvalds通过采用Andrew Tanenbaums的MINIX模板OS内核并对其进行完善来开始编写它,从而使其成为一个成熟可靠的实用内核。到目前为止,有开发此内核的Linus(以及许多其他贡献者/已经贡献者)。该内核仍然与UNIX非常相似,但不是UNIX内核。

“ GNU”最初是为了“改进”许多常见的UNIX命令而发起的。我不会讨论他们是否成功,但是他们肯定写了很多软件,并且在某一时刻有一些实用程序。他们甚至开始开发自己的OS内核(HURD),该内核主要基于UNIX,但肯定有所不同。但是直到今天,HURD仍处于早期开发阶段,几乎没有可行的解决方案。“ GNU”顺便说一句。GNU(不是UNIX)的缩写-他们试图克服UNIX的某些(感知的或真实的)局限性,目的是创建UNIX的后继者(再次:我不想进入讨论,如果他们成功了,或者不会-我不在乎它是“更好”还是“更差”,但这绝对是不同的!)。

因此,使用缺少内核的一组工具和缺少工具集的内核,将这两个工具放在一起是很自然的发展:创建了GNU / Linux。

但是,要使操作系统正常工作(并且可行),您不仅需要内核和工具集:还需要软件包管理系统,安装过程,模板配置以及...。

几个不同的人(或其小组)得出了这个结论,并使用GNU / Linux组合创建了自己喜欢的GNU / Linux系统,方法是添加了我上面所说的内容:他们创建了一个程序包管理器,一个程序包系统,安装程序等等。这些不同的群体(分别是他们努力的结果)是不同的分布。如今,已经有了三种不同的软件包管理器(适用于Debian和诸如* ubuntu的派生系统,RedHat的rpm和诸如Fedora,CentOS等的派生系统,以及用于ArchLinux的pacman),但是所有这些仅管理(本质上)的软件包相同:发出“ ls”或“ df”等时称为什么,

因此,“原则上”您可以单独更新内核,就像从我上面所说的所有软件的各种版本创建发行版的人所做的那样。

但是,这确实是一个很大的问题:因为不仅需要内核和一些其他软件,而且还需要记住很多其他事情,例如系统配置工具(systemd工具,某些发行版使用而某些发行版不使用),网络诸如NetworkManager之类的管理工具,而该工具又依赖于GNOME库的某些版本等。-“分发”是一件相当复杂的事情,如果您尝试更新内核,最终有可能会更新很多其他事物,因为存在许多相互依存关系。

还是“原则上”,如上:您还可以通过下载所有源代码,对其进行编译,找到一组有效的版本组合,放置一些打包系统(或使用现有的一个打包系统)来创建自己的发行版)-依此类推,直到您拥有可分发,可安装和可配置的系统。这就是像Ubuntu这样的发行版的创造者所做的事情,这并不是奇迹-只是很多复杂的工作,因此实际上,大多数用户都回避了它,并使用了可以立即使用的东西。

我希望这回答了你的问题。


GNU最初并不是为了“改进”许多常见的UNIX命令而发起的。GNU从一开始就是一个操作系统,目的是为了响应UNIX限制性专有的免费软件。您可以从他们的网站上阅读更多内容。他们决定将所有软件移植到Linux,因为在创建Linux时,GNU仍没有可用的内核。
伊恩·埃姆纳斯

3

最简单的答案与Ubuntu无关。它与GNU / Linux的构建方式有关。如果您尝试将其视为系统开发人员,则会看到两个世界,每个世界都由一个清晰的边框(ABI)隔开。

低级开发人员在其中工作的内核世界是一个独立的系统。它具有您通常在常规应用程序中可以找到的所有内容。唯一的区别是用户不是使用机器的实际人员,而是用户空间。内核“应用程序”是中间人,即使用机器的服务器-外壳中的幻影。

现在,用户空间是普通用户和开发人员正在玩的普通世界。它具有严格的API,规则,文件,最重要的是,它具有运行该计算机的抽象的幼稚图像。由于用户仅看到此部分,而这相当于发行版大小的99%,因此很容易将其命名为Operating System。正确的名称是将其称为软件发行版,它是由某个实体(规范,Fedora等)使用内核(Linux,HURD,BSD等)创建的,并使用一组工具(通常由GNU提供)构建)。

要回答您的问题,在GNU / Linux中(就像在Windows和OSX中一样,请相信我),您不仅可以更改内核,还可以更改整个体系结构(Linux内核和HURD内核),以及不会触动ABI,永远不要在用户世界中进行任何更改...过去,当真正的男人不得不从源代码构建内核时,您可以进行类似这样的几次更改,以获得一个笨拙的USB网络摄像头工作...现在,使用模块化内核,您只需安装一个模块,您就会获得一个全新的内核世界,而ABI(有时)会扩展为新功能...

同样,对于用户空间也是如此。当您从一个Ubuntu存储库安装新应用程序时(例如,有99%的时间),您最大的担心是其他用户空间组件的兼容性,而不是实际的内核。在某些情况下,内核版本(通过ABI)规定了可以在用户空间中安装的内容的范围,但是(至少对于开发人员而言)目标是使它消失。

需要考虑的另一件事是,您可以(而且非常容易)构建自己的,特殊的,独一无二的GNU / Linux发行版。获得一个内核,一些简单的脚本,几个应用程序,然后就可以设置好了。就是这么简单(看看OpenWRT GNU / Linux发行版,对于网络设备,整个发行版都适合16Mb左右)。


“尖锐的边界(ABI)。” 我认为您的意思是API。ABI是一个更好的术语,它是硬件接口的代码。另一方面,API是代码到代码的接口。
山姆

1

我猜它们是分开的,因为内核是关键部分。带有回归或更新失败的内核可能会造成很多损害。您可能想要较少地更新它;或仅在等待一段时间后才能确保没有人报告令人担忧的错误。

同样,一些高级或专业用户也可以重新编译内核以修改其行为,以更好地满足他们的需求。在这种情况下,您显然不希望每次升级时都将其自动替换为出厂版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.