Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Функции операционных систем персональных компьютеров (История операционных систем)

Содержание:

ВВЕДЕНИЕ

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

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

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

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

1. Характеристика операционных систем

1.1. Определение операционной системы

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

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

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

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

Все операционные системы обеспечивают пакетный и диалоговый режим работы.

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

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

1.2. История операционных систем

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

Первый цифровой компьютер был изобретен английским математиком Чарльзом Бэббиджем. Большую часть жизни он пытался создать свою «аналитическую машину», но так и не смог заставить работать её должным образом. Бэббидж понимал, что для своей машины ему необходимо программное обеспечение, поэтому он нанял математика Аду Лавлейс, она и стала первым в мире программистом.

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

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

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

В 70-х была разработана операционная система UNIX, оказавшая огромное влияние на развитие операционных систем. Её характерной особенностью был модельный дизайн.

В 90-х компания Microsoft выпускает первую версию операционной системы Windows NT. В её задачи входило не только использование на домашнем компьютере, в отличии от предыдущих версий Windows, но и обеспечение работы предприятий и корпоративных систем.

1.3. Типы операционных систем

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

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

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

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

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

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

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

2. Предназначение и функции операционных систем

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

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

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

По современным представлениям ОС должна уметь следующее.

  1. Обеспечивать загрузку пользовательских программ в оперативную память и их использование.
  2. Обеспечивать управление памятью. В простейшем случае это указание загруженной программе адреса, на котором кончается память, доступная для использования программой, и начинается память, занятая самой операционной системой. В многопроцессных системах это сложная задача управления системными ресурсами.
  3. Обеспечивать работу с устройствами долговременной памяти, такими как магнитные диски, оптические диски, флэш-память и т.д. Обычно ОС управляет свободным пространством на этих носителях и структурирует пользовательские данные в виде файловой системы.
  4. Предоставлять стандартный доступ к различным периферийным устройствам, таким как принтеры, графические планшеты и т.д.
  5. Предоставлять пользовательский интерфейс. Часть операционных систем ограничивается командной строкой, в то время как другие в основном состоят из графического интерфейса. Встраиваемые системы часто не имеют никакого пользовательского интерфейса.
  6. Управление файловой системой. Файловая система еще одно ключевое понятие, поддерживаемое всеми операционными системами.

2.1. Загрузка программ

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

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

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

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

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

Примеры языков со статическим связывание: ассемблеры, Fortran, C, C++. Статическое связывание позволяет прописывать адреса объектов непосредственно в адресные поля команд, работающих с этими объектами, поэтому в большинстве случаев оно приводит к повышению скорости исполнения программы.

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

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

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

Самым простым способом загрузки программы является абсолютная загрузка — это загрузка программы с одного и того же адреса. Это возможно если система может предоставить каждому процессу свое адресное пространство или система может исполнять в каждый момент времени только один процесс.

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

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

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

2.2. Управление оперативной памятью

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

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

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

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

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

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

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

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

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

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

2.3. Запоминающие устройства

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

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

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

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

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

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

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

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

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

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

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

2.4. Внешние устройства

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

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

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

Устройства ввода-вывода, как правило, состоят из механической части и электронной. Электронный компонент устройства называется контроллером или адаптером. В персональных компьютерах они зачатую представляются в виде печатной платы, вставляемой в слот расширения. Механический компонент находится в самом устройстве.

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

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

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

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

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

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

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

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

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

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

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

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

2.5. Пользовательский интерфейс

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

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

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

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

Другим способом взаимодействия пользователя с операционной системой является графический интерфейс пользователя (GUI – Graphics User Interface), так же иногда обозначаемый аббревиатурой — WIMP (Windows, Menu, Pointing Device).

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

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

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

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

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

2.6. Файловая система

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

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

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

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

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

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

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

  1. Проверка типа монтируемой файловой системы.
  2. Проверка целостности файловой системы.
  3. Считывание системных структур данных и инициализация драйвера файловой системы.
  4. Модификация файловой системы для указания того, что она уже смонтирована.
  5. Включение новой файловой системы в общее пространство имен.

Файлы позволяют сохранять информацию и получать её позднее. В различных операционных системах имеются различные файловые операции. Но есть ряд операций, которые наиболее часто встречаются во всех операционных системах. К таким операциям относятся:

  1. Создание файла. Файл создается без данных. эта операция объявляет о появлении нового файла и позволяет установить некоторые его атрибуты.
  2. Удаление файла. Когда необходимость в файле отпадает его удаляют, для освобождения места на диске.
  3. Открытие файла. Перед использованием файл программа должна открыть его. Это операция позволяет системе прочитать в оперативную память атрибуты файла и список адресов на диске для быстрого доступа к содержимому файла при последующих вызовах.
  4. Закрытие файла. После того как все операции над файлом закончены, атрибуты и дисковые адреса больше не нужны, поэтому файл следует закрыть.
  5. Чтение файла. Обычно байты поступают с текущей позиции в файле. Вызывающий процесс должен указать количество требуемых данных и предоставить для них буфер.
  6. Запись в файл. Запись данных в файл также производиться в текущую позицию в файле. Если текущая позиция находится в конце, размер файла автоматически увеличится, иначе запись производиться поверх существующих данных.
  7. Добавление в файл. Эта операция представляет собой урезанную операцию записи в файл. Она может только добавлять данные к концу файла.
  8. Поиск в файле. Данная операция устанавливает файловый указатель в определенную позицию в файле. После выполнения этой операции данные могут читаться или записываться начиная с установленной позиции.
  9. Получение атрибутов. Для выполнения процессов часто необходимо получение атрибутов файла.
  10. Установка атрибутов. Некоторые атрибуты файла могут устанавливается пользователем после создания файла эта операция предоставляет такую возможность.
  11. Переименование файла. Этак операция предоставляет возможность изменения имени файла. Её наличие в операционной системе не является необходимым, так как файл можно копировать с новым именем, а старый удалить.

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

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

  1. Создание каталога. Только что созданный каталог пуст и не содержит других элементов.
  2. Удаление каталога. В некоторых системах может быть удален только пустой каталог, другие же удаляют каталог со всеми содержащимися в нем файлами.
  3. Открытие каталога. После операции каталог может быть прочитан для отображения содержащихся в нем файлов и подкаталогов. Перед чтением каталога, он должен быть открыт, по аналогии с открытием и чтением файла.
  4. Закрыть каталог. Когда каталог прочитан, его следует закрыть.
  5. Прочитать каталог. Операция позволяет прочитать следующих элемент открытого каталога.
  6. Переименование каталога. Во многом каталоги аналогичны файлам и могут переименовываться так же, как и файлы.

ЗАКЛЮЧЕНИЕ

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

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

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

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

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

БИБЛИОГРАФИЯ

  1. Брукс Ф. Мифический человеко-месяц или как создаются программные системы. 2 изд. - СПб.: Символ-Плюс, 2007. - 304 с.
  2. Угрюмов Е.П. Цифровая схемотехника. 2 изд. - СПб.: БХВ-Петербург, 2007. - 800 с.
  3. Партыка Т.Л. Попов И.И. Операционные системы, среды и оболочки. 3 изд. - М.: ФОРУМ, 2010. - 544 с.
  4. Иртегов Д.В. Введение в операционные системы. 2 изд. - СПб.: БХВ-Петербург, 2008. - 1040 с.
  5. Карпов В.Е., Коньков К.А. Основы операционных систем. - М.: ИНТУИТ.РУ "Интернет Университет Информационных Технологий", 2005. - 536с.
  6. Столяров А.В. Введение в операционные системы: конспект лекций. - М.: Издательский отдел факультета ВМиК МГУ им. М. В. Ломоносова, 2006. - 192 с.
  7. Синицын С.В. Батаев А.В. Налютин Н.Ю. Операционные системы. 3 изд. - М.: Издательский центр «Академия», 2016. - 304 с.
  8. Таненбаум Э. Современные операционные системы. 2 изд. - СПб.: Питер, 2002. - 1040 с.
  9. Столлингс В. Операционные системы. 4 изд. - М.: Вильямс, 2004. - 848 с.
  10. Рудаков А.В. Операционные системы и среды: учебник. - М.: КУРС: ИНФРА-М, 2018. - 304 с.