Лекция: Краткая история эволюции вычислительных систем

Мы будем рассматривать историю развития именно вычислитель­ных, а не операционных систем, потому что hardware и программное обеспечение эволюционировали совместно, оказывая взаимное влияние друг на друга. Появление новых технических возможностей приводило к прорыву в области создания удобных, эффективных и безопасных про­грамм, а свежие идеи в программной области стимулировали поиски но­вых технических решений. Именно эти критерии — удобство, эффектив­ность и безопасность — играли роль факторов естественного отбора при эволюции вычислительных систем.

Первый период (1945-1955 гг.). Ламповые машины.

Операционных систем нет

Мы начнем исследование развития компьютерных комплексов с по­явления электронных вычислительных систем (опуская историю механи­ческих и электромеханических устройств).

Первые шаги в области разработки электронных вычислительных машин были предприняты в конце Второй Мировой войны. В середине 1940-х годов были созданы первые ламповые вычислительные устройства и появился принцип программы, хранящейся в памяти машины (John Von Neumann, июнь 1945 г.). В то время одна и та же группа людей участвова­ла и в проектировании, и в эксплуатации, и в программировании вычис­лительной машины. Это была скорее научно-исследовательская работа в области вычислительной техники, а не регулярное использование компь­ютеров в качестве инструмента решения каких-либо практических задач из других прикладных областей. Программирование осуществлялось ис­ключительно на машинном языке. Об операционных системах не было и речи, все задачи организации вычислительного процесса решались вруч­ную каждым программистом с пульта управления. За пультом мог нахо­диться только один пользователь. Программа загружалась в память маши­ны в лучшем случае с колоды перфокарт, а обычно — с помощью панели переключателей.

Вычислительная система выполняла одновременно только одну опе­рацию (ввод-вывод или собственно вычисления). Отладка программ велась с пульта управления с помощью изучения состояния памяти и регистров машины. В конце этого периода появляется первое системное программ­ное обеспечение: в 1951-1952 гг. возникают прообразы первых компиля­торов с символических языков (Fortran и др.), а в 1954 г. Nat Rochester разрабатывает Ассемблер для 1ВМ-701.

Существенная часть времени уходила на подготовку запуска про­граммы, а сами программы выполнялись строго последовательно. Такой режим работы называется последовательной обработкой данных. В целом первый период характеризуется крайне высокой стоимостью вычисли­тельных систем, их малым количеством и низкой эффективностью ис­пользования.

Второй период (1955 г.-начало 1960-х гг.). Компьютеры на основе транзисторов. Пакетные операционные системы

С середины 1950-х годов начался следующий период в эволюции вычислительной техники, связанный с появлением новой технической базы — полупроводниковых элементов. Применение транзисторов вме­сто часто перегоравших электронных ламп привело к повышению на­дежности компьютеров. Теперь машины могли непрерывно работать до­статочно долго, чтобы на них можно было возложить выполнение прак­тически важных задач. Снизилось потребление вычислительными ма­шинами электроэнергии, усовершенствовались системы охлаждения. Размеры компьютеров уменьшились. Снизилась стоимость эксплуата­ции и обслуживания вычислительной техники. Началось использование ЭВМ коммерческими фирмами. Одновременно наблюдается бурное раз­витие алгоритмических языков (LISP, COBOL, ALGOL-6O, PL-1 и т.д.). Появляются первые настоящие компиляторы, редакторы связей, библи­отеки математических и служебных подпрограмм. Упрощается процесс программирования. Пропадает необходимость взваливать на одних и тех же людей весь процесс разработки и использования компьютеров. Имен­но в этот период происходит разделение персонала на программистов и операторов, разработчиков вычислительных машин и специалистов по эксплуатации.

Изменяется сам процесс прогона программ. Теперь пользователь приносит программу с входными данными в виде колоды перфокарт и указывает необходимые ресурсы. Такая колода получает название зада­ния. Оператор загружает задание в память машины и запускает его на ис­полнение. Полученные выходные данные печатаются на принтере, и пользователь получает их обратно через некоторое (довольно продолжи­тельное) время.

Смена запрошенных ресурсов вызывает приостановку выполнения программ, в результате процессор часто простаивает. Для повышения эф­фективности использования компьютера задания с похожими ресурсами начинают собирать вместе, создавая пакет заданий.

Появляются первые системы пакетной обработки, которые просто автоматизируют запуск одной программы из пакета задругой и тем самым увеличивают коэффициент загрузки процессора. При реализации систем пакетной обработки был разработан формализованный язык управления заданиями, с помощью которого программист сообщал системе и опера­тору, какую работу он хочет выполнить на вычислительной машине. Сис­темы пакетной обработки стали прообразом современных операционных систем, они были первыми системными программами, предназначенными для управления вычислительным процессом.

Третий период(начало 1960-х — 1980 г.). Компьютеры на основе интегральных микросхем. Первые многозадачные ОС

Следующий важный период развития вычислительных машин отно­сится к началу 1960-х — 1980 г. В это время в технической базе произошел переход от отдельных полупроводниковых элементов типа транзисторов к интегральным микросхемам. Вычислительная техника становится более надежной и дешевой. Растет сложность и количество задач, решаемых компьютерами. Повышается производительность процессоров.

Повышению эффективности использования процессорного времени мешает низкая скорость работы механических устройств ввода-вывода (быстрый считыватель перфокарт мог обработать 1200 перфокарт в мину­ту, принтеры печатали до 600 строк в минуту). Вместо непосредственного чтения пакета заданий с перфокарт в память, начинают использовать его предварительную запись, сначала на магнитную ленту, а затем и на диск. Когда в процессе выполнения задания требуется ввод данных, они чита­ются с диска. Точно так же выходная информация сначала копируется в системный буфер и записывается на ленту или диск, а печатается только после завершения задания. Вначале действительные операции ввода-вывода осуществлялись в режиме off-line, то есть с использованием других, бо­лее простых, отдельно стоящих компьютеров. В дальнейшем они начинают выполняться на том же компьютере, который производит вычисления, то есть в режиме on-line. Такой прием получает название spooling (сокращение от Simultaneous Peripheral Operation On Line) или подкачки-откачки дан­ных. Введение техники подкачки-откачки в пакетные системы позволило совместить реальные операции ввода-вывода одного задания с выполне­нием другого задания, но потребовало разработки аппарата прерываний для извещения процессора об окончании этих операций.

Магнитные ленты были устройствами последовательного доступа, то есть информация считывалась с них в том порядке, в каком была запи­сана. Появление магнитного диска, для которого не важен порядок чте­ния информации, то есть устройства прямого доступа, привело к даль­нейшему развитию вычислительных систем. При обработке пакета зада­ний на магнитной ленте очередность запуска заданий определялась поряд­ком их ввода. При обработке пакета заданий на магнитном диске появилась возможность выбора очередного выполняемого задания. Па­кетные системы начинают заниматься планированием заданий: в зависи­мости от наличия запрошенных ресурсов, срочности вычислений и т. д. на счет выбирается то или иное задание.

Дальнейшее повышение эффективности использования процессора было достигнуто с помощью мультипрограммирования. Идея мультипро­граммирования заключается в следующем: пока одна программа выполня­ет операцию ввода-вывода, процессор не простаивает, как это происходи­ло при однопрограммном режиме, а выполняет другую программу. Когда операция ввода-вывода заканчивается, процессор возвращается к выпол­нению первой программы. Эта идея напоминает поведение преподавате­ля и студентов на экзамене. Пока один студент (программа) обдумывает ответ на вопрос (операция ввода-вывода), преподаватель (процессор) вы­слушивает ответ другого студента (вычисления). Естественно, такая ситу­ация требует наличия в комнате нескольких студентов. Точно так же мультипрограммирование требует наличия в памяти нескольких про­грамм одновременно. При этом каждая программа загружается в свой участок оперативной памяти, называемый разделом, и не должна влиять на выполнение другой программы. (Студенты сидят за отдельными стола­ми и не подсказывают друг другу.)

Появление мультипрограммирования требует настоящей революции в строении вычислительной системы. Особую роль здесь играет аппарат­ная поддержка (многие аппаратные новшества появились еще на преды­дущем этапе эволюции), наиболее существенные особенности, которой перечислены ниже.

­ Реализация защитных механизмов. Программы не должны иметь са­мостоятельного доступа к распределению ресурсов, что приводит к появлению привилегированных и непривилегированных команд. Приви­легированные команды, например команды ввода-вывода, могут ис­полняться только операционной системой. Говорят, что она работает в привилегированном режиме. Переход управления от прикладной программы к ОС сопровождается контролируемой сменой режима. Кроме того, это защита памяти, позволяющая изолировать конку­рирующие пользовательские программы друг от друга, а ОС — от программ пользователей.

­ Наличие прерываний. Внешние прерывания оповещают ОС о том, что произошло асинхронное событие, например, завершилась опера­ция ввода-вывода. Внутренние прерывания (сейчас их принято на­зывать исключительными ситуациями) возникают, когда выполне­ние программы привело к ситуации, требующей вмешательства ОС, например деление на ноль или попытка нарушения защиты.

­ Развитие параллелизма в архитектуре. Прямой доступ к памяти и ор­ганизация каналов ввода-вывода позволили освободить центральный процессор от рутинных операций.

Не менее важна в организации мультипрограммирования роль опе­рационной системы. Она отвечает за следующие операции:

­ Организация интерфейса между прикладной программой и ОС при помощисистемных вызовов.

­ Организация очереди из заданий в памяти и выделение процессора одному из заданий требуетпланирования использования процессора.

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

­ Поскольку память является ограниченным ресурсом, нужны стра­тегии управления памятью, то есть требуется упорядочить процессы размещения, замещения и выборки информации из памяти.

­ Организация хранения информации на внешних носителях в виде файлов и обеспечение доступа к конкретному файлу только опреде­ленным категориям пользователей.

­ Поскольку программам может потребоваться произвести санкционированный обмен данными, необходимо их обеспечить средствами коммуникации.

Для корректного обмена данными необходимо разрешать конфликтные ситуации, возникающие при работе с различными ресур­сами, и предусмотреть координацию программами своих действий, т. е. снабдить систему средствами синхронизации. Мультипрограммные системы обеспечили возможность более эффективного использования системных ресурсов (например, процессора, памяти, периферийных устройств), но они еще долго оставались пакетными. Пользователь не мог непосредственно взаимодействовать с заданием и должен был предусмотреть с помощью управляющих карт все возмож­ные ситуации. Отладка программ по-прежнему занимала много времени и требовала изучения многостраничных распечаток содержимого памяти и регистров или использования отладочной печати.

Появление электронно-лучевых дисплеев и переосмысление воз­можностей применения клавиатур поставили на очередь решение этой проблемы. Логическим расширением систем мультипрограммирования стали time-sharing системы, или системы разделения времени. В них процессор переключается между задачами не только на время операций вво­да-вывода, но и просто по прошествии определенного времени. Эти пере­ключения происходят так часто, что пользователи могут взаимодействовать со своими программами во время их выполнения, то есть интерактивно. В результате появляется возможность одновременной работы нескольких пользователей на одной компьютерной системе. У каждого пользователя для этого должна быть хотя бы одна программа в памяти. Чтобы уменьшить ограничения на количество работающих пользователей, была внедрена идея неполного нахождения исполняемой программы в оперативной памяти. Основная часть программы находится на диске и фрагмент, который необходимо в данный момент выполнять, может быть загружен в оперативную память, а ненужный — выкачан обратно на диск. Это реализуется с помощью механизма виртуальной памяти.

Основным достоинством такого механизма является создание иллюзии неограниченной оперативной памяти ЭВМ.

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

Параллельно внутренней эволюции вычислительных систем проис­ходила и внешняя их эволюция. До начала этого периода вычислительные комплексы были, как правило, несовместимы. Каждый имел собственную операционную систему, свою систему команд и т. д. В результате программу, успешно работающую на одном типе машин, необходимо было полностью переписывать и заново отлаживать для выполнения на компь­ютерах другого типа. В начале третьего периода появилась идея создания семейств программно-совместимых машин, работающих под управлением одной и той же операционной системы. Первым семейством программно совместимых компьютеров, построенных на интегральных микросхемах, стала серия машин IBM/360. Разработанное в начале 1960-х годов, это семейство значительно превосходило машины второго поколения по критерию цена/производительность. За ним последовала линия компьютеров PDP, несовместимых с линией IBM, и лучшей моделью в ней стала PDP-11.

Сила «одной семьи» была одновременно и ее слабостью. Широкие возможности этой концепции (наличие всех моделей: от мини-компьюте­ров до гигантских машин; обилие разнообразной периферии; различное окружение; различные пользователи) порождали сложную и громоздкую операционную систему. Миллионы строчек Ассемблера, написанные ты­сячами программистов, содержали множество ошибок, что вызывало непрерывный поток публикаций о них и попыток исправления. Только в операционной системе OS/360 содержалось более 1ООО известных ошибок. Тем не менее, идея стандартизации операционных систем была широко внедрена в сознание пользователей и в дальнейшем получила активное развитие.

Четвертый период (с 1980 г. по настоящее время) Персональные компьютеры. Классические, сетевые и распределенные системы

Следующий период в эволюции вычислительных систем связан с появлением больших интегральных схем (БИС). В эти годы произошло резкое возрастание степени интеграции и снижение стоимости микро­схем. Компьютер, не отличающийся по архитектуре от PDP-11, по цене и простоте эксплуатации стал доступен отдельному человеку, а не только отделу предприятия или университета. Наступила эра персональных ком­пьютеров. Первоначально персональные компьютеры предназначались для использования одним пользователем в однопрограммном режиме, что повлекло за собой деградацию архитектуры этих ЭВМ и их операци­онных систем (в частности, пропала необходимость защиты файлов и па­мяти, планирования заданий и т. п.).

Компьютеры стали использоваться не только специалистами, что потребовало разработки «дружественного» программного обеспечения.

Однако рост сложности и разнообразия задач, решаемых на персо­нальных компьютерах, необходимость повышения надежности их работы привели к возрождению практически всех черт, характерных для архитек­туры больших вычислительных систем.

В середине 1980-х годов стали бурно развиваться сети компьютеров, в том числе персональных, работающих под управлением сетевых или распределенных операционных систем.

В сетевых операционных системах пользователи могут получить дос­туп к ресурсам другого сетевого компьютера, только они должны знать об их наличии и уметь это сделать. Каждая машина в сети работает под упра­влением своей локальной операционной системы, отличающейся от опе­рационной системы автономного компьютера наличием дополнительных средств (программной поддержкой для сетевых интерфейсных устройств и Доступа к удаленным ресурсам), но эти дополнения не меняют структуру операционной системы.

Распределенная система, напротив, внешне выглядит как обычная автономная система. Пользователь не знает и не должен знать, где хранятся его файлы — на локальной или удаленной машине — и где его программы выполняются. Он может вообще не знать, подключен ли его компьютер к сети. Внутреннее строение распределенной операционной системы имеет существенные отличия от автономных систем.

В дальнейшем автономные операционные системы мы будем назы­вать классическими операционными системами.

Просмотрев этапы развития вычислительных систем, мы можем вы­делить шесть основных функций, которые выполняли классические опе­рационные системы в процессе эволюции:

­ планирование заданий и использования процессора;

­ обеспечение программ средствами коммуникации и синхронизации;

­ управление памятью;

­ управление файловой системой;

­ управление вводом-выводом;

­ обеспечение безопасности.

Каждая из приведенных функций обычно реализована в виде подси­стемы, являющейся структурным компонентом ОС. В каждой операци­онной системе эти функции, конечно, реализовывались по-своему, в раз­личном объеме. Они не были изначально придуманы как составные час­ти операционных систем, а появились в процессе развития, по мере того как вычислительные системы становились все более удобными, эффек­тивными и безопасными. Эволюция вычислительных систем, созданных человеком, пошла по такому пути, но никто еще не доказал, что это един­ственно возможный путь их развития. Операционные системы существу­ют потому, что на данный момент их существование — это разумный спо­соб использования вычислительных систем. Рассмотрение общих прин­ципов и алгоритмов реализации их функций и составляет содержание большей части данного учебного пособия.

Основные понятия, концепции ОС

В процессе эволюции возникло несколько важных концепций, кото­рые стали неотъемлемой частью теории и практики ОС. Рассмотрим и опишем некоторые из них.

Операционная система, как уже было сказано ранее это — совокупность программ, выполняющие ранее рассмотренные функции. Для того чтобы для задач отвести как можно больший объем памяти, операционная система строится таким образом, чтобы постоянно в оперативной памяти располагалась только самая нужная ее часть. Эту часть операционной системы стали называть ядром.

Функции ядра:

­ Обработка прерываний.

­ Создание/уничтожение процесса.

­ Переключение процесса из состояния в состояние.

­ Диспетчеризация (регулировка).

­ Приостановка и активизация.

­ Синхронизация процесса.

­ Организация взаимодействия между процессами.

­ Манипулирование БУП.

­ Поддержка операций ввода/вывода.

­ Поддержка распределения и перераспределения памяти.

­ Поддержка работы файловой системы.

Системные вызовы

В любой операционной системе поддерживается механизм, который позволяет пользовательским программам обращаться к услугам ядра ОС. В операционных системах наиболее известной советской вычислительной машины БЭСМ-6 соответствующие средства «общения» с ядром назывались экстракодами, в операционных системах IBM они назывались сис­темными макрокомандами и т. д. В ОС Unix такие средства называют си­стемными вызовами.

Системные вызовы (system calls) — это интерфейс между операционной системой и пользовательской программой. Они создают, удаляют и используют различные объекты, главные из которых — процессы и файлы. Пользовательская программа запрашивает сервис у операционной систе­мы, осуществляя системный вызов. Имеются библиотеки процедур, ко­торые загружают машинные регистры определенными параметрами и осуществляют прерывание процессора, после чего управление передается обработчику данного вызова, входящему в ядро операционной системы. Цель таких библиотек — сделать системный вызов похожим на обычный вызов подпрограммы.

Основное отличие состоит в том, что при системном вызове задача переходит в привилегированный режим или режим ядра (kernel mode). По­этому системные вызовы иногда еще называют программными прерыва­ниями, в отличие от аппаратных прерываний, которые чаще называют просто прерываниями.

В этом режиме работает код ядра операционной системы, причем исполняется он в адресном пространстве и в контексте вызвавшей его за­дачи. Таким образом, ядро операционной системы имеет полный доступ к памяти пользовательской программы, и при системном вызове доста­точно передать адреса одной или нескольких областей памяти с парамет­рами вызова и адреса одной или нескольких областей памяти для резуль­татов вызова.

В большинстве операционных систем системный вызов осуществля­ется командой программного прерывания (INT). Программное прерыва­ние — это синхронное событие, которое может быть повторено при выпол­нении одного и того же программного кода.

Прерывания

Прерывание (hardware interrupt) — это событие, генерируемое внеш­ним (по отношению к процессору) устройством. Посредством аппарат­ных прерываний аппаратура либо информирует центральный процессор о том, что произошло какое-либо событие, требующее немедленной ре­акции (например, пользователь нажал клавишу), либо сообщает о завер­шении асинхронной операции ввода-вывода (например, закончено чте­ние данных с диска в основную память). Прерывания представляют собой механизм, позволяющий координировать параллельное функционирование отдельных устройств вычислительной системы и реагировать на особые состояния, возникающие при работе процессора. Т.е. прерывание – это принудительная передача управления от выполняемой программы к системе (а через нее – к соответствующей программе обработки прерывания), происходящая при возникновении определенного события.

Основная цель введения прерываний – реализация асинхронного режима функционирования и распараллеливание работы отдельных устройств вычислительного комплекса. Механизм прерываний реализуется аппаратно-программными средствами. Структуры систем прерываний (в зависимости от аппаратной архитектуры) могут быть самыми разными, но все они имеют одну общую особенность — прерывание непременно влечет за собой изменение порядка выполнения команд процессором.

Механизм обработки прерываний подразумевает за собой независимо от архитектуры вычислительной системы выполнение некоторой последовательности шагов:

­ установление факта прерывания (прием сигнала запроса на прерывание) и идентификация прерывания;

­ запоминание состояния прерванного процесса вычислений;

­ управление аппаратно передается на подпрограмму обработку прерывания;

­ сохранение информации о прерванной программе, которую не удалось спасти на шаге 2 с помощью аппаратуры;

­ выполнение программы, связанной с обработкой прерывания. Эта работа может быть выполнена той же подпрограммой, на которую было передано управление на шаге 3, но в операционных системах достаточно часто она реализуется путем последующего вызова соответствующей подпрограммы;

­ восстановление информации, относящейся к прерванному процессу;

­ возврат на прерванную программу.

Шаги 1-3 реализуются аппаратно, шаги 4-7 – программно.

Прерывания, возникающие при работе вычислительной системы, можно разделить на два основных класса: внешние (их иногда называют асинхронными) и внутренние (синхронные). Внешние прерывания вызываются асинхронными событиями, которые происходят вне прерываемого процесса, например:

— прерывания от таймера;

— прерывания от внешних устройств;

— прерывания по нарушению питания;

— прерывания с пульта оператора вычислительной системы.

Внутренние прерывания вызываются событиями, которые связаны с работой процессора и являются синхронными с его операциями. Примерами являются следующие запросы на прерывание:

— при нарушении адресации (в адресной части выполняемой команды указан запрещенный или несуществующий адрес;

— при делении на ноль;

— от средств контроля (например, вследствие обнаружения ошибки четности, ошибок в работе различных устройств).

Таблица 1. Основные классы прерываний

Программное прерывание Генерируется в некоторых ситуациях, возникающих в результате выполнения команд. Такими ситуациями могут быть арифметическое переполнение, деление на ноль, попытка выполнить некорректную команду и ссылка на область памяти, доступ к которой пользователю запрещен.
Прерывание по таймеру Генерируется таймером процессора. Это прерывание позволяет операционной системе выполнять некоторые свои функции периодически, через заданные промежутки времени.
Прерывание ввода-вывода Генерируется контроллером ввода-вывода. Сигнализирует о нормальном завершении операции или о наличии ошибок.
Аппаратное прерывание Генерируется при возникновении таких аварийных ситуаций, как, например, падение напряжения в сети иди ошибка контроля четности памяти.

 

Важный тип аппаратных преры­ваний — прерывания таймера, которые генерируются периодически через фиксированный промежуток времени. Прерывания таймера используют­ся операционной системой при планировании процессов. Каждый тип аппаратных прерываний имеет собственный номер, однозначно опреде­ляющий источник прерывания.

Аппаратное прерывание — это асинхрон­ное событие, то есть оно возникает вне зависимости от того, какой код ис­полняется процессором в данный момент. Обработка аппаратного преры­вания не должна учитывать, какой процесс является текущим.

Прерывания в основном предназначены для повышения эффективности работы компьютерной системы.

Цикл исполнения программы с прерываниями

В цикле прерывания процессор проверяет наличие сигналов прерываний, свидетельствующих о происшедших прерываниях. При поступлении прерывания процессор приостанавливает работу с текущей программой и выполняет обработчик прерывания. Обработчики прерываний обычно входят в состав операционной системы. Как правило, эти программы определяют природу прерывания и выполняют необходимые действия. Когда обработчик прерываний завершает свою работу, процессор возобновляет выполнение программы пользователя с того места, где она была прервана.

Контрольные вопросы

  1. Что понимают под ядром операционной системы?
  2. Перечислите функции ядра.
  3. Для чего служат системные вызовы7
  4. Дайте определение понятию «прерывание».
  5. Какова цель введения прерываний?
  6. Что представляет собой механизм обработки прерываний?
  7. На какие классы делятся прерывания?
  8. Каковы причины возникновения внешних прерываний?
  9. Какие события могут вызвать внутренние прерывания?
еще рефераты
Еще работы по информатике