我曾经读到过,微内核架构的一个优点是您可以停止/启动网络和文件系统等基本服务,而无需重新启动整个系统。但是考虑到如今的 Linux 内核(是否总是如此?)提供了使用模块来实现相同效果的选项,微内核的(剩余)优势是什么?
我想确切地了解什么是用户空间?我问的每个人都说:“任何不是内核的东西”。但这对我来说不是有形的。当我读到内核可以在用户空间或类似的东西上运行该驱动程序时;我无法想象会发生什么!。因此,如果有人在这方面让我直截了当,我将不胜感激。
我正在运行 arch linux 的无头服务器安装。内核升级的高速率让我在维护方面有些头疼,因此我希望切换到lts 内核。
我已经安装了linux-lts和linux-lts-headers包。现在,我安装了两个内核,但我有点不知道如何从这里继续。该文档解释:
[...] 您需要更新引导加载程序的配置文件以使用 LTS 内核和 ram 磁盘:
vmlinuz-linux-lts和initramfs-linux-lts.img.
我已经在引导部分找到了它们:
0 ? root@host ~ $ ll /boot/
total 85M
4,0K drwxr-xr-x 4 root root 4,0K 21. Mai 13:46 ./
4,0K drwxr-xr-x 17 root root 4,0K 4. Apr 15:08 ../
4,0K drwxr-xr-x 6 root root 4,0K 4. Apr 14:50 grub/
27M -rw-r--r-- 1 root root 27M 20. Mai 17:01 initramfs-linux-fallback.img
12M -rw-r--r-- 1 root root 12M …Run Code Online (Sandbox Code Playgroud) 所以,我以为我对此有一个很好的理解,但只是进行了一个测试(以回应我不同意某人的对话)并发现我的理解有缺陷......
尽可能详细地说明当我在 shell 中执行文件时到底发生了什么?我的意思是,如果我输入:./somefile some arguments进入我的 shell 并按回车键(并且somefile存在于 cwd 中,并且我有读取+执行权限somefile),那么引擎盖下会发生什么?
我以为答案是:
exec,将路径传递给somefilesomefile并查看文件的幻数,以确定它是否是处理器可以处理的格式somefile被读取/映射到内存。创建堆栈并执行跳转到代码的入口点somefile,并ARGV初始化为参数数组 (a char**, ["some","arguments"])exec()如上所述生成一个新进程,但使用的可执行文件是shebang(例如/bin/bash或/bin/perl)引用的解释器并somefile传递给STDIN但是有人告诉我,如果文件是纯文本,那么 shell 会尝试执行命令(就像我输入了bash somefile)。我不相信这一点,但我只是尝试了一下,结果是正确的。所以我显然对这里实际发生的事情有一些误解,并想了解机制。
当我在我的 shell 中执行一个文件时到底发生了什么?(尽可能多的细节是合理的......)
根据内核文档:
This control is used to define how aggressive the kernel will swap
memory pages. Higher values will increase aggressiveness, lower values
decrease the amount of swap.
Run Code Online (Sandbox Code Playgroud)
然而,这有点模糊。我试图弄清楚参数最终控制什么。我知道它会调整内核尝试换出页面的积极程度,但它会影响内核代码中的哪些决策过程?
它是否会在内核将其换出之前调整页面必须在多长时间前被访问?如果是这样,默认值 60 代表什么?增加/减少 1 会改变多少(公式会很好)?
或者它是否根据访问频率换出页面?
或者是其他东西?
我有一个专门购买的 USB 灯,以便在某个时间以编程方式将其关闭,因此我需要断开其 USB 端口的电源。
我相信我在 usb6 上有一个 USB 集线器。灯连接到此集线器中的端口之一:
#myhost$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 …Run Code Online (Sandbox Code Playgroud) 我只是想知道为什么 Linux NFS 服务器是在内核中实现的,而不是用户空间应用程序?
我知道存在用户空间 NFS 守护程序,但这不是提供 NFS 服务器服务的标准方法。
我认为将 NFS 服务器作为用户空间应用程序运行将是首选方法,因为它可以提供额外的安全性,让守护程序在用户空间而不是内核中运行。它也符合做一件事并做好它的常见 Linux 原则(并且守护进程不应该是内核的工作)。
事实上,我能想到的在内核中运行的唯一好处是上下文切换带来的性能提升(这是一个有争议的原因)。
那么是否有任何记录在案的原因,为什么它是这样实施的?我尝试谷歌搜索,但找不到任何东西。
当我运行类似的命令时ls */*/*/*/*.jpg,出现错误
-bash: /bin/ls: Argument list too long
Run Code Online (Sandbox Code Playgroud)
我知道为什么会发生这种情况:这是因为内核对命令参数的空间量有限制。标准建议是更改我使用的命令,以避免需要太多的参数空间(例如,使用find和xargs)。
如果我不想更改命令怎么办?如果我想继续使用相同的命令怎么办?我怎样才能让事情“正常工作”,而不会出现这个错误?有哪些解决方案?
我正在尝试在 Fedora 19 中安装 VMWare 播放器。我遇到了多个用户遇到的问题,其中 VMware 播放器找不到内核头文件。我已经安装了kernel-headers和kernel-devel包yum,出现的文件/usr/src/kernels是:
3.12.8-200.fc19.x86_64
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,uname -r我的 Fedora 内核版本是:
3.9.5-301.fc19.x86_64
Run Code Online (Sandbox Code Playgroud)
这是一个不同的版本。这似乎意味着当我将 VMware player 指向内核路径时,我收到此错误:
C header files matching your running kernel were not found.
Refer to your distribution's documentation for installation instructions.
Run Code Online (Sandbox Code Playgroud)
如何安装正确的内核,如果不是,我应该将 VMware 指向哪里/usr/src/kernels/<my-kernel>?
我的问题是关于从单独的 /boot 分区启动 Linux 系统。如果大多数配置文件位于单独的 / 分区,内核如何在启动时正确挂载它?
对此的任何详细说明都会很棒。我觉得好像我错过了一些基本的东西。我最关心的是操作的过程和顺序。
谢谢!
编辑:我想我需要问的更多是在根内核参数中使用的开发文件的行。例如,假设我将我的根参数设为 root=/dev/sda2。内核如何拥有 /dev/sda2 文件的映射?