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

реклама














1.
Понятие операционной системы; эволюция развития операционных систем;
функции операционных систем и подходы к построению операционных систем.
Операционная система (ОС) – это программа, которая обеспечивает возможность
рационального использования оборудования компьютера удобным для пользователя
образом.
ОС - базовый комплекс компьютерных программ, обеспечивающий управление
аппаратными средствами компьютера, работу с файлами, ввод и вывод данных, а также
выполнение прикладных программ и утилит.
Понятия ОС. Существуют различные точки зрения:
ОС как виртуальная машина
ОС как менеджер ресурсов
ОС как защитник пользователей и программ
ОС как постоянно функционирующее ядро
Эволюция вычислительных систем
Первый период (1945–1955 гг.)
Ламповые машины. Операционных систем нет.
Созданы первые ламповые вычислительные устройства и появился принцип программы,
хранящейся в памяти машины (1945 г.).
Характеризуется тем, что:
В проектировании, эксплуатации и программировании вычислительной машины
участвует одна и та же группа людей.
Компьютеры в качестве инструмента решения практических прикладных задач
используются не регулярно.
Программирование осуществляется исключительно на машинном языке.
Задачи организации вычислительного процесса решаются вручную, строго
последовательно, с пульта управления с использованием перфокарт
Вычислительная система выполняет одновременно только одну операцию.
В целом период характеризуется крайне высокой стоимостью вычислительных систем, их
малым количеством и низкой эффективностью использования.
В конце периода появляется первое системное ПО.
Второй период (1955 г.– нач. 60-х)
Компьютеры на основе транзисторов. Пакетные ОС
Появляется новая техническая база – полупроводниковые элементы, что привело к:
повышению надежности
возможности решения серьезных прикладных задач
снижению потребления электроэнергии, совершенствованию системы охлаждения
уменьшению размеров
снижению стоимости эксплуатации и обслуживания
Все это способствовало:
бурному развитию алгоритмических языков (COBOL, PL-1 и т.д.).
появлению первых настоящих компиляторов, редакторов связей, библиотеки
математических и служебных подпрограмм
упрощению процесса программирования
существенное изменение процесса отладки программ.
Появляется прообраз современных ОС - первые системы пакетной обработки, которые
просто автоматизируют запуск одной программы из пакета за другой, увеличивая
коэффициент загрузки процессора.
Минусы:
 Использование части машинного времени на выполнение системной управляющей
программы
 Программа, получившая доступ к процессору, обслуживается до ее завершения. При
передаче данных между внешними устройствами и памятью процессор простаивает, а при
работе процессора простаивают внешние устройства.
Третий период (нач. 60-х – 1970 г.)
Компьютеры на основе интегральных микросхем. Первые многозадачные ОС
В технической базе произошел переход от отдельных полупроводниковых элементов типа
транзисторов к интегральным микросхемам, что привело к еще большему:
 повышению надежности;
 уменьшению стоимости;
 повышению производительности;
Повышению эффективности использования процессорного времени мешает низкая
скорость работы механических устройств ввода-вывода (1200 перфокарт/мин.)
В пакетные системы вводится прием «spooling» или «подкачки-откачки» данных, что
позволило совместить реальные операции ввода-вывода одного задания с выполнением
другого задания.
При обработке пакета заданий на носителях непрямого доступа появилась возможность
выбора очередного выполняемого задания.
В
пакетных системах начинается развитие функций планирования.
Дальнейшее повышение эффективности использования процессора достигается за счет
идеи мультипрограммирования - пока одна программа выполняет операцию вводавывода, процессор не простаивает, а выполняет другую программу. После окончании
операции ввода-вывода, процессор возвращается к выполнению предыдущей программы.
Четвертый период (с 1970 – 80 гг.)
Персональные компьютеры.
Следующий период в эволюции вычислительных систем связан с появлением больших
интегральных схем (БИС).
Компьютер с достаточно развитой архитектурой стал доступен отдельному человеку.
Период характеризуется тем, что:
 компьютеры стали использоваться не только специалистами, что потребовало разработки
«дружественного» программного обеспечения
 рост сложности и разнообразия решаемых на ПК задач привели к возрождению
практически всех черт, характерных для архитектуры больших вычислительных систем.
Появляется:
 вытесняющая многозадачность
 использование концепции баз данных для хранения и распределенной обработки больших
объемов информации
 приоритетное планирование
 выделение квот на использование ограниченных ресурсов компьютеров
 системы разделения времени: процессор переключается между задачами через
определенные интервалы времени
Пятый период (с 1980 г. по н.в.)
Уменьшается стоимость компьютеров и увеличивается стоимость труда программиста.
Благодаря широкому распространению вычислительных сетей и средств оперативной
обработки (работающих в режиме on-line), пользователи получают доступ к
территориально распределенным компьютерам.















В середине 80-х стали бурно развиваться сети компьютеров работающих под управлением
сетевых и распределенных ОС.
Сетевые (классические) ОС характеризуются:
возможностью доступа к ресурсам другого сетевого компьютера
каждый ПК в сетевой ОС работает под управлением ОС, отличающейся от ОС
автономного компьютера наличием дополнительных средств (программной поддержкой
для сетевых интерфейсных устройств и доступа к удаленным ресурсам), которые, однако,
не меняют структуру ОС
Распределенные ОС:
«внешне» выглядят как обычные автономные системы (пользователь может не знать где
хранятся файлы – на локальной или удаленной машине – и где выполняются программы)
«внутреннее» строение распределенной ОС имеет существенные отличия от автономных
систем
Функции ОС
Все функции ОС можно условно разделить на две различные группы – интерфейсные и
внутренние.
Интерфейсные функции ОС:
управление аппаратными средствами
управление устройствами ввода-вывода
управление файловой системой
поддержка многозадачности
планирование доступа пользователей к общим ресурсам;
интерфейс пользователя
поддержка работы в локальных и глобальных сетях
Внутренние функции ОС:
обработки прерываний
управления виртуальной памятью
планирования использования процессора
обслуживания драйверов устройств
2.
Архитектура операционной системы. Классификация операционных систем.
Эффективность и требования, предъявляемые к ОС.
ОС – это программа, которую можно реализовать с использованием процедур и
функций. Если при этом составные части реализованы не в виде отдельных модулей или
подсистем, а объединены в виде одной программы, то такая архитектура построения ОС
называется монолитным ядром. Архитектурные особенности ОС. Монолитное ядро
Характеризуется тем, что:
каждая процедура может вызвать каждую
все процедуры работают в привилегированном режиме
все части монолитного ядра работают в одном адресном пространстве
ядро «совпадает» со всей ОС
сборка ядра осуществляется отдельно для каждого компьютера при установке
при добавлении, исключении отдельных компонент требуется перекомпиляция
старейший способ организации ОС
Пример систем с монолитным ядром - большинство Unix-подобных систем.
Многоуровневые системы. Всю вычислительную систему можно разбить на ряд более
мелких уровней с хорошо определенными связями между ними, так чтобы объекты
уровня N могли вызывать только объекты уровня N-1.
Виртуальные машины
Виртуальная машина реализует для пользователя имитацию hardware в
вычислительной системе.
При обращении к «виртуальному hardware» на уровне
привилегированных команд в действительности происходит системный вызов реальной
ОС, которая и производит все необходимые действия.
Системный вызов – обращение прикладной программы к ядру ОС для выполнения
какой-либо операции. Обычно выглядит как вызов подпрограммы или функции из
системной библиотеки. Однако системный вызов как частный случай вызова такой
функции или подпрограммы следует отличать от более общего обращения к системной
библиотеке, поскольку последнее может и не требовать выполнения привилегированных
операций. Микроядерная архитектура
При разработке ОС существует тенденция, состоящая в перенесении значительной
части системного кода на уровень
пользователя
и
одновременной
минимизации ядра.
При этом построение ядра ОС в
микроядерной
архитектуре
осуществляется так, что большинство
составляющих
ОС
являются
самостоятельными программами.
В этом случае взаимодействие между
ними обеспечивает специальный модуль ядра – микроядро, работающее в
привилегированном режиме и обеспечивающее взаимодействие между программами,
планирование использования процессора, первичную обработку прерываний, операции
ввода-вывода и базовое управление памятью.
Характеризуется(+):
высокой степенью модульности ядра, что существенно упрощает добавление и отладку
компонентов (не требуется перезапуск всей ОС).
возможностью без прерывания работы, загружать и выгружать новые драйверы,
файловые системы и т. д.
возможностью отладки компонентов ядра с помощью обычных программных средств
повышенной надежностью системы
Характеризуется:
(-)
дополнительными накладными расходами, связанными с передачей сообщений
усложнение процесса проектирования при попытке снижения возможных накладных
расходов
Смешанные системы
В большинстве случаев современные ОС используют различные комбинации
рассмотренных подходов.
Например, ядро ОС Linux представляет собой монолитную систему с элементами
микроядерной архитектуры.
Совместно элементы микроядерной архитектуры и элементы монолитного ядра
используются в ядре Windows NT:
Классификация ОС. Особенности алгоритмов управления ресурсами
В зависимости от особенностей использованного алгоритма управления
процессором, ОС делят на:
многозадачные и однозадачные
многопользовательские и однопользовательские
поддерживающие многонитевую обработку / не поддерживающие
на многопроцессорные и однопроцессорные
Поддержка многозадачности Однозадачные ОС (MS-DOS, MSX):
выполняют функцию предоставления пользователю виртуальной машины, делая более
простым и удобным процесс взаимодействия пользователя с компьютером
включают средства управления периферийными устройствами, средства управления
файлами, средства общения с пользователем.
Многозадачные ОС (OC EC, OS/2, UNIX, Windows 95), кроме вышеперечисленных
функций, управляют разделением совместно используемых ресурсов, таких как
процессор, оперативная память, файлы и внешние устройства.
Поддержка многопользовательского режима
Однопользовательские: MS-DOS, Windows 3.x, ранние версии OS/2;
Многопользовательские: UNIX, Windows NT.
Главным отличием многопользовательских систем от однопользовательских является
наличие средств защиты информации каждого пользователя от несанкционированного
доступа других пользователей.
(!) Не всякая многозадачная система является многопользовательской, и не всякая
однопользовательская - однозадачной.
Вытесняющая и невытесняющая многозадачность
Среди множества существующих вариантов реализации многозадачности можно
выделить две группы алгоритмов:
невытесняющая многозадачность (NetWare, Windows 3.x) - механизм планирования
процессов целиком сосредоточен в ОС;
вытесняющая многозадачность (Windows NT, OS/2, UNIX) - механизм планирования
процессов распределен между системой и прикладными программами.
При невытесняющей многозадачности активный процесс выполняется до тех пор,
пока он сам, по собственной инициативе, не отдаст управление ОС для того, чтобы та
выбрала из очереди другой готовый к выполнению процесс.
При вытесняющей многозадачности решение о переключении процессора с одного
процесса на другой принимается ОС, а не самим активным процессом.
3.
Понятие процесса, его состояния, модель представления процесса в
операционной системе и операции, которые могут выполняться над процессами
операционной системой.
Понятие процесса
Понятие процесса характеризует некоторую совокупность набора исполняющихся
команд, ассоциированных с ним ресурсов (выделенная для исполнения память или
адресное пространство, стеки, используемые файлы и устройства ввода-вывода и т. д.) и
текущего момента его выполнения (значения регистров, программного счетчика,
состояние стека и значения переменных), находящуюся под управлением ОС.
Создать процесс – создать описатель процесса(контекст), в качестве которого выступает
одна или несколько информационно управляющих структур, содержащих все сведения о
процессе, необходимые ОС для управления им.
Управляющие структуры процессов
Для управления процессами ОС должна располагать всей необходимой для этого
информацией, для чего каждому процессу необходим дескриптор, содержащий:
 идентификатор процесса (PID);
 тип (или класс) процесса, который определяет для супервизора некоторые правила
предоставления ресурсов;
 приоритет процесса, в соответствии с которым супервизор предоставляет ресурсы (в
рамках одного класса процессов в первую очередь, обслуживаются более приоритетные
процессы);
 переменную состояния, которая определяет, в каком состоянии находится процесс
(готов к работе, исполняется, ожидает устройства ввода-вывода и т.д.);
 контекст задачи, т.е. защищённую область памяти (или адрес такой области), в которой
хранятся текущие значения регистров процессора, когда процесс прерывается, не
закончив работу;
 информацию о ресурсах, которыми процесс владеет и/или имеет право пользоваться
(указатели на открытые файлы, информация о незавершённых операциях ввода-вывода и
др.);
 место (или его адрес) для организации общения с другими процессами;
 параметры времени запуска (момент времени, когда процесс должен активизироваться,
и периодичность этой процедуры);
 адрес задачи на диске (в случае отсутствия системы управления файлами) в её
исходном состоянии и адрес на диске, куда она выгружается из ОП, если её вытесняет
другая задача.
Операции над процессами
Изменением состояния процессов занимается ОС, совершая операции над ними.Основные
операции над процессами удобно объединить в три пары:

создание процесса – завершение процесса (одноразовые);

приостановка процесса (перевод из состояния исполнение в состояние готовность) –
запуск процесса (перевод из состояния готовность в состояние исполнение);

блокирование процесса (перевод из состояния исполнение в состояние ожидание) –
разблокирование процесса (перевод из состояния ожидание в состояние готовность).
Необходимо помнить, что существует еще одна (непарная) операция: изменение
приоритета процесса.
4.
Уровни планирования процессов в операционных системах. Основные цели и
критерии планирования и параметры, на которых оно основывается. Алгоритмы
планирования.
Планирование – работа по определению того, в какой момент времени прервать
выполнение одного процесса и какому процессу предоставить возможность выполняться.
Планирование процессов включает в себя решение следующих задач:
 определение момента времени для смены выполняемого процесса;
 выбор процесса на выполнение из очереди готовых процессов;
 переключение контекстов "старого" и "нового" процессов.
Диспетчеризация – реализация решения, найденного в результате планирования.
Задачи диспетчеризации:
 сохранение контекста текущего потока
 загрузка контекста нового потока
 запуск нового потока на выполнение
Выделяют следующие уровни планирования:
 долгосрочное
 краткосрочное
 среднесрочное
Долгосрочное планирование
 отвечает за порождение новых процессов в системе, определяя ее степень
мультипрограммирования
 осуществляется достаточно редко
 оказывает влияние на функционирование вычислительной системы на
протяжении достаточно длительного времени
 в некоторых ОС сведено к минимуму или отсутствует вовсе
Краткосрочное планирование
 осуществляется, как правило, не реже одного раза в 100 миллисекунд.
 оказывает влияние на функционирование системы до наступления очередного
аналогичного события, т. е. в течение короткого промежутка времени
 при планировании использования процессора
Среднесрочное планирование
Применяется в вычислительных системах для повышения производительности при
«swapping»: временное удаление какого-либо частично выполнившегося процесса из
оперативной памяти на диск, а позже – его возвращение для дальнейшего выполнения.
Критерии планирования и требования к алгоритмам
Каждый уровень планирования процессов может быть реализован с помощью различных
алгоритмов, определяемых в конкретных случаях спецификой решаемых вычислительной
системой задач, и целями, которых хотим достичь при планировании.
Цели планирования
Справедливость
Гарантировать каждому заданию или процессу определенную часть времени
использования процессора в компьютерной системе, стараясь не допустить
возникновения ситуации, когда процесс одного пользователя постоянно занимает
процессор, в то время как процесс другого пользователя фактически не начинал
выполняться.
Эффективность
Постараться занять процессор на все 100% рабочего времени, не позволяя ему
простаивать в ожидании процессов, готовых к исполнению.
В реальных вычислительных системах загрузка процессора: 40% - 90%
Сокращение полного времени выполнения (turnaround time)
Обеспечить минимальное время между стартом процесса или постановкой задания в
очередь для загрузки и его завершением
Сокращение времени ожидания (waiting time)
Сократить время, которое проводят процессы в состоянии готовность и задания в очереди
для загрузки
Сокращение времени отклика (response time)
Минимизировать время, которое требуется процессу в интерактивных системах для
ответа на запрос пользователя
Равномерная загрузка ресурсов вычислительной системы, отдавая предпочтение тем
процессам, которые будут занимать малоиспользуемые ресурсы.
Масштабируемость. Рост количества процессов в системе в два раза не должен
приводить к увеличению полного времени выполнения процессов на порядок.
Свойства алгоритмов планирования
Независимо от целей планирования алгоритмы должны обладать следующими
свойствами:

Предсказуемость. - Одно и то же задание должно выполняться приблизительно за
одно и то же время.

Минимальные накладные расходы. tисполнения процесса>>tвыбора процесса Если на каждые
100 миллисекунд, выделенные процессу для использования процессора, будет
приходиться 200 миллисекунд на определение того, какой именно процесс получит
процессор в свое распоряжение, и на переключение контекста, то такой алгоритм,
очевидно, применять не стоит. Независимо от целей планирования алгоритмы должны
обладать следующими свойствами: Алгоритмы планирования
First-Come, First-Served (FCFS)
Когда процесс переходит в состояние готовность, он, а точнее, ссылка на его PCB
помещается в конец этой
очереди.
Выбор
нового
процесса для исполнения
осуществляется из начала
очереди с удалением оттуда
ссылки на его контекст.
(+) : простота реализации
(-): среднее время ожидания и
среднее
полное
время
выполнения
для
этого
алгоритма
существенно
зависят
от
порядка
расположения процессов в
очереди.
Выполнение процессов при
порядке p0,p1,p2:
t1=13, t2=4, t3=1 =>
среднее
время
ожидания:
(0+13+17)/3=10 единиц
времени
среднее полное время
выполнения:
(13+17+18)/3=16 единиц
времени
Выполнение процессов
при порядке p2, p1, p0:
Среднее
время
ожидания: (5+1+0)/3=2 (в
5 раз <)
Среднее полное время
выполнения:
(18+5+1)/3=8 (в 2 раза <)
Round Robin (RR)
По сути дела, это тот же
самый алгоритм, только
реализованный
в
режиме вытесняющего планирования (очередной процесс передаётся на исполнение по
таймеру по истечении определённого кванта времени)
Процессы на карусели
На производительность алгоритма RR сильно влияет величина кванта времени:
при очень больших величинах кванта алгоритм RR вырождается в алгоритм FCFS
При очень малых – создаётся иллюзия того, что каждый из n процессов работает на
собственном виртуальном процессоре с производительностью
~ 1/n от производительности реального процессора.
Shortest-Job-First (SJF) Если выбирать процесс не по порядку (как в FCFS и RR), а
основываясь на его минимальном времени непрерывного использования процессора, то
это позволит повысить производительность алгоритма планирования использования
процесса. Описанный алгоритм получил название «кратчайшая работа первой».
Основную сложность при реализации алгоритма SJF представляет невозможность точного
значения времени выполнения очередного процесса.
5.
Кооперация процессов и основные аспекты ее логической организации
(санкционированное взаимодействие процессов)
Жизнь процессов в вычислительной системе напоминает жизнь соседей в коммунальной
квартире. Постоянное ожидание в очереди к местам общего пользования (к процессору?)
и постоянная борьба за другие ресурсы (кто опять занял все конфорки на плите?). Для
нормального функционирования процессов операционная система старается максимально
обособить их друг от друга. Каждый процесс имеет свое собственное адресное
пространство (каждая семья должна жить в отдельной комнате), нарушение которого, как
правило, приводит к аварийной остановке процесса (вызов милиции). Каждому процессу,
по возможности, предоставляются свои собственные дополнительные ресурсы (у каждой
семьи желателен свой собственный холодильник). Тем не менее, для решения некоторых
задач (приготовление праздничного стола на всю квартиру) процессы могут объединять
свои усилия. Настоящая глава описывает причины, по которым взаимодействуют
процессы, способы их взаимодействия и возникающие при этом проблемы (попытайтесь
отремонтировать общую квартиру так, чтобы не переругались все проживающие в ней
семьи). Для достижения поставленной цели различные процессы (возможно, даже
принадлежащие разным пользователям) могут исполняться псевдопараллельно на одной
вычислительной системе или параллельно на разных вычислительных системах,
взаимодействуя между собой. Для чего процессам нужно заниматься совместной
деятельностью? Какие существуют причины для их кооперации?
 Одной из причин является повышение скорости работы. Когда один процесс ожидает
наступления некоторого события (например, окончания операции ввода-вывода), другие в
это время могут заниматься полезной работой, направленной на решение общей задачи. В
многопроцессорных вычислительных системах программа разделяется на отдельные
кусочки, каждый из которых будет исполняться на своем процессоре.
 Второй причиной является совместное использование данных. Различные процессы
могут, к примеру, работать с одной и той же динамической базой данных или с
разделяемым файлом, совместно изменяя их содержимое.
 Третьей причиной является модульная конструкция какой-либо системы. Типичным
примером может служить микроядерный способ построения операционной системы,
когда ее различные части представляют собой отдельные процессы, общающиеся путем
передачи сообщений через микроядро.
Наконец, это может быть необходимо просто для удобства работы пользователя, желающего,
например, редактировать и отлаживать программу одновременно. В этой ситуации процессы
редактора и отладчика должны уметь взаимодействовать друг с другом. Процессы не могут
взаимодействовать не общаясь. Общение процессов обычно приводит к изменению их
поведения в зависимости от полученной информации. Если деятельность процессов остается
неизменной при любой принятой ими информации, то это означает, что они на самом деле не
нуждаются во взаимном общении. Процессы, которые влияют на поведение друг друга путем
обмена информацией, принято называть кооперативными или взаимодействующими
процессами, в отличие от независимых процессов, не оказывающих друг на друга никакого
воздействия и ничего не знающих о взаимном сосуществовании в вычислительной системе.
Различные процессы в вычислительной системе изначально представляют собой обособленные
сущности. Работа одного процесса не должна приводить к нарушению работы другого процесса.
Для этого, в частности, разделены их адресные пространства и системные ресурсы, и для
обеспечения корректного взаимодействия процессов требуются специальные средства и
действия операционной системы. Нельзя просто поместить значение, вычисленное в одном
процессе, в область памяти, соответствующую переменной в другом процессе, не предприняв
каких-либо дополнительных организационных усилий. Давайте рассмотрим основные аспекты
организации совместной работы процессов.

6.
Алгоритмы
синхронизации
(алгоритмы
корректной
организации
взаимодействия процессов).
Критическая секция
Критическая секция – часть программы, результат выполнения которой может
непредсказуемо меняться, если переменные, относящиеся к ней, изменяются другими
потоками в то время, когда выполнение этой части еще не завершено. В примере
критическая секция – файл “заказов”, являющийся разделяемым ресурсом для процессов
R и S.
Алгоритм Деккера - первое известное корректное решение проблемы взаимного
исключения.
Если два процесса пытаются перейти в критическую секцию одновременно, алгоритм
позволит это только одному из них, основываясь на том, чья в этот момент очередь. Если
один процесс уже вошёл в критическую секцию, другой будет ждать, пока первый
покинет её. Это реализуется при помощи использования двух флагов (индикаторов
"намерения" войти в критическую секцию) и переменной turn (показывающей, очередь
какого из процессов наступила).
Процессы объявляют о намерении войти в критическую секцию; это проверяется
внешним циклом «while». Если другой процесс не заявил о таком намерении, в
критическую секцию можно безопасно войти (вне зависимости от того, чья сейчас
очередь). Взаимное исключение всё равно будет гарантировано, так как ни один из
процессов не может войти в критическую секцию до установки этого флага
(подразумевается, что, по крайней мере, один процесс войдёт в цикл «while»). Это также
гарантирует продвижение, так как не будет ожидания процесса, оставившего «намерение»
войти в критическую секцию. В ином случае, если переменная другого процесса была
установлена, входят в цикл «while» и переменная turn будет показывать, кому разрешено
войти в критическую секцию. Процесс, чья очередь не наступила, оставляет намерение
войти в критическую секцию до тех пор, пока не придёт его очередь (внутренний цикл
«while»). Процесс, чья очередь пришла, выйдет из цикла «while» и войдёт в критическую
секцию.
+ не требует специальных Test-and-set инструкций, по этому легко переносим на
разные языки программирования и архитектуры компьютеров
-Действует только для двух процессов
Алгоритм Петерсона — программный алгоритм взаимного исключения потоков
исполнения кода.
Перед тем как начать исполнение критической секции кода (то есть кода, обращающегося
к защищаемым совместно используемым ресурсам), поток должен вызвать специальную
процедуру (назовем ее EnterRegion) со своим номером в качестве параметра. Она должна
организовать ожидание потока своей очереди входа в критическую секцию. После
исполнения критической секции и выхода из нее, поток вызывает другую процедуру
(назовем ее LeaveRegion), после чего уже другие потоки смогут войти в критическую
область. Если оба процесса подошли к прологу практически одновременно, то они оба
объявят о своей готовности и предложат выполняться друг другу. При этом одно из
предложений всегда следует после другого. Тем самым работу в критическом участке
продолжит процесс, которому было сделано последнее предложение.
-Как и алгоритм Деккера, действует только для 2 процессов
+Более простая реализация, чем у алгоритма Деккера
Алгоритм булочной. Алгоритм Петерсона дает нам решение задачи корректной
организации взаимодействия двух процессов. Давайте рассмотрим теперь
соответствующий алгоритм для n взаимодействующих процессов.
Каждый вновь прибывающий процесс получает метку с номером. Процесс с наименьшим
номером метки обслуживается следующим. К сожалению, из-за неатомарности операции
вычисления следующего номера алгоритм булочной не гарантирует, что у всех процессов
будут метки с разными номерами. В случае равенства номеров меток у двух или более
процессов первым обслуживается клиент с меньшим значением имени (имена можно
сравнивать в лексикографическом порядке). Разделяемые структуры данных для
алгоритма – это два массива.
7.
Специальные механизмы синхронизации – семафоры Дейкстры, мониторы
Хора, очереди сообщений.
Семафоры
Для устранения
этого недостатка
во многих ОС
предусматриваются
специальные
системные
вызовы (аппарат
для работы с
критическими
секциями.
В разных ОС
аппарат событий
реализован
по
своему, но в
любом
случае
используются
системные
функции,
которые условно
называют
WAIT(x)
и
POST(x), где x –
идентификатор
некоторого
события
(например,
освобождение
ресурса).
Обобщающее
средство
синхронизации
процессов
предложил
Дейкстра, который ввел новые примитивы, обозначаемые V (“открытие”) и P (“закрытие”),
оперирующие над целыми неотрицательными переменными, называемыми семафорами.
Доступ любого процесса к семафору, за исключением момента его инициализации, может
осуществляться только через эти две атомарные операции.
Смысл P(S) заключается в проверке текущего значения семафора S, и если S>0, то
осуществляется переход к следующей за примитивом операции, иначе процесс переходит в
состояние ожидания. P(S): Пока S==0 Процесс блокируется; S=S-1; Операция V(S) связана
с увеличением значения S на 1 и переводом одного или нескольких процессов в состояние
готовности к исполнению процессором. V(S): S=S+1; В простом случае, когда семафор
работает в режиме 2-х состояний (S>0 и S=0), ео алгоритм работы полностью совпадает с
алгоритмом работs мьютекса, а S выполняет роль блокирующей переменной.
“+”: пассивное ожидание (постановка в очередь и автоматическая выдача ресурсов)
 возможность управления группой однородных ресурсов
“-”: не указывают непосредственно на критический ресурс
 некорректное использование операций может привести к нарушению
работоспособности (например, переставив местами операции P(e) и P(b) в функции
Writer()).
Мониторы
Для облегчения работы программистов при создании параллельных программ без усилий
на доказательства правильности алгоритмов и отслеживание взаимосвязанных объектов
(что характерно при использовании семафоров) предложено высокоуровневое средство
синхронизации, называемое мониторами. Мониторы – тип данных, обладающий
собственными переменными, значения которых могут быть изменены только с помощью
вызова функций-методов монитора. Функции-методы могут использовать в работе только
данные, находящиеся внутри монитора, и свои параметры. Доступ к мониторам в каждый
момент времени имеет только один процесс. Для организации не только
взаимоисключений, но и очередности процессов, подобно семафорам f(full) и e(empty),
было введено понятие условных переменных, над которыми можно совершать две
операции wait и signal, отчасти похожие на операции P и V над семафорами. Функция
монитора выполняет операцию wait над какой-либо условной переменной. При этом
процесс, выполнивший операцию wait, блокируется, становится неактивным, и другой
процесс получает возможность войти в монитор. Когда ожидаемое событие происходит,
другой процесс внутри функции совершает операцию signal над той же самой условной
переменной. Это приводит к пробуждению ранее заблокированного процесса, и он
становится активным. Исключение входа нескольких процессов в монитор реализуется
компилятором, а не программистом, что делает ошибки менее вероятными. Требуются
специальные языки программирования и компиляторы (встречаются в языках,
“параллельный Евклид”,”параллельный Паскаль”,Java). Следует отметить, что условные
переменные мониторов не запоминают предысторию, поэтому операцию signal всегда
должна выполняться после операции wait(иначе выполнение операции wait всегда будет
приводить к блокированию процесса).
Очереди сообщений
Механизм очередей сообщений позволяет процессам и потокам обмениваться
структурированными сообщениями. Один или несколько процессов независимым образом
могут посылать сообщения процессу – приемнику.
Очередь сообщений представляет возможность использовать несколько дисциплин
обработки сообщений (FIFO, LIFO, приоритетный доступ, произвольный доступ).
При чтении сообщения из очереди удаления сообщения из очереди не происходит, и
сообщение может быть прочитано несколько раз.
В очереди присутствуют не сами сообщения, а их адреса в памяти и размер. Эта
информация размещается системой в сегменте памяти, доступном для всех задач,
общающихся с помощью данной очереди
Основные функции управления очередью:
 Создание новой очереди
 Открытие существующей очереди
 Чтение и удаление сообщений из очереди
 Чтение без последующего удаления
 Добавление сообщения в очередь
 Завершение использование очереди
 Удаление из очереди всех сообщений
 Определение числа элементов в очереди
8.
Взаимоблокировки, тупиковые ситуации, "зависания" системы
Предположим, что несколько процессов конкурируют за обладание конечным числом
ресурсов. Если запрашиваемый процессом ресурс недоступен, ОС переводит данный
процесс в состояние ожидания. В случае когда требуемый ресурс удерживается другим
ожидающим процессом, первый процесс не сможет сменить свое состояние. Такая
ситуация называется тупиком (deadlock) . Говорят, что в мультипрограммной системе
процесс находится в состоянии тупика, если он ожидает события, которое никогда не
произойдет. Системная тупиковая ситуация, или "зависание системы", является
следствием того, что один или более процессов находятся в состоянии тупика. Иногда
подобные ситуации называют взаимоблокировками . В общем случае проблема тупиков
эффективного решения не имеет.
Взаимоблокировка возникает, когда две и более задач постоянно блокируют друг друга в
ситуации, когда у каждой задачи заблокирован ресурс, который пытаются заблокировать
другие задачи. Например:
 Транзакция А создает общую блокировку строки 1.
 Транзакция Б создает общую блокировку строки 2.
 Транзакция А теперь запрашивает монопольную блокировку строки 2 и
блокируется до того, как транзакция Б закончится и освободит общую
блокировку строки 2.
 Транзакция Б теперь запрашивает монопольную блокировку строки 1 и
блокируется до того, как транзакция A закончится и освободит общую
блокировку строки 1.
Транзакция А не может завершиться до того, как завершится транзакция Б, а транзакция Б
заблокирована транзакцией А. Такое условие также называется цикличной зависимостью:
транзакция А зависит от транзакции Б, а транзакция Б зависит от транзакции А и этим
замыкает цикл.
Тупик возникает при перестановке местами операций P(e) и P(b) в примере с процессами
“читатель” и “писатель”, рассмотренном выше – ни один из этих потоков не сможет
завершить начатую работу и возникнет тупиковая ситуация, которая не может
разрешиться без внешнего воздействия.
Тупиковые ситуации следует отличать от простых очередей хотя те и другие возникают
при совместном использовании ресурсов и внешне выглядят схоже.
Однако очередь – неотъемлемый признак высокого коэффициента использования
ресурсов при случайном поступлении запросов а тупик – “неразрешимая” ситуация.
Проблема тупиков требует решения следующих задач:
-распознавание тупиков,
-предотвращение тупиков,
-восстановление системы после тупиков.
Распознавание тупиков
В случаях, когда тупиковая ситуация образована многими процессами, использующими
много ресурсов, распознавание тупика является не тривиальной задачей. Существуют
формальные, программно-реализованные методы распознавания тупиков, основанные на
ведении таблиц распределения ресурсов и таблиц запросов к занятым ресурсам, анализ
которых позволяет обнаружить взаимные блокировки.
Предотвращение тупиков
Тупики могут быть предотвращены на стадии проектирования и разработки
программного обеспечения, чтобы тупик не мог возникнуть ни при каком соотношении
взаимных скоростей процессов.
Существует подход динамического предотвращения тупиков, заключающийся в
использовании определенных правил при назначении ресурсов процессам (например,
ресурсы могут выделяться в определенной последовательности, общей для всех
процессов, как диск и принтер в примере).
Восстановление системы после тупиков
При возникновении тупиковой ситуации не обязательно снимать с выполнения все
заблокированные процессы, а можно:
 снять только часть из них, при этом освобождая ресурсы, ожидаемые
остальными процессами
 вернуть некоторые процессы в область «свопинга»
 совершить «откат» некоторых процессов до т.н. контрольной точки, в которой
запоминается вся информация, необходимая для восстановления выполнения
программы с данного места.
Контрольные точки расставляются в программе в местах, после которых возможно
возникновение тупика.
9.
Простейшие схемы управления памятью. Связывание логических и
физических адресных пространств.
Распределение памяти:
В однопрограммных ОС:
Непрерывное
Оверлейное
В мультипрограммных ОС:
Фиксированными разделами
Динамическими разделами
Перемещаемыми разделами
Непрерывное распределение – это самая простая и распространенная схема, согласно
которой вся память условно может быть разделена на три области:
Область, занимаемая ОС
Область, в которой размещается исполняемый процесс
Свободная область памяти
Такая схема распределения влечет за собой два вида потерь вычислительных ресурсов:
Потерю процессорного времени, потому что процессор простаивает, пока задача
ожидает завершения операций ввода-вывода
Потерю самой ОП, потому что далеко не каждая программа использует всю память, а
режим работы в этом случае однопрограммный
(+)
Недорогая реализация, которая позволяет отказаться от многих второстепенных
функций ОС, например, защита памяти – единственное, что следует защищать программные модули и области памяти самой ОС)
Если логическое адресное пространство программы должно быть больше, чем
свободная область памяти, или весь возможный объем ОП, то вся программа может быть
разбита на главный и второстепенные сегменты, а в ОП одновременно могут находится
только ее главная часть и один или несколько неперекрывающихся сегментов (структуры
с перекрытием)
Образное представление организации памяти с использованием структуры с
перекрытием
Поочередно можно
загружать в память
ветви А-В, А-С-D и АС-Е программы
Мультипрограммные ОС
Для организации мультипрограммного режима необходимо обеспечить одновременное
расположение в ОП нескольких задач (целиком или частями)
При решении этой задачи ОС должна учитывать целый ряд моментов:
Следует ли назначать каждому процессу одну непрерывную область физической
памяти или фрагментами
Должны ли сегменты программы, загруженные в память, находится в одном месте в
течении всего периода выполнения процесса или можно ее время от времени сдвигать
Что следует предпринять, если сегменты программы не помещаются в имеющуюся
память
РАСПРЕДЕЛЕНИЕ ПАМЯТИ ФИКСИРОВАННЫМИ РАЗДЕЛАМИ
Простейший способ управления ОП состоит в том, что память разбивается на
несколько областей фиксированной величины, называемых разделами. Разбиение может
быть выполнено вручную оператором во время старта системы или во время ее установки.
В каждом разделе и в каждый момент времени может располагаться по одной задаче, и
к каждому разделу в отдельности можно применить методы, используемые при
распределении памяти в однопрограммных ОС.
Очередной новый процесс, поступивший на выполнение помещается либо в общую
очередь(а), либо в очередь к некоторому разделу(б)
Подсистема управления памятью в этом случае выполняет следующие задачи:
Сравнивает объем памяти, требуемый для вновь поступившего процесса, с размерами
свободных разделов и выбирает подходящий раздел
Осуществляет загрузку программы в один из разделов и настройку и настойку адресов
(+): простота
(-):Существенные потери памяти от внутренней фрагментации
Учитывая то, что в каждом разделе может выполняться только один процесс, то
уровень мультипрограммирования заранее ограничен числом разделов, так как
независимо от размера программы она будет занимать весь раздел
Применялся в ранних мультипрограммных ОС, сейчас – в ОСРВ за счет
детерминированности вычислительного процесса и небольших затрат на реализацию
РАСПРЕДЕЛЕНИЕ ПАМЯТИ ДИНАМИЧЕСКИМИ РАЗДЕЛАМИ
Чтобы уменьшить потери от внутренней фрагментации, целесообразно размещать в ОП
задачи «плотно», одну за другой, выделяя ровно столько памяти, сколько задача
потребует (распределение памяти динамическими разделами)
Обобщенный алгоритм:
Вся память свободна. Каждому вновь поступающему процессу выделяется вся
необходимая память (если достаточный объем памяти отсутствует, то процесс не
создается)
После завершения процесса память освобождается, и на это место может быть загружен
другой процесс
Задачами операционной системы при реализации данного метода управления памятью
является:
ведение таблиц свободных и занятых областей, в которых указываются начальные
адреса и размеры участков памяти,
при поступлении новой задачи - анализ запроса, просмотр таблицы свободных областей
и выбор раздела, размер которого достаточен для размещения поступившей задачи,
загрузка задачи в выделенный ей раздел и корректировка таблиц свободных и занятых
областей,
после завершения задачи корректировка таблиц свободных и занятых областей.
Выбор раздела для вновь поступившей задачи может осуществляться по разным
правилам. Например:
"первый попавшийся раздел достаточного размера"(first fit)
"раздел, имеющий наименьший достаточный размер"(best fit)
"раздел, имеющий наибольший достаточный размер"(worst fit)
(+)
Значительная гибкость
(-)
Внешняя фрагментация памяти – наличие большого числа несмежных участков
свободной память небольшого
РАСПРЕДЕЛЕНИЕ ПАМЯТИ ДИНАМИЧЕСКИМИ РАЗДЕЛАМИ
Одним из методов борьбы с фрагментацией является перемещение всех занятых
участков («сжатие», «уплотнение», «дефрагментация») в сторону старших либо в сторону
младших адресов, так, чтобы вся свободная память образовывала единую свободную
область (рисунок).
Дефрагментация может выполняться:
При каждом завершении задачи (меньше однократной вычислительной работы)
В случае, когда для вновь поступившей задачи нет свободного раздела достаточного
размера (процедура выполняется реже)
(+) более эффективное использование памяти
(-) требует значительных временных затрат
Задачи по управлению памятью
отслеживание свободной и занятой памяти
выделение и освобождение памяти процессам
вытеснение процессов из ОП на диск, когда размеры основной памяти не достаточны
для размещения в ней всех процессов
возвращение процессов в оперативную память, когда в ней освобождается место
настройка адресов программы на конкретную область физической памяти
зашита памяти (не позволит выполняемому процессу записывать или читать данные из
памяти, назначенной другому процессу). Функция, как правило, реализуется программно
– аппаратными средствами
Типы адресации
Отобрание осуществляется
в два этапа:
1) системой
программирования с
использованием
библиотечных модулей
(компиляция трансляция)
2) ОС (подсистема
управления памятью, которая
использует дополнительную
информацию от ОС)
Логическое (символьное имя)
Преобразование имен прпограммы
Виртуальное адресное
пространство
Виртуальное пространство
Система
программирования
Операционная
система
Физическая память
компьютера
Ячейка оперативной памяти
Между первым и вторым этапами обращения к памяти имеют форму виртуального
адреса. Множество всех допустимых значений виртуального адреса для некоторой
программы определяет ее виртуальное адресное пространство.
Возможны различные варианты перехода от символьных имен к физическим адресам.
Частным случаем отображения пространства имен является полная тождественность
виртуального адресного пространства физической памяти (система программирования
генерирует абсолютную двоичную программу)
Часть программных модулей любой ОС обязательно должны быть абсолютными
двоичными программами (например, программы загрузки)
10. Виртуальная память. Разбиение адресного пространства процесса на части и
динамическая трансляция адреса. Архитектурные средства поддержки виртуальной
памяти.
Суть концепции виртуальной памяти заключается в следующем. Информация, с которой
работает активный процесс, должна располагаться в оперативной памяти. В схемах
виртуальной памяти у процесса создается иллюзия того, что вся необходимая ему
информация имеется в основной памяти. Для этого, во-первых, занимаемая процессом
память разбивается на несколько частей, например страниц. Во-вторых, логический адрес
(логическая страница), к которому обращается процесс, динамически транслируется в
физический адрес (физическую страницу). И, наконец, в тех случаях, когда страница, к
которой обращается процесс, не находится в физической памяти, нужно организовать ее
подкачку с диска. Для контроля наличия страницы в памяти вводится специальный бит
присутствия, входящий в состав атрибутов страницы в таблице страниц .
Возможность выполнения программы, находящейся в памяти лишь частично, имеет ряд
вполне очевидных преимуществ.
 Программа не ограничена объемом физической памяти. Упрощается разработка
программ, поскольку можно задействовать большие виртуальные пространства, не
заботясь о размере используемой памяти.
 Поскольку появляется возможность частичного помещения программы (процесса) в
память и гибкого перераспределения памяти между программами, можно
разместить в памяти больше программ, что увеличивает загрузку процессора и
пропускную способность системы.
 Объем ввода-вывода для выгрузки части программы на диск может быть меньше,
чем в варианте классического свопинга, в итоге каждая программа будет работать
быстрее.
Но введение виртуальной памяти позволяет решать другую, не менее важную задачу –
обеспечение контроля доступа к отдельным сегментам памяти и, в частности, защиту
пользовательских программ друг от друга и защиту ОС от пользовательских программ.
Каждый процесс работает со своими виртуальными адресами, трансляцию которых в
физические выполняет аппаратура компьютера. Таким образом, пользовательский
процесс лишен возможности напрямую обратиться к страницам основной памяти,
занятым информацией, относящейся к другим процессам.
Архитектурные средства поддержки виртуальной памяти делятся на сегментные,
страничные и сегментно-страничные распределения памяти.
Сегментный
Программу необходимо разбивать на части и уже каждой такой части выделять
физическую память. Естественным способом разбиения программы на части является
разбиение её на логические элементы – сегменты.
Разбиение на сегменты позволяет дифференцировать способы доступа к разным частям
программы(сегментам). Можно запретить обращаться с операциями записи и чтения в
кодовый сегмент программы, а для сегмента данных разрешить только чтение. Разбиение
программы на «осмысленные» части делает принципиально возможным разделением
одного сегмента несколькими процессами.
Логически обращение к элементам программы в этом случае будет состоять из имени
сегмента и смещения относительно начала этого сегмента.
Вся информация о текущем размещении сегментов задачи в памяти сводится в таблицу
сегментов (таблицу дескрипторов сегментов задачи), формируемую для каждого
исполняемого процесса.
При размещении каждого из сегментов в оперативной или внешней памяти ОС отмечает в
дескрипторе текущее местоположение сегмента.
При передаче управления следующей задаче ОС должна занести в соответствующий
регистр адрес таблицы дескрипторов сегментов этой задачи.
Сама таблица дескрипторов сегментов, в свою очередь, также представляет собой сегмент
данных, который обрабатывается диспетчером памяти ОС.
Поэтому:
общий объём виртуального адресного пространства задачи может превосходить объём
физической памяти компьютера, на котором эта задача будет выполняться.
Даже если потребности в памяти не так велики, можно размещать в памяти больше задач,
поскольку любой задаче, как правило, все её сегменты одновременно не нужны.
Решение проблемы замещения (определения того сегмента, который должен быть либо
перемещён во внешнюю память, либо просто замещён новым) используются следующие
дисциплины:
FIFO (First In First Out) первый пришёл – первый ушёл
LRU (Least Recently Used ) не используемый дольше других
LFU (Least Frequently Used) используемый реже других
Random-случайный выбор сегмента
Страничный способ при котором все фрагменты задач считаются равными, причем
длина фрагмента в идеале должна быть кратна степени 2, чтобы операции сложения
можно было заменить операциями конкатенации.
Часть виртуальных страниц задачи могут быть размещены в ОП, а часть – во внешней
памяти.
Место во внешней памяти называют файлом подкачки, или страничным файлом(paging
file). Иногда это файл называют swap – файлом, тем самым подчеркивая, что записи этого
файла – страницы – замещают друг друга в ОП
Разбиение всей ОП на страницы одинаковой величины, причем кратной степени двойки,
приводит к тому, что вместо одномерного адресного пространства памяти можно
говорить о двумерном. Первая координата адресного пространства – это номер страницы,
вторая координата – номер ячейки внутри выбранной страницы (индекс).
Таким образом, физический адрес определяется парой (Рр, i), а виртуальный адрес –
парой (Pv, i), где Pv – номер виртуальной страницы, Рр – номер физической страницы, i –
индекс ячейки внутри страницы
Виртуальный адрес
Регистр таблицы страниц
32000
17
P (Page)
612
I (index)
Таблица страниц текущей задачи
32017
P
Номер
физической
страницы
Права
доступа
1
23
R-X
P – Бит
присутствия
Страница №23
23000
23612
Количество битов, отводимое под индекс, определяет размер страницы, а количество
битов, отводимое под номер виртуальной страницы, - объем потенциально доступной для
программы виртуальной памяти. Для отображения виртуального адресного пространства
задачи на физическую память, как и в случае сегментного способа организации, для
каждой задачи необходимо иметь таблицу страниц для трансляции адресных пространств,
отличающихся от дескриптора сегмента прежде всего тем, что в ней нет поля длины – все
страницы имеют одинаковый размер. При обращении к виртуальной странице, не
оказавшейся в данный момент в ОП, возникает прерывание и управление передается
диспетчеру памяти, который должен найти свободное место.
Обычно предоставляется первая же свободная страница. Если свободной физической
страницы нет, то диспетчер памяти по одной из дисциплин замещения (LRU, LFU,FIFO,
случайный доступ) определит страницу, подлежащую расформированию или сохранению
во внешней памяти. На ее месте он разместит новую виртуальную страницу, к которой
было обращение из задачи, но которой не оказалось в ОП. Для абсолютного большинства
современных ОС характерна дисциплина замещения страниц LRU как наиболее
эффективная. Так, именно эта дисциплина использована в OS/2 и Linux.
Однако в ОС Windows NT/2000/XP разработчики, желая сделать их максимально
независимыми от аппаратных возможностей процессора, отказались от этой дисциплины
и применили правило FIFO. Поэтому, чтобы компенсировать ее неэффективность была
введена «буферизация» тех страниц, которые должны быть записаны в файл подкачки на
диск или просто расформированы. Принцип буферизации следующий: прежде чем
замещаемая страница действительно окажется во внешней памяти или просто
расформированной, она помечается как «кандидат на выгрузку».
Если в следующий раз произойдет обращение к странице, находящейся в таком «буфере»,
то страница никуда не выгружается и уходит в конец списка FIFO
В противном случае страница действительно выгружается, а на ее место в «буфер»
попадает следующий «кандидат».
Величина «буфера» не может быть большой, поэтому эффективность страничной
реализации памяти в Windows NT/2000/XP намного ниже, чем в других ОС, и явление
пробуксовки проявляется даже при относительно большом объеме ОП
Структура таблицы страниц
Многоуровневые таблицы страниц
Основную проблему для эффективной реализации таблицы страниц создают большие
размеры виртуальных адресных пространств современных компьютеров, которые обычно
определяются разрядностью архитектуры процессора.
В 32-битном адресном пространстве при размере страницы 4 Кбайт (Intel) получаем
232/212=220, то есть приблизительно 106 страниц – таблица должна иметь примерно 106
строк, а запись в строке состоит из нескольких байтов. Каждый процесс нуждается в
своей таблице страниц.
Для того чтобы избежать размещения в памяти огромной таблицы, ее разбивают на ряд
фрагментов.
В ОП хранят лишь некоторые, необходимые для конкретного момента исполнения
фрагмента таблицы страниц.
В силу свойства локальности число таких фрагментов относительно невелико.
Локальность – способность в течение ограниченного отрезка времени работать с
небольшим набором адресов памяти.
Различают временную локальность (высокая вероятность повторного обращения по
одному и тому же адресу в ближайшее время) и пространственную локальность (высокая
вероятность повторного обращения по соседнему адресу в ближайшее время).
Одним из наиболее распространенных способов разбиения является организация так
называемой многоуровневой таблице страниц.
Виртуальный адрес
P1
P2
d
Таблица первого
уровня
Таблица второго
уровня
Страничные
кадры по 4Кб
При помощи одной таблицы второго уровня можно охватить 4Мбайт ОП. Для
размещения процесса с большим объемом занимаемой памяти достаточно иметь в ОП
одну таблицу первого уровня и несколько таблиц второго уровня. Очевидно, что
суммарное количество строк в этих таблицах много меньше 220.
Количество уровней в таблице страниц зависит от конкретных особенностей архитектуры.
Примером реализации одноуровневого (DEC PDP-11), двухуровневого (Intel, DEC VAX),
трехуровневого (Sun SPARC, DEC Alpha) пейджинга, а также пейджинга с заданным
количеством уровней (Motorola).
Инвертированная таблица страниц
В этой таблице содержится по одной записи на каждый страничный кадр физической
памяти. Достаточно одной таблицы для всех процессов. Для хранения функции
отображения требуется фиксированная часть основной памяти, независимо от
разрядности архитектуры, размера и количества процессоров.
Например, для Pentium с
256 Мбайт ОП нужна таблица размером 64 Кбайт строк.
Несмотря на экономию ОП, применение инвертированной таблицы имеет существенный
минус – записи в ней (как и в ассоциативной памяти) не отсортированы по возрастанию
номеров виртуальных страниц, что усложняет трансляцию адреса.
Один из способов решения данной проблемы – использование хеш-таблицы виртуальных
адресов.
Часть виртуального адреса, представляющая собой номер страницы, отображается в хештаблицу с использованием функции хеширования.
Инвертированная таблица страниц
Каждой странице физической памяти соответствует одна запись в хеш-таблице и
инвертированной таблице страниц.
Виртуальные адреса, имеющие одно значение хеш-функции, сцепляются друг с другом.
Обычно длина цепочки не превышает двух записей.
Ассоциативная память
Поиск номера кадра, соответствующего нужной странице, в многоуровневой таблице
страниц требует нескольких обращений к основной памяти, поэтому занимает много
времени. В некоторых случаях такая задержка недопустима.
Решение проблемы ускорения – снабдить компьютер (процессор) аппаратным
устройством для отображения виртуальных страниц в физические без обращения
к
таблице страниц, то есть иметь небольшую быструю кеш-память, хранящую
необходимую на данный момент часть таблицы страниц.
Это устройство называют ассоциативной памятью или буфером поиска трансляции
(translation lookaside buffer - TLB).
Высокое значение вероятности нахождения данных в ассоциативной памяти связано с
наличием у данных объективных свойств: пространственной и временной локальности.
Общая схема функционирования
В первый момент времени осуществляется поиск информации о необходимой странице в
ассоциативной памяти. Если нужная запись найдена, то производится отображение этой
страницы в физическую память (за исключением случаев нарушения привилегий, когда
запрос на обращение к памяти отклоняется).
Если запись в ассоциативной памяти отсутствует, отображение осуществляется через
таблицу страниц: происходит замена одной из записей в ассоциативной памяти найденной
записью из таблицы страниц (конструкция ассоциативной памяти должна позволять
выявлять те «старые» записи, которые могут быть замещены «новыми»).
Одна запись таблицы в ассоциативной памяти содержит информацию об одной
виртуальной странице: ее атрибуты и кадр, в котором она находится (поля в точности
соответствуют полям в таблице страниц).
Число удачных поисков номера страницы в ассоциативной памяти по отношению к
общему числу поисков называется hit ratio («процент попаданий в кэш»).
Обращение к одним и тем же страницам повышает hit ratio (чем больше hit ratio, тем
меньше среднее время доступа к данным, находящимся в ОП).
Пример: Если для доступа к памяти через таблицу страниц необходимо 100 нс, а для
доступа через ассоциативную память – 20 нс. Если hit ratio = 90%, то среднее время
доступа -> 0,9x20+0,1x100=28нс.
Минус: При переключении контекста процесса при использовании ассоциативной памяти
требуется ее «очистка», что ведет к увеличению времени переключения контекста.
Сегментно-страничный
Метод представляет собой комбинацию сегментного и страничного распределения памяти
и сочетает в себе достоинства обоих подходов.
Виртуальное пространство процесса делится на сегменты, а каждый сегмент в свою
очередь делиться на виртуальные страницы, которые нумеруются в пределах сегмента.
ОП делиться на физические страницы.
Загрузка процесса выполняется ОС постранично, при этом часть страниц размещается в
ОП, а часть на диске.
Для каждого сегмента создается своя таблица страниц, структура которой идентична
структуре таблицы страниц при страничном распределении.
Для каждого процесса создается таблица сегментов, в которой указываются адреса таблиц
страниц для всех сегментов данного процесса. Адрес таблицы сегментов загружается в
специальный регистр процесса, когда активизируется соответствующий процесс.
Виртуальный адрес состоит из двух составляющих:
1. указание на номер сегмента
2. смещение относительно начала сегмента
2.1. виртуальная страница
2.2. индекс
На практике, появления в системе большого количества таблиц страниц стараются
избежать, организуя не перекрывающиеся сегменты в одном виртуальном пространстве,
для описания которого хватает одной таблицы страниц. Таким образом, одна таблица
страниц отводится для всего процесса.
+Разбиение программы на сегменты позволяет размещать отдельные сегменты в памяти
целиком, что позволяет сократить число обращений к отсутствующим страницам, так как
вероятность выхода за пределы сегмента меньше вероятности выхода за пределы
страницы;
+Наличие сегментов облегчает
разделение
программных
модулей
между
параллельными процессами;
+Возможна динамическая компоновка задачи;
+Выделение памяти страницам позволяет минимизировать фрагментацию.
-Сложность реализации и высокие вычислительные затраты позволяют использовать его
редко в дорогих и мощных вычислительных системах.
Принципиальная возможность реализации сегментно-страничной организации памяти
заложена в семейство микропроцессоров i80x86, однако вследствие слабой аппаратной
поддержки, трудностей при создании систем программирования и ОС в ПК эта
возможность не используется.
11. Аппаратно-независимый уровень управления виртуальной памятью.
Большинство ОС используют сегментно-страничную виртуальную память. Для
обеспечения нужной производительности менеджер памяти ОС старается поддерживать в
оперативной памяти актуальную информацию, пытаясь угадать, к каким логическим
адресам последует обращение в недалеком будущем. Решающую роль здесь играет
удачный выбор стратегии замещения, реализованной в алгоритме выталкивания страниц.
Стратегии управления страничной памятью
Программное обеспечение подсистемы управления памятью связано с реализацией
следующих стратегий:
Стратегия выборки (fetch policy) - в какой момент следует переписать страницу из
вторичной памяти в первичную. Существует два основных варианта выборки - по запросу
и с упреждением. Алгоритм выборки по запросу вступает в действие в тот момент, когда
процесс обращается к отсутствующей странице, содержимое которой находится на диске.
Его реализация заключается в загрузке страницы с диска в свободную физическую
страницу и коррекции соответствующей записи таблицы страниц.
Алгоритм выборки с упреждением осуществляет опережающее чтение, то есть кроме
страницы, вызвавшей исключительную ситуацию, в память также загружается несколько
страниц, окружающих ее (обычно соседние страницы располагаются во внешней памяти
последовательно и могут быть считаны за одно обращение к диску). Такой алгоритм
призван уменьшить накладные расходы, связанные с большим количеством
исключительных ситуаций, возникающих при работе со значительными объемами данных
или кода; кроме того, оптимизируется работа с диском.
Стратегия размещения (placement policy) - в какой участок первичной памяти поместить
поступающую страницу. В системах со страничной организацией все просто - в любой
свободный страничный кадр. В случае систем с сегментной организацией необходима
стратегия, аналогичная стратегии с динамическим распределением.
Стратегия замещения (replacement policy) - какую страницу нужно вытолкнуть во
внешнюю память, чтобы освободить место в оперативной памяти. Разумная стратегия
замещения, реализованная в соответствующем алгоритме замещения страниц, позволяет
хранить в памяти самую необходимую информацию и тем самым снизить частоту
страничных нарушений . Замещение должно происходить с учетом выделенного каждому
процессу количества кадров. Кроме того, нужно решить, должна ли замещаемая страница
принадлежать процессу, который инициировал замещение, или она должна быть выбрана
среди всех кадров основной памяти.
Алгоритмы замещения страниц
Алгоритм FIFO. Выталкивание первой пришедшей страницы
Простейший алгоритм. Каждой странице присваивается временная метка. Реализуется
это просто созданием очереди страниц, в конец которой страницы попадают, когда
загружаются в физическую память, а из начала берутся, когда требуется освободить
память. Для замещения выбирается старейшая страница. К сожалению, эта стратегия с
достаточной вероятностью будет приводить к замещению активно используемых страниц,
например страниц кода текстового процессора при редактировании файла. Заметим, что
при замещении активных страниц все работает корректно, но page fault происходит
немедленно.
Оптимальный алгоритм (OPT)
Каждая страница должна быть помечена числом инструкций, которые будут
выполнены, прежде чем на эту страницу будет сделана первая ссылка. Выталкиваться
должна страница, для которой это число наибольшее.
Этот алгоритм легко описать, но реализовать невозможно. ОС не знает, к какой
странице будет следующее обращение.
Выталкивание дольше всего не использовавшейся страницы. Алгоритм LRU
LRU - хороший, но труднореализуемый алгоритм. Необходимо иметь связанный список
всех страниц в памяти, в начале которого будут хранится недавно использованные
страницы. Причем этот список должен обновляться при каждом обращении к памяти.
Много времени нужно и на поиск страниц в таком списке.
Выталкивание редко используемой страницы. Алгоритм NFU
Поскольку большинство современных процессоров не предоставляют соответствующей
аппаратной поддержки для реализации алгоритма LRU, хотелось бы иметь алгоритм,
достаточно близкий к LRU, но не требующий специальной поддержки. Для него
требуются программные счетчики, по одному на каждую страницу, которые сначала
равны нулю. При каждом прерывании по времени (а не после каждой инструкции)
операционная система сканирует все страницы в памяти и у каждой страницы с
установленным флагом обращения увеличивает на единицу значение счетчика, а флаг
обращения сбрасывает. К андидатом на освобождение оказывается страница с
наименьшим значением счетчика, как страница, к которой реже всего обращались.
УПРАВЛЕНИЕ КОЛИЧЕСТВОМ СТРАНИЦ, ВЫДЕЛЕННЫХ ПРОЦЕССУ.
МОДЕЛЬ РАБОЧЕГО МНОЖЕСТВА
Трешинг (Thrashing)
Хотя теоретически возможно уменьшить число кадров процесса до минимума,
существует какое-то число активно используемых страниц, без которого процесс часто
генерирует page faults. Высокая частота страничных нарушений называется трешинг.
Часто результатом трешинга является снижение производительности вычислительной
системы. Один из нежелательных сценариев развития событий может выглядеть
следующим образом. При глобальном алгоритме замещения процесс, которому не хватает
кадров, начинает отбирать кадры у других процессов, которые в свою очередь начинают
заниматься тем же. В результате все процессы попадают в очередь запросов к устройству
вторичной памяти (находятся в состоянии ожидания), а очередь процессов в состоянии
готовности пустеет. Загрузка процессора снижается. Операционная система реагирует на
это увеличением степени мультипрограммирования, что приводит к еще большему
трешингу и дальнейшему снижению загрузки процессора. Таким образом, пропускная
способность системы падает из-за трешинга.
Эффект трешинга, возникающий при использовании глобальных алгоритмов, может быть
ограничен за счет применения локальных алгоритмов замещения. При локальных
алгоритмах замещения если даже один из процессов попал в трешинг, это не сказывается
на других процессах. Однако он много времени проводит в очереди к устройству
выгрузки, затрудняя подкачку страниц остальных процессов.
Критическая ситуация типа трешинга возникает вне зависимости от конкретных
алгоритмов замещения. Единственным алгоритмом, теоретически гарантирующим
отсутствие трешинга, является рассмотренный выше не реализуемый на практике
оптимальный алгоритм.
Страничные демоны
Подсистема виртуальной памяти работает производительно при наличии резерва
свободных страничных кадров. Алгоритмы, обеспечивающие поддержку системы в
состоянии отсутствия трешинга, реализованы в составе фоновых процессов (их часто
называют демонами или сервисами), которые периодически "просыпаются" и
инспектируют состояние памяти. Если свободных кадров оказывается мало, они могут
сменить стратегию замещения. Их задача - поддерживать систему в состоянии наилучшей
производительности.
Программная поддержка сегментной модели памяти процесса
Чаще всего виртуальная память процесса ОС разбивается на сегменты пяти типов: кода
программы, данных, стека, разделяемый и сегмент файлов, отображаемых в память.
Сегмент программного кода содержит только команды. Сегмент программного кода не
модифицируется в ходе выполнения процесса, обычно страницы данного сегмента имеют
атрибут read-only. Следствием этого является возможность использования одного
экземпляра кода для разных процессов.
Сегмент данных, содержащий переменные программы и сегмент стека, содержащий
автоматические переменные, могут динамически менять свой размер (обычно данные в
сторону увеличения адресов, а стек - в сторону уменьшения) и содержимое, должны быть
доступны по чтению и записи и являются приватными сегментами процесса.
С целью обобществления памяти между несколькими процессами создаются
разделяемые сегменты, допускающие доступ по чтению и записи. Вариантом
разделяемого сегмента может быть сегмент файла, отображаемого в память.
Специфика таких сегментов состоит в том, что из них откачка осуществляется не в
системную область выгрузки, а непосредственно в отображаемый файл. Реализация
разделяемых сегментов основана на том, что логические страницы различных процессов
связываются с одними и теми же страничными кадрами.
12. Файлы с точки зрения пользователя. Основные функции и интерфейс
файловой системы.
Файловая система - это часть операционной системы, назначение которой состоит в
том, чтобы организовать эффективную работу с данными, хранящимися во внешней
памяти, и обеспечить пользователю удобный интерфейс при работе с такими данными.
Организовать хранение информации на магнитном диске непросто. Это требует,
например, хорошего знания устройства контроллера диска, особенностей работы с его
регистрами. Непосредственное взаимодействие с диском - прерогатива компонента
системы ввода-вывода ОС, называемого драйвером диска. Для того чтобы избавить
пользователя компьютера от сложностей взаимодействия с аппаратурой, была придумана
ясная абстрактная модель файловой системы. Операции записи или чтения файла
концептуально проще, чем низкоуровневые операции работы с устройствами.
Перечислим основные функции файловой системы.
1. Идентификация файлов. Связывание имени файла с выделенным ему пространством
внешней памяти.
2. Распределение внешней памяти между файлами. Для работы с конкретным файлом
пользователю не требуется иметь информацию о местоположении этого файла на
внешнем носителе информации. Например, для того чтобы загрузить документ в редактор
с жесткого диска, нам не нужно знать, на какой стороне какого магнитного диска, на
каком цилиндре и в каком секторе находится данный документ.
3. Обеспечение надежности и отказоустойчивости. Стоимость информации может во
много раз превышать стоимость компьютера.
4. Обеспечение защиты от несанкционированного доступа.
5. Обеспечение совместного доступа к файлам, так чтобы пользователю не
приходилось прилагать специальных усилий по обеспечению синхронизации доступа.
6. Обеспечение высокой производительности.
Иногда говорят, что файл - это поименованный набор связанной информации,
записанной во вторичную память. Для большинства пользователей файловая система наиболее видимая часть ОС. Она предоставляет механизм для онлайнового хранения и
доступа как к данным, так и к программам для всех пользователей системы. С точки
зрения пользователя, файл - единица внешней памяти, то есть данные, записанные на
диск, должны быть в составе какого-нибудь файла .
Общие сведения о файлах
Имена файлов
Файлы представляют собой абстрактные объекты. Их задача - хранить информацию,
скрывая от пользователя детали работы с устройствами. Когда процесс создает файл, он
дает ему имя. После завершения процесса файл продолжает существовать и через свое
имя может быть доступен другим процессам.
Правила именования файлов зависят от ОС. Многие ОС поддерживают имена из двух
частей (имя+расширение), например progr.c ( файл, содержащий текст программы на
языке Си) или autoexec.bat ( файл, содержащий команды интерпретатора командного
языка). (до 255 символов).
Типы файлов
Важный аспект организации файловой системы и ОС - следует ли поддерживать и
распознавать типы файлов. Если да, то это может помочь правильному
функционированию ОС, например не допустить вывода на принтер бинарного файла.
Основные типы файлов: регулярные (обычные) файлы и директории (справочники,
каталоги ). Обычные файлы содержат пользовательскую информацию. Директории системные файлы, поддерживающие структуру файловой системы. В каталоге содержится
перечень входящих в него файлов и устанавливается соответствие между файлами и их
характеристиками ( атрибутами ). Мы будем рассматривать директории ниже.
Обычные (или регулярные) файлы реально представляют собой набор блоков
(возможно, пустой) на устройстве внешней памяти, на котором поддерживается файловая
система. Такие файлы могут содержать как текстовую информацию (обычно в формате
ASCII), так и произвольную двоичную (бинарную) информацию.
Текстовые файлы содержат символьные строки, которые можно распечатать, увидеть
на экране или редактировать обычным текстовым редактором.
Другой тип файлов - нетекстовые, или бинарные, файлы. Обычно они имеют
некоторую внутреннюю структуру. Например, исполняемый файл в ОС Unix имеет пять
секций: заголовок, текст, данные, биты реаллокации и символьную таблицу. ОС
выполняет файл, только если он имеет нужный формат. Другим примером бинарного
файла может быть архивный файл. Типизация файлов не слишком строгая.
Атрибуты файлов
Кроме имени ОС часто связывают с каждым файлом и другую информацию, например
дату модификации, размер и т. д. Эти другие характеристики файлов называются
атрибутами.
перации над файлами
Операционная система должна предоставить в распоряжение пользователя набор
операций для работы с файлами, реализованных через системные вызовы.
 Создание файла, не содержащего данных. Смысл данного вызова - объявить, что
файл существует, и присвоить ему ряд атрибутов. При этом выделяется место для файла
на диске и вносится запись в каталог.
 Удаление файла и освобождение занимаемого им дискового пространства.
 Открытие файла. Перед использованием файла процесс должен его открыть. Цель
данного системного вызова - разрешить системе проанализировать атрибуты файла и
проверить права доступа к нему, а также считать в оперативную память список адресов
блоков файла для быстрого доступа к его данным. Открытие файла является процедурой
создания дескриптора или управляющего блока файла. Дескриптор (описатель) файла
хранит всю информацию о нем. Иногда, в соответствии с парадигмой, принятой в языках
программирования, под дескриптором понимается альтернативное имя файла или
указатель на описание файла в таблице открытых файлов, используемый при
последующей работе с файлом . Например, на языке Cи операция открытия файла
fd=open(pathname,flags,modes); возвращает дескриптор fd, который может быть
задействован при выполнении операций чтения ( read(fd,buffer,count); ) или записи.
 Закрытие файла. Если работа с файлом завершена, его атрибуты и адреса блоков на
диске больше не нужны. В этом случае файл нужно закрыть, чтобы освободить место во
внутренних таблицах файловой системы.
 Позиционирование. Дает возможность специфицировать место внутри файла,
откуда будет производиться считывание (или запись) данных, то есть задать текущую
позицию.
 Чтение данных из файла. Обычно это делается с текущей позиции. Пользователь
должен задать объем считываемых данных и предоставить для них буфер в оперативной
памяти.
 Запись данных в файл с текущей позиции. Если текущая позиция находится в конце
файла, его размер увеличивается, в противном случае запись осуществляется на место
имеющихся данных, которые, таким образом, теряются.
Операции над директориями
 Создание директории. Вновь созданная директория включает записи с именами ' .' и ' ..',
однако считается пустой.
 Удаление директории. Удалена может быть только пустая директория.
 Открытие директории для последующего чтения. Hапример, чтобы перечислить файлы,
входящие в директорию, процесс должен открыть директорию и считать имена всех
файлов, которые она включает.
 Закрытие директории после ее чтения для освобождения места во внутренних
системных таблицах.
 Поиск. Данный системный вызов возвращает содержимое текущей записи в открытой
директории. Вообще говоря, для этих целей может использоваться системный вызов
Read, но в этом случае от программиста потребуется знание внутренней структуры
директории.
 Получение списка файлов в каталоге.
 Переименование. Имена директорий можно менять, как и имена файлов.
 Создание файла. При создании нового файла необходимо добавить в каталог
соответствующий элемент.
 Удаление файла. Удаление из каталога соответствующего элемента. Если удаляемый
файл присутствует только в одной директории, то он вообще удаляется из файловой
системы, в противном случае система ограничивается только удалением
специфицируемой записи.
Доступ к файлам происходит по 3 группам:
 Владелец (Owner).
 Группа (Group). Hабор пользователей, разделяющих файл и нуждающихся в
типовом способе доступа к нему.
 Остальные (Univers).
13. Реализация файловой системы. Поддержка понятия логического блока диска,
связывания имени файла и блоков его данных, разделение файлов и управление
дисковым пространством.
Общая структура файловой системы
Нижний уровень - оборудование. Это в первую очередь магнитные диски с подвижными
головками. Шаг движения пакета головок является дискретным, и каждому положению
пакета головок логически соответствует цилиндр магнитного диска. Цилиндры делятся на
дорожки (треки), а каждая дорожка размечается на одно и то же количество блоков
(секторов) таким образом, что в каждый блок можно записать по максимуму одно и то же
число байтов. Следовательно, для обмена с магнитным диском на уровне аппаратуры
нужно указать номер цилиндра, номер поверхности, номер блока на соответствующей
дорожке и число байтов, которое нужно записать или прочитать от начала этого блока.
Таким образом, диски могут быть разбиты на блоки фиксированного размера и можно
непосредственно получить доступ к любому блоку (организовать прямой доступ к
файлам).
Непосредственно с устройствами (дисками) взаимодействует часть ОС, называемая
системой ввода-вывода. Система ввода-вывода предоставляет в распоряжение более
высокоуровневого компонента ОС - файловой системы - используемое дисковое
пространство в виде непрерывной последовательности блоков фиксированного
размера. Система ввода-вывода имеет дело с физическими блоками диска, которые
характеризуются адресом, например диск 2, цилиндр 75, сектор 11. Файловая система
имеет дело с логическими блоками, каждый из которых имеет номер (от 0 или 1 до N).
Размер логических блоков файла совпадает или является кратным размеру физического
блока диска и может быть задан равным размеру страницы виртуальной памяти,
поддерживаемой аппаратурой компьютера совместно с операционной системой.
В структуре системы управления файлами можно выделить базисную подсистему,
которая отвечает за выделение дискового пространства конкретным файлам, и более
высокоуровневую логическую подсистему, которая использует структуру дерева
директорий для предоставления модулю базисной подсистемы необходимой ей
информации, исходя из символического имени файла. Она также ответственна за
авторизацию доступа к файлам.
Стандартный запрос на открытие (open) или создание (create) файла поступает от
прикладной программы к логической подсистеме. Логическая подсистема, используя
структуру директорий, проверяет права доступа и вызывает базовую подсистему для
получения доступа к блокам файла. После этого файл считается открытым, он содержится
в таблице открытых файлов, и прикладная программа получает в свое распоряжение
дескриптор (или handle в системах Microsoft) этого файла. Дескриптор файла является
ссылкой на файл в таблице открытых файлов и используется в запросах прикладной
программы на чтение-запись из этого файла. Запись в таблице открытых файлов
указывает через систему выделения блоков диска на блоки данного файла. Если к
моменту открытия файл уже используется другим процессом, то есть содержится в
таблице открытых файлов, то после проверки прав доступа к файлу может быть
организован совместный доступ. При этом новому процессу также возвращается
дескриптор - ссылка на файл в таблице открытых файлов. Далее в тексте подробно
проанализирована работа наиболее важных системных вызовов.
Управление Дисковым пространством
Выделение непрерывной последовательности блоков. Файл храниться в виде
непрерывной последовательности блоков, характеризующийся адресом и длиной.
«+»: простота реализации (очевидно), хорошая производительность (так как для операции
чтения требуется только одна операция позиционирования. После этого не нужно искать
цилиндры и тратить время на ожидание поворота диска, поэтому данные могут
считываться с максимальной скоростью)
«-»: фрагментация (очевидно), невозможность записи, если размер файла не известен
(бывает, что размера диска достаточно для записи файла, однако из-за фрагментации, есть
вероятность, что не будет последовательного блока достаточной длины)
Пример: CD.
Связный список
Запись в директории содержит указатель на первый и последний блок файла. Каждый
блок содержит указатель на следующий блок.
«+»: отсутствие фрагментации, нет необходимости знать размер.
«-»: при доступе к файлу невозможно перейти к произвольному фрагменту, требуется
место для указателей, ненадежность (если потеряется хотя бы один указатель, то файл
невозможно будет прочитать, а дисковое пространство будет потеряно)
Таблица отображения файлов
Все указатели хранятся не в дисковых блоках, а в дисковой таблице файлов, называемой
FAT = File Allocation Table
«+»: надежность (очевидно)
«-»: для современных жестких дисков таблица получается очень большой
Индексные узлы
С каждым файлом связывается небольшая таблица – индексный узел. Запись в
директории относящаяся к файлу содержит адрес индексного узла.
Первые несколько адресов блоков хранятся непосредственно в узле. Для больших файлов
один из адресов индекса узла указывает на блок косвенной адресации, который содержит
адреса дополнительных блоков. Если этого недостаточно используется 2х или 3х
уровневая косвенная адресация.
Логические блоки:
Размер блока
Размер логического блока играет важную роль. В некоторых системах (Unix) он может
быть задан при форматировании диска. Небольшой размер блока будет приводить к тому,
что каждый файл будет содержать много блоков. Чтение блока осуществляется с
задержками на поиск и вращение, таким образом, файл из многих блоков будет читаться
медленно. Большие блоки обеспечивают более высокую скорость обмена с диском, но изза внутренней фрагментации (каждый файл занимает целое число блоков, и в среднем
половина последнего блока пропадает) снижается процент полезного дискового
пространства.
Для систем со страничной организацией памяти характерна сходная проблема с размером
страницы.
Проведенные исследования показали, что большинство файлов имеют небольшой размер.
Например, в Unix приблизительно 85% файлов имеют размер менее 8 Кбайт и 48% менее 1 Кбайта.
Можно также учесть, что в системах с виртуальной памятью желательно, чтобы единицей
пересылки диск-память была страница (наиболее распространенный размер страниц
памяти - 4 Кбайта). Отсюда обычный компромиссный выбор блока размером 512 байт, 1
Кбайт, 2 Кбайт, 4 Кбайт.
Структура файловой системы на диске
В начале раздела находится суперблок, содержащий общее описание файловой системы,
например:
 тип файловой системы;
 размер файловой системы в блоках;
 размер массива индексных узлов ;
 размер логического блока.
Описанные структуры данных создаются на диске в результате его форматирования
(например, утилитами format, makefs и др.). Их наличие позволяет обращаться к данным
на диске как к файловой системе, а не как к обычной последовательности блоков.
В файловых системах современных ОС для повышения устойчивости поддерживается
несколько копий суперблока. В некоторых версиях Unix суперблок включал также и
структуры данных, управляющие распределением дискового пространства, в результате
чего суперблок непрерывно подвергался модификации, что снижало надежность
файловой системы в целом. Выделение структур данных, описывающих дисковое
пространство, в отдельную часть является более правильным решением.
Массив индексных узлов (ilist) содержит список индексов, соответствующих файлам
данной файловой системы. Размер массива индексных узлов определяется
администратором при установке системы. Максимальное число файлов, которые могут
быть созданы в файловой системе, определяется числом доступных индексных узлов.
В блоках данных хранятся реальные данные файлов. Размер логического блока данных
может задаваться при форматировании файловой системы. Заполнение диска
содержательной информацией предполагает использование блоков хранения данных для
файлов директорий и обычных файлов и имеет следствием модификацию массива
индексных узлов и данных, описывающих пространство диска. Отдельно взятый блок
данных может принадлежать одному и только одному файлу в файловой системе.
14. Основные физические и логические принципы организации ввода-вывода в
вычислительных системах.
Физические принципы организации ввода-вывода
Общие сведения об архитектуре компьютера
В современных компьютерах выделяют как минимум три шины:
 шину данных, состоящую из линий данных и служащую для передачи
информации между процессором и памятью, процессором и устройствами вводавывода, памятью и внешними устройствами;
 адресную шину, состоящую из линий адреса и служащую для задания адреса
ячейки памяти или указания устройства ввода-вывода, участвующих в обмене
информацией;
 шину управления, состоящую из линий управления локальной магистралью и
линий ее состояния, определяющих поведение локальной магистрали . В
некоторых архитектурных решениях линии состояния выносятся из этой шины в
отдельную шину состояния.
Количество линий, входящих в состав шины, принято называть разрядностью ( шириной )
этой шины. Ширина адресной шины, например, определяет максимальный размер
оперативной памяти, которая может быть установлена в вычислительной системе.
Ширина шины данных определяет максимальный объем информации, которая за один раз
может быть получена или передана по этой шине.
Операции обмена информацией осуществляются при одновременном участии всех шин.
Рассмотрим, к примеру, действия, которые должны быть выполнены для передачи
информации из процессора в память. В простейшем случае необходимо выполнить три
действия.
 На адресной шине процессор должен выставить сигналы, соответствующие
адресу ячейки памяти, в которую будет осуществляться передача информации.
 На шину данных процессор должен выставить сигналы, соответствующие
информации, которая должна быть записана в память.
 После выполнения действий 1 и 2 на шину управления выставляются сигналы,
соответствующие операции записи и работе с памятью, что приведет к
занесению необходимой информации по нужному адресу.
Современные вычислительные системы могут иметь разнообразную архитектуру,
множество шин и магистралей, мосты для перехода информации от одной шины к другой
и т. п. Для нас сейчас важными являются только следующие моменты.
 Устройства ввода-вывода подключаются к системе через порты.
 Могут существовать два адресных пространства: пространство памяти и
пространство ввода-вывода.
 Порты, как правило, отображаются в адресное пространство ввода-вывода и иногда
– непосредственно в адресное пространство памяти.
 Использование того или иного адресного пространства определяется типом
команды, выполняемой процессором, или типом ее операндов.
Физическим управлением устройством ввода-вывода, передачей информации через порт и
выставлением некоторых сигналов на магистрали занимается контроллер устройства.
Структура контроллера устройства
Контроллеры устройств ввода-вывода весьма различны как по своему внутреннему
строению, так и по исполнению (от одной микросхемы до специализированной
вычислительной системы со своим процессором, памятью и т. д.), поскольку им
приходится управлять совершенно разными приборами. Не вдаваясь в детали этих
различий, мы выделим некоторые общие черты контроллеров, необходимые им для
взаимодействия с вычислительной системой. Обычно каждый контроллер имеет по
крайней мере четыре внутренних регистра, называемых регистрами состояния ,
управления, входных данных и выходных данных. Для доступа к содержимому этих
регистров вычислительная система может использовать один или несколько портов, что
для нас не существенно. Для простоты изложения будем считать, что каждому регистру
соответствует свой порт.
Регистр состояния содержит биты, значение которых определяется состоянием
устройства ввода-вывода и которые доступны только для чтения вычислительной
системой. Эти биты индицируют завершение выполнения текущей команды на
устройстве ( бит занятости ), наличие очередного данного в регистре выходных данных (
бит готовности данных ), возникновение ошибки при выполнении команды ( бит
ошибки ) и т. д.
Регистр управления получает данные, которые записываются вычислительной системой
для инициализации устройства ввода-вывода или выполнения очередной команды, а
также изменения режима работы устройства. Часть битов в этом регистре может быть
отведена под код выполняемой команды, часть битов будет кодировать режим работы
устройства, бит готовности команды свидетельствует о том, что можно приступить к ее
выполнению.
Регистр выходных данных служит для помещения в него данных для чтения
вычислительной системой, а регистр входных данных предназначен для помещения в
него информации, которая должна быть выведена на устройство. Обычно емкость этих
регистров не превышает ширину линии данных (а чаще всего меньше ее), хотя некоторые
контроллеры могут использовать в качестве регистров очередь FIFO для буферизации
поступающей информации.
Опрос устройств и прерывания.
Построив модель контроллера и представляя себе, что скрывается за словами "прочитать
информацию из порта" и "записать информацию в порт", мы готовы к рассмотрению
процесса взаимодействия устройства и процессора. Как и в предыдущих случаях,
примером нам послужит команда записи, теперь уже записи или вывода данных на
внешнее устройство. В нашей модели для вывода информации, помещающейся в регистр
входных данных, без проверки успешности вывода процессор и контроллер должны
связываться следующим образом.
 Процессор в цикле читает информацию из порта регистра состояний и проверяет
значение бита занятости. Если бит занятости установлен, то это означает, что
устройство еще не завершило предыдущую операцию, и процессор уходит на новую
итерацию цикла. Если бит занятости сброшен, то устройство готово к выполнению
новой операции, и процессор переходит на следующий шаг.
 Процессор записывает код команды вывода в порт регистра управления.
 Процессор записывает данные в порт регистра входных данных.
 Процессор устанавливает бит готовности команды. В следующих шагах процессор
не задействован.
 Когда контроллер замечает, что бит готовности команды установлен, он
устанавливает бит занятости.
 Контроллер анализирует код команды в регистре управления и обнаруживает, что
это команда вывода. Он берет данные из регистра входных данных и инициирует
выполнение команды.
 После завершения операции контроллер обнуляет бит готовности команды.
 При успешном завершении операции контроллер обнуляет бит ошибки в регистре
состояния, при неудачном завершении команды – устанавливает его.
 Контроллер сбрасывает бит занятости.
При необходимости вывода новой порции информации все эти шаги повторяются. Если
процессор интересует, корректно или некорректно была выведена информация, то после
шага 4 он должен в цикле считывать информацию из порта регистра состояний до тех
пор, пока не будет сброшен бит занятости устройства, после чего проанализировать
состояние бита ошибки.
Как видим, на первом шаге (и, возможно, после шага 4) процессор ожидает освобождения
устройства, непрерывно опрашивая значение бита занятости. Такой способ
взаимодействия процессора и контроллера получил название polling или, в русском
переводе, способа опроса устройств. Если скорости работы процессора и устройства
ввода-вывода примерно равны, то это не приводит к существенному уменьшению
полезной работы, совершаемой процессором. Если же скорость работы устройства
существенно меньше скорости процессора, то указанная техника резко снижает
производительность системы и необходимо применять другой архитектурный подход.
Для того чтобы процессор не дожидался состояния готовности устройства ввода-вывода в
цикле, а мог выполнять в это время другую работу, необходимо, чтобы устройство само
умело сигнализировать процессору о своей готовности. Технический механизм, который
позволяет внешним устройствам оповещать процессор о завершении команды вывода или
команды ввода, получил название механизма прерываний.
Логические принципы организации ввода-вывода
Структура системы ввода-вывода
В области технического обеспечения удалось выделить несколько основных принципов
взаимодействия внешних устройств с вычислительной системой, т. е. создать единый
интерфейс для их подключения, возложив все специфические действия на контроллеры
самих устройств. Тем самым конструкторы вычислительных систем переложили все
хлопоты, связанные с подключением внешней аппаратуры, на разработчиков самой
аппаратуры, заставляя их придерживаться определенного стандарта.
Похожий подход оказался продуктивным и в области программного подключения
устройств ввода-вывода. Мы можем разделить устройства на относительно небольшое
число типов, отличающихся по набору операций, которые могут быть ими выполнены,
считая все остальные различия несущественными. Мы можем затем специфицировать
интерфейсы между ядром операционной системы, осуществляющим некоторую общую
политику ввода-вывода, и программными частями, непосредственно управляющими
устройствами, для каждого из таких типов. Более того, разработчики операционных
систем получают возможность освободиться от написания и тестирования драйверов,
передав эту деятельность производителям самих внешних устройств. Фактически мы
приходим к использованию принципа уровневого или слоеного построения системы
управления вводом-выводом для операционной системы.
Два нижних уровня этой слоеной системы составляет hardware: сами устройства,
непосредственно выполняющие операции, и их контроллеры, служащие для организации
совместной работы устройств и остальной вычислительной системы. Следующий уровень
составляют драйверы устройств ввода-вывода, скрывающие от разработчиков
операционных систем особенности функционирования конкретных приборов и
обеспечивающие четко определенный интерфейс между hardware и вышележащим
уровнем – уровнем базовой подсистемы ввода-вывода, которая, в свою очередь,
предоставляет механизм взаимодействия между драйверами и программной частью
вычислительной системы в целом.
15. Особенности взаимодействия процессов, выполняющихся на разных
операционных системах. Функции сетевых частей операционных систем.
Все цели объединения компьютеров в вычислительные сети не могут быть достигнуты
без организации взаимодействия процессов на различных вычислительных системах. Будь
то доступ к разделяемым ресурсам или общение пользователей через сеть – в основе всего
этого лежит взаимодействие удаленных процессов, т. е. процессов, которые находятся под
управлением физически разных операционных систем.
1. Взаимодействие удаленных процессов принципиально отличается от ранее
рассмотренных случаев. Общей памяти у различных компьютеров физически нет.
Удаленные процессы могут обмениваться информацией, только передавая друг другу
пакеты данных определенного формата (в виде последовательностей электрических или
электромагнитных сигналов, включая световые) через некоторый физический канал
связи или несколько таких каналов, соединяющих компьютеры. Поэтому в основе всех
средств взаимодействия удаленных процессов лежит передача структурированных
пакетов информации или сообщений.
2. При взаимодействии локальных процессов и процесс–отправитель информации, и
процесс-получатель функционируют под управлением одной и той же операционной
системы. При организации сети можно обеспечить прямую связь между всеми
вычислительными комплексами, соединив каждый из них со всеми остальными
посредством прямых физических линий связи или подключив все комплексы к общей
шине (по примеру шин данных и адреса в компьютере). Однако такая сетевая топология
не всегда возможна по ряду физических и финансовых причин. Поэтому во многих
случаях информация между удаленными процессами в сети передается не напрямую, а
через ряд процессов-посредников, "обитающих" на вычислительных комплексах, не
являющихся компьютерами отправителя и получателя и работающих под управлением
собственных операционных систем. Однако и при отсутствии процессов-посредников
удаленные процесс-отправитель и процесс-получатель функционируют под управлением
различных операционных систем, часто имеющих принципиально разное строение.
3. Протяженные сетевые линии связи подвержены разнообразным физическим
воздействиям, приводящим к искажению передаваемых по ним физических сигналов
(помехи в эфире) или к полному отказу линий (мыши съели кабель). Даже при
отсутствии внешних помех передаваемый сигнал затухает по мере удаления от точки
отправления, приближаясь по интенсивности к внутренним шумам линий связи.
Промежуточные вычислительные комплексы сети, участвующие в доставке
информации, не застрахованы от повреждений или внезапной перезагрузки
операционной системы. Поэтому вычислительные сети должны организовываться
исходя из предпосылок ненадежности доставки физических пакетов информации.
4. При организации взаимодействия удаленных процессов участники этого
взаимодействия должны иметь уникальные адреса в рамках всей сети.
5. Физическая линия связи, соединяющая несколько вычислительных комплексов,
является разделяемым ресурсом для всех процессов комплексов, которые хотят ее
использовать. Если два процесса попытаются одновременно передать пакеты
информации по одной и той же линии, то в результате интерференции физических
сигналов, представляющих эти пакеты, произойдет взаимное искажение передаваемых
данных. Для того чтобы избежать возникновения такой ситуации (race condition!) и
обеспечить эффективную совместную работу вычислительных систем, должны
выполняться условия взаимоисключения, прогресса и ограниченного ожидания при
использовании общей линии связи, но уже не на уровне отдельных процессов
операционных систем, а на уровне различных вычислительных комплексов в целом.
Формальный перечень правил, определяющих последовательность и формат сообщений,
которыми обмениваются сетевые компоненты различных вычислительных систем, лежащие на
одном уровне, мы и будем называть сетевым протоколом .
Всю совокупность вертикальных и горизонтальных протоколов (интерфейсов и сетевых
протоколов ) в сетевых системах, построенных по "слоеному" принципу, достаточную для
организации взаимодействия удаленных процессов, принято называть семейством протоколов
или стеком протоколов. Сети, построенные на основе разных стеков протоколов, могут быть
объединены между собой с использованием вычислительных устройств, осуществляющих
трансляцию из одного стека протоколов в другой, причем на различных уровнях слоеной модели
Уровни OSI:
Уровень 1 – физический. Этот уровень связан с работой hardware. На нем определяются
физические аспекты передачи информации по линиям связи, такие как: напряжения, частоты,
природа передающей среды, способ передачи двоичной информации по физическому носителю,
вплоть до размеров и формы используемых разъемов. В компьютерах за поддержку физического
уровня обычно отвечает сетевой адаптер.
Уровень 2 – канальный. Этот уровень отвечает за передачу данных по физическому уровню без
искажений между непосредственно связанными узлами сети. На нем формируются физические
пакеты данных для реальной доставки по физическому уровню . Протоколы канального уровня
реализуются совместно сетевыми адаптерами и их драйверами (понятие драйвера
рассматривалось в лекции 13).
Уровень 3 – сетевой. Сетевой уровень несет ответственность за доставку информации от узлаотправителя к узлу-получателю. На этом уровне частично решаются вопросы адресации,
осуществляется выбор маршрутов следования пакетов данных, решаются вопросы стыковки
сетей, а также управление скоростью передачи информации для предотвращения перегрузок в
сети.
Уровень 4 – транспортный. Регламентирует передачу данных между удаленными процессами.
Обеспечивает доставку информации вышележащим уровням с необходимой степенью
надежности, компенсируя, быть может, ненадежность нижележащих уровней, связанную с
искажением и потерей данных или доставкой пакетов в неправильном порядке. Наряду с
сетевым уровнем может управлять скоростью передачи данных и частично решать проблемы
адресации.
Уровень 5 – сеансовый. Координирует взаимодействие связывающихся процессов. Основная
задача – предоставление средств синхронизации взаимодействующих процессов. Такие средства
синхронизации позволяют создавать контрольные точки при передаче больших объемов
информации. В случае сбоя в работе сети передачу данных можно возобновить с последней
контрольной точки, а не начинать заново.
Уровень 6 – уровень представления данных. Отвечает за форму представления данных,
перекодирует текстовую и графическую информацию из одного формата в другой, обеспечивает
ее сжатие и распаковку, шифрование и декодирование.
Уровень 7 – прикладной. Служит для организации интерфейса между пользователем и сетью. На
этом уровне реализуются такие сервисы, как удаленная передача данных, удаленный
терминальный доступ, почтовая служба и работа во Всемирной паутине (Web-браузеры).
Организация взаимодействия удаленных процессов требует от сетевых частей операционных
систем поддержки определенных протоколов. Сетевые средства связи обычно строятся по
"слоеному" принципу (уровни OSI). Формальный перечень правил, определяющих
последовательность и формат сообщений, которыми обмениваются сетевые компоненты
различных вычислительных систем, лежащие на одном уровне, называется сетевым протоколом.
Каждый уровень слоеной системы может взаимодействовать непосредственно только со своими
вертикальными соседями, руководствуясь четко закрепленными соглашениями – вертикальными
протоколами или интерфейсами. Вся совокупность интерфейсов и сетевых протоколов в сетевых
системах, построенных по слоеному принципу, достаточная для организации взаимодействия
удаленных процессов, образует семейство протоколов или стек протоколов.
16. Защитные механизмы операционных систем. Организация идентификации и
аутентификации, авторизации и аудита.
Идентификация и аутентификация
Наиболее распространенным способом контроля доступа является процедура
регистрации. Обычно каждый пользователь в системе имеет уникальный идентификатор.
Идентификаторы пользователей применяются с той же целью, что и идентификаторы
любых других объектов, файлов, процессов. Идентификация заключается в сообщении
пользователем своего идентификатора. Для того чтобы установить, что пользователь
именно тот, за кого себя выдает, то есть что именно ему принадлежит введенный
идентификатор, в информационных системах предусмотрена процедура аутентификации
(authentication, опознавание, в переводе с латинского означает "установление
подлинности"), задача которой - предотвращение доступа к системе нежелательных лиц.
Обычно аутентификация базируется на одном или более из трех пунктов:
 то, чем пользователь владеет (ключ или магнитная карта);
 то, что пользователь знает (пароль);
 атрибуты пользователя (отпечатки пальцев, подпись, голос).
Пароли, уязвимость паролей
Наиболее простой подход к аутентификации - применение пользовательского пароля.
Когда пользователь идентифицирует себя при помощи уникального идентификатора или
имени, у него запрашивается пароль. Если пароль, сообщенный пользователем, совпадает
с паролем, хранящимся в системе, система предполагает, что пользователь легитимен.
Пароли часто используются для защиты объектов в компьютерной системе в отсутствие
более сложных схем защиты.
Недостатки паролей связаны с тем, что трудно сохранить баланс между удобством пароля
для пользователя и его надежностью. Пароли могут быть угаданы, случайно показаны или
нелегально переданы авторизованным пользователем неавторизованному.
Есть два общих способа угадать пароль. Один связан со сбором информации о
пользователе. Люди обычно используют в качестве паролей очевидную информацию
(скажем, имена животных или номерные знаки автомобилей).
Другой способ - попытаться перебрать все наиболее вероятные комбинации букв, чисел и
знаков пунктуации (атака по словарю).
Несмотря на все это, пароли распространены, поскольку они удобны и легко реализуемы.
Шифрование пароля
Для хранения секретного списка паролей на диске во многих ОС используется
криптография. Система задействует одностороннюю функцию, которую просто
вычислить, но для которой чрезвычайно трудно (разработчики надеются, что невозможно)
подобрать обратную функцию.
Хранятся только кодированные пароли. В процессе аутентификации представленный
пользователем пароль кодируется и сравнивается с хранящимися на диске. Таким
образом, файл паролей нет необходимости держать в секрете.
Авторизация
После успешной регистрации система должна осуществлять авторизацию (authorization) предоставление субъекту прав на доступ к объекту. Средства авторизации контролируют
доступ легальных пользователей к ресурсам системы, предоставляя каждому из них
именно те права, которые были определены администратором, а также осуществляют
контроль возможности выполнения пользователем различных системных функций.
Система контроля базируется на общей модели, называемой матрицей доступа.
Различают дискреционный (избирательный) способ управления доступом и полномочный
(мандатный).
При дискреционном доступе, подробно рассмотренном ниже, определенные операции
над конкретным ресурсом запрещаются или разрешаются субъектам или группам
субъектов. С концептуальной точки зрения текущее состояние прав доступа при
дискреционном управлении описывается матрицей, в строках которой перечислены
субъекты, в столбцах - объекты, а в ячейках - операции, которые субъект может
выполнить над объектом.
Полномочный подход заключается в том, что все объекты могут иметь уровни
секретности, а все субъекты делятся на группы, образующие иерархию в соответствии с
уровнем допуска к информации. Иногда это называют моделью многоуровневой
безопасности, которая должна обеспечивать выполнение следующих правил.
 Простое свойство секретности. Субъект может читать информацию только из объекта,
уровень секретности которого не выше уровня секретности субъекта. Генерал читает
документы лейтенанта, но не наоборот.
 *-свойство. Субъект может записывать информацию в объекты только своего уровня
или более высоких уровней секретности. Генерал не может случайно разгласить нижним
чинам секретную информацию.
Большинство операционных систем реализуют именно дискреционное управление
доступом.
Матрица доступа - Модель безопасности, в которой по столбцам хранится:
 Список прав доступа
 Мандаты возможностей(список допустимых операций)
 Другие способы контроля доступа
Аудит системы защиты
Аудит, таким образом, заключается в регистрации специальных данных о различных типах
событий, происходящих в системе и так или иначе влияющих на состояние безопасности
компьютерной системы. К числу таких событий обычно причисляют следующие:
 вход или выход из системы; операции с файлами (открыть, закрыть, переименовать, удалить);
обращение к удаленной системе;
 смена привилегий или иных атрибутов безопасности (режима доступа, уровня
благонадежности пользователя и т. п.).
Если фиксировать все события, объем регистрационной информации, скорее всего, будет расти
слишком быстро, а ее эффективный анализ станет невозможным. Следует предусматривать
наличие средств выборочного протоколирования как в отношении пользователей, когда
слежение осуществляется только за подозрительными личностями, так и в отношении событий.
Слежка важна в первую очередь как профилактическое средство. Можно надеяться, что многие
воздержатся от нарушений безопасности, зная, что их действия фиксируются.
Помимо протоколирования, можно периодически сканировать систему на наличие слабых мест в
системе безопасности. Такое сканирование может проверить разнообразные аспекты системы:
 короткие или легкие пароли;
 неавторизованные set-uid программы, если система поддерживает этот механизм;
 неавторизованные программы в системных директориях;
 долго выполняющиеся программы;
 нелогичная защита как пользовательских, так и системных директорий и файлов.
Примером нелогичной защиты может быть файл, который запрещено читать его автору,
но в который разрешено записывать информацию постороннему пользователю;
 потенциально опасные списки поиска файлов, которые могут привести к запуску
"троянского коня";
изменения в системных программах, обнаруженные при помощи контрольных сумм.
17. История семейства операционных систем UNIX/Linux. Генеалогия семейства
операционных систем и некоторые известные версии UNIX. Операционные системы
фирмы Microsoft. Отличия семейства UNIX/Linux от операционных систем Windows.
История Unix
Операционная система UNIX была создана еще до эры коммерческого софта. Она
писалась инженерами, как система "для себя". Поэтому в нее были заложены передовые
на то время концепции. В дальнейшем своем развитии при добавлении новых черт,
обычно считалось, что делать нужно "правильно". Т.е. например если нужно было
выбирать из двух решений, одно из которых было с инженерной точки зрения
"неправильным", например повышало производительность сегодня, но могло принести
затруднения в дальнейшем, как правило, такое решение отвергалось и выбиралось
"правильное" решение, пусть и с определенной потерей производительности.
Первые версии UNIX были написаны на Ассеблере, затем система была переписана на
СИ. Это дало системе уникальную переносимость. На PC UNIX был портирован, а точнее
заново написан (Linux) сразу, как только развитие PC, а точнее выпуск PC на процессоре
i386, позволило это сделать.
В 1985 году стартовал проект POSIX. Это стандарт на интерфейсы UNIX-подобных ОС.
Во многом благодаря наличию такого стандарта, так быстро смог появится на свет и
достигнуть зрелости Linux — свободная воплощение UNIX.
Развитие интернета с самого начала и до нашего времени неразрывно связано с серверами
под управлением ОС UNIX. Сначала с коммерческими, а теперь все больше и больше со
свободными.
С точки зрения коммерциализации развитие UNIX можно разделить на три этапа.
 Некоммерческое распространение в университетах.
 Распространение коммерческих UNIX систем.
 Появление свободных реализаций (Linux, FreeBSD) и вытеснение коммерческих
систем (настоящий момент).
До появления системы X Window System UNIX была системой с текстовым интерфейсом,
затем добавился графический, но традиционно текстовый интерфейс сохраняет важное
значение.
Очень важно то, что UNIX с самого начала был многозадачной и многопользовательской
системой. Т.е. на одной машине могут работать сразу несколько пользователей, и
выполняться несколько программ одновременно.
Фирменной чертой всех UNIX-подобных ОС была и остается надежность.
Табличка:
Наиболее известные ОС:
Ubuntu, Gentoo, Android, RedHat, Solaris, FreeBSD
OC фирмы Microsoft:
Windows 3.11, Windows 95, Windows 98, Windows ME, Windows 4.0, Windows 2000,
Windows 2003, Windows Xp, Windows Vista, Windows 2008, Windows 7, Windows 2008 R2,
Windows 8
Сравнение
UNIX. Поскольку UNIX разрабатывалась инженерами и для инженеров, в ее основу была
положена концепция toolbox (ящик с инструментами). Что это значит? Это значит, что
при создании софта и встроенных утилит для UNIX не делали универсальные программы,
каждая из которых выполняла бы внутри себя все, необходимые пользователю действия, а
для каждой небольшой задачи создавалась своя утилита, которая выполняла свою задачу,
только одну, но делала это хорошо. Дело пользователя было при помощи набора этих
утилит выполнить операции, которые ему нужно сделать.
При этом из этого набора утилит можно составлять цепочки и последовательности
действий, что позволяет легко автоматизировать рутинные, часто повторяющиеся
операции.
Для того, чтобы утилиты могли обмениваться между собой результатами своей работы, в
качестве носителя информации был выбран текстовый файл. Для обмена информацией
между утилитами были изобретены "pipes" (трубы). При помощи "труб" информация с
выхода одной команды может быть передана на вход второй, та ее обрабатывает, выдает
свою информацию на выход, которая может быть передана на вход третьей и так далее.
В общем, в результате UNIX позволяет пользователю легко создавать простые
программные комплексы, выполняющие повторяющиеся действия как по команде
пользователя, так и в автономном режиме.
Такой подход имеет как плюсы, так и недостатки. С одной стороны он дает больший
контроль над системой, гибкость в настройке, но при этом повышается порог вхождения в
систему, или говоря простыми словами, прежде, чем что нибудь сделать, как правило,
нужно изучить основы.
Windows
В Windows доминирует другая концепция. Эта концепция — максимально облегчить
вхождение пользователя в задачу. Программы в Windows как правило большие, на каждое
действие есть пункт в меню или иконка. В системы программы связываются как правило с
большим трудом.
Ухудшает ситуацию о построением комплексов на базе Windows то, что большинство
программ — коммерческие и используют свои, бинарные и как правило закрытые
форматы данных и файлов. Такой подход превращает компьютер в устройство, которое
может выполнять ограниченный изготовителем ПО набор функций, в пределе в этакий
своеобразный "тостер", который выполняет только то, что задумал его изготовитель.
Плюс такого подхода — легкость вхождения неподготовленного пользователя. Минус —
то, что обманутый кажущейся легкостью пользователь вообще не хочет ничему учиться и
не выполнять необходимых действий. На поводу идут и производители софта. Это одна из
причин такого обилия документов отформатированных пробелами, пренебрежения
безопасностью и как следствие вирусных эпидемий.
18. Основные понятия, связанные с интерфейсом операционных систем.
Графический интерфейс пользователя в семействе UNIX/Linux.
Интерфейс в широком смысле – определенная стандартами граница между
взаимодействующими независимыми объектами. Интерфейс задает параметры,
процедуры и характеристики взаимодействия объектов.
1. Интерфейс командной строки
2. WIMP-интерфейс (Window – окно, Image – образ, Menu – меню, Pointer –
указатель).
3. SILK-интерфейс (Speech – речь, Image – образ, Language – язык, Knowledge –
знание).
Первые операционные системы фирмы Microsoft для персональных компьютеров IBM PC
(они назывались MS DOS) также поддерживали командный режим, схожий с другими
системами. Строка, в которой набирались команды, была схожей с приведенными выше.
Сегодня командный режим операционных систем обеспечивается эмуляторами cmd.exe
(для 32-х разрядного режима) или command.com (для 16-х разрядного режима). В
графическом режиме семейства UNIX/Linux командная строка эмулируется программой
Терминал (xterm).
WIMP-интерфейс (Window – окно, Image – образ, Menu – меню, Pointer – указатель).
Характерной особенностью этого вида интерфейса является то, что диалог с
пользователем ведется не с помощью команд, а с помощью графических образов – меню,
окон, других элементов. Хотя и в этом интерфейсе подаются команды машине, но это
делается "опосредованно", через графические образы. Этот вид интерфейса реализован на
двух уровнях технологий: простой графический интерфейс и "чистый" WIMP-интерфейс.
SILK-интерфейс (Speech – речь, Image – образ, Language – язык, Knowledge – знание).
Этот вид интерфейса наиболее приближен к обычной, человеческой форме общения. В
рамках этого интерфейса идет обычный "разговор" человека и компьютера. При этом
компьютер находит для себя команды, анализируя человеческую речь и находя в ней
ключевые фразы. Результат выполнения команд он также преобразует в понятную
человеку форму. Этот вид интерфейса наиболее требователен к аппаратным ресурсам
компьютера, и поэтому его применяют в основном для военных целей.
Первое появление графического интерфейса следует связывать с фирмой XEROX.
Графический интерфейс пользователя в семействе UNIX/Linux
1987 году ряд фирм решили создать единый стандарт оконного интерфейса для UNIX и
для этого основали X Consortium ("Консорциум X"). В нем приняли участие IBM, DEC,
HP и другие компании. Этот проект возник в противовес объединению AT&T и Sun. С
1997 X Consortium преобразовалась в "Открытую группу Х" (X for the Open Group) [16].
Информацию о деятельности этой организации (ее современное имя X.Org Foundation)
можно получить в Интернете.
Трехмерный графический интерфейс появился сравнительно недавно. Но самые
последние версии популярных операционных систем реализуют его. Это относится к
разновидностям Linux, Mac OS и версий Microsoft начиная с Vista.
Основные понятия системы X Window. X Window system (или просто X Window, а
теперь часто и Х) – графическая среда пользователя, поддерживающая одновременное
выполнение многих программ в сети. В основе X Window – библиотека графических
программ, используемых для создания GUI.
Достоинством системы X Window является ее мобильность (она не связана с конкретной
операционной системой и не рассчитана на специфическое техническое обеспечение).
Работа Х-системы основана на специфической модели клиент/сервер.
В традиционной модели "клиент-сервер" с пользователем взаимодействует клиентская
часть. В системе же X Window с пользователем взаимодействует X-сервер. Он отвечает за
вывод информации на экран пользователя и получение им команд. Такой сервер как бы
"владеет" аппаратурой пользователя (называемой X-терминал) и представляет этот ресурс
программам – клиентам. Именно они формируют изображение, выводимое на экране. При
инициализации X Window system первым шагом будет загрузка X-сервера. Об этом
можно узнать по появлению на сером экране в центре указателя мыши в виде крестика.
Но для окончательного вывода на экран сформированного программой клиентом
изображения одного X-сервера мало. Для этого еще необходим менеджер окон.
Таким образом, система X Window представляет собой комплекс взаимодействующих
компонент.
X Window в Linux
Графический интерфейс семейства UNIX/Linux похож на интерфейс других систем, но
имеет отличия. Он поддерживает метафору рабочего стола. Но в отличие от некоторых
систем имеет нескольких рабочих столов, которые иногда называются еще и "рабочие
места". Их количество можно изменять. Хотя графический UNIX зародился раньше, чем у
других операционных систем, сейчас работа с использованием GUI аналогична у Linux и
Windows. Пользователь работает с приложением в окне, имеющем прямоугольную форму.
Последний содержит стандартные элементы – строка заголовка, главное меню, панели
инструментов и т.д. В X Windows управление окнами приложений, их элементами
выполняет компонент, называемый "менеджер окон" (иногда используют название
"оконные менеджеры" или "диспетчер окон"). Может быть задействовано несколько
диспетчеров окон. Но сегодня пользователи редко выбирают менеджеры окон. Им
представляются интегрированные графические среды. Две наиболее распространенные из
них – KDE и GNOME – будут коротко рассмотрены далее. Но сначала приведем список
инструментов пользователя. На странице Википедии "Менеджер окон X Window System"
приводятся такие списки. Интерфейс пользователя в UNIX-подобных системах:
1.
среды рабочего стола: CDE, EDE, etoile, GNOME, JDS, KDE, LXDE, Mezzo,
OpenWindows, ROX, Xfce, Xpde;
2.
оконные менеджеры: AfterStep, Awesome, Blackbox, CTWM, dwm, Enlightenment,
Fluxbox, FVWM, IceWM, JWM, Openbox, Sawfish, twm, Window Maker, wmii;
3.
командные оболочки: ash, Bash, BusyBox, csh, dash, es shell, fish, ksh, psh, rc, rsh,
Sash, Scsh, sh, tcsh, Thompson shell, zsh и прочие.
Приводятся три категории: среды рабочего стола, оконные менеджеры и командные
оболочки. Последние обеспечивают режим командной строки. Как видим, их много.
Название первой образовано от английского shell (оболочка). В разных вариантах Linux
распространена оболочка, имя которой Bash образовано от Born again shell (разработана
Born).
19. История X Window system. Основные понятия системы X Window. X Window в
Linux. Интегрированная графическая среда KDE. Интегрированная графическая
среда GNOME.
Графический интерфейс пользователя в семействе UNIX/Linux
1987 году ряд фирм решили создать единый стандарт оконного интерфейса для UNIX и
для этого основали X Consortium ("Консорциум X"). В нем приняли участие IBM, DEC,
HP и другие компании. Этот проект возник в противовес объединению AT&T и Sun. С
1997 X Consortium преобразовалась в "Открытую группу Х" (X for the Open Group) [16].
Информацию о деятельности этой организации (ее современное имя X.Org Foundation)
можно получить в Интернете.
Трехмерный графический интерфейс появился сравнительно недавно. Но самые
последние версии популярных операционных систем реализуют его. Это относится к
разновидностям Linux, Mac OS и версий Microsoft начиная с Vista.
Основные понятия системы X Window
X Window system (или просто X Window, а теперь часто и Х) – графическая среда
пользователя, поддерживающая одновременное выполнение многих программ в сети. В
основе X Window – библиотека графических программ, используемых для создания GUI.
Достоинством системы X Window является ее мобильность (она не связана с конкретной
операционной системой и не рассчитана на специфическое техническое обеспечение).
Работа Х-системы основана на специфической модели клиент/сервер.
В традиционной модели "клиент-сервер" с пользователем взаимодействует клиентская
часть. В системе же X Window с пользователем взаимодействует X-сервер. Он отвечает за
вывод информации на экран пользователя и получение им команд. Такой сервер как бы
"владеет" аппаратурой пользователя (называемой X-терминал) и представляет этот ресурс
программам – клиентам. Именно они формируют изображение, выводимое на экране. При
инициализации X Window system первым шагом будет загрузка X-сервера. Об этом
можно узнать по появлению на сером экране в центре указателя мыши в виде крестика.
Но для окончательного вывода на экран сформированного программой клиентом
изображения одного X-сервера мало. Для этого еще необходим менеджер окон.
Таким образом, система X Window представляет собой комплекс взаимодействующих
компонент.
X Window в Linux
Графический интерфейс семейства UNIX/Linux похож на интерфейс других систем, но
имеет отличия. Он поддерживает метафору рабочего стола. Но в отличие от некоторых
систем имеет нескольких рабочих столов, которые иногда называются еще и "рабочие
места". Их количество можно изменять. Хотя графический UNIX зародился раньше, чем у
других операционных систем, сейчас работа с использованием GUI аналогична у Linux и
Windows. Пользователь работает с приложением в окне, имеющем прямоугольную форму.
Последний содержит стандартные элементы – строка заголовка, главное меню, панели
инструментов и т.д.
В X Windows управление окнами приложений, их элементами выполняет компонент,
называемый "менеджер окон" (иногда используют название "оконные менеджеры" или
"диспетчер окон"). Может быть задействовано несколько диспетчеров окон.
Но сегодня пользователи редко выбирают менеджеры окон. Им представляются
интегрированные графические среды. Две наиболее распространенные из них – KDE и
GNOME – будут коротко рассмотрены далее. Но сначала приведем список инструментов
пользователя. На странице Википедии "Менеджер окон X Window System" приводятся
такие списки. Интерфейс пользователя в UNIX-подобных системах:
 среды рабочего стола: CDE, EDE, etoile, GNOME, JDS, KDE, LXDE, Mezzo,
OpenWindows, ROX, Xfce, Xpde;
 оконные менеджеры: AfterStep, Awesome, Blackbox, CTWM, dwm, Enlightenment,
Fluxbox, FVWM, IceWM, JWM, Openbox, Sawfish, twm, Window Maker, wmii;
 командные оболочки: ash, Bash, BusyBox, csh, dash, es shell, fish, ksh, psh, rc, rsh, Sash,
Scsh, sh, tcsh, Thompson shell, zsh и прочие.
Приводятся три категории: среды рабочего стола, оконные менеджеры и командные
оболочки. Последние обеспечивают режим командной строки. Как видим, их много.
Название первой образовано от английского shell (оболочка). В разных вариантах Linux
распространена оболочка, имя которой Bash образовано от Born again shell (разработана
Born).
Интегрированная графическая среда KDE
Часто графическую среду KDE называют наиболее распространенной. Проект был
основан в октябре 1996 года студентом Маттиасом Эттрихом, а в июле 1998 года
выпущена версия 1.0. Сокращение образовано от K Desktop Environment. Она строится на
основе инструментария разработки пользовательского интерфейса с именем Qt.
Интересной особенностью последнего является свойство кроссплатформенности. Хотя эта
среда разрабатывается для UNIX-подобных систем, но возможен ее запуск и на других
платформах, например, с использованием cygwin под Microsoft Windows.
KDE включает в себя набор тесно взаимосвязанных программ пользователя. В его рамках
разрабатывается полнофункциональный офисный пакет KOffice, а также интегрированная
среда разработки KDevelop.
В 2010 году начат выпуск версии 4.0, содержащей следующие основные нововведения:
 переход на четвертую версию библиотеки элементов интерфейса Qt;
 новый стиль оформления – Oxygen;
 новый мультимедийный интерфейс API – Phonon;
 объединение Superkaramba, рабочего стола и панели Kicker в одно приложение –
Plasma.
Эта версия обеспечивает новые технологии не только для UNIX, но и для Microsoft
Windows и Mac OS X. Узнать компьютер, на котором работает KDE, можно по его
талисману – дракончику.
Интегрированная графическая среда GNOME
Название GNOME является акронимом от английского GNU Network Object Model
Environment ("сетевая объектная среда GNU"). В рамках проекта GNOME создаются две
вещи – рабочая среда GNOME, простая в использовании и привлекательная на вид среда
рабочего стола; а также платформа разработки GNOME – расширяемая среда для
создания приложений, тесно интегрируемых с рабочим столом.
Его история начинается с 1997 года и связана с именами Мигеля де Иказа и Федерико
Мена. Основной целью было создать полностью свободную рабочую среду для
операционной системы GNU/Linux [68], поскольку основной инструмент разработки Qt –
другой интегрированной среды KDE – не был лицензирован на условиях GNU GPL.
Отметим, что эти проблемы были ликвидированы в версии Qt 2.2 в 2000 году.
Среда рабочего стола GNOME была построена на основе GTK+, созданной при
разработке мощного графического пакета GIMP. Кроме того, используется еще много
различных технологий и библиотек. Описываемая интегрированная среда может быть
запущена на большинстве UNIX-систем, адаптирована для работы под управление Solaris,
а также через специальный порт может быть запущена под Windows.
Логотипом системы является следующее изображение (пятка Гнома).
20. Сетевые и распределенные ОС. Сетевые службы и сетевые сервисы.
Одноранговые и серверные ОС.
Существует два основных подхода к организации операционных систем для
вычислительных комплексов, связанных в сеть, – это сетевые и распределенные
операционные системы.
В сетевых операционных системах для того, чтобы задействовать ресурсы другого
сетевого компьютера, пользователи должны знать о его наличии и уметь это сделать.
Каждая машина в сети работает под управлением своей локальной операционной
системы, отличающейся от операционной системы автономного компьютера наличием
дополнительных сетевых средств (программной поддержкой для сетевых интерфейсных
устройств и доступа к удаленным ресурсам), но эти дополнения существенно не меняют
структуру операционной системы.
Сетевая ОС предоставляет пользователю некую виртуальную вычислительную систему,
работать с которой гораздо проще, чем с реальной сетевой аппаратурой. В то же время эта
виртуальная система не полностью скрывает распределенную природу своего реального
прототипа, то есть является виртуальной сетью. При использовании ресурсов
компьютеров сети пользователь сетевой ОС всегда помнит, что он имеет дело с сетевыми
ресурсами и что для доступа к ним нужно выполнить некоторые особые операции,
например отобразить удаленный разделяемый каталог на вымышленную локальную букву
дисковода или поставить перед именем каталога еще и имя компьютера, на котором тот
расположен. Пользователи сетевой ОС обычно должны быть в курсе того, где хранятся их
файлы, и должны использовать явные команды передачи файлов для перемещения файлов
с одной машины на другую. Работая в среде сетевой ОС, пользователь хотя и может
запустить задание на любой машине компьютерной сети, всегда знает, на какой машине
выполняется его задание. По умолчанию пользовательское задание выполняется на той
машине, на которой пользователь сделал логический вход. Если же он хочет выполнить
задание на другой машине, то ему нужно либо выполнить логический вход в эту машину,
используя команду типа remote login, либо ввести специальную команду удаленного
выполнения, в которой он должен указать информацию, идентифицирующую удаленный
компьютер.
Распределенная система, напротив, внешне выглядит как обычная автономная система.
Пользователь не знает и не должен знать, где его файлы хранятся, на локальной или
удаленной машине, и где его программы выполняются. Он может вообще не знать,
подключен ли его компьютер к сети. Внутреннее строение распределенной операционной
системы имеет существенные отличия от автономных систем.
Распределенная ОС, динамически и автоматически распределяя работы по различным
машинам системы для обработки, заставляет набор сетевых машин работать как
виртуальный унипроцессор. Пользователь распределенной ОС, вообще говоря, не имеет
сведений о том, на какой машине выполняется его работа. Распределенная ОС существует
как единая операционная система в масштабах вычислительной системы. Каждый
компьютер сети, работающей под управлением распределенной ОС, выполняет часть
функций этой глобальной ОС. Распределенная ОС объединяет все компьютеры сети в том
смысле, что они работают в тесной кооперации друг с другом для эффективного
использования всех ресурсов компьютерной сети.
Сетевые и сервисные службы
Под службой понимается сетевой компонент, который реализует некоторый набор услуг,
который предоставляется данной службой. Таким образом, сервис – это интерфейс между
потребителем услуг (например, пользователем) и поставщиком услуг (службой).
Реализация сетевых служб реализуется программными средствами, причём все сетевые
службы соответствуют архитектуре «клиент-сервер». Пара модулей сетевой
операционной системы «клиент-сервер» обеспечивает доступ пользователей к
определённому типу ресурсов, например к файлам. В этом случае говорят, что
пользователь имеет дело с файловой службой. Обычно сетевая ОС поддерживает
несколько видов сетевых служб: файловую службу, службу печати, службу электронной
почты, службу удалённого доступа и т.д.
Кроме доступа к аппаратным, программным средствам и данным, сетевые службы
решают и другие, более специфические задачи, например, задачи, связанные с
распределённой обработкой данных. К таким задачам относится обеспечение
синхронизации нескольких копий данных, размещение на разных узлах (служба
репликации), или организация выполнения одной задачи параллельно на нескольких
машинах сети (служба вызова удалённых процедур).
Одной из важнейших сетевых служб является DNS – служба – служба определения
соответствия доменного имени узла и его IP – адреса. Среди сетевых служб выделяется
отдельная группа административных служб, используемых только администратором сети
для управления вычислительной сетью, например, служба администрирования
пользовательских учётных записей (позволяет администратору вести общую базу данных
о пользователях сети), служба мониторинга сети (позволяет анализировать сетевой
трафик), служба безопасности (в её функции аутентификация пользователей и процессов)
и др.
Как
правило,
сетевая
ОС
предоставляет
услуги
основных
сетевых
служб, обеспечивающих стандартные функции вычислительно сети. Дополнительные
услуги могут предоставляться сетевыми службами, реализуемыми системными сетевыми
приложениями или утилитами, работающими под управлением ОС. Например, услуги
почтового клиента в ОС семейства Windows предоставляются программой Outlook
Express, которая интегрирована в операционную систему.
Одним из главных показателей качества сетевой службы является её удобство, и в первую
очередь удобство работ с ней для пользователя. Именно поэтому сетевые службы
обеспечиваются специальным интерфейсом, в большинстве случаев интуитивно
понятным пользователю.
Скачать