OSDev
http://osdev.su/

Как лучше сделать менеджер памяти
http://osdev.su/viewtopic.php?f=5&t=321
Страница 4 из 4

Автор:  phantom-84 [ 22 июн 2011, 12:43 ]
Заголовок сообщения:  Re: Как лучше сделать менеджер памяти

OK ...меня понимают те, с кем я часто обсуждаю подобные темы. "Закрепление" я обычно называю фиксацией или блокировкой памяти (это на будущее, чтобы было меньше недопонимания из-за расхождений в используемой терминологии).

Автор:  SII [ 22 июн 2011, 13:12 ]
Заголовок сообщения:  Re: Как лучше сделать менеджер памяти

Фиксация -- вполне понятная вещь (для меня), а вот блокировку я бы воспринял как получение монопольного доступа. В общем, терминология -- великая сила, особенно для создания путаницы :)

Ну а монтирование, вообще говоря, применимо только к внешним устройствам и имеет, естественно, исторические корни: под ним понималась физическая установка носителя (диска или ленты) на накопитель, а затем -- оповещение системы о том, что новый том доступен для работы (изначально ручное, впоследствии автоматическое). Для памяти этот термин никогда не использовался, поскольку никаких ручных операций ("монтажа") не требовалось в принципе.

Ну а возвращаясь к теме... Доступ к адресному пространству другой задачи (процесса) может требоваться не только загрузчику, но и, например, отладчику. Так что полноценная система должна давать такой доступ. Другое дело, что необходимо обеспечить необходимый уровень защиты (права доступа и всё такое).

Автор:  phantom-84 [ 22 июн 2011, 14:22 ]
Заголовок сообщения:  Re: Как лучше сделать менеджер памяти

Уже не помню, откуда появилось слово "блокировка". Наверное пошло от названия соответствующей ядерной функции.

Ну термин "монтирование" сильно заюзан у меня в ядре. Применительно к структуре VFS: монтирование (локального) корня, корневых входов (точек) и т.п. (означает присоединение, закрепление). Применительно к виртуальным устройствам: монтирование управляющей структуры, монтирование файловой системы и т.п. (означает блокировку устройства для монопольного доступа к нему и в то же самое время предоставление более высокоуровневого интерфейса взаимодействия с ним).

Отладка - одно из немногих разумных объяснений доступа к пространству другого процесса. И хотя я серьезно вопросами отладки не занимался, работа отладчика у меня укладывается в ту же схему, что и работа загрузчика - отладчик (точнее его "серверная" часть) как компонент ядра работает в отлаживаемом процессе. Ну и плюс примитивный вариант, когда отлаживаемый модуль запускается в процессе-отладчике. Не вижу здесь никакой необходимости в дополнительных средствах доступа к памяти другого процесса к тем имеющимся, которые предоставляет обычный IPC. Если я не прав, то поправьте меня.

Автор:  KIV [ 22 июн 2011, 14:58 ]
Заголовок сообщения:  Re: Как лучше сделать менеджер памяти

У меня микроядро, поэтому за загрузку процессов будет отвечать user-mode сервер. Соответственно у него должны быть механизмы для того, чтобы распределить память в новом процессе и скопировать туда код и данные из исполняемого файла. Да и для отладки такое может пригодится. И вообще много для чего. Не зря в таких ОС как Windows и Linux есть штатные средства для доступа к памяти других процессов. Разумеется, потом я планирую реализовать и систему прав доступа, чтобы процесс мог манипулировать памятью только тех процессов, которые находятся на более нижнем уровне прав доступа, либо на равне с ним. Таким образом процесс пользователя может делать что угодно с другими такими же процессами, но не может повлиять на какой-нибудь системный сервис. В свою очередь системный сервис может вообще всё.

Автор:  SII [ 22 июн 2011, 16:13 ]
Заголовок сообщения:  Re: Как лучше сделать менеджер памяти

У меня монолит, но, как сказал, из-за требований к предсказуемости времени исполнения критических функций ряд вещей из ядра вынесен (хотя при желании может быть внесён и в ядро -- ценой потери предсказуемости). Загрузчик, понятно, относится к числу таких плохо предсказуемых вещей, а посему находится снаружи.

Что касается контроля прав, то он должен быть более развитым, чем вытекает из того, что прочитал выше. Простое правило "права больше или меньше" не годится. Например, в Винде есть несколько категорий пользователей, не являющихся администраторами (продвинутые, обычные и гости), но это не значит, что продвинутый пользователь должен иметь доступ к задачам обычного пользователя или гостя: он должен иметь доступ только к своим собственным задачам, и всё. Лишь привилегированный пользователь (администратор) должен иметь возможность забираться в задачи других пользователей, да и то, думается, для безопасности по умолчанию это должно быть запрещено, просто у администратора есть полномочия, чтобы при нужде отключить такую защиту (она нужна для предотвращения случайного вторжения администратора туда, куда не надо).

Автор:  Himik [ 24 июн 2011, 18:48 ]
Заголовок сообщения:  Re: Как лучше сделать менеджер памяти

KIV писал(а):
У меня микроядро, поэтому за загрузку процессов будет отвечать user-mode сервер. Соответственно у него должны быть механизмы для того, чтобы распределить память в новом процессе и скопировать туда код и данные из исполняемого файла.

Лучше, чтобы этот user-mode сервер временно загружался в создаваемую задачу, тогда он сможет всё сделать в контексте нужной задачи без сложной манипуляции с памятью.
Всё-равно для полной инициализации приложения недостаточно будет куска памяти с кодом и данными. Это всего лишь 10% от необходимого. Среда выполнения гораздо сложнее приложения.

Страница 4 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/