Но для этого надо вручную управлять диспетчером памяти, меняя мапинг USER-моды при каждой смене активного процесса. Если бы у разработчиков PDP11 было не по 2 бита на номер моды, а по 9 ( и диспетчер памяти имел не несколько единиц наборов регистров PAR, а несколько сотен ) - они вряд ли отказались бы от 512 мод вместо двух-трёх. Ведь тогда содержимое регистров PAR не надо изменять при переключении процессов и это ничего не стоит.
Конечно, можно вместо 512 наборов PAR использовать только два, но ЗАЧЕМ, если это ничего не стоит, тем более, что диспетчер виртуальной памяти может сам заполнять всё содержимое PAR, и лишь иногда процессор может изменять для некоторых страниц приоритет вытеснения в своп. Когда диспетчер памяти работает параллельно с процессором - общая работа идёт гораздо быстрее, для этого и нужны расширенные биты моды.
xMode - это старшие биты моды, дополнительно к "старым" битам моды из PSW. Если отдать всю моду супервизора под работу с устройствами - остаётся 9 битов моды ( старший бит моды "старого" PSW + 8 битов xMode ). У KERNEL-моды все биты моды нулевые.
- - - Добавлено - - -
если два бита моды "старого" PSW = 00 - номер моды определяется как [xMode*2 + 0]
если два бита моды "старого" PSW = 01 - значение xMode не учитывается и выбирается мода супервизора
если два бита моды "старого" PSW = 11 - номер моды определяется как [xMode*2 + 1]
При этом нулевая мода - это KERNEL-мода, а все остальные ( кроме моды супервизора ) - это USER-моды.
...
В принципе можно наплевать на запрещённую моду 16-разрядного режима, тогда номер моды будет иметь 10 битов:
если два бита моды "старого" PSW = 00 - номер моды определяется как [xMode*4 + 0]
если два бита моды "старого" PSW = 01 - и значение xMode == 00 - выбирается мода супервизора
если два бита моды "старого" PSW = 01 - и значение xMode != 00 - номер моды определяется как [xMode*4 + 1]
если два бита моды "старого" PSW = 10 - номер моды определяется как [xMode*4 + 2]
если два бита моды "старого" PSW = 11 - номер моды определяется как [xMode*4 + 3]
При этом нулевая мода - это KERNEL-мода, первая мода - мода супервизора, а все остальные - это USER-моды.





Ответить с цитированием