Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретический материал.docx
Скачиваний:
48
Добавлен:
23.11.2019
Размер:
4.82 Mб
Скачать

3.2 Классификация операционных систем и сфера их применения

Место операционной системы в структуре аппаратно-программных средств (АПС) компьютера показано на рис. 3.2. Нижний уровень структуры составляют интегральные микросхемы, источники питания, дисководы и другие физические устройства.

Рис. 3.2. Структура аппаратно - программных средств компьютера

Выше расположен уровень, на котором физические устройства рассматриваются с точки зрения функционально-логических связей. На этом уровне находятся внутренние регистры центрального процессора (ЦП) и арифметическо-логическое устройство (АЛУ). Операции над данными выполняются в соответствии с тактовой частотой ЦП. В некоторых машинах эти операции осуществляются под управлением специальных средств, называемых микропрограммами, В других — с помощью аппаратуры. Некоторые операции выполняются за один такт работы ЦП, другие требуют нескольких тактов. Все операции составляют систему команд машины, а все данные имеют абсолютные значения адресов, по которым они хранятся в памяти. Система команд компьютера образует машинный язык.

Машинный язык содержит от 50 до 300 команд, по которым осуществляются преобразование, модификация и перемещения данных между устройствами. Управление устройствами на этом уровне осуществляется с помощью загрузки определенных данных в специальные регистры устройств. Например, при программировании ввода/вывода диску можно дать команду чтения, записав в его регистры адрес места на диске, адрес в основной памяти, число байтов для чтения и направление действия (чтение или запись). В действительности диску следует передавать большее количество параметров, а структура операции, возвращаемой диском, достаточно сложна. При этом очень важную роль играют временные соотношения.

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

 

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

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

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

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

Операционные системы выполняют две основные функции — расширение возможностей машины и управление ее ресурсами.

Как уже упоминалось, архитектура (система команд, организация памяти, ввод/вывод данных и структура шин) компьютера на уровне машинного языка неудобна для работы с программами, особенно при вводе/выводе данных. Так, процедура ввода/вывода данных с гибкого диска выполняется через микросхемы контроллера. Контроллер имеет 16 команд. Каждая задается передачей от 1 до 9 байт в регистр устройства. Это команды чтения и записи данных, перемещения головки диска, форматирования дорожек, инициализации, распознавания, установки в исходное положение и калибровки контроллера и приводов. Основные команды read и write (чтение и запись). Каждая из них требует 13 параметров, которые определяют адрес блока на диске, количество секторов на дорожке, физический режим записи, расстановку промежутков между секторами. Программист при работе с гибким диском должен также постоянно знать, включен двигатель или нет. Если двигатель выключен, его следует включить прежде, чем данные будут прочитаны или записаны. Двигатель не может оставаться включенным слишком долго, так как гибкий диск изнашивается. Поэтому программист вынужден выбирать между длинными задержками во время загрузки и изнашивающимися гибкими дисками.

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

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

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

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

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

На самом верхнем уровне находятся ОС для мэйнфреймов. Эти огромные машины еще можно встретить в больших организациях. Мэйнфреймы отличаются от персональных компьютеров по своим возможностям ввода/вывода. Довольно часто встречаются мэйнфреймы с тысячью дисков и терабайтами данных. Мэйнфреймы выступают в виде мощных web-серверов и серверов крупных предприятий и корпораций. Операционные системы для мэйнфреймов в основном ориентированы на обработку множества одновременных заданий, большинству из которых требуется огромное количество операций ввода-вывода. Обычно они выполняют три вида операций: пакетную обработку, обработку транзакций (групповые операции) и разделение времени. При пакетной обработке выполняются стандартные задания пользователей, работающих в интерактивном режиме. Системы обработки транзакций управляют очень большим количеством запросов, например бронирование авиабилетов. Каждый отдельный запрос невелик, но система должна отвечать на сотни и тысячи запросов в секунду. Системы, работающие в режиме разделения времени, позволяют множеству удаленных пользователей одновременно выполнять свои задания на одной машине, например, работать с большой базой данных. Все эти функции тесно связаны между собой, и операционная система мэйнфрейма выполняет их все. Примером операционной системы для мэйнфрейма является OS/390.

Уровнем ниже находятся серверные ОС. Серверы представляют собой или многопроцессорные компьютеры, или даже мэйнфреймы. Эти ОС одновременно обслуживают множество пользователей и позволяют им делить между собой программно-аппаратные ресурсы. Серверы также предоставляют возможность работы с печатающими устройствами, файлами или Internet. У Internet-провайдеров обычно работают несколько серверов для того, чтобы поддерживать одновременный доступ к сети множества клиентов. На серверах хранятся страницы web-сайтов и обрабатываются входящие запросы. UNIX и Windows 2000 являются типичными серверными ОС. Теперь для этой цели стала использоваться и операционная система Linux.

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

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

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

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

Базовые понятия операционных систем. Для операционных систем существует набор базовых понятий, таких как процессы, память и файлы, которые являются самыми важными для понимания общей идеи построения и функционирования ОС.

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

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

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

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

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

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

Рис. 3.3. Дерево каталогов

Каждый файл в иерархии каталогов можно определить, задав его имя пути, называемое также полным именем файла. Путь начинается из вершины структуры каталогов, называемой корневым каталогом. Такое абсолютное имя пути состоит из списка каталогов, которые нужно пройти от корневого каталога к файлу, с разделением отдельных компонентов. Отдельные компоненты в ОС UNIX разделяются косой чертой /, а в MS-DOS и Windows — обратной косой чертой \.

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

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

Рассмотрим содержание и применение этой модели.

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

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

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

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

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

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

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

Рис. 3.4 Нижний уровень ОС, отвечающий за прерывание и планирование

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

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

Модель процесса базируется на двух независимых концепциях: группировании ресурсов и выполнении программы. Когда их разделяют, появляется понятие потока.

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

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

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

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

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

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

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

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

Концепция потоков полезна также в системах с несколькими процессорами, где возможен настоящий параллелизм.

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

Представим, что пользователь удалил предложение на первой странице, а затем исправил предложение на 350-й странице документа, в котором 400 страниц. Он дает команду программе перейти на страницу с номером 350. Текстовому процессору придется переформатировать весь документ вплоть до 350-й страницы, поскольку он не знает, где начинается эта страница. Это может занять довольно много времени и вряд ли обрадует пользователя.

В данном случае помогут потоки. Пусть текстовый процессор написан в виде двухпоточной программы. Один поток взаимодействует с пользователем, а второй переформатирует документ в фоновом режиме. Как только предложение на первой странице было удалено, интерактивный поток дает команду фоновому потоку переформатировать весь документ. В то время как первый поток продолжает выполнять команды с клавиатуры или мыши, второй поток быстро переформатирует документ. Может случиться, что форматирование будет закончено раньше, чем пользователь захочет перейти к 350-й странице, и тогда команда будет выполнена мгновенно. Можно добавить третий поток. Большинство текстовых процессоров автоматически сохраняет редактируемый текст один раз в несколько минут (время устанавливается пользователем), чтобы в случае аварийного завершения программы, отказа системы или перебоев с питанием пользователь не лишился результатов своей работы. Этим может заниматься третий поток, не отвлекая два оставшихся.

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

Память в компьютере имеет иерархическую структуру. Небольшая ее часть представляет собой очень быструю энергозависимую (теряющую информацию при выключении питания) кэш-память. Компьютеры обладают также десятками мегабайт энергозависимой оперативной памяти ОЗУ (RAM, Random Access Memory — память с произвольным доступом) и десятками или сотнями гигабайт медленного энергонезависимого пространства на жестком диске. Одной из задач ОС является координация использования всех этих составляющих памяти.

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

Системы управления памятью делят на два класса. К первому классу относятся системы, перемещающие процессы между оперативной памятью и диском во время их выполнения, т.е. осуществляющие подкачку процессов целиком (swapping) или постранично (paging). Обычный и постраничный варианты подкачки являются искусственными процессами, вызванными отсутствием достаточного количества оперативной памяти для одновременного хранения всех программ. Ко второму — те, которые этого не делают. Второй класс систем проще. Поскольку ПО растет еще быстрее, чем память, то, вероятно, потребность в эффективном управлении памятью будет существовать всегда. В 80-е гг. использовали системы разделения времени для работы десятков пользователей на машинах VAX с объемом памяти 4 Мбайт. Рекомендуемый объем оперативной памяти на 2012й год - 8-16Гб.

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

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

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

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

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

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

Работа системы свопинга заключается в следующем. Пусть имеются 4 процесса — А, В, С, D. На начальной стадии в памяти находится только процесс А. Затем с течением времени создаются или загружаются с диска последовательно процессы В и С. В следующий момент процесс А выгружается на диск. Затем появляется процесс D, а процесс В завершается. Наконец, процесс А снова возвращается в память. Распределение памяти изменяется по мере того, как процессы поступают в память и покидают ее. Так как теперь процесс А имеет другое размещение в памяти, его адреса должны быть перенастроены или программно во время загрузки в память, или аппаратно во время выполнения программы.

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

Основная идея виртуальной памяти заключается в том, что объединенный размер программы, данных и стека может превысить количество доступной физической памяти. ОС хранит части программы, использующиеся в настоящий момент в оперативной памяти, остальные — на диске. Например, программа размером 16 Мбайт сможет работать на машине с 4 Мбайт памяти, если тщательно продумать, какие 4 Мбайт должны храниться в памяти в каждый момент времени. При этом части программы, находящиеся на диске и в памяти, будут меняться местами по мере необходимости.

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

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

Устройства ввода-вывода можно разделить на две категории: блочные устройства и символьные устройства. Блочные устройства хранят информацию в виде блоков фиксированного размера, причем у каждого блока имеется свой адрес. Размеры блоков колеблются от 521 до 32 768 байт. Важное свойство блочного устройства состоит в том, что каждый его блок может быть прочитан независимо от остальных блоков. Наиболее распространенными блочными устройствами являются диски.

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

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

Устройства ввода-вывода обычно состоят из механической и электронной частей. Механический компонент находится в самом устройстве. Электронный компонент устройства называется контроллером или адаптером. В современных компьютерах контроллеры встраиваются в материнскую плату или располагаются на самом устройстве ввода-вывода. Многие контроллеры способны управлять несколькими идентичными устройствами. Если интерфейс между контроллером и устройством является официальным стандартом ANSI, IEEE или ISO либо фактическим стандартом, то различные производители могут выпускать отдельно устройства и контроллеры, удовлетворяющие данному интерфейсу. Так производятся жесткие диски, соответствующие интерфейсу IDE (Integrated Drive Electronics — встроенный интерфейс накопителей) или SCSI (Small Computer System Interface — системный интерфейс малых компьютеров).

Часто интерфейс между устройством и контроллером является интерфейсом низкого уровня. С диска в контроллер поступает последовательный поток битов, начинающийся с заголовка сектора (преамбулы), за которым следует 4096 бит в секторе, и контрольная сумма, называемая кодом исправления ошибок ЕСС (Error Correcting Code). Заголовок сектора записывается на диск во время форматирования. Он содержит номера цилиндра и сектора, размер сектора, коды синхронизации и другую служебную информацию.

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

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

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

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

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

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

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

Существуют три различных способа осуществления операций ввода-вывода. Простейший вид ввода-вывода состоит в том, что всю работу выполняет центральный процессор. Этот метод называется программным вводом-выводом. ЦП вводит или выводит каждый байт или слово, находясь в цикле ожидания готовности устройства ввода-вывода. Второй способ представляет собой управляемый прерываниями ввод-вывод, при котором ЦП начинает передачу ввода-вывода для символа или слова, после чего переключается на другой процесс, пока прерывание от устройства не сообщит ему об окончании операции ввода-вывода. Третий способ заключается в использовании прямого доступа к памяти (DMA — Direct Memory Access), при котором отдельная микросхема управляет переносом целого блока данных и инициирует прерывание только после окончания операции переноса блока.

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

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

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

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

Рис. 3.5. Логическое расположение драйверов устройств

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

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

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

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

Драйвер устройства выполняет несколько функций:

1) обработку абстрактных запросов чтения и записи независимого от устройств и расположенного над ними программного обеспечения;

2) инициализацию устройства;

3) управление энергопотреблением устройства и регистрацией событий;

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

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

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

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

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

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

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

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

Виды операционных систем. Давайте более подробно остановимся на основных видах ОС: UNIX, Linux и Windows, чтобы увидеть, как эти принципы работают на практике. Начнем рассмотрение примеров с операционной системы UNIX, так как она используется на различных типах компьютеров чаще, чем любая другая ОС. Система UNIX доминирует на рабочих станциях старших моделей и серверах, но она также используется и в ноутбуках и суперкомпьютерах. Система UNIX иллюстрирует множество важных принципов построения ОС, многие из которых были позаимствованы другими операционными системами. Общий обзор системы особенно важен для пользователей, знакомых только с системой Windows, скрывающей от них практически все детали системы. Хотя графические интерфейсы очень удобны, но они не обладают достаточной гибкостью и не дают представление о том, как работает система.

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

UNIX u Linux. История UNIX начиналась в 60-е гг. прошлого столетия, когда сотрудник лаборатории Bell Labs крупнейшей телекоммуникационной компании в мире AT&T Кен Томпсон написал на ассемблере операционную систему, которая в шутку была названа UNICS (UNiplexed Information and Computing Service — примитивная информационная и вычислительная служба). Впоследствии написание этого слова стало короче, превратившись в UNIX. Однако переписывать всю систему на ассемблере заново для каждой новой машины дело трудное, поэтому Томпсон решил переписать UNIX на языке высокого уровня, который он сам специально разработал и назвал языком В. Но язык В оказался слабым, в первую очередь, из-за отсутствия в нем структур данных. Тогда коллега Томпсона Ритчи разработал следующий язык, явившийся преемником языка В, который, естественно, получил название С. Вместе Томпсон и Ритчи переписали UNIX на С. Язык С оказался как раз тем языком, который и был нужен в то время, и он сохраняет лидирующие позиции в области системного программирования до сих пор. За работу по созданию ОС UNIX Ритчи и Томпсону ассоциацией по вычислительной технике АСМ была присуждена престижная премия Тьюринга. Многие университеты старались получить копию системы UNIX.

Операционная система UNIX поставлялась с полным комплектом исходных текстов, поэтому владельцы системы могли совершенствовать ее. Новые идеи и усовершенствования системы распространялись быстро.

Version 7 (по номеру издания руководства программиста) стала первой переносимой на другие платформы версией операционной системы UNIX. На Version 7 выросло целое поколение студентов, которые содействовали распространению UNIX. К середине 80-х гг. ОС UNIX широко применялась на мини-компьютерах и рабочих станциях различных производителей. Многие компании даже приобрели лицензии на исходные тексты, чтобы производить свои версии системы UNIX. Одной из таких компаний была небольшая начинающая фирма Microsoft, в течение нескольких лет продававшая Version 7 под именем XENIX, пока ее интересы не повернулись в другую сторону.

Для того, чтобы система UNIX могла быть гарантированно запущена на любой машине, к концу 80-х при содействии Совета по стандартам Standard Boards при Институте инженеров по электротехнике и электронике ШЕЕ была предпринята попытка объединить варианты системы. В этой работе приняли участие сотни людей из промышленных, академических и правительственных организаций. Коллективное название проекта — POSIX. Первые три буквы этого сокращения означали Portable Operating System — переносимая операционная система. Буквы IX были добавлены, чтобы имя проекта выглядело юниксообразно. Комитет POSIX выработал стандарт, известный как 1003.1. Этот стандарт определяет набор библиотечных процедур, которые должна предоставлять каждая соответствующая данному стандарту система UNIX, таким образом, гарантируя, что эта программа будет работать на любой версии системы, поддерживающей данный стандарт.

В 1991 г. финский студент Линус Торвальдс написал еще один клон системы UNIX, который назвал Linux. Это должна была быть полноценная операционная система, со многими функциями, отсутствующими в системе MINIX. Она заимствовала некоторые идеи системы MINIX, начиная со структуры дерева исходных текстов и кончая структурой файловой системы. Однако, в отличие от микроядерной системы MINIX, Linux была монолитной системой, т.е. вся ОС помещалась в ядре. Размер исходного текста приблизительно совпадал с версией MINIX. Функционально первая версия Linux также практически почти не отличалась от MINIX.

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

Следующим выпуском системы Linux была версия 1.0, появившаяся в 1994 г. Она включала новую файловую систему, отображение файлов на адресное пространство памяти и совместимое с UNIX сетевое программное обеспечение. Данная версия также включала многие новые драйверы устройств.

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

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

Необычной особенностью Linux является ее бизнес-модель: это свободно распространяющееся программное обеспечение. Ее можно скачать с различных Internet-сайтов, например www.kernel.org. Система Linux поставляется вместе с лицензией, разработанной Ричардом Столманом, основателем Фонда бесплатно распространяемых программ.

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

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

Операционную систему UNIX можно рассматривать в виде пирамиды (рис. 3.7). У основания пирамиды располагается аппаратное обеспечение, состоящее из ЦП, памяти, дисков, терминалов и других устройств. На аппаратном обеспечении работает система UNIX. Ее функция заключается в управлении аппаратным обеспечением и предоставлении всем программам системных вызовов. Эти системные вызовы позволяют программам создавать процессы, файлы и прочие ресурсы и управлять ими.

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

Помимо ОС и библиотеки системных вызовов, все версии UNIX содержат большое количество стандартных программ, некоторые из них описываются стандартом POSIX 1003.2, тогда как другие могут различаться в разных версиях системы. К этим программам относятся командный процессор (оболочка), компиляторы, редакторы, программы обработки текста и утилиты для работы с файлами. Именно эти программы и запускаются пользователем с терминала.

Рис. 3.7. Уровни операционной системы UNIX

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

У многих версий системы UNIX имеется графический интерфейс пользователя, сходный с популярными интерфейсами, применяемыми на компьютерах Macintosh и в системе Windows. Пользовательский интерфейс UNIX состоит не только из оболочки, но также из большого числа стандартных обслуживающих программ, называемых утилитами. Стандарт POSDC 1003.2 определяет синтаксис и семантику около 100 из этих программ. Идея стандартизации этих программ заключается в том, чтобы можно было писать оболочки, которые работали бы на всех системах UNIX. Помимо этих стандартных утилит, существует еще масса прикладных программ, таких как web-браузеры, программы просмотра изображений и т. д.

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

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

Операционная система Windows. Существует несколько версий Windows: Windows-3.1, Windows-95, Windows-98, Windows-2000, Windows NT. Все они близки между собой по содержанию, поэтому в для начала давайте рассмотрим операционную систему с которой все началось - DOS.

MS-DOS — одна из первых операционных систем и одна из самых известных. Пик популярности этой операционной системы приходится на 90-е годы, сейчас эта операционная система используется редко. Операционная система DOS состоит из следующих частей: Базовая система ввода-вывода (ВIOS), находящаяся в постоянной памяти (постоянном запоминающем устройстве, ПЗУ) компьютера. Эта часть операционной системы является «встроенной» в компьютер.

Ее назначение состоит в выполнении наиболее простых и универсальных услуг операционной системы, связанных с осуществлением ввода-вывода. Базовая система ввода-вывода содержит также тест функционирования компьютера, проверяющий работу памяти и устройств компьютера при включении его электропитания. Кроме того, базовая система ввода-вывода содержит программу вызова загрузчика операционной системы. Загрузчик операционной системы - это очень короткая программа, находящаяся в первом секторе каждой дискеты с операционной системой DOS. Функция этой программы заключается в считывании в память еще двух модулей операционной системы, которые и завершают процесс загрузки DOS. Командный процессор DOS обрабатывает команды, вводимые пользователем. Командный процессор находится в дисковом файле COMMAND.COM на диске, с которого загружается операционная система.

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

История Windows. История Windows берет свое начало в 1986 году, когда появилась первая версия системы. Она представляла собой набор программ, расширяющих возможности существующих операционных систем для большего удобства в работе. Через несколько лет вышла вторая версия, но особой популярности система Windows не завоевала. Однако в 1990 году вышла новая версия - Windows 3.0, которая стала использоваться на многих персональных компьютерах. Популярность новой версии Windows объяснялась несколькими причинами. Графический интерфейс позволяет работать с объектами вашего компьютера не с помощью команд, а с помощью наглядных и понятных действий над значками, обозначающими эти объекты.

Возможность одновременной работы с несколькими программами значительно повысила удобство и эффективность работы. Кроме того, удобство и легкость написания программ для Windows привели к появлению все больше разнообразных программ, работающих под управлением Windows. Наконец, лучше была организована работа с разнообразным компьютерным оборудованием, что также определило популярность системы. Последующие версии Windows были направлены на повышение надежности, а также поддержку средств мультимедиа (версия 3.1) и работу в компьютерных сетях (версия 3.11). Параллельно с разработкой Windows компания Microsoft в 1988 году начала работу над новой операционной системой, названной Windows NT. Перед новой системой были поставлены задачи существенного повышения надежности и эффективной поддержки сетевой работы. При этом интерфейс системы не должен был отличаться от интерфейса Windows 3.0.

Интересно, что самой распространенной версией Windows NT также стала третья версия. В 1992 году появилась версия Windows NT 3.0, а в 1994 году - Windows NT 3.5. Процесс развития операционных систем не стоит на месте, и в 1995 появилась система Windows 95, ставшая новым этапом в истории Windows. По сравнению с Windows 3.1 значительно изменился интерфейс, выросла скорость работы программ.

Одной из новых возможностей Windows 95 была возможность автоматической настройки дополнительного оборудования компьютера для работы без конфликтов друг с другом. Другой важной особенностью системы стала возможность работы с Интернетом без использования дополнительных программ. Интерфейс Windows 95 стал основным для всего семейства Windows, и в 1996 появляется переработанная версия Windows NT 4.0, имеющая такой же интерфейс, как и Windows 95.

Продолжением развития Windows 95 стала операционная система, появившаяся в 1998 году. При сохранившемся интерфейсе внутренняя структура была значительно переработана. Много внимания было уделено работе с Интернетом, а также поддержке современных протоколов передачи информации - стандартов, обеспечивающих обмен информацией между различными устройствами. Кроме того, особенностью Windows 98 является возможность работы с несколькими мониторами. Следующим этапом в развитии Windows стало появление Windows 2000 и Windows Me (Millennium Edition - редакция тысячелетия). Система Windows 2000 разработана на основе Windows NT и унаследовала от нее высокую надежность и защищенность информации от постороннего вмешательства. Операционная система Windows Me стала наследницей Windows 98, но приобрела многие новые возможности. Прежде всего, это улучшенная работа со средствами мультимедиа, возможность записывать не только аудио, но и видеоинформацию, мощные средства восстановления информации после сбоев и многое другое.

Постепенно разница между разными системами Windows стирается, и операционная система Windows XP предназначена для замены как Windows 2000, так и Windows Me. В 2007, после Windows ХР появляется новая операционная система. На этот раз операционной системой от Microsoft становится Windows Vista. Эта система была создана на основе Windows ХР. Исправлены недостатки, улучшен дизайн, появился новый трехмерный интерфейс Aero Glass, который требует видео карту с поддержкой DirectX 9.0. Windows. Vista стала более требовательной в отличии от Windows ХР. Через некоторое время появляется Windows Seven. Всем известная, как Windows7. Эта операционная система была создана на основе Windows Vista. Имелись переработки в структуре. Исправлены недостатки, расширили сетевые возможности. В новой системе, разработчики явно уделили много внимания для работы с Интернетом. Так же Windows7 менее уязвима, чем ранние выпуски. На сегодняшний день Windows7 является самой новой операционной системой. И большинство людей пользуется этой системой.