Как процесс может ссылаться на объекты, которые не находятся в его адресном пространстве (например, файл или другой процесс)? - PullRequest
2 голосов
/ 02 марта 2012

У меня есть домашнее задание:

Explain how a process can refer to objects that are not in its 
address space (for example, a file or another process)?

Я знаю, что каждый процесс создается с адресным пространством, которое определяет доступ к каждому ресурсу, отображенному в памяти в этом процессе (получено из этой книги) . Я думаю, что вторая часть этого вопроса не имеет смысла. Как процесс может ссылаться на объект другого процесса? Разве ОС не должна ограничивать это? возможно я не правильно понимаю вопрос. В любом случае, если я правильно понял вопрос, единственный способ, который будет возможен, - это использовать ядро, которое я считаю.

Ответы [ 3 ]

1 голос
/ 02 марта 2012

Вы можете прикрепить в качестве отладчика к приложению.Или, если вы используете Windows, вы можете использовать Windows Хуки

1 голос
/ 04 марта 2012

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

Прекрасным примером является отладчик. Он использует механизм трассировки процессов (например, чтение из файловой системы / proc или системные вызовы ptrace ()), чтобы получить доступ для чтения и записи из другого адресного пространства.

Существует также концепция разделяемой памяти, когда определенный фрагмент памяти явно разделяется между двумя процессами и может управляться через объект общей памяти.

0 голосов
/ 02 марта 2012

Я исследовал и у меня есть ответ на файловую часть вопроса.

первое из адресного пространства - это набор адресов, которые нить может ссылаться. Обычно эти адреса ссылаются на исполняемый файл в памяти Некоторые операционные системы позволяют программисту читать и записывать содержимое файла, используя адреса из процесса адресное пространство . Это достигается открытием файла, а затем привязкой каждого байта в файле к адресу в адресном пространстве.

Вторая часть вопроса - это то, на что я отвечу:

Большинство операционных систем не позволяют читать адреса из другого процесс. Это будет означать огромный риск для безопасности. Я не слышал ни о каких операционная система, которая позволяет вам читать данные из потока, который не принадлежит текущему процессу. Короче говоря, я верю, что это не будет возможно.

...