Intereting Posts
адрес источника, выбранный в случае нескольких адресов IPv4 объединить несколько файлов на основе первого столбца и сохранить проблемы с памятью Отказ в доступе к PAM запрещен Проблема с задержкой блокировки Caps Может ping Debian VM через IP, но не через имя хоста Является ли удаление Perl Рекомендацией для упрочения системы? Сценарий Bash, чтобы сигнализировать одновременно исполняемый экземпляр (тот же скрипт) о состоянии и счетчике приращения Ищете инструмент, похожий на плагин Security Advisor для WHM, который может работать на CentOS 7 без WHM Временное отключение сеанса ssh влияет на запущенную программу? Проблемы с ARIA2C и базовыми функциями auth-WGET Что делает `du-hb`? Как архивировать почтовый ящик POP3? Где исходный код реализации «scanf»? SSH от клиента до встроенного Linux через сервер Ubuntu 12.04 не загружается, запрашивает низкий графический режим, не работает apt-get, потому что файловая система доступна только для чтения

Что такое адресное пространство пользователя и какова его цель?

Я читаю о процессах. Я наткнулся на тему «Как создается процесс», в котором я столкнулся со следующим:

Образ процесса, просматриваемый ядром, запускается в собственном user address space – защищенном пространстве, которое не может быть нарушено другими пользователями. Это адресное пространство имеет несколько сегментов: –

а. Текстовый сегмент
б. Сегмент данных
с. Пользовательский сегмент

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

Память (RAM) для процесса linux или unix – это просто линейный массив байтов. Каждый байт имеет число от 0 до некоторого максимума. Это процессы «адресного пространства». Размер адресного пространства зависит от того, является ли он 32-разрядным или 64-битным ЦП, но любой байт в памяти может быть прочитан или написан на основе этого байтового адреса, который является просто числом.

Процесс имеет разные части, например исполняемый код, данные, с которыми он работает, и последний набор записей активации для функции, вызываемой исполняемым кодом. Это сегменты. Часть адресного пространства посвящена исполняемому коду, это «сегмент кода». Другая часть адресного пространства выделяется для инициализированных переменных (обычно глобальных переменных), которые могут быть сегментом данных, хотя обычно это имя называется «сегментом данных». « Сегмент BSS » обычно существует для неинициализированных переменных, и обычно вы можете развить этот сегмент. Стек LIFO записей активации функций обычно не отображается явно.

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

И тогда возникает вопрос о формате исполняемого файла. Большинство Linux или Unix-процессов имеют формат файла «ELF» , хотя Mac используют формат Mach-O. Большое начальное адресное пространство процесса имеет соответствующие фрагменты исполняемого файла.

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

Что касается адресного пространства … для каждого запущенного процесса существует адресное пространство пользователя. Это может привести к тому, что один процесс будет записывать данные другого процесса и разбивать второй процесс. То есть, адресные пространства используются для того, чтобы багги-программы могли разрушать другие программы. Кроме того, сегмент адресных пространств обрабатывает данные друг от друга, позволяя программам одного пользователя хранить информацию в памяти, которую вы бы не хотели видеть другим пользователям. Адресные пространства позволяют контролировать доступ к данным в памяти.