关于内核空间与用户空间的问题

发布于 2022-09-02 16:13:50 字数 482 浏览 11 评论 0

看≪深入分析java web技术内幕≫中有这么一句话说NIO direct memory:

ByteBuffer.allocateDirect()分配的内存使用的是本机内存而不是Java堆上的内存,这也进一步说明每次分配内存时会调用操作系统的os::malloc函数。另外一方面直接ByteBuffer产生的数据如果和网络或者磁盘交互都在操作系统的内核空间中发生……

我有如下的三个问题:

  1. 不清楚os::malloc是不是c++语言。如果它是从用户空间分配内存,那么为什么后面说交互都在内核空间中发生?如果它是从内核空间分配内存,为什么与c语言的malloc不一致呢?

  2. java能直接分配、读写内核空间吗?

  3. c语言中可以直接在用户程序中直接或者间接分配以及读写内核空间吗?该如何做?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无可置疑 2022-09-09 16:13:50

1 allocateDirect()的区别在于这块内存不由java堆管理, 但仍然在同一用户进程内.
"交互都在内核空间中发生"是说read / write等系统调用过程中对这块内存的读写.

2/3. 这问题已经离web编程很远了. 你自己写个系统调用或者用一些不安全的方法可以做到, 但是这不是个正常的需求.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文