Смысл в том, что реализация более чем одной 32-разрядной моды относительно несложна, а там где есть две моды - почему не быть остальным ( сколько влезет в PSW ).
Ведь виртуальная память и при одной моде нужна - нельзя же требовать, чтобы минимальный объём физической памяти был 4Гб. А при наличии механизма виртуальной памяти, мапящего блоки виртуальных адресов в относительно компактное ОЗУ и теоретически бесконечный своп-файл, расширить виртуальное адресное пространство дополнительными модами - практически ничего не стоит.
32-разрядный процессор работает с диспетчером виртуальной памяти через виртуальную ( или физическую, при реализации процессора на нескольких чипах ) 32-разрядную шину виртуальных адресов, а уже диспетчер виртуальной памяти работает с реальной физической памятью через внешнюю 42 разрядную шину. Поэтому физически, и при одной моде, и при сотнях мод - в реальном ОЗУ будут находиться только те блоки виртуальной памяти, к которым было обращение процессора, и разница лишь в том, что при работе в одной общей моде - в регистры базы кода, стека и данных надо каждый раз записывать конкретные значения активируемого процесса, а при работе в разных модах - регистр базы кода всегда нулевой, потому что каждому процессу выделяются все 4Гб 32-разрядных виртуальных адресов.
Когда процессы исполняются в общей моде - они имеют адресный доступ к пространствам друг-друга и только механизм управления доступом к регионам ( при правильной настройке ) не позволяет случиться страшному. Когда же процессы исполняются в разных модах - они для доступа к пространствам друг-друга (через общий регион) должны совершить значительное количество нетривиальных действий.





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