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

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

Содержание:

Введение

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

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

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

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

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

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

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

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

Когда-то MS-DOS выступила “посредником” между человеком и компьютером и помогла превратить сложные команды обращения к дискам в более понятные и простые, но по мере развития сама “обросла” изобилием команд и стала сдерживать работу с компьютером. Так возникла необходимость в новом посреднике – программа-оболочка. Одна из самых известных и распространенных во всём мире программ-оболочек Norton Commander. Ее разработал американский программист Питер Нортон, получивший всемирное признание за то, что упростил работу с компьютером для миллионов людей.

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

Работы над графической операционной системой для IBM PC в компании Microsoft начались еще в 1981 г., были сделаны несколько графических оболочек Windows 1.0, Windows 2.0, Windows 3.0, Windows 3.1 и Windows 3.11 для рабочих групп, которые запускались под управлением MS-DOS, то есть не были самостоятельными операционными системами. Поскольку с появлением Windows открылись новые возможности, все-таки принято называть Windows не оболочкой, а средой:

Многозадачность. Имеется возможность одновременно запускать несколько программ.

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

Единый интерфейс пользователя. Разобравшись с тем, как работает одна программа, написанная для Windows, нетрудно разобраться и с другой.

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

Единый аппаратно-программный интерфейс. Среда Windows взяла на себя все заботы по обеспечению совместимости разнообразного оборудования и программ.

Выпущенная в сентябре 1995 г. система Windows 95 стала первой (в широком смысле) графической операционной системой для компьютеров IBM PC. Ее повсеместное признание в качестве стандартной благоприятно сказалось на интересах конечных пользователей.

Производители программного обеспечения изготавливали узлы и приборы так, чтобы они были совместимы с Windows 95. Можно достаточно смело покупать новые устройства и устанавливать их в компьютер, рассчитывая на то, что все прочие устройства и программы будут работать нормально. Система Windows 95 ввела новый стандарт самоустанавливающихся устройств (plug&play), подключение таких устройств происходит автоматически. Операционная система сама “узнает”, что установлено в компьютере, и настраивается на работу с новым оборудованием.

Windows 95 обладала значительной гибкостью, позволяла использовать не только программы, написанные для этой системы, но и программы, написанные для операционной системы MS-DOS и для операционной среды Windows 3.1. Графический интерфейс пользователя позволял выполнить большинство операций различными способами.

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

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

Загрузка операционной системы

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

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

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

Решением данного парадокса является использование специальной компьютерной программы, называемой начальным загрузчиком, или BIOS (Basic Input/Output System). Эта программа не обладает всей функциональностью операционной системы, но её достаточно для того, чтобы загрузить другую программу, которая будет загружать операционную систему. Часто используется многоуровневая загрузка, в которой несколько небольших программ вызывают друг друга до тех пор, пока одна из них не загрузит операционную систему.

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

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

Загрузчик операционной системы:

  • обеспечивает необходимые средства для диалога с пользователем компьютера (например, загрузчик позволяет выбрать операционную систему для загрузки);
  • приводит аппаратуру компьютера в состояние, необходимое для старта ядра операционной системы (например, на не-x86 архитектурах перед запуском ядра загрузчик должен правильно настроить виртуальную память);
  • загружает ядро операционной системы (Ntoskrnl.exe в случае MS Windows) в ОЗУ. Загрузка ядра операционной системы не обязательно происходит с жесткого диска. Загрузчик может получать ядро по сети. Ядро может храниться в ПЗУ или загружаться через последовательные интерфейсы (это может пригодиться на ранней стадии отладки создаваемой компьютерной системы);
  • формирует параметры, передаваемые ядру операционной системы (например, ядру Linux передаются параметры, указывающие способ подключения корневой файловой системы);
  • передаёт управление ядру операционной системы.

Опишем процедуру, с помощью которой происходит загрузка с HDD IBM PC: BIOS производит чтение 512 байт первого сектора HDD (MBR) в ОЗУ по адресу 0x00007C00 (0x07C0:0x0000 в формате реального режима), затем прочитанному коду передаётся управление. Этот код читает и анализирует таблицу разделов жёсткого диска, а затем, в зависимости от вида загрузчика, либо передаёт управление загрузочному коду активного раздела жёсткого диска (см. Начальная загрузка компьютера), либо самостоятельно загружает ядро с диска (например, сетевого или съёмного) в оперативную память и передаёт ему управление. Первоначально загрузчик работает в режиме реальной адресации при отключенной адресной линии A20, что создает определенные трудности при написании загрузчиков.

Функции операционных системы

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

Рисунок 1. Многоуровневая схема вычислительной системы

Основные функции (простейшие операционные системы):

  • Загрузка приложений в оперативную память и их выполнение.
  • Стандартизованный доступ к периферийным устройствам (устройства ввода-вывода).
  • Управление оперативной памятью (распределение между процессами, виртуальная память).
  • Управление доступом к данным на энергонезависимых носителях (таких как жёсткий диск, компакт-диск и т. д.), организованным в той или иной файловой системе.
  • Пользовательский интерфейс.
  • Сетевые операции, поддержка стека протоколов.

Дополнительные функции:

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

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

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

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

Текстовые ОС.

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

Первые настоящие операционные системы имели текстовый интерфейс. В настоящее время он также используется на серверах и компьютерах пользователей.

Графические ОС.

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

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

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

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

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

Речевые ОС.

В случае SILK-интерфейса (от англ. speech – речь, image – образ, language – язык, knowledge – знание) – на экране по речевой команде происходит перемещение от одних поисковых образов к другим.

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

Управление памятью

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

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

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

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

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

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

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

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

При запуске новой программы загрузчик должен:

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

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

Многозадачность и многопоточность

Многозадачность - свойство операционной системы или среды выполнения обеспечивать возможность параллельной (или псевдопараллельной) обработки нескольких задач. Истинная многозадачность операционной системы возможна только в распределённых вычислительных системах.

Существует 2 типа многозадачности:

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

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

Более развитые многозадачные системы проводят распределение ресурсов динамически, когда задача стартует в памяти или покидает память в зависимости от её приоритета и от стратегии системы. Такая многозадачная среда обладает следующими особенностями:

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

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

Такие потоки называют также потоками выполнения (от англ. thread of execution); иногда называют «нитями» (буквальный перевод англ. thread) или неформально «тредами».

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

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

К достоинствам многопоточной реализации той или иной системы перед многозадачной можно отнести следующее:

  • Упрощение программы в некоторых случаях за счёт использования общего адресного пространства.
  • Меньшие относительно процесса временны́е затраты на создание потока.

К достоинствам многопоточной реализации той или иной системы перед однопоточной можно отнести следующее:

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

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

Процессы и их взаимодействие

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

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

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

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

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

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

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

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

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

Такие системы, как Windows NT и OS/2, как говорят, имеют «дешёвые» потоки выполнения и «дорогие» процессы. В других операционных системах разница между потоками выполнения и процессами не так велика, за исключением расходов на переключение адресного пространства, которое подразумевает использование буфера ассоциативной трансляции.

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

Из механизмов, предоставляемых ОС и используемых для IPC, можно выделить:

  • механизмы обмена сообщениями;
  • механизмы синхронизации;
  • механизмы разделения памяти;
  • механизмы удалённых вызовов (RPC).

Для оценки производительности различных механизмов IPC используют следующие параметры:

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

Межпроцессное взаимодействие, наряду с механизмами адресации памяти, является основой для разграничения адресного пространства между процессами.

Разделение времени

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

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

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

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

Альтернатива позволить пользователю управлять компьютером напрямую, была как правило слишком дорога чтобы её вообще могли рассматривать. Эта ситуация ограничивала интерактивную разработку лишь теми организациями, которые могли позволить себе тратить вычислительные циклы: в основном это были крупные университеты.

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

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

Полагают, что эта концепция была впервые описана Джоном Бэкусом во время летней сессии 1954 года в Массачусетском технологическом институте, а затем Боб Бемер в начале 1957 года в статье «How to consider a computer» для журнала «Automatic Control Magazine». Первый проект реализации системы с разделением времени был начат Джоном Маккарти в конце 1957 года, на модификации IBM 704, и позже на модифицированном IBM 7090. Хотя он и бросил работу ради проекта MAC и других, один из полученных результатов, известный как Compatible Time-Sharing System или CTSS, был продемонстрирован в ноябре 1961 года. Утверждается что CTSS — первая система с разделением времени. Она использовалась до 1973 года. Другим претендентом на первую демонстрацию системы разделения времени была созданная Дональдом Блитцером система PLATO II, публично демонстрировавшаяся в Роберт Аллертон Парк в Университете Иллинойса в начале 1961 года. Блитцер говорил, что проект PLATO получил бы патент на разделение времени, если бы только Университет Иллинойса знал, как обрабатывать заявки на патент быстрее. Первой коммерчески успешной системой разделения времени была Dartmouth Time Sharing System.

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

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

Разграничение доступа

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

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

Методом доступа к объекту называется операция, определенная для объекта. Тип операции зависит от объектов. Например, процессор может только выполнять команды, сегменты памяти могут быть записаны и прочитаны, считыватель магнитных карт может только читать, а для файлов могут быть определены методы доступа «чтение», «запись» и «добавление» (дописывание информации в конец файла).

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

Таким образом, объект доступа — это то, к чему осуществляется доступ, субъект доступа — это тот, кто осуществляет доступ, и метод доступа — это то, как осуществляется доступ.

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

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

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

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

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

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

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

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

Существуют две основные модели разграничения доступа:

  • избирательное (дискреционное) разграничение доступа;
  • полномочное (мандатное) разграничение доступа.

При избирательном разграничении доступа определенные операции над конкретным ресурсом запрещаются или разрешаются субъектам или группам субъектов. Большинство ОС реализуют именно избирательное разграничение доступа (discretionary access control).

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

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

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

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

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

Список литературы

  1. Гордеев А. В. Операционные системы: Учебник для вузов. — 2-е изд. — СПб.: Питер, 2007. — 416 с. — ISBN 978-5-94723-632-3.
  2. Деннинг П. Дж., Браун Р. Л. Операционные системы // Современный компьютер. — М., 1986.
  3. Иртегов Д. В. Введение в операционные системы. — 2-е изд. — СПб.: BHV-СПб, 2007. — ISBN 978-5-94157-695-1.
  4. Керниган Б. У., Пайк Р. У. UNIX — универсальная среда программирования = The UNIX Programming Environment. — М., 1992.
  5. Олифер В. Г., Олифер Н. А. Сетевые операционные системы. — СПб.: Питер, 2002. — 544 с. — ISBN 5-272-00120-6.
  6. Столлингс У. Операционные системы = Operating Systems: Internals and Design Principles. — М.: Вильямс, 2004. — 848 с. — ISBN 0-1303-1999-6.
  7. Таненбаум Э. С. Многоуровневая организация ЭВМ = Structured Computer Organization. — М.: Мир, 1979. — 547 с.
  8. Таненбаум Э. С. Современные операционные системы = Modern Operating Systems. — 2-е изд. — СПб.: Питер, 2005. — 1038 с. — ISBN 5-318-00299-4.
  9. Таненбаум Э. С., Вудхалл А. С. Операционные системы. Разработка и реализация = Operating Systems: Design and Implementation. — 3-е изд. — СПб.: Питер, 2007. — 704 с. — ISBN 978-5-469-01403-4.
  10. Шоу А. Логическое проектирование операционных систем = The Logical Design of Operating Systems. — М.: Мир, 1981. — 360 с.
  11. Рэймонд Э. С. Искусство программирования для UNIX = The Art of UNIX Programming. — М.: Вильямс, 2005. — 544 с. — ISBN 5-8459-0791-8.
  12. Mark G. Sobell. UNIX System V. A Practical Guide. — 3rd ed. — 1995.