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

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

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

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

我有如下的三个问题:

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

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

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


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

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

【热门文章】
【热门文章】