加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux内核可以为自己的缓冲区使用可分页(可交换)内存吗?

发布时间:2020-12-14 02:18:27 所属栏目:Linux 来源:网络整理
导读:如果问题的答案是否定的,为什么这样做不是一个好主意?内核是否可以处理和修复内核模式中发生的页面错误?如果使用可分页存储器的代码仅作为中断下半部分的一部分执行,答案是否会改变? 谢谢! 解决方法 Can the Linux kernel use pageable (swappable) memo
如果问题的答案是否定的,为什么这样做不是一个好主意?内核是否可以处理和修复内核模式中发生的页面错误?如果使用可分页存储器的代码仅作为中断下半部分的一部分执行,答案是否会改变?

谢谢!

解决方法

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

“通常,在内核模式下运行时发生的页面错误会导致内核oops.但是有例外;在用户和内核空间之间复制数据的函数就是一个例子.” (来源: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?

是的,你可以有故障,但只有特殊情况.即调用“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?

没有.

问题的另一半是“通过允许内核被分页来获得什么”?通常,内核内存只占整体内存的一小部分.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读