“非抢占式”、“抢占式”和“选择性抢占式”内核之间有什么区别?
希望有人能对此有所了解。
在浏览“dmesg 输出”时,我可以看到一个我无法正确理解的值列表。
Memory: 2047804k/2086248k available (3179k kernel code, 37232k reserved, 1935k data, 436k init, 1176944k highmem)
virtual kernel memory layout:
fixmap : 0xffc57000 - 0xfffff000 (3744 kB)
pkmap : 0xff800000 - 0xffa00000 (2048 kB)
vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB)
lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB)
.init : 0xc0906000 - 0xc0973000 ( 436 kB)
.data : 0xc071ae6a - 0xc08feb78 (1935 kB)
.text : 0xc0400000 - 0xc071ae6a (3179 kB)
Run Code Online (Sandbox Code Playgroud)
从值中我了解到我有 2GB RAM(物理内存)。但其余的事情对我来说似乎是魔术数字。
我想简要了解每个(fixmap、pkmap 等)(如果有更多疑问,我会将每个作为单独的问题发布)?
有人可以向我解释一下吗?
我想知道 Linux 中的库调用和系统调用有什么区别。任何能够很好地理解两者背后的概念的指针将不胜感激。
我想详细了解 fork() 和 vfork() 之间的区别。我无法完全消化手册页。
我还要澄清一下我的一位同事评论“在当前的 Linux 中,没有 vfork(),即使你调用它,它也会在内部调用 fork()”。
从手册页vfork():
vfork() 与 fork() 的不同之处在于父进程被挂起,直到子进程调用 execve(2) 或 _exit(2)。子进程与其父进程共享所有内存,包括堆栈,直到子进程发出 execve()。子进程不能从当前函数返回或调用 exit(),但可以调用 _exit()。
为什么孩子应该使用 an_exit()而不是简单地调用exit()?我希望这适用于vfork()和fork()。
内核中可能调用和不太可能调用之间的区别是什么。在搜索内核源代码时,我发现了这些语句。
# define likely(x) __builtin_expect(!!(x), 1)
# define unlikely(x) __builtin_expect(!!(x), 0)
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?
在阅读ramfs-rootfs-initramfs.txt 中关于 ramdisk 的内核文档时, 我有一个疑问,就像 ramdisk 解释的那样,那里与the-difference-between-initrd-and-initramfs 上的帖子中描述的 initrd 功能相同。
有人可以澄清我吗?
如果它是相同的,我读到它有很多缺点,但仍然在我的 Fedora PC 中,我看到
initrd-2.6.29.4-167.fc11.i686.PAE.img
在我的启动文件夹中。和上面提到的initrd有区别吗??
UPDATE_EDIT :
在 文章中我什至看到一个命令
# update-initramfs -u all
update-initramfs: Generating /boot/initrd.img-2.6.18-5-amd64
那么这个 initramfs 是如何链接到 initrd.img 的呢?
在阅读 Linux 设备驱动程序时,我可以理解进程描述符(类型struct task_struct)包含有关特定任务的所有信息。进程描述符由slab分配器动态分配。
我想知道的是需要引入一个称为thread_info存储在堆栈底部的新结构(假设为 x86)。为什么这样做?
为什么不能将当前正在执行的任务地址 ( struct task_struct)的地址放入内核堆栈?