Следующее предполагает ядро в стиле * nix, но те же понятия также переводятся в Windows. В других ядрах ОС могут использоваться другие концепции:
Либо реализуйте системный вызов mmap
в своем коде, чтобы отобразить выделенную память на стороне ядра в пространство пользователя. Или просто внедрите системные вызовы read
и write
для чтения / записи непосредственно из / в память пространства пользователя.
Специально для Linux: если вы хотите асинхронно обращаться к пользовательской памяти, используйте vmsplice
с флагом SPLICE_F_GIFT
. Примитивы синхронизации, такие как мьютексы или семафоры, обычно не пересекают границу пространства пользователя / пространства ядра. Если вы хотите работать асинхронно, вам придется реализовать файловую операцию poll
, чтобы сигнализировать пользовательскому пространству, когда операция «файл» завершена. .