Операционные системы среды и оболочки. Операционные системы и среды. Вход в систему

Операционные системы (ОС) в современном их понимании (их назначении и сущности) появились значительно позже первых компьютеров (правда, по всей видимости, и исчезнут в этой сущности в компьютерах будущего). Почему и когда появились ОС? Считается 1) что первая цифровая вычислительная машина ENIAC (Electronic Numerical Integrator and Computer) была создана в 1946 году по проекту "Проект РХ" Министерства обороны США. На реализацию проекта затрачено 500 тыс. долларов. Компьютер содержал 18000 электронных ламп, массу всякой электроники, включал в себя 12 десятиразрядных сумматоров, а для ускорения некоторых арифметических операций имел умножитель и "делитель-извлекатель" квадратного корня. Программирование сводилось к связыванию различных блоков проводами. Конечно, никакого программного обеспечения и тем более операционных систем тогда еще не существовало .

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

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

· запуск транслятора и получение программы в машинных кодах;

· связывание программы с библиотечными подпрограммами;

· запуск программы;

· вывод результатов работы программы на печатающее или другое периферийное устройство.

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


С целью исключения простоев были предприняты попытки разработки специальных программ – мониторов, прообразов первых операционных систем, которые осуществляли автоматический переход от задания к заданию. Считается, что первую операционную систему создала в 1952 году для своих компьютеров IBM-701 исследовательская лаборатория фирмы General Motors . В 1955 году эта фирма и North American Aviation совместно разработали ОС для компьютера IBM-704.

В конце 50-х годов прошлого века ведущие фирмы изготовители поставляли операционные системы со следующими характеристиками:

· пакетная обработка одного потока задач;

· наличие стандартных программ ввода-вывода;

· возможности автоматического перехода от программы к программе;

· средства восстановления после ошибок, обеспечивающие автоматическую "очистку" компьютера в случае аварийного завершения очередной задачи и позволяющие запускать следующую задачу при минимальном вмешательстве оператора;

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

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

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

Рис. 1.1. Иерархическая структура программно-аппаратных средств компьютера

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

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

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

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

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

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

Еще одно важное понятие, связанное с операционной системой, относится к реализации пользовательских интерфейсов. Как правило, любая операционная система обеспечивает удобную работу пользователя за счет средств пользовательского интерфейса. Эти средства могут быть неотъемлемой частью операционной среды (например, графический интерфейс Windows или текстовый интерфейс командной строки MS DOS), а могут быть реализованы отдельной системной программой – оболочкой операционной системы (например, Norton Commander для MS DOS). В общем случае под оболочкой операционной системы понимается часть операционной среды, определяющая интерфейс пользователя, его реализацию (текстовый, графический и т.п.), командные и сервисные возможности пользователя по управлению прикладными программами и компьютером.

Перейдем к рассмотрению эволюции операционных систем.

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

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

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

Предоставляет пользователю дружественный интерфейс;

Обеспечивает эффективное использование аппаратно- программных ресурсов ЭВМ.

Интерфейс, предоставляемый пользователю, действует как интерфейс между приложениями и пользователем, с одной стороны, и аппаратурой ЭВМ - с другой.

Типичными объектами, с которыми манипулирует обычный пользователь, работая в среде той или иной ОС, являются диски, папки и файлы, окна и различные графические (если используется графический интерфейс пользователя) элементы окон (кнопки и т. п.). ОС обеспечивает для манипуляций с этими объектами интерфейс пользователя - UI (user interface). Задача ОС - обеспечить максимально дружественный, т. е. требующий в минимальном объеме специальных знаний, интуитивно понятный пользовательский интерфейс. В настоящее время для решения этой задачи в UI широко используется графика. Такой интерфейс получил название графического интерфейса пользователя - GUI (graphical user interface).

Программисту ОС предоставляет программный интерфейс (интерфейс прикладного программирования) - API (application programming interface). Он представляет собой стандартизированный набор функций, процедур, других программных компонентов, который освобождает программиста от выполнения рутинных операций. При помощи указанного набора функций приложение запрашивает функции нижнего уровня (как правило, функции операционной системы). Чем богаче этот набор, чем шире возможности той или иной функции из этого набора, тем проще программисту реализовать рутинные, типичные функции приложения при взаимодействии его с ОС. На рис. 3.4 представлена схема интерфейсов ОС.

Из этой схемы следует, что пользователь и приложения (программы) взаимодействуют между собой не непосредственно, а через ОС. Сами приложения также взаимодействуют между собой только через «посредника» - ОС.

Решение любой задачи на ЭВМ требует определенных информационных, программных и аппаратных средств, которые

Рис. 3.4. Интерфейсы операционной системы

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

Наряду с указанными выше двумя основными функциями ОС выполняет и ряд других, в том числе сервисных, основными из которых являются:

Обработка нештатных (аварийных) ситуаций, возникающих при решении задач;

Диагностика и сервисное обслуживание дисков - исправление ошибок в адресации данных, расположенных на дисках, оптимизация расположения данных на диске;

Конфигурирование аппаратных средств ЭВМ под нужды пользователя.

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

ОС персональных ЭВМ можно разделить на:

Однозадачные и многозадачные (в зависимости от допустимого числа одновременно решаемых задач);

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

Одно- и многопроцессорные (в зависимости от допустимого количества процессоров в аппаратуре компьютера);

Локальные и сетевые (по ориентации на возможность работы в локальных вычислительных сетях; локальные ОС предназначены для автономного компьютера; сетевые ОС ориентированы на обеспечение работы компьютеров в локальной сети).

Следует отметить, что современные ОС, как правило, являются в той или иной степени сетевыми. Если в локальной сети выделен специальный компьютер (называемый сервером) для обслуживания сетевого взаимодействия, то ОС, ориентированная на такое обслуживание всей сети, называется серверной. В таком случае ОС, установленные на других компьютерах (клиентах), называют клиентскими (или ОС рабочей станции). Так, например, ОС \Vindows 98 не только поддерживает работу компьютера в автономном режиме, но и может выступать в роли клиентской ОС.

Более подробно о сетевых ОС рассказывается в гл. 5.

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

Это потребовало как более эффективной организации их работы на ЭВМ, так и более эффективного использования аппаратных ресурсов ЭВМ, прежде всего процессора (необходимо было свести к минимуму простои процессора при подготовке задания к выполнению на ЭВМ оператором). Для решения этой проблемы были разработаны системы пакетной обработки данных, автоматизировавшие работы оператора по подготовке вычислительного процесса и позволявшие запускать на выполнение не одну, а несколько задач (пакет). Эти системы стали первыми системными программами, прообразом ОС, т. е. появилось разделение программного обеспечения на системное и прикладное. На 1965-1975 гг. приходится «золотой век» в развитии ОС. Именно в эти годы были разработаны и реализованы все основные методы и механизмы, характеризующие современные ОС. Наиболее значимым событием стала промышленная реализация мультипрограммирования - способа организации вычислительного процесса, при котором в памяти ЭВМ размещается одновременно несколько программ, использующих один и тот же процессор. Это позволило существенно повысить эффективность использования дорогостоящих ЭВМ. Следующим достижением, уже непосредственно затрагивающим возможности интерфейса пользователя, стала разработка систем разделения времени, которые обеспечивали пользователю возможность работать за собственным монитором (терминалом) и при многопользовательском (многотерминальном) режиме работы создавали у пользователя иллюзию монопольного владения ресурсами ЭВМ (на основе мультипрограммного режима работы). Это существенно повышало удобство работы пользователей ЭВМ. В начале 70-х гг. появились первые сетевые ОС, что потребовало значительных усилий по стандартизации протоколов (правил) обмена в сетях. Начало 80-х гг. ознаменовалось появлением персональных компьютеров. Одной из основных задач, в связи с ориентацией этих ЭВМ на массового, обычного пользователя, стала задача разработки дружественного интерфейса пользователя. Другая важная задача - развитие сетевых компонентов ОС в целях приближения возможностей персональных ЭВМ при решении сложных задач к возможностям мощных больших ЭВМ - мейнфреймов (за счет «объединения» их вычислительных ресурсов в сети). Именно решение этих задач определяет направление разработки современных ОС.

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

Типичный пример системного ПО наряду с ОС - операционные среды и оболочки, основной причиной разработки которых явилось стремление более полно удовлетворить требования пользователя к интерфейсу с ЭВМ. Обычный пользователь достаточно часто не совсем доволен возможностями той или иной операционной системы. Прежде всего данная ситуация характерна для тех ОС, которые требуют от пользователя жесткого соблюдения правил диалога с ЭВМ. Типичным представителем таких ОС является MS DOS. Однако даже развитые (в сравнении с MS DOS) средства интерфейса пользователя ОС семейства Windows могут по тем или иным причинам не устраивать пользователя.

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

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

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

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

Литература

    Таненбаум Э., Вудхал А. Операционные системы. Разработка и реализация. 3-е изд. – СПб.: Питер, 2007. – 704 с.

    Гордеев А.В. Операционные системы. – СПб.: Питер, 2007. – 416 с.

    Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. – СПб.: Питер, 2002. – 736 с.

    Харт Д.М. Системное программирование в среде Windows.: пер. с англ. – М.: Издательский дом «Вильямс», 2005. – 529 с.

    Гагарина Л.Г., Кокорева Е.В., Виснадул Б.Д. Технология разработки программного обеспечения. – М.: ИД «ФОРУМ»: ИНФРА-М, 2008. – 400 с.

    Иртегов Д.В. Введение в операционные системы. – СПб.: БХВ-Петербург, 2002. – 624 с.

    Олифер В.Г., Олифер Н.А. Сетевые операционные системы. – СПб.: Питер, 2001. – 544 с.

    Партыка Т.Л., Попов И.И. Операционные системы, среды и оболочки. М.: ФОРУМ: ИНФРА-М, 2007. – 528 с.

    Реймонд С. Искусство программирования для UNIX. – М.: Издательский дом «Вильямс», 2005. – 544 с.

Лекция № 1. Основные понятия

      Системное и прикладное программное обеспечение

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

В составе системного ПО можно выделить две составляющие: базовое и сервисное.

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

Сервисное ПО – программы и программные комплексы, которые расширяют возможности базового ПО и организуют более удобную среду работы пользователя. К сервисному ПО также относятся средства разработки (редакторы) и создания программ (компиляторы и интерпретаторы).

Веб-браузер

Базы данных

Прикладное ПО

Компиляторы

Редакторы

Интерпретаторы

Системное ПО

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

Машинный язык

Аппаратура

Микроархитектура

Физические устройства

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

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

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

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

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

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

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

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

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

Примеры операционных систем: UNIX, OS/2, Windows, Linux, QNX, MacOS, BeOS.

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

Более детальный перечень функций приведен ниже:

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

    Распределение памяти.

    Запуск программы (передача ей управления, в результате чего процессор исполняет программу).

    Идентификация всех программ и данных.

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

    Обслуживание всех операций ввода-вывода.

    Обеспечение работы систем управления файлами (СУФ) и/или систем управления базами данных (СУБД), что позволяет резко увеличить эффективность всего программного обеспечения.

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

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

    Организация механизмов обмена сообщениями и данными между выполняющимися программами.

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

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

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

    Удовлетворение жестким ограничениям на время ответа в режиме реального времени (характерно для операционных систем реального времени).

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

    Предоставление услуг на случай частичного сбоя системы.

Операционная система состоит из множества программных модулей. Главный модуль операционной системы называется супервизором (supervisor). В сложных операционных системах он может состоять из нескольких модулей, например супервизора ввода-вывода, супервизора прерываний, супервизора программ, диспетчера задач и т.д.

В литературе также часто используется термин ядро (kernel) операционной системы, который понимается как синоним супервизора.

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

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

    ресурс свободен и в системе нет запросов от задач более высокого приоритета к этому же ресурсу;

    текущий запрос и ранее выданные запросы допускают совместное использование ресурсов;

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

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

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

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

      Операционные среды

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

Та программная среда, которая непосредственно образуется кодом операционной системы, называется основной, естественной , или нативной (native – по английски «туземец»). Помимо основной операционной среды в операционной системе могут быть организованы (путем эмуляции иной операционной среды) дополнительные программные среды.

Эмуляция (англ. emulation) – воспроизведение программными или аппаратными средствами (либо их комбинацией) работы других программ или устройств. В отличие от симуляции (simulation), которая лишь воспроизводит поведение программы, при эмуляции ставится цель точного моделирования состояния имитируемой системы, для выполнения оригинального машинного кода.

Обычно эмуляцию используют для осуществления следующих целей.

    Создание нового микропроцессора. В этом случае при помощи эмулятора на другом микропроцессоре выполняются команды этого еще не существующего процессора.

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

    Тестирование программ написанных для различных систем.

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

Если в операционной системе организована работа с различными операционными средами, то в такой системе можно выполнять программы, созданные не только для данной, но и для других операционных систем. Например, можно создать программу для работы в среде DOS. Если такая программа все функции, связанные с операциями ввода-вывода и запросами памяти, выполняет не сама, а за счет обращения к системным функциям DOS, то она будет (в абсолютном большинстве случаев) успешно выполняться и в MS DOS, и в OS/2, и в Windows 2000, и даже в Linux.

Операционная система Windows XP позволяет выполнять помимо основных приложений, созданных с использованием Win32API, 16-разрядные приложения для Windows 3.х, 16-разрядные DOS-приложения, 16-разрядные приложения для первой версии OS/2.

Эмуляцию Windows в UNIX можно осуществить с помощью программы WineHQ. Информация по этому вопросу и по загрузке пакета с открытым исходным кодом Wine, позволяющего эмулировать Windows API поверх UNIX, содержится на сайте http :// www . winehq . com .

Необходимо заметить, что WineHQ не является обычным эмулятором. Об этом говорит аббревиатура этой программы: «Wine Is Not an Emulator». Вместо действия в качестве полного эмулятора Wine создает «слой совместимости», обеспечивая альтернативное подсоединение динамически связываемых библиотек (Dynamic Link Library), которые вызывают программы Windows, и выполнение процессов, совместимых с ядром Windows NT.

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

      Операционные оболочки

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

Для преодоления этого недостатка было создано множество программных «оболочек» – shell (по английски – «раковина»).

К ним относятся Norton Commander – программа, созданная как надстройка над DOS, FAR Manager – текстовая оболочка для Windows 95/98/NT/2000/XP, Midnight Commander – программная оболочка системы Linux и т.п. Программные оболочки предлагают пользователю меню, из которого он может выбрать желаемое действие.

В последнее время операционные оболочки активно вытесняются графическими интерфейсами (Graphical User Interface – GUI), например X-Window с различными менеджерами окон – KDE, Gnome и т.п., которые приобретают все большую популярность у пользователей.

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



Учебник создан в соответствии с Федеральным государственным образовательным стандартом среднего профессионального образования по специальностям: 230111 «Компьютерные сети», ОП.04 «Операционные системы», 230113 «Компьютерные системы и комплексы», ОП.07 «Операционные системы и среды», 230115 «Программирование в компьютерных системах», ОП.01 «Операционные системы», 230401 «Информационные системы (по отраслям)», ОП.02 «Операционные системы», 230701 «Прикладная информатика (по отраслям)», ОП.07 «Операционные системы и среды».
Изложены основные сведения о базовых объектах, находящихся под управлением ОС - файлах, пользователях и задачах. Рассмотрены задания операционной системы, определяющие логическую последовательность выполнения задач пользователя. Особое внимание уделяется обеспечению работы множества пользователей в ОС UNIX и WINDOWS - рассмотрены вопросы идентификации пользователей, размещения их личных данных, управление доступом пользователей к файлам и каталогам, определены языковые средства BASH для работы с правами доступа. Описаны методы управления учетными записями пользователей, а также методика персонификации сеансов пользователей при помощи файлов инициализации сеанса в системах UNIX. Дан краткий обзор методов построения прикладных программ на языке С в UNIX-подобных операционных системах и операционных системах WINDOWS.
Для студентов учреждений среднего профессионального образования.

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

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

Синтаксис и семантика таких языков различны в зависимости от решаемых с их помощью задач. Сами задачи могут быть условно разделены на следующие группы…

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

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

Большая часть материала, излагаемого в учебнике, дается на примере общих механизмов, существующих в операционных системах семейства UNIX и Windows. Часть материала применима и для операционных систем семейства DOS (в частности, раздел, посвященный заданиям в Windows).

В качестве основной учебной операционной системы рассматривается свободно распространяемая ОС Linux и операционная система Windows 7, однако большая часть материала книги применима для всех основных версий UNIX-систем и Windows семейства NT.

Учебник состоит из трех частей и приложений:

  • терминологическое введение содержит определения основных понятий и принципов работы операционных систем, на которые опирается дальнейшее изложение;
  • главы 1-6 дают читателю представление об основных этапах истории развития, объектах, поддерживаемых операционной системой: памяти, файлах, пользователях, заданиях и методах работы с ними;
  • главы 7 -10 углубляют знания читателя о файлах и пользователях, затрагивают вопросы администрирования ОС. Также в этих главах вводятся в рассмотрение вопросы управления процессами и механизмы взаимодействия между процессами, поддерживаемые операционными системами UNIX и Windows;
  • приложения содержат справочную информацию по структуре каталогов системы «Контроль знаний» и по основным командам операционной системы UNIX.

ТЕРМИНОЛОГИЧЕСКОЕ ВВЕДЕНИЕ

ОСНОВНЫЕ ПОНЯТИЯ

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

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

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

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

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

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

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

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

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

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

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

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

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

В случае, если операционная система позволяет одновременно использовать ресурсы нескольким процессам, ее ресурсы можно подразделить на типы.

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

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

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

Типовая структура операционной системы

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

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

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

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

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

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

Примером чисто виртуального устройства может служить «черная дыра» /dev/null в UNIX-системах. Вся информация, записываемая в данное устройство, пропадает, т. е. оно может быть использовано для поглощения данных, несущественных для решаемой задачи.

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

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

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

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

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

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

Рассмотрим особенности этих типов ОС более подробно.

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

УНИВЕРСАЛЬНЫЕ И СПЕЦИАЛИЗИРОВАННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМЫ. ОПЕРАЦИОННЫЕ СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ

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

К классу операционных систем общего назначения относят операционные системы, которые могут являться как однопроцессными, так и многопроцессными, как многопользовательскими, так и однопользовательскими. Это операционные системы, которые работают в составе обычных настольных систем. Их основное предназначение состоит в том, чтобы предоставить пользователю системы удобный и понятный механизм управления аппаратными средствами вычислительной системы, обрабатывать запросы пользователя, максимально изолируя его от низкоуровневых операций и интерфейсов. Такие операционные системы ориентируются в первую очередь на простоту применения, поскольку их основными пользователями обычно являются не программисты, а пользователи средней или низкой квалификации. Зачастую такие пользователи могут даже не представлять, что за красивой картинкой анимированных обоев и разнообразием всевозможных красот графических интерфейсов скрывается мощнейший программный комплекс, управляющий всем аппаратным комплексом компьютера. К подобным операционным системам относятся настольные версии операционных систем семейства Windows, Linux, Apple iOS и т.д. Иными словами, это те операционные системы, с которыми пользователь может иметь дело как на работе для выполнения каких-то необходимых задач, так и дома для развлечения.

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

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

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

ОПЕРАЦИОННЫЕ СИСТЕМЫ СЕМЕЙСТВ UNIX И WINDOWS

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

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

ФАЙЛОВЫЕ СИСТЕМЫ

ОРГАНИЗАЦИЯ ХРАНЕНИЯ ДАННЫХ НА ДИСКЕ

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

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

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

ФАЙЛОВЫЕ СИСТЕМЫ

Что же представляет собой файл с точки зрения операционной системы, а точнее, с точки зрения файловой системы как части ядра ОС?

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

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

УПРАВЛЕНИЕ ПАМЯТЬЮ В ОПЕРАЦИОННЫХ СИСТЕМАХ

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

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

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

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

  1. сократить время доступа к основной памяти;
  2. увеличить размер доступной процессам основной памяти;
  3. увеличить эффективность доступа процессов к основной памяти.

ПРОЦЕССЫ

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

Два основных состояния: выполнение процесса в режиме задачи, когда выполняется собственный программный код, и выполнение в режиме ядра, когда процесс выполняет системные программы, находящиеся в адресном пространстве ядра операционной системы.

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

С точки зрения структур, поддерживаемых ядром ОС, контекст процесса включает в себя следующие составляющие:

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

ПОЛЬЗОВАТЕЛИ СИСТЕМЫ

ВХОД В СИСТЕМУ

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

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

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

В ответ на это приглашение требуется ввести свое учетное имя, после чего на экран будет выведен запрос пароля:

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

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

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

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

УПРАВЛЕНИЕ ПОЛЬЗОВАТЕЛЯМИ

СОЗДАНИЕ ПОЛЬЗОВАТЕЛЕЙ И ГРУПП

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

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

Для создания новой учетной записи пользователя используется команда useradd, выполнять которую можно только от лица пользователя root. В самой простой форме запуска

useradd <логин>

она создает в файле /etc/passwd новую учетную запись с первым незанятым UID и GID, домашним каталогом вида /1юте/<логин> и командным интерпретатором по умолчанию (обычно /bin/bash).

Для того чтобы явно задать UID, GID, домашний каталог и командный интерпретатор, можно воспользоваться расширенной формой команды:

useradd -u -g -d <каталог> -s <интерпретатор> <логин>

Например, для создания учетной записи пользователя vasya с UID = 10001, GID = 200, домашним каталогом /home2/vasya и командным интерпретатором по умолчанию /bin/zsh необходимо выполнить команду…

ФАЙЛЫ ИНИЦИАЛИЗАЦИИ СЕАНСА ПОЛЬЗОВАТЕЛЯ

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

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

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

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

ПРИКЛАДНОЕ ПРОГРАММИРОВАНИЕ ПОД UNIX И WINDOWS

ЗАГОЛОВОЧНЫЕ ФАЙЛЫ

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

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

В UNIX и Linux стандартные заголовочные файлы, содержащие определения системных вызовов, находятся в каталоге /usr/ include. Каждый файл содержит определения функций и типов данных. При этом для определений системных вызовов характерен отказ от использования стандартных типов файлов. Например, системный вызов…

В операционных системах Windows, в отличие от операционных систем UNIX или Linux, система разработки на языке С недоступна по умолчанию, она требует дополнительной установки. Существует целый ряд систем разработки под ОС семейства Windows, в частности, есть семейство систем разработки Microsoft Visual Studio, включающих в себя компилятор языка С. Также существует несколько разновидностей системы компиляции дсс, распространенной в Linux, адаптированной для Windows, например идущие в составе MinGW или cygwin.

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

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

Второй способ – написание программы на языке Я0, которая берет программы, написанные на языке Я1, в качестве входных данных, рассматривает каждую команду по очереди и сразу выполняет эквивалентный набор команд языка Я0. Эта технология не требует составления новой программы на Я0. Она называется интерпретацией , а программа , которая осуществляет интерпретацию, называется интерпретатором .

В подобной ситуации проще представить себе существование гипотетического компьютера или виртуальной машины, для которой машинным языком является язык Я1, чем думать о трансляции и интерпретации. Назовем такую виртуальную машину М1, а виртуальную машину с языком Я0 – М0. Для виртуальных машин можно будет писать программы, как будто они (машины) действительно существуют.

Очевидно, можно пойти дальше – создать еще набор команд, который в большей степени ориентирован на человека и в меньшей степени на компьютер , чем Я1. Этот набор формирует язык Я2 и, соответственно, виртуальную машину М2. Так можно продолжать до тех пор, пока не дойдем до подходящего нам языка уровня n.

Большинство современных компьютеров состоит из двух и более уровней. Уровень 0 – аппаратное обеспечение машины. Электронные схемы этого уровня выполняют программы, написанные на языке уровня 1. Следующий уровень – микроархитектурный уровень.

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

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

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

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

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

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

Четвертый уровень представляет собой символическую форму одного из языков низкого уровня (обычно ассемблер ). На этом уровне можно писать программы в приемлемой для человека форме. Эти программы сначала транслируются на язык уровня 1, 2 или 3, а затем интерпретируются соответствующей виртуальной или фактически существующей (физической) машиной.

Уровни с пятого и выше предназначены для прикладных программистов, решающих конкретные задачи на языках высокого уровня (C, C++, C#, VBA и др.). Компиляторы и редакторы этих уровней запускаются в пользовательском режиме . На еще более высоких уровнях располагаются прикладные программы пользователей.

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

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

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

1.2. Операционная система, среда и операционная оболочка

Операционные системы (ОС) в современном их понимании (их назначении и сущности) появились значительно позже первых компьютеров (правда, по всей видимости, и исчезнут в этой сущности в компьютерах будущего). Почему и когда появились ОС? Считается 1По другим сведениям, первый компьютер был создан в Англии в 1943 году для расшифровки кодов немецких подводных лодок., что первая цифровая вычислительная машина ENIAC (Electronic Numerical Integrator and Computer ) была создана в 1946 году по проекту "Проект РХ" Министерства обороны США. На реализацию проекта затрачено 500 тыс. долларов. Компьютер содержал 18000 электронных ламп, массу всякой электроники, включал в себя 12 десятиразрядных сумматоров, а для ускорения некоторых арифметических операций имел умножитель и "делитель-извлекатель" квадратного корня. Программирование сводилось к связыванию различных блоков проводами. Конечно, никакого программного обеспечения и тем более операционных систем тогда еще не существовало [ , ].

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

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

  • загрузка нужного транслятора (установка нужных МЛ и др.);
  • запуск транслятора и получение программы в машинных кодах;
  • связывание программы с библиотечными подпрограммами;
  • загрузка программы в оперативную память;
  • запуск программы;
  • вывод результатов работы программы на печатающее или другое периферийное устройство.

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

С целью исключения простоев были предприняты попытки разработки специальных программ – мониторов, прообразов первых операционных систем, которые осуществляли автоматический переход от задания к заданию. Считается, что первую операционную систему создала в 1952 году для своих компьютеров IBM -701 исследовательская лаборатория фирмы General Motors . В 1955 году эта фирма и North American Aviation совместно разработали ОС для компьютера IBM -704.

В конце 50-х годов прошлого века ведущие фирмы изготовители поставляли операционные системы со следующими характеристиками:

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

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

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


Рис. 1.1.

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

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

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

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

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

Еще одно важное понятие, связанное с операционной системой, относится к реализации пользовательских интерфейсов. Как правило, любая операционная система обеспечивает удобную работу пользователя за счет средств пользовательского интерфейса. Эти средства могут быть неотъемлемой частью операционной среды (например, графический интерфейс Windows или текстовый интерфейс командной строки MS DOS ), а могут быть реализованы отдельной системной программой – оболочкой операционной системы (например, Norton Commander для MS DOS ). В общем случае под оболочкой операционной системы понимается часть операционной среды, определяющая интерфейс пользователя, его реализацию (текстовый, графический и т.п.), командные и сервисные возможности пользователя по управлению прикладными программами и компьютером.

Перейдем к рассмотрению эволюции операционных систем.




Top