Почему на 1 процесс макс. 1 консоль?

Мне просто интересно, почему на 1 процесс приходится 1 консоль? Ведь у обычных ("графических") окон такого ограничения нет. Почему нельзя было просто сделать 2 типа окон: с CUI и с GUI? Какая была история у этого решения?

Пока всё выглядит так, как будто раньше никому не нужно было много консолей на 1 процесс, и тут решили оптимизировать, даровав процессу только 1-у консоль. Возможно, это было связанно с дизайном консольного приложения, мол, зачем консольному приложению 2 консоли? — делайте всё в 1-й!


Ответы (2 шт):

Автор решения: DiD

Консоль в Windows пришла из DOS. Раньше, до защищенного режима, компьютеры умели выполнять одновременно только один процесс на весь компьютер.

DOS является однозадачной операционной системой[6]. После запуска управление передаётся прикладной программе, которая получает в своё распоряжение все ресурсы компьютера и может осуществлять ввод-вывод посредством как функций, предоставляемых операционной системой, так и функций базовой системы ввода-вывода (BIOS), а также работать с устройствами напрямую.

То есть, изначально консоль существовала для старых legacy-приложений, которые написаны для DOS, и, соответственно, не умели работать с окнами.

→ Ссылка
Автор решения: user7860670

Исторически, приложения текстового режима обмениваются данными между собой и пользователем через механизм стандартных потоков ввода-вывода. STDOUT и STDERR программы верхнего уровня выводится в консоль, когда она запускает какую-то дочернюю программу то может пробрасывать ее STDOUT и STDERR или потребляет STDOUT и пробрасывает STDERR, так что вывод дочерней программы может попадать пользователю, и т.д. Как видно, такая схема создана с расчётом на то, что 1 консоль будет не просто на 1 процесс, а на целое дерево процессов.

При этом никто не мешает сделать некоторую утилиту, которая будет не будет работать со стандартными потоками ввода-вывода по этой схеме, а, например, будет делать консоли по требованию с вводом-выводом в них из предоставленного дескриптора, или разделять одно консольное окно между разными приложениями.

→ Ссылка