Связанный список в разделяемой памяти, ядро ​​Linux - PullRequest
1 голос
/ 25 февраля 2012

Это был вопрос собеседования, и я все еще не уверен в этом.

Реализация 2 API - 1. Доступ к заголовку связанного списка, который присутствует в общей памяти

2.чтобы получить доступ к элементу после заголовка

Ядром в вопросе является Linux.

Я прочитал на форуме, что вместо использования указателей следует использовать смещение (это все еще связанный список, еслиуказатели не используются)

Я не совсем понимаю эту часть.Также любопытно, что произойдет преобразование адресов, учитывая наличие виртуальной памяти.

Извините за смутный вопрос, но это все, что я могу выяснить.

Любая помощь приветствуется.

Спасибо

1 Ответ

6 голосов
/ 25 февраля 2012

Вы не можете использовать указатель, потому что нет способа гарантировать, что совместно используемая память отображается в один и тот же адрес в обоих процессах. Один процесс не знает, что делать с указателем на виртуальное адресное пространство другого процесса.

Таким образом, вместо этого вы сохраняете смещение в блоке общей памяти. Оба процесса точно знают, что такое 712-й байт блока разделяемой памяти. Чтобы получить доступ к такому смещению, вы добавляете смещение к базовому адресу, по которому блок разделяемой памяти отображается в этом конкретном процессе, и это создает указатель, который можно использовать в этом конкретном процессе.

...