SII писал(а):
Именно так оно делилось в VAX/VMS, но там это объяснялось аппаратными особенностями устройства управления памятью (системная архитектура VAX-11 существенно хуже, чем система команд -- в DEC её явно не шибко хорошо продумывали).
Да, архитектура явно была недоработана. В то время не было никаких мотивов её продумывать более тщательно. Конец 70-х годов, VAX-11/780, самый яркий представитель этого семейства, поддерживал до 8 мегабайт ОЗУ и стандартно поставлялся всего с 2Мб. Даже суперкомпьютеры Cray того времени имели не более 128Мб.
SII писал(а):
Аппаратное переключение задач не используется в силу его крайне низкой эффективности. На 80386 сохранить-восстановить контекст ручками получалось ощутимо быстрей, чем это делалось аппаратно, да вдобавок было куда больше гибкости
Честно говоря, не вижу принципиальной разницы во времени переключения. Вряд ли PUSHAD/POPAD с последующим выполнением кода переключения задачи по скорости сильно отличается от аппаратного сохранения/восстановления регистров в TSS.
Если говорить про гибкость, - что же такого принципиально другого может потребоваться, с чем аппаратный task switch окажется не совместим?
SII писал(а):
Что же касается откусывания огромных кусков адресного пространства, то, как уже сказал, на ВАХе это объяснялось...
Это всё исторический экскурс, который мне вполне знаком. Я говорю про разработку ОС в современных реалиях, не обременённую совместимостью. Сейчас адресное пространство (если не считать 64-битную архитектуру, хотя... что будет лет через n-цать?) - вполне ценный ресурс, которым я бы не стал разбрасываться просто так.
phantom-84 писал(а):
Не совсем так. Даже в микроядре небольшой модуль встраивается в адресное пространство каждого процесса. Возможно, если и не всему планировщику, то переключателю задач здесь самое место.
Это вопрос конкретной реализации. Теоретически возможно сделать ядро, которое вообще не будет присутствовать в адресном пространстве пользовательского процесса ни единым байтом.
phantom-84 писал(а):
Цитата:
Кстати, наверняка именно потому, что всё мапировано в адресное пространство задачи, аппаратное переключение и не используется во многих ОС.
Не вижу связи. Я начинал с аппаратного переключения, при этом у меня всегда ядро отображалось во все адресные пространства.
Связь в том, что
как только мы мапировали ОС в адресное пространство задачи,
необходимость в аппаратном переключении
исчезает. А вот при реализации
полной изоляции адресных пространств без (хотя бы минимальной) аппаратной поддержки, увы, никак не обойтись.
PS
Кажется, у меня наклёвывается идея, как сделать единый, надёжный и удобный обработчик любых прерываний с аппаратным переключением задач...
Надо поставить серию натурных экспериментов.