![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Форт-подобная машина Владимира Кладова
homm © (2007-02-17 14:05:00)Итак, завел отдельную ветку :)
для тех, кто все еще в танке:
http://kolmck.net/sf/architecture_contrary_to.zip
Все-же есть вопросы. Правильно ли я понимаю, что мы получаем в распоряжение ровно половину памяти от всего имеющегося объема? Остальная идет на описание правд доступа к первой половине в виде 4-х байтных дескрипторов для каждых 4-х байт в основной памяти. Но у каждого процесса должны быть свои права доступа к памяти, соответсвенно такая таблица нужна для каждого процесса? Или я чего-то не догоняю?
Vladimir Kladov (2007-02-17 16:01:00) [21]я так понял, что вы не поняли, что дескрипторы в теневой половине памяти - это не таблица прав доступа, а именно дескрипторы, т.е. числа. Они задают принадлежность 1, 2, 3 или 4 байт из основной памяти тому или иному множеству (остальные 3, 2, 1 или 0 недоступны вообще - так обеспечивается точность защиты до 1 байта). А в таблице прав для каждого процесса задаются для каждого из <= 2**20 дескрипторов соответствующие права, по 2 бита на дескриптор. Дескриптор можно считать неким числом, которое выделяется просто по порядку номеров, или из массива свободных дескрипторов. А вот для множества дескрипторов с 0 по N у процесса должны быть выставлены права в его таблице прав доступа. Проще, наверное, представить по аналогии в винде какой-нибудь общий ресурс типа memory mapped file. Его дескриптор - это просто число. Права на доступ от каждого процесса система хранит у себя, вместе с описанием открытого маппированного "файла". Ну или можно попробовать представить себе процедуру проверки прав доступа. Берем из теневой памяти дескриптор, из таблицы AccessT текущего процесса смотрим на 2х-битный набор флажков с соответствующим номером, получаем 2 бита прав доступа.