Mr.McD. писал(а):
В предложенной системе ещё ничего нет: ни защиты памяти, ни вытеснения..
Ну так и обсуждать тогда нечего.
Вы смешиваете все понятия в один котёл и приписываете кооперативке свойства системы без защиты памяти, хотя эти понятия лежат в разных плоскостях. В системе с защитой памяти потоки имеют разные адресные пространства, а значит любое переключение потоков ведёт к смене контекста. Системы без защиты памяти вообще не могут рассматриваться в качестве мало-мальски надёжных ОС.
Mr.McD. писал(а):
Взаимная блокировка: поток А пытается захватить мутекс, захваченный потоком Б и блокируется. Получает управление Б. Б пытается захватить мутекс, захваченный потоком А и блокируется.
Это - классическая задача взаимной блокировки, но она не демонстрирует 100% преимущества кооперативки перед вытесняловкой. Здесь всё зависит от проектирования конкретных потоков. В принципе, можно спроектировать два взаимно блокирующихся процесса и в кооперативной многозадачности, хотя, согласен,
вероятность такой ситуации меньше.
Для систем с вытеснением в случае нескольких потоков одного кода (включая разделяемый/библиотечный код) существуют специальные механизмы блокировки, при использовании которых взаимная блокировка исключается. Это механизм критических секций.