gpt4 book ai didi

linux - Linux 内核能否为自己的缓冲区使用可分页(可交换)内存?

转载 作者:IT王子 更新时间:2023-10-29 00:13:51 26 4
gpt4 key购买 nike

如果问题的答案是否定的,为什么这样做不是一个好主意?内核不能处理和修复内核模式下发生的页面错误吗?如果使用可分页内存的代码仅作为中断下半部分的一部分执行,答案会改变吗?

谢谢!

最佳答案

Can the Linux kernel use pageable (swappable) memory for its own buffers?

没有。 “通常,在内核模式下运行时发生的页面错误会导致内核 oops。不过也有异常(exception);在用户空间和内核空间之间复制数据的函数就是一个例子。” (来源:https://lwn.net/Articles/270339/)

why is it not a good idea to do this?

在用户空间中,您可以简单地挂起用户进程并继续运行而不会引起任何问题。但是在内核空间中,您的线程可能已经获取了很多锁,或者禁用了中断。如果你必须停止页面错误,那么你有一个选择:

1) 当该页面从磁盘加载时,让整个 系统停止执行数百万条指令。这会导致糟糕的性能。

2) 增加复杂性,以便在任何时候,锁/中断都可以“解除缠绕”,从而允许其他内核线程继续进行。

Can the kernel not handle and fix page faults that occur in kernel mode?

是的,你可以有错误,但只是特殊情况。 IE。调用“get_user_page”时不允许有锁。这让内核“切换开”任务,就好像它处于用户模式一样。如果您关闭了中断或取消了锁定,内核的其余部分将无法运行。

Does the answer change if the code that uses pageable memory only executes as part of the bottom-half of an interrupt?

没有。

问题的另一半是“允许内核被调出有什么好处”?通常,内核内存仅占总内存的一小部分。

关于linux - Linux 内核能否为自己的缓冲区使用可分页(可交换)内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18198059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com