我想从技术角度了解;BSD Kernel和之间有什么区别Linux Kernel。
在 Linux 中,我们可以下载源内核然后patch它make和make modules它。即使我们有多种工具来编辑内核,config例如menuconfig,xconfig和 ... 。
但是我在 BSD 上找不到这么广阔的领域。首先,我可以下载BSD kernel吗?我怎么能配置呢?和 ...
所以我要问的是:(不涉及祖先和词源)
Kernel在每种情况下(在)依赖于分布的?Kernel适用于工作的每个和工具的方法?kernel分布范围之外的可用性?( Kernel Sources)?Kernels每种情况下可用的风味( X??BSD/ Linux) 喜欢XEN/Vmware/GEN吗?所有调度都是抢占式的:如果一个具有更高静态优先级的进程准备好运行,当前运行的进程将被抢占并返回到等待列表中等待它的静态优先级。
这会导致非常低的 nice 值 (+19) 在系统上有任何其他更高优先级负载时真正为进程提供很少的 CPU,并使高 nice 值 (-20) 将大部分 CPU 提供给需要它的应用程序
那么,更改 nice 值将如何影响程序的执行?它是否类似于 RT 调度(具有较高 nice 值的程序将中断具有较低 nice 值的程序)?
互联网上的所有信息都是如何使用nice,以及如何更改进程的优先级。没有链接解释具有不同优先级的进程究竟是如何工作的。我什至找不到源代码。
在 Linux 内核中,文档CONFIG_NUMA说:
Enable NUMA (Non Uniform Memory Access) support.
he kernel will try to allocate memory used by a CPU on the
local memory controller of the CPU and add some more
NUMA awareness to the kernel.
For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.
Run Code Online (Sandbox Code Playgroud)
我有一个 Intel Core i7 处理器,但 AFAICT 它只有一个 NUMA 节点:
$ numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 …Run Code Online (Sandbox Code Playgroud) 当我编译自己的内核时,基本上我所做的如下:
我从 www.kernel.org 下载源代码并解压。
我将之前的内容复制.config到源代码中,并make menuconfig根据内核的新策略查看新选项并修改配置。
然后,我编译它: make -j 4
最后,我安装它:su -c 'make modules_install && make install'.
经过几次测试,我删除了旧内核(从/boot和/lib/modules)并使用新内核完全运行(这最后一步救了我好几次!这是一个专业提示!)。
问题是,/boot/initrd.img-4.x.x与我的发行版中的那些相比,我总是得到一个巨大的。这里以我当前/boot/目录的内容为例:
# ls -alFh
total 243M
drwxr-xr-x 5 root root 4.0K Mar 16 21:26 ./
drwxr-xr-x 25 root root 4.0K Feb 25 09:28 ../
-rw-r--r-- 1 root root 2.9M Mar 9 07:39 System.map-4.4.0-1-amd64
-rw-r--r-- 1 root root 3.1M Mar 11 22:30 System.map-4.4.5
-rw-r--r-- 1 root root …Run Code Online (Sandbox Code Playgroud) 我刚在这里读到:
- 每个进程最多 128TiB 虚拟地址空间(而不是 2GiB)
- 64TiB 物理内存支持而不是 4GiB(或 64GiB 与 PAE 扩展)
这是为什么?我的意思是,物理内存支持受到内核或当前硬件的限制?
为什么您需要的虚拟内存空间是实际可寻址的物理内存的两倍?
比方说,从内核 2.6 开始。
我观察系统上所有正在运行的进程。
孩子的PID总是大于父母的PID吗?
是否可能有“反转”的特殊情况?
我回想起最近的编程入门,记得编写了一个 C++ 程序,该程序故意随机读取和写入内存地址。我这样做是为了看看会发生什么。
令我惊讶的是,在我的 Windows 98 PC 上,我的程序会产生一些非常奇怪的副作用。有时它会切换操作系统设置,或产生图形故障。通常它不会执行任何操作或只是使整个系统崩溃。
后来我了解到这是因为 Windows 98 没有限制用户进程可以访问的内容。我可以读取和写入其他进程甚至操作系统使用的 RAM。
据我了解,随着 Windows NT 的出现,这种情况发生了变化(尽管我认为花了一段时间才得到纠正)。现在,Windows 会阻止您查看不属于您的进程的 RAM。
我依稀记得后来在 Linux 系统上运行我的程序并没有得到那么多有趣的结果。如果我理解正确的话,这至少部分是由于用户空间和内核空间的分离造成的。
所以,我的问题是:
Linux 是否曾一度没有将用户空间和内核空间分开?换句话说,我的流氓程序是否曾经对 Linux 系统造成过类似的破坏?
我有一台想摆弄的一次性廉价笔记本电脑,Thinkpad SL 500。
困扰我的是两个 LED,一个用于无线连接,一个用于休眠,它们根本不亮,尽管它们可以正常工作,但我已在 Windows 上尝试过。
所以我想为他们编写一个内核驱动程序,没什么大不了的,只是玩弄内核看起来是个好主意。
我的问题是我应该系统地遵循什么方法来找出哪些设备负责这些 LED(一般来说,不一定特定于我的硬件),以及哪些驱动程序负责其他两个 LED 工作,蓝牙和电池指示灯?
当我说方法论时,我真正的意思是方法论,一步一步,每一步都有原因,就像我在这里给其他人的答案一样:&&在 void *p = &&abc; 中是什么意思;
我精通使用静态代码分析器和 co 对大型代码存储库进行 fgrepping,但我认为我缺乏硬件知识阻碍了我解决这个问题。
PS:我使用的是 ArchLinux,所以几乎是最新的内核版本。
我不订阅 linux-kernel 邮件列表,但我想获得一组几周前发布的补丁并将它们应用到我的内核中进行测试。我对修补、构建等非常熟悉。我的问题是,获得此补丁集副本的最佳方法是什么?它不适用于我所知道的任何 Git 存储库,它只是被发布到邮件列表中进行讨论。
我找到了许多存档 linux-kernel 邮件列表的站点,我可以在那里看到补丁集,但是这些站点都没有下载原始电子邮件的任何方法(我可以找到),因此我可以使用“git apply “或“补丁”或其他什么。只需从我的网络浏览器复制/粘贴内容,由于空格差异等,它似乎不会很成功。
人们如何管理这个?
更新到内核 5.10.119 后,/proc/sys/kernel/random/entropy_avail卡在 256 并且移动鼠标时不会改变。以前是3000多。
# cat /proc/sys/kernel/random/entropy_avail
256
Run Code Online (Sandbox Code Playgroud)
另外,/proc/sys/kernel/random/poolsize下降到 256。以前是 4096。
这是一个错误吗?你能相信这个内核的新随机数生成器只有 256 个可用熵吗?