Глава 6
Мультипрограммные операционные системы (1960-1970)
По мере увеличения мощности и сложности компьютерного оборудования в 1960-х годах потребность в более сложном системном программном обеспечении для управления машинными ресурсами и упрощения выполнения программ становилась все более очевидной. Простые системы пакетной обработки, хотя и представляли собой первый шаг на пути к автоматизации, показали свои ограничения с точки зрения эффективности и интерактивности. В этот период появились мультипрограммные и операционные системы с разделением времени , которые произвели революцию в способах взаимодействия пользователей с компьютерами и заложили основу для современных операционных систем.
6.1 Ограничения пакетной обработки:
Последовательное и неэффективное выполнение
Как обсуждалось в главе 3, пакетная обработка предполагает последовательное выполнение набора заданий с ограниченным вмешательством оператора. Хотя этот подход улучшил использование компьютера по сравнению с ручным выполнением каждой отдельной инструкции, у него было несколько существенных ограничений:
- Низкая загрузка ЦП: Во время операций ввода-вывода (I/O) ЦП часто простаивал, ожидая, пока внешнее устройство завершит свою задачу. Это привело к недоиспользованию дорогостоящего ресурса ЦП.
- Долгое ожидание результатов: Пользователям приходилось ждать завершения всего пакета, чтобы получить результаты своего задания, хотя это занимало лишь часть общего времени выполнения.
- Отсутствие интерактивности: Не было возможности взаимодействовать с программой во время ее выполнения, что затрудняло отладку и запуск приложений, требующих немедленной обратной связи.
- Ограниченные приоритеты: Все задания в пакете обычно выполнялись с одинаковым приоритетом, без возможности отдавать предпочтение более срочным или важным заданиям.
Эти ограничения подтолкнули исследователей и разработчиков к изучению новых способов управления компьютерными ресурсами, которые могли бы преодолеть неэффективность пакетной обработки.
6.2 Появление мультипрограммирования:
Совместное использование ЦП для максимального использования
Мультипрограммирование — это метод, который позволяет нескольким программам (или процессам) одновременно находиться в основной памяти и совместно использовать ЦП. Основная идея заключается в том, что когда программа должна дождаться завершения медленной операции (например, операции ввода-вывода), ЦП может переключиться на выполнение другой программы, которая готова к запуску. Таким образом, мы стараемся максимально загружать ЦП, повышая общую эффективность системы.
Для реализации мультипрограммирования потребовалось несколько механизмов:
- Управление памятью: Операционная система должна была иметь возможность выделять и управлять пространством памяти для одновременного размещения нескольких программ, гарантируя, что одна программа не мешает памяти другой.
- Планирование ЦП: Операционная система должна была реализовать алгоритмы, чтобы решить, какая из готовых к запуску программ должна получить доступ к ЦП и на какой срок.
- Защита: Крайне важно, чтобы операционная система предоставляла механизмы защиты, предотвращающие несанкционированный доступ одной программы к памяти или ресурсам другой программы или ее изменение.
Мультипрограммирование позволило значительно повысить производительность компьютерных систем, поскольку за один и тот же промежуток времени можно было выполнить несколько заданий.
6.3 Первые многопрограммные операционные системы:
Пионеры в управлении ресурсами
Некоторые из первых операционных систем, реализующих мультипрограммирование, включают:
- Atlas Supervisor: Эта операционная система, разработанная для компьютера Atlas в Манчестерском университете в начале 1960-х годов, была одной из первых, в которой были представлены такие концепции, как виртуальная память и мультипрограммирование, что продемонстрировало осуществимость этих методов.
- IBM OS/360: Представленная в 1964 году, OS/360 была одной из первых крупномасштабных операционных систем, предназначенных для поддержки мультипрограммирования на семействе компьютеров IBM System/360 с различными аппаратными возможностями.
- OS/360 была чрезвычайно сложной операционной системой для своего времени и представляла собой веху в развитии операционных систем, представив такие концепции, как языки управления заданиями (JCL) для управления заданиями и сложные механизмы управления памятью. Однако его сложность также затрудняла его внедрение и управление.
- Другие операционные системы, такие как Master Control Program (MCP), разработанные для компьютеров Берроуза, также реализовывали формы мультипрограммирования.
6.4 Введение в разделение времени:
Иллюзия персонального компьютера для многих пользователей
разделение времени — это расширение мультипрограммирования, которое позволяет нескольким пользователям одновременно взаимодействовать с компьютером. Идея состоит в том, чтобы разделить время процессора на небольшие интервалы (кванты времени или кванты времени) и назначить каждый интервал отдельному пользователю. ЦП быстро переключается от одного пользователя к другому, создавая иллюзию, что у каждого пользователя есть отдельный персональный компьютер.
Разделение времени было мотивировано желанием предоставить интерактивный компьютерный опыт нескольким пользователям одновременно, преодолевая ограничения пакетной обработки. Это было особенно важно в таких контекстах, как научные исследования и образование, где многим пользователям может потребоваться доступ к компьютеру для запуска небольших программ, редактирования файлов или взаимодействия с системой в режиме реального времени.
Для реализации разделения времени были необходимы такие методы, как:
- Квант времени: ЦП выделяется каждому процессу на короткий период времени.
- Обмен: Если процесс не использует ЦП в течение длительного периода (например, ожидает ввода пользователя), его пространство памяти может быть временно перемещено на диск (выгружено), чтобы освободить место для других активных процессов. Когда процесс снова готов к запуску, он возвращается в память (заменяется).
- Управление пользователями и терминалами: Операционная система должна была иметь возможность управлять доступом нескольких пользователей через удаленные терминалы.
6.5 Новаторские операционные системы с разделением времени:
На пути к интерактивности
Некоторые из самых ранних и наиболее влиятельных операционных систем с разделением времени включают:
- CTSS (совместимая система разделения времени): Разработанная в Массачусетском технологическом институте (MIT) в начале 1960-х годов, CTSS была одной из первых успешных систем разделения времени. Это позволило нескольким пользователям получить интерактивный доступ к мейнфрейму через терминалы, открыв новые возможности для исследований и образования. CTSS глубоко повлиял на развитие последующих операционных систем.
- Multics (Мультиплексная информационная и вычислительная служба): Амбициозный проект, который начался в 1965 году в результате сотрудничества Массачусетского технологического института, General Electric и Bell Labs. Целью было создать мощную, надежную и безопасную операционную систему с разделением времени и расширенными функциями, такими как иерархическая файловая система. Хотя проект Multics не добился немедленного коммерческого успеха, многие его идеи и концепции оказали глубокое влияние на разработку будущих операционных систем.
- Unix: Зародившаяся как «ложный» проект в Bell Labs в 1960-х годах, главным образом Кеном Томпсоном и Деннисом Ритчи, Unix изначально была вдохновлена некоторыми идеями Multics, но с более простым и модульным подходом. Одной из отличительных особенностей Unix была ее переносимость, ставшая возможной благодаря ее реализации на языке C (также разработанном в Bell Labs Ритчи). Ранние версии Unix поддерживали разделение времени и вводили фундаментальные концепции, такие как иерархическая файловая система и интерфейс командной строки (оболочка), которые оказали длительное влияние на мир вычислений.
6.6 Фундаментальные концепции современных операционных систем, представленных в этот период
Десятилетие 1960-1970 годов было решающим для определения многих фундаментальных концепций, которые до сих пор составляют основу современных операционных систем:
-
- Управление памятью: Были разработаны первые методы распределения памяти (например, фиксированные и переменные разделы) и защиты памяти между различными процессами. Внедрение виртуальной памяти в таких системах, как Atlas и OS/360, стало значительным достижением, позволив программам использовать больше памяти, чем было физически доступно.
- Планирование ЦП: Первые алгоритмы планирования были введены для того, чтобы решить, какой процесс должен выполняться ЦП в многопрограммной среде с разделением времени. Начали изучаться и реализовываться такие алгоритмы, как циклический алгоритм (используемый во многих системах с разделением времени) и алгоритмы на основе приоритетов.
- Управление устройствами: Операционные системы начали включать механизмы для управления и контроля различных устройств ввода/вывода, подключенных к компьютеру, обеспечивая единый интерфейс для прикладных программ.
- Файловые системы: Операционные системы, такие как Multics и Unix, представили концепцию иерархической файловой системы, которая позволяла организовывать данные в каталоги и подкаталоги, упрощая управление файлами и доступ к ним.
- Пользовательский интерфейс: Хотя пакетная обработка часто не предполагала прямого взаимодействия с пользователем во время выполнения, в системах с разделением времени появился интерфейс командной строки (CLI) в качестве основного средства взаимодействия с операционной системой.
6.7 Проблемы и инновации в разработке операционных систем
Разработка многопрограммных операционных систем с разделением времени в 1960-х годах была чрезвычайно сложной задачей. Программисты операционных систем столкнулись с такими проблемами, как одновременное управление несколькими процессами, синхронизация и связь между процессами, защита системных ресурсов и обработка ошибок.
В этот период также появились крупные инновации в методах разработки программного обеспечения и проектировании систем. Модульность, структурирование кода и внедрение языков программирования высокого уровня, таких как C, для разработки операционных систем (как в случае с Unix), помогли справиться с растущей сложностью системного программного обеспечения.
Эволюция операционных систем в 1960-х годах с переходом от пакетной обработки к мультипрограммированию и разделению времени представляла собой фундаментальное изменение в способах взаимодействия пользователей с компьютерами и в эффективности использования аппаратных ресурсов. Внедрение таких ключевых концепций, как управление памятью, планирование ЦП, управление устройствами и файловые системы, заложило основу для современных операционных систем, которые мы используем сегодня. Новаторские системы, такие как OS/360, CTSS, Multics и Unix, оказали длительное влияние на область вычислений, оказав глубокое влияние на развитие системного программного обеспечения на десятилетия вперед.