русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Эволюция операционных систем | Эволюция ОС

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

 

Последовательная обработка данных

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

Расписание работы. На большинстве машин нужно было предварительно заказать машинное время, записавшись в специальный график. Обычно пользователь мог заказать время, кратное некоторому периоду, например, получасу. Тогда, записавшись на 1 час, он мог закончить работу за 45 минут, что приводило к простою компьютера. С другой стороны, если пользователь не укладывался в отведенное время, он должен был прекращать работу, прежде чем задача завершит выполнение.

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

 

Простые пакетные системы

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

Чтобы повысить эффективность работы, была предложена концепция пакетной операционной системы. Похоже, первые пакетные операционные системы (и вообще первые операционные системы какого бы то ни было типа) были разработаны в средине 50-х годов в компании General Motors для машин IBM 701 [WEIZ81]. Впоследствии эта концепция была усовершенствована и внедрена определенным кругом пользователей на IBM 704. В начале 60-х годов некоторые поставщики разработали пакетные операционные системы для своих компьютеров. Одной из заметных систем того времени является IBSYS фирмы IBM, разработанная для компьютеров 7090/7094 и оказавшая значительное влияние на другие системы.
Главная идея, лежащая в основе простых пакетных схем обработки, состоит в использовании программы, известной под названием монитор (monitor). Используя операционную систему такого типа, пользователь не имеет непосредственного доступа к машине. Вместо этого он передает свое задание на перфокартах или магнитной ленте оператору компьютера, который собирает разные задания в пакеты и помещает их в устройство ввода данных. Так они передаются монитору. Каждая программа составлена таким образом, что при завершении ее работы управление переходит к монитору, который автоматически загружает следующую программу.

Чтобы понять работу этой схемы, рассмотрим ее с точки зрения монитора и процессора.

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

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


Рис. 2.3. Схема размещения резидентного монитора в памяти

Как видите, монитор решает проблему разработки графика. Задания в пакетах выстраиваются в очередь и выполняются без простоев настолько быстро, насколько это возможно. Кроме того, монитор помогает в подготовке программы к исполнению. В каждое задание включаются простые команды языка управления заданиями (job control language — JCL). Это специальный тип языка программирования, используемый для того, чтобы отдавать команды монитору. Рассмотрим простой пример, в котором нужно принять на обработку программу пользователя, составленную на языке FORTRAN, и дополнительные данные, используемые этой программой. Все команды языка FORTRAN и данные находятся на отдельных перфокартах или в отдельных записях на магнитной ленте. Каждое задание, кроме операторов языка FORTRAN и данных, содержит команды управления заданием, каждая из которых начинается знаком $. Формат задания в целом выглядит следующим образом:

Чтобы выполнить это задание, монитор читает строку $FTN и загружает с запоминающего устройства большой емкости (обычно это лента) компилятор соответствующего языка. Компилятор преобразует программу пользователя в объектный код, который записывается в память или на запоминающее устройство. Если этот код заносится в память, то операция называется "компиляция, загрузка и запуск". Если же он записывается на магнитную ленту, то нужна дополнительная команда $LOAD. Монитор, к которому вернулось управление после компиляции, читает эту команду и обращается к загрузчику, который загружает объектную программу в память (на место компилятора) и передает ей управление. В таком режиме различные подсистемы совместно используют один и тот же участок основной памяти, хотя в каждый момент времени работает только одна из этих подсистем.

Во время выполнения программы пользователя по каждой команде ввода считывается только одна строка данных. Команда ввода программы пользователя обращается к подпрограмме ввода, которая является составной частью операционной системы. Подпрограмма ввода проверяет, не произошло ли случайное считывание строки языка JCL. Если это произошло, управление передается монитору. При успешном (или неудачном) завершении задания пользователя монитор проверяет строки задания, пока не дойдет до строки с командой на языке управления, что защищает систему от программ, в которых оказалось слишком много или слишком мало строк с данными (иначе очередным заданием могли оказаться излишние данные предыдущего задания, или часть нового задания могла бы рассматриваться как недостающие данные предыдущего задания).
Таким образом, монитор, или пакетная операционная система, — это обычная компьютерная программа. Ее работа основана на способности процессора выбирать команды из различных областей основной памяти; при этом происходит передача и возврат управления. Желательно также использование и других возможностей аппаратного обеспечения.

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

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

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

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

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

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

 

 

Многозадачные пакетные системы

Процессору часто приходилось простаивать даже при автоматическом выполнении заданий под управлением простой пакетной операционной системы. Проблема заключается в том, что устройства ввода-вывода работают намного медленнее, чем процессор. На рис. 2.4 представлены соответствующие расчеты, выполненные для программы, которая обрабатывает файл с записями, причем для обработки одной записи требуется в среднем 100 машинных команд. В этом примере 96% всего времени процессор ждет, пока устройства ввода-вывода закончат передачу данных в файл и из него. На рис. 2.5,а показана такая ситуация для одной программы. Некоторое время процессор исполняет команды; затем, дойдя до команды ввода-вывода, он должен подождать, пока она не закончится. Только после этого процессор сможет продолжить работу.


Рис. 2.4. Пример использования системы

Эффективность использования процессора можно повысить. Мы знаем, что памяти должно хватить, чтобы разместить в ней операционную систему (резидентный монитор) и программу пользователя. Представим, что в памяти достаточно места для операционной системы и двух программ пользователя. Теперь, когда одно из заданий ждет завершения операций ввода-вывода, процессор может переключиться на другое задание, для которого в данный момент ввод-вывод, скорее всего, не требуется (рис. 2.5,6). Более того, если памяти достаточно для размещения большего количества программ, то процессор может выполнять их параллельно, переключаясь с одной на другую (рис. 2.5,в). Такой режим известен как многозадачность (multiprogramming) и является основной чертой современных операционных систем.


Время
в) Многозадачность — три программы
Рис. 2.5. Пример многозадачности

Приведем простой пример, иллюстрирующий преимущества многозадачности. Рассмотрим компьютер, имеющий 256 К слов памяти, не используемых операционной системой, диск, терминал и принтер. На обработку одновременно приняты три программы, JOB1, JOB2 и JOB3, атрибуты которых перечислены в табл. 2.1. Предположим, что для выполнения заданий JOB2 и JOB3 использование процессора минимально, и задание JOB3 постоянно обращается к диску и принтеру. В простой среде с пакетной обработкой эти задания выполняются последовательно. Для завершения JOB1 требуется 5 мин. Задание JOB2 должно ждать, пока пройдут эти 5 мин, после чего оно выполняется в течение 15 мин. По истечении 20 мин начинает работу задание JOB3; его выполнение заканчивается через 30 мин после того, как оно было принято на обработку. Средний процент использования ресурсов, производительность и время отклика показаны в столбце табл. 2.2, соответствующем однозадачности, а на рис. 2.6,а показано использование различных устройств в этом режиме. Очевидно, что эффективность использования всех ресурсов, усредненная по всему периоду времени (30 мин), является крайне низкой.

Таблица 2.1. Свойства трех программ-примеров

Теперь предположим, что задания выполняются одновременно под управлением многозадачной операционной системы. Из-за того что они используют разные ресурсы, их совместное выполнение на компьютере длится минимальное время (при условии, что заданиям J0B2 и J0B3 предоставляется достаточно процессорного времени для поддержки осуществляемого ими ввода и вывода в активном состоянии). Для выполнения задания J0B1 потребуется 5 мин, но к этому времени задание J0B2 будет выполнено на треть, а задание J0B3 — на половину. Все три задания будут выполнены через 15 мин. Если посмотреть на столбец табл. 2.2, соответствующий многозадачному режиму, его преимущества станут очевидны, как и из гистограммы, приведенной на рис. 2.6,6.


Рис. 2.6. Гистограммы использования ресурсов

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

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

 

 

Системы, работающие в режиме разделения времени

Использование многозадачности в пакетной обработке может привести к существенному повышению эффективности. Однако для многих заданий желательно обеспечить такой режим, в котором пользователь мог бы непосредственно взаимодействовать с компьютером. В самом деле, во многих случаях интерактивный режим является обязательным условием работы.
Многозадачность не только позволяет процессору одновременно обрабатывать несколько заданий в пакетном режиме, но может быть использована и для обработки нескольких интерактивных заданий. Такую организацию называют разделением времени, потому что процессорное время распределяется между различными пользователями. В системе разделения времени несколько пользователей одновременно получают доступ к системе с помощью терминалов, а операционная система чередует исполнение программ каждого пользователя через малые промежутки времени. Таким образом, если нужно одновременно обслужить n пользователей, каждому из них предоставляется лишь 1/и часть полной скорости компьютера, не считая затрат на работу операционной системы. Однако, принимая во внимание относительно медленную реакцию человека, время отклика на компьютере с хорошо настроенной системой будет сравнимо со временем реакции пользователя.
Как пакетная обработка, так и разделение времени используют многозадачность. Основные отличия этих двух режимов перечислены в табл. 2.3.

Таблица 2.3. Пакетная многозадачность и разделение времени

Одной из первых операционных систем разделения времени была система CTSS (Compatible Time-Sharing System) [CORB62], разработанная в Массачусетском технологическом институте группой, известной как Project MAC. Первоначально система была разработана для IBM 709, а затем перенесена на IBM 7094.

По сравнению с более поздними системами, CTSS была довольно примитивна. Она работала на машине с основной памятью емкостью 32000 36-битовых слов, из которых 5000 слов занимал монитор. Когда управление должно было быть передано очередному интерактивному пользователю, его программа и данные загружались в остальные 27000 слов основной памяти. Программа всегда загружалась так, что ее начало находилось в ячейке номер 5000, что упрощало управление как монитором, так и памятью. Приблизительно через каждые 0.2 с системные часы генерировали прерывание. При каждом прерывании таймера управление передавалось операционной системе, и процессор мог перейти в распоряжение другого пользователя. Таким образом, данные текущего пользователя через регулярные интервалы времени выгружались, а вместо них загружались другие. Перед считыванием программы и данных нового пользователя программа и данные предыдущего пользователя записывались на диск для сохранения до дальнейшего выполнения. Впоследствии, когда очередь этого пользователя наступит снова, код и данные его программы будут восстановлены в основной памяти.

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

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


Рис. 2.7. Работа CTSS

Сначала монитор загружает задание JOB1 и передает ему управление (о). Затем он принимает решение передать управление заданию JOB2. Из-за того, что JOB2 занимает больше памяти, чем JOB1, сначала нужно сохранить данные JOB1, а затем можно загружать JOB2 (б). Затем для обработки загружается JOB3. Но поскольку это задание меньше, чем JOB2, часть задания JOB2 может оставаться в основной памяти, сокращая время записи на диск (в). Позже монитор вновь передает управление заданию JOB1. Чтобы загрузить его в память, на диск необходимо записать еще часть задания JOB2 (г). При загрузке задания JOB4 в памяти остается часть заданий JOB1 и JOB2 (д). Если теперь будет активизировано задание JOB1 или JOB2, то потребуется лишь частичная его загрузка. Следующим в этом примере запускается задание JOB2. Для этого требуется, чтобы JOB4 и оставшаяся в памяти часть JOB1 были записаны на диск, а в память была считана недостающая часть JOB2.
Подход CTSS по сравнению с современными принципами разделения времени является примитивным, но вполне работоспособным. Его простота позволяла использовать монитор минимальных размеров. Из-за того что задание всегда загружалось в одно и то же место в памяти, не было необходимости применять во время загрузки методы перемещения (которые рассматриваются позже). Необходим был лишь метод записи, позволяющий уменьшить активность диска. Работая на машине 7094, CTSS могла обслуживать до 32 пользователей.

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

Просмотров:

Вернуться в оглавление:Операционные системы




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.