1890-1950 - Операция, присущая системе
Самые ранние компьютеры имели эквивалент того, что сейчас делает в них ОС. Вы (оператор) также были частью операционной системы. Вы щелкнули переключатели регистра (или использовали перфокарту) и физически поменяли местами провода шины (вспомните телефонную станцию старого образца), и память была связана (через физические провода) напрямую с лампочкой (монитор дня) и принтерами ( долговременное хранение) таким образом, чтобы вывод программы загорелся и распечатывался непосредственно на устройстве, поскольку он был помещен в буфер памяти вывода. Для этих вещей не было необходимости в драйвере, потому что (из-за того, как эти физические провода работали) они «просто работали» (в наши дни не было такого понятия, как монитор). На самом деле, до этой эры прошло еще несколько десятилетий, пока не будет изобретен цифровой цифровой дисплей, чтобы вы могли фактически видеть числа, которые вы уже ввели в регистр, и выводить их как десятичные числа; Принтеры правили всю эту эпоху вплоть до мониторов. Они были подключены именно так, как им нужно, чтобы работать правильно. Ничто из этого не сильно изменилось с переходом с механического (1890-е годы) на электрический аналоговый (1910-е годы) на цифровой (1930-е годы). Эта архитектура «Plug N play» была заменена системой прерываний в течение этого времени, и она не появится снова до конца девяностых; конечно к тому времени было бы намного меньше подключения. При наличии прерываний устройствам разрешалось занимать процессорное время, что позволяло архитектурам, напрямую связан с аппаратным обеспечением, но потребовалось несколько поколений, чтобы этот процесс стал действительно упорядоченным процессом, который мы видим в арке x86 (и новее); ранние системы часто сталкивались с ужасными условиями гонки, проблемами с совместимостью оборудования / задержками и другим странным поведением в случае прерываний. Потому что каждая машина использовала радикально разные (экспериментальные) архитектуры в этот период; почти все устройства были сделаны на заказ для машины, на которой они работали.
1950-1973 - работа в системе
В эту эпоху появилось большинство функций, о которых мы думаем, когда говорим о настоящей операционной системе. В эту эпоху были представлены отладка, языки программирования, многопользовательская работа, многозадачность, терминалы, дисковые накопители, работа в сети, стандартизация компонентов и т. Д. На этот раз произошел гигантский скачок в направлении стандартизации большей части этого, что означало, что у нас было больше стандартизированных устройств, но все же каждая ОС создавалась вручную для каждой машины, что означало, что функциональность ОС была строго ограничена тем, что инженеры, которые разрабатывали эту конкретную систему, решили, что им нужно , В течение этого времени существовала серая область, в которой находилась операционная система, потому что разные архитектуры работают по-разному, и машине более общего назначения потребуется намного больше ОС, чем машине, которая включает аппаратное обеспечение для выполнения тех же задач. Дело в том, что аппаратное обеспечение всегда будет быстрее, чем программное обеспечение, и практически все, что делается в программном обеспечении, теоретически может быть сделано в аппаратном обеспечении (это стоимость \ гибкость \ размер \ время \ и т. Д., Что ограничивает нас от создания практически чистой аппаратной версии всего этого) день). ОС была создана для конкретного компьютера или типа компьютера; это не будет работать в другом месте. Каждый новый компьютерный дизайн требовал переписывания всего программного обеспечения низкого уровня для работы с конкретной моделью машины. Ближе к концу этого времени появилась новая ОС, которая вскоре изменит эту парадигму, UNIX, написанная в Bell Labs Кеном Томпсоном и Деннисом Ричи.
1973 - Работа между системами
Одна программа изменила все это, но это была не UNIX. Это был компилятор Си (который был классно сделан в гараже Кеном Томпсоном и Деннисом Ричи после того, как Bell Labs его сократил). До этого момента каждый раз, когда вы писали код, он был либо машинным кодом (код, который машина непосредственно понимает, но не является переносимым), либо он был написан на языке, который компилировал ваш код в байтовый код (код, который интерпретируется другой программой как работает). Огромная разница для ОС, которую принес C, заключалась в возможности делать то, что известно как кросс-компиляция в машинный код. Это означало, что код мог быть написан один раз и скомпилирован для работы на множестве разных типов машин, если компилятор был написан для этой машины. Операционные системы должны быть написаны в машинном коде, потому что машинный код буквально единственный код, который машина знает.
Я бы сказал, что только когда Кен и Деннис впервые скомпилировали ядро UNIX с использованием компилятора C, родилась настоящая ОС в современном понимании. До этого операционная система представляла собой либо физический объект, либо просто предварительно инициализированный кусок пространства памяти, предназначенный специально для конкретной машины. Добавление новых устройств в систему буквально требовало переписывания кода «ядра». Теперь ОС UNIX, которую они разработали для конкретной машины, можно было перекомпилировать и запускать на других машинах без переписывания ВСЕГО (если эта машина могла компилировать компилятор C из среды начальной загрузки, остальная часть ОС могла быть записана в относительно высокий уровень кода С).