35181

ОПЕРАЦИОННЫЕ СИСТЕМЫ И СРЕДЫ

Конспект

Информатика, кибернетика и программирование

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

Русский

2013-09-09

2.18 MB

379 чел.

ВКЖДТ

ЛЕКЦИИ

«ОПЕРАЦИОННЫЕ СИСТЕМЫ И СРЕДЫ»

 

Разработал:

Преподаватель

Жданова А.А.


Организационная часть

  1.  Знакомство + староста (кто назначает дежурных, кто носит журнал)
  2.  Правила работы к кабинете:
    1.  Строго запрещается использовать внешний носитель
    2.  Запрещается запускать программы без указания учителя
    3.  У каждого свое рабочее место, за которое он ответственный
    4.  Во время урока ходить по классу.
    5.  На перемене все выходят в коридор, возвращаются по звонку.
  3.  Что необходимо для урока:
    1.  общая тетрадь (для лекций)
    2.  тонкая тетрадь (для практических работ)
    3.  пачка бумаги для принтера – для контрольных работ, тестов, заданий
    4.  носитель информации (флэшка, диск)
  4.  Экзамен
    1.  Экзамен в этом  семестре
    2.  В билете 3 вопроса + дополнительные
    3.  Сколько пропусков, столько дополнительных вопросов на экзамене
    4.  К экзамену допускаются те, кто полностью защитит все практические работы  коллоквиумы  тесты. (По окончанию темы коллоквиум или тест)
  5.  Практическая работа
    1.  Дежурные в начале практического урока раздают задания
    2.  В конце все относят за собой стулья и задания учителю
    3.  В конце урока дежурные проверяют кабинет, приводят его  в порядок.
  6.  Обычный урок
    1.  В начале урока – проверка Д/З в виде контрольной работы или устного ответа и конспектов


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

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

  1.  Основные понятия и определения ОС.
  2.  Основные функции ОС.
  3.  Классификация операционных систем.
  4.  Типы многозадачных операционных систем.
  5.  Интерфейс пользователя.
  6.  Особенности использования современных ОС.
  7.  Перспективы развития операционных систем.
  8.  Архитектура ОС.
  9.  Расширенная  машина.
  10.  Требования, предъявляемые к современным ОС.
  11.  Пользовательский режим. Режим супервизора.
  12.  Команды ОС MS-DOS.
  13.  Работа с файлами и каталогами в ОС MS-DOS.
  14.  Работа с файлами и каталогами в ОС Windows 2000.
  15.  Файлы autoexec.bat,  config.sys.
  16.  Структура окна папки ОС Windows 2000.
  17.  Диспетчер задач. Установка и удаление программ в ОС Windows 2000.
  18.  Пакетные командные файлы.
  19.  Операционные оболочки.
  20.  Эмуляторы операционных систем.
  21.  Дефрагментация диска.
  22.  Форматирование диска.
  23.  Вычислительные процессы и ресурсы. Основные состояния процесса.
  24.  Прерывания. Обработка прерываний.
  25.  Диспетчеризация и приоретизация прерываний в ОС.
  26.  Ресурсы вычислительной системы, их классификация.
  27.  Классификация дисциплин диспетчеризации. Алгоритмы планирования процессов.
  28.  Основные алгоритмы планирования.
  29.  Управление оперативной памятью вычислительной системы. Распределение оперативной памяти без вытеснения.
  30.  Управление оперативной памятью вычислительной системы. Распределение оперативной памяти с вытеснением.
  31.  Типы адресов.
  32.  Методы распределения памяти с использованием дискового пространства.
  33.  Страничное распределение  памяти.
  34.  Сегментное распределение памяти.
  35.  Странично-сегментное распределение памяти.
  36.  Свопинг.
  37.  Основные понятия и концепции организации ввода/вывода в ОС.
  38.  Задачи ОС по управлению файлами и устройствами.
  39.  Системные таблицы ввода/вывода.
  40.  Логическая организация файловой системы.
  41.  Физическая организация файловой системы.
  42.  Файловые системы.
  43.  Эволюция файловых систем.
  44.  Файловая система FAT.
  45.  Файловая система HPFS 
  46.  Файловая система NTFS.
  47.  Файловая система VFAT.
  48.  Файловая система FAT 32.
  49.  Файловые операции. Способы организации файловых операций.
  50.  Контроль доступа к файлам.
  51.  Основные понятия безопасности. Классификация угроз.
  52.  Компьютерные  вирусы.
  53.  Антивирусные  программы.
  54.  Отказоустойчивость файловых и дисковых систем и их восстанавливаемость. RAID.
  55.  Способы инсталляции ОС Windows 2000.
  56.  Поддержка оборудования. Установка новых устройств.
  57.  Конфигурирование системы.
  58.  Панель управления.
  59.  Программы резервного копирования.
  60.  Архитектурные особенности модели микропроцессорной системы семейства Pentium.
  61.  Работа в ОС Windows


ТЕМАТИЧЕСКИЙ ПЛАН

(АС-21)

Введение

Раздел 1. Основы теории ОС

Тема 1.1. Общие сведения об ОС

Тема 1.2. Интерфейс пользователя

Тема 1.3. Операционное окружение

2. Машинно-зависимые свойства OC

Тема 2.1 Архитектурные особенности модели микропроцессорной системы семейства Pentium. Режимы работы микропроцессора. Регистры и команды процессора. Организация памяти. Средства вызова процедур и задач.

Тема 2.2. Обработка прерываний

Прерывания, их назначение и типы. Механизм прерываний. Диспетчеризация и приоретизация прерываний в ОС

Тема 2.3. Планирование процессов и потоков

Процессы и потоки. Состояния процессов и потоков.

Алгоритмы планирования.

Тема 2.4. Обслуживание ввода-вывода

Способы организации ввода-вывода.

Очередь запросов ввода-вывода. Алгоритм обработки прерываний по вводу-выводу.

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

Функции ОС по управлению памятью. Типы адресов.

Алгоритмы распределения реальной памяти. Свопинг и виртуальная память.

Итоговое занятие

Раздел 3. Машинно-независимые свойства ОС

Тема 3.1.  Работа с файлами

Логическая организация файловой системы.

Физическая организация файловой системы.

Файловые операции.

Контроль доступа к файлам

Тема 3.2. Планирование заданий

Тема 3.3. Распределение ресурсов

Тема 3.4. Защищенность и отказоустойчивость ОС

Основные понятия безопасности.  Классификация угроз.  Базовые технологии безопасности

Отказоустойчивость файловых и дисковых систем и их  восстанавливаемость.RAID.

Итоговое занятие

Раздел 4. Работа в ОС и средах

Тема 4.1. Структура ОС.

Структура и загрузка ОС MS-DOS.

Структура и загрузка ОС Windows 2000

Изучение структуры операционной системы Windows 2000.

Тема 4.2. Интерфейс пользователя

ОС MS-DOS: интерфейс пользователя.

Изучение работы с командами в операционной системе MS-DOS

ОС Windows 2000: интерфейс пользователя

Изучение работы с командами в операционной системе Windows 2000.

Индивидуальная настройка интерфейса пользователя в ОС Windows 2000.

Тема 4.3. Организация хранения данных

Работа с дисками и томами.

Работа с файлами и каталогами.

Работа с файлами и каталогами в ОС MS-DOS и Windows 2000

Работа с дисками в операционных системах MS-DOS и Windows 2000.

Монтирование файловых систем.

Тема 4.4. Средства управления и обслуживания

Управление процессами. Пакетные командные файлы.

Диспетчер задач. Установка и удаление программ.

Работа с пакетными файлами

Конфигурирование файлов autoexec.bat и config.sys.

Управление процессами в операционной системе.

Установка и удаление программ в Windows 2000.

Тема 4.5. Утилиты операционной системы

Операционные оболочки и работа в них.

Способы хранения данных. Архивирование. Программы-архиваторы

Защита от компьютерных вирусов.

Работа в Проводнике.

Работа в Total Commander.

Работа в Far.

Работа с текстом в  Total Commander и Far.

Работа с архиваторами.

Работа с антивирусными программами.

Тема 4.6. Поддержка приложений других ОС

Совместное использование программ. Эмуляторы операционных систем.

Изучение эмуляторов операционных систем

Зачетное занятие

Раздел 5. Инсталляция и конфигурирование ОС. Восстановление системы.

Тема 5.1. Инсталляция и конфигурирование ОС.

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

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

Конфигурирование системы. Панель управления.

Поддержка оборудования. Установка новых устройств.

Конфигурирование системы. Подключение новых устройств.»

Тема 5.2. Восстановление системы.

Предотвращение сбоев в работе ОС. Средства защиты от сбоев и восстановления поврежденной системы.

Работа с программами резервного копирования

Итоговое занятие

Зачетное занятие.


Лекция 1 (2/2)

ВВЕДЕНИЕ

Студент должен:

иметь представление:

  •  об общих принципах архитектуры операционных систем.

Роль и место знаний по дисциплине «Операционные системы и среды» при освоении смежных дисциплин по выбранной специальности; в сфере профессиональной деятельности.

Современный уровень и перспективы развития операционные систем и сред.

Постановка проблемной ситуации (Перспективы развития ОС)

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

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

ПК – это  аппаратно-программный комплекс:

ПК в традиционном варианте состоит из системного блока, монитора, клавиатуры и мыши. Эти аппаратные средства составляют базовую конфигурацию.

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

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

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

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

Базовое программное обеспечение

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

Системное программное обеспечение (Операционная система)

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

  1.  Управляет работой всех технических устройств компьютера
  2.  Управляет исполнением других компьютерных программ
  3.  Управляет файловой системой
  4.  Обеспечивает интерфейс между пользователем и компьютером.

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

Операционная система (ОС) – это комплекс программных средств, под управлением которых работает оборудование и прикладные программы ПК.

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

Первейшее целевое назначение прикладных программ – создание, редактирование и обработка. Для решения этих задач на ПК существуют следующие типы приложений: текстовые редакторы, редакторы электронных таблиц, системы управления базами данных, графические редакторы, системы видеомонтажа и т.д. При этом их, как правило, объединяют в комплекты, называемыми пакетами (например, пакет Office корпорации Microsoft включает приложения Word, Excel, Access, PowerPoint и др.).

Служебное программное обеспечение

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

Для чего нужно изучать дисциплину ОС?

Изучение механизма и структуры операционных систем необходимо по следующим причинам:

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

 Современный уровень и перспективы развития ОС и сред

Сегодня:

  1.  Практически все операционные системы стали сетевыми:
    1.   Сетевые функции сегодня встраиваются в ядро ОС, являясь ее неотъемлемой частью.
    2.   Операционные системы получили средства для работы со всеми основными технологиями локальных (Ethernet, Fast Ethernet, Gigabit Ethernet, Token Ring, FDDI, ATM) и глобальных (Х.25, frame relay, ISDN, ЛТМ) сетей, а также средства для создания составных сетей (IP, IPX, AppleTalk, RIP, OSPF, NLSP).
    3.   Компьютеры могут поддерживать одновременную сетевую работу с разнородными клиентами и серверами.
    4.   Производители операционных систем резко усилили поддержку средств работы с Интернетом.
    5.  В комплект поставки начали включать утилиты, реализующие такие популярные сервисы Интернета, как telnet, ftp, DNS и Web.
    6.  Влияние Интернета проявилось и в том, что компьютер превратился из чисто вычислительного устройства в средство коммуникаций с развитыми вычислительными возможностями.
  2.  Особое внимание в течение всего последнего десятилетия уделялось корпоративным сетевым операционным системам
    1.   Корпоративная операционная система отличается способностью хорошо и устойчиво работать в крупных сетях, которые характерны для больших предприятий, имеющих отделения в десятках городов и, возможно, в разных странах.
    2.   Корпоративная ОС должна беспроблемно взаимодействовать с операционными системами разных типов и работать на различных аппаратных платформах.
    3.  Тройка лидеров в классе корпоративных ОС — это Novell NetWare 4.x и 5.0, Microsoft Windows NT 4.0 и Windows 2000, а также UNIX-системы различных производителей аппаратных платформ.
    4.  В современных операционных системах средства централизованного администрирования обычно базируются на единой справочной службе, позволяющих в единой базе данных хранить учетные записи о десятках тысяч пользователей, компьютеров, коммуникационных устройств и модулей программного обеспечения, имеющихся в корпоративной сети. (Пример, NDS)
  3.  На современном этапе развития операционных систем на передний план вышли средства обеспечения безопасности. Это связано с возросшей ценностью информации, обрабатываемой компьютерами, а также с повышенным уровнем угроз, существующих при передаче данных по сетям, особенно по публичным, таким как Интернет. Многие операционные системы обладают сегодня развитыми средствами защиты информации.
  4.  Современным операционным системам присуща многоплатформенностъ, то есть способность работать на совершенно различных типах компьютеров.
  5.  Многие операционные системы имеют специальные версии для поддержки кластерных архитектур, обеспечивающих высокую производительность и отказоустойчивость.
  6.  Развивается тенденция повышения удобства работы человека с компьютером.
  7.  Постоянно повышается удобство интерактивной работы с компьютером путем включения в операционную систему развитых графических интерфейсов, использующих наряду с графикой звук и видеоизображение.

В будущем:

  1.  Дальнейшее развитие корпоративных ОС представляет одну из наиболее важных задач и в обозримом будущем.
  2.  Создание многофункциональной масштабируемой справочной службы является стратегическим направлением эволюции ОС. От успехов этого направления во многом зависит и дальнейшее развитие Интернета. Такая служба нужна для превращения Интернета в предсказуемую и управляемую систему, (например для обеспечения требуемого качества обслуживания трафика пользователей, поддержки крупных распределенных приложений, построения эффективной почтовой системы и т. п.)
  3.  Пользовательский интерфейс операционной системы становится все более интеллектуальным, направляя действия человека в типовых ситуациях и принимая за него рутинные решения.
  4.  Операционные системы будущего должны обеспечить высокий уровень прозрачности сетевых ресурсов, взяв на себя задачу организации распределенных вычислений, превратив сеть в виртуальный компьютер. Именно этот смысл вкладывают в лаконичный лозунг «Сеть — это компьютер» специалисты компании Sun, но для превращения лозунга в жизнь разработчикам операционных систем нужно пройти еще немалый путь.

Контрольные вопросы:

  1.  Виды ПО
  2.  Понятие ОС
  3.  П! Прикладного ПО
  4.  П! Служебного ПО
  5.  2-е особенности ОС настоящего
  6.  Для чего необходимо изучать дисциплину «Операционные системы и среды»?

Домашнее задание:

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


Лекция 2 (2/4)

Проверка Д/З:

1). У 3 чел. Проверить конспекты + ОС будущего

2). 3 чел. спросить по предыдущему (см. выше)

Раздел 1. ОСНОВЫ ТЕОРИИ ОПЕРАЦИОННЫХ СИСТЕМ

Требования к знаниям:

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

Тема 1.1 Общие сведения об операционных системах

 

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

Проблемная ситуация: Может ли компьютер работать без ОС?

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

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

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

Рис.1. Обобщенная структура программного обеспечения вычислительной системы

Основные функции ОС:

  1.  Прием от пользователя (или от оператора системы) заданий или команд, сформулированных на соответствующем языке в виде директив (команд) оператора или в виде указаний (своеобразных команд) с помощью соответствующего манипулятора (например, с помощью мыши), и их обработка;
  2.  Прием и исполнение программных запросов на запуск, приостановку, остановку других программ;
  3.  Загрузка в оперативную память подлежащих исполнению программ;
  4.  Инициация программы (передача ей управления, в результате чего процессор исполняет программу);
  5.  Идентификация всех программ и данных;
  6.  Обеспечение работы систем управлений файлами (СУФ) и/или' систем управления базами данных (СУБД), что позволяет резко увеличить эффективность всего программного обеспечения;
  7.  Обеспечение режима мультипрограммирования, то есть выполнение двух или более программ на одном процессоре, создающее видимость их одновременного исполнения;
  8.  Обеспечение функций по организации и управлению всеми операциями ввода/вывода;
  9.  Распределение памяти, а в большинстве современных систем и организация виртуальной памяти;
  10.  Планирование и диспетчеризация задач в соответствии с заданными стратегией и дисциплинами обслуживания;
  11.  Организация механизмов обмена сообщениями и данными между выполняющимися программами;
  12.  Защита одной программы от влияния другой; обеспечение сохранности данных;
  13.  Предоставление услуг на случай частичного сбоя системы;
  14.  Обеспечение работы систем программирования, с помощью которых пользователи готовят свои программы.

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

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

Рис. 3. Классификация по типу централизации               

Эта классификация принимает во внимание особенности аппаратных платформ, для которых операционные системы создаются.

1. Централизованные (локальные) операционные системы - управляют ресурсами единственного локального компьютера:

  •  однопроцессорные системы;
  •  многопроцессорные системы.

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

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

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

Классификация ОС по особенностям алгоритмов управления ресурсами имеет аспекты, приведенные ниже.

Поддержка многопользовательского режима.                           

  •  Однопользовательские операционные системы не предоставляют средств защиты информации одного пользователя от несанкционированного доступа другого пользователя. Такие системы не предоставляют возможностей разделения ресурсов.
  •  Многопользовательские операционные системы такие средства защиты информации имеют.

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

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

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

Наибольший интерес в настоящее время вызывают следующие группы операционных систем:

  •  операционные системы для мощных серверов;
  •  операционные системы для рабочих станций и персональных компьютеров;
  •  операционные системы для карманных компьютеров. 

Поддержка многозадачности.

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

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

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

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

По особенностям областей использования, в зависимости от выбранного критерия эффективности ОС делятся на:

1. системы пакетной обработки,

2.системы разделения времени

3. системы реального времени.

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

Т.О., ОС бывают:

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

                                        

     1. Мультипрограммирование в системах пакетной обработки

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

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

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

«+»:Главной целью и критерием эффективности систем пакетной обработки является максимальная пропускная способность, то есть решение максимального числа задач в единицу времени.

Схема функционирования в системах пакетной обработки:

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

Но «–»: невозможно гарантировать выполнение того или иного задания в течение определенного периода времени.

П! Рассмотрим совмещение во времени операций ввода-вывода и вычислений.

Дан компьютер, в котором имеются = ЦП +  специализированный процессор ввода-вывода (канал).

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

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

Максимальный эффект ускорения достигается при наиболее полном перекрытии вычислений и ввода-вывода. 

П! когда процессор выполняет только одну задачу:

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

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

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

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

Так, из рис. 4.2 видно, что в однопрограммном режиме задача А выполняется за 6 единиц времени, а в мультипрограммном — за 7. Задача В также вместо 5 единиц времени выполняется за 6. Но зато время выполнения обеих задач в мультипрограммном режиме составляет всего 8 единиц, что на 3 единицы меньше, чем при последовательном выполнении.

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

2. Мультипрограммирование в системах разделения времени

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

«+»:Повышение удобства и эффективности работы пользователя является целью другого способа мультипрограммирования — разделения времени.

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

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

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

«–»:1).что системы разделения времени обладают меньшей пропускной способностью, чем системы пакетной обработки, так как на выполнение принимается каждая запущенная пользователем задача, а не та, которая «выгодна» системе.

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

«+»:1).Так как времени каждой задаче выделяется только квант процессорного времени, ни одна задача не занимает процессор надолго и время ответа оказывается приемлемым. Если квант выбран достаточно небольшим, то у всех пользователей, одновременно работающих на одной и той же машине, складывается впечатление, что каждый из них единолично использует машину.

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

3. Мультипрограммирование в системах реального времени

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

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

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

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

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

Требования к ОС

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

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

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

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

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

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

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

Контрольные вопросы:

Может ли компьютер работать без ОС?

1. Что такое ОС? Дайте определение, опишите основные функции и задачи.

2. Каковы особенности классификации ОС?

3. Перечислите требования, предъявляемые с современным ОС.

4. Известно, что программа А выполняется в монопольном режиме за 10 минут, а программа В — за 20 минут, то есть при последовательном выполнении они требуют 30 минут. Если Т — время выполнения обеих этих задач в режиме мультипрограммирования, то какое из неравенств, приведенных ниже, справедливо?

А) Т<10; В) 10<Т<20; С) 20<Т<30; D) Т>30.

Ответ: С)

5. Может ли процесс в мультипрограммном режиме выполняться быстрее, чем в монопольном? Ответ: нет

Домашнее задание:

  1.  Конспект лекций
  2.  Подготовиться к письменному ответу по пройденному уроку


Лекция 3 (2/6)

Проверка Д/З:

1). Проверить конспекты + ОС будущего

2). Письменный опрос (см. выше)

Тема 1.1 Общие сведения об операционных системах (продолжение)

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

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

Архитектура ОС – это структурная организация ОС на основе различных программных модулей.

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

Ядро и вспомогательные модули ОС

Наиболее общим подходом к структуризации операционной системы является разделение всех ее модулей на две группы:

ядро — модули, выполняющие основные функции ОС;

□ модули, выполняющие вспомогательные функции ОС.

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

В состав ядра входят функции:

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

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

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

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

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

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

системные обрабатывающие программы - текстовые или графические редакторы, компиляторы, компоновщики, отладчики;

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

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

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

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

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

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

Некоторая программа может существовать определенное время как пользовательское приложение, а потом стать частью ОС, или наоборот. Ярким примером такого изменения статуса программы является Web-браузер компании Microsoft, который сначала поставлялся как отдельное приложение, затем стал частью операционных систем Windows NT 4.0 и Windows 95/98, а сегодня существует большая вероятность того, что по решению суда этот браузер снова превратится в самостоятельное приложение.

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

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

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

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

Контрольные вопросы:

  1.  Функции ядра
  2.  Продолжить фразу:
    1.  Транзитный модуль – это…
      1.  Резидентный модуль - это …


Тема 1.2 Интерфейс пользователя

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

Проблемная ситуация - Может ли компьютер работать без ОС?

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

Оп!. Интерфейс – ******

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

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

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

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

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

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

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

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

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

Интерфейс прикладного программирования

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

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

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

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

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

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

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

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

  1.  Вызовы API-функций, которые содержит данное приложение, должны поддерживаться новой ОС;
  2.  Структура исполняемого файла должна соответствовать структуре исполняемых файлов новой ОС.

Если архитектуры процессоров несовместимы, то происходит эмуляция кодов.

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

  1.  Архитектурные решения ОС.
  2.  Концепция эмуляции двоичного кода.

3.  Трансляция API.

Контрольные вопросы:

  1.  Может ли компьютер работать без ОС?
  2.  На основании знаний об операционной системе, интерфейсе ОС сформулировать определения базовой и расширенной машины 

Д/з: Конспект


Лекция 4 (2/8)

Проверка Д/З:

1). У 6 чел. спросить по предыдущему (см. выше)

Тема 1.3 Операционное окружение

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

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

Операционная система выполняет две основные функции:

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

Рис. 2. Классификация ресурсов

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

1. ОСНОВНАЯ Ф-ЦИЯ ОС: ОС как виртуальная машина

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

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

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

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

Режим пользователя, режим супервизора.

Ядро в привилегированном режиме

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

Обеспечить привилегии операционной системе невозможно без специальных средств аппаратной поддержки. Аппаратура компьютера должна поддерживать как минимум два режима работы — пользовательский режим (user mode) и привилегированный режим, который также называют режимом ядра (kernel mode), или режимом супервизора (supervisor mode). Подразумевается, что операционная система или некоторые ее части работают в привилегированном режиме, а приложения — в пользовательском режиме.

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

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

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

Очень важно, что механизмы защиты памяти используются операционной системой не только для защиты своих областей памяти от приложений, но и для защиты областей памяти, выделенных ОС какому-либо приложению, от остальных приложений. Говорят, что каждое приложение работает в своем адресном пространстве. Это свойство позволяет локализовать некорректно работающее приложение в собственной области памяти, так что его ошибки не оказывают влияния на остальные приложения и операционную систему. Между количеством уровней привилегий, реализуемых аппаратно, и количеством уровней привилегий, поддерживаемых ОС, нет прямого соответствия. Так, на базе четырех уровней, обеспечиваемых процессорами компании Intel, операционная система OS/2 строит трехуровневую систему привилегий, а операционные системы Windows NT, UNIX и некоторые другие ограничиваются двухуровневой системой.

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

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

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

Архитектура ОС, основанная на привилегированном ядре и приложениях пользовательского режима, стала, по существу, классической. Ее используют многие популярные операционные системы, в том числе многочисленные версии UNIX, VAX VMS, IBM OS/390, OS/2, и с определенными модификациями — Windows NT.

В некоторых случаях разработчики ОС отступают от этого классического варианта архитектуры, организуя работу ядра и приложений в одном и том же режиме. Так, известная специализированная операционная система NetWare компании Novell использует привилегированный режим процессоров Intel x86/ Pentium как для работы ядра, так и для работы своих специфических приложений — загружаемых модулей NLM (рис. 3.5). При таком построении ОС обращения приложений к ядру выполняются быстрее, так как нет переключения режимов, однако при этом отсутствует надежная аппаратная защита памяти, занимаемой модулями ОС, от некорректно работающего приложения. Разработчики NetWare пошли на такое потенциальное снижение надежности своей операционной системы, поскольку ограниченный набор ее специализированных приложений позволяет компенсировать этот архитектурный недостаток за счет тщательной отладки каждого приложения.

В одном режиме работают также ядро и приложения тех операционных систем, которые разработаны для процессоров, вообще не поддерживающих привилегированного режима работы. Наиболее популярным процессором такого типа был процессор Intel 8088/86, послуживший основой для персональных компьютеров компании IBM. Операционная система MS-DOS, разработанная компанией Microsoft для этих компьютеров, состояла из двух модулей msdos.sys и io.sys, составлявших ядро системы (хотя название «ядро» для этих модулей не употреблялось, по своей сути они им являлись), к которым с системными вызовами обращались командный интерпретатор command.com, системные утилиты и приложения. Архитектура MS-DOS соответствует архитектуре ОС, приведенной на рис. 3.2. Некорректно написанные приложения вполне могли разрушить основные модули MS-DOS, что иногда и происходило, но область использования MS-DOS (и многих подобных ей ранних операционных систем для персональных компьютеров, таких как MSX, СР/М) и не предъявляла высоких требований к надежности ОС.

***************************************************************

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

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

Преимущества микроядерной архитектуры:

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

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

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

При классификации по типу ядра основываются на разновидностях архитектуры ядра, приведенных ниже:

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

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

Контрольные вопросы:

Может ли компьютер работать без ОС?

1. Дайте сравнительный анализ двух типов архитектуры ОС.

2. Какие из приведенных ниже терминов являются синонимами?

  1.  привилегированный режим;
  2.  защищенный режим;
  3.  режим супервизора;
  4.  пользовательский режим;
  5.  реальный режим;
  6.  режим ядра.

Ответ: «привилегированный режим», «режим супервизора», «режим ядра».

3. В чем состоят отличия в работе процессора в привилегированном и пользовательском режимах?

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

Ответ: 7. Стремление повысить производительность системы.

Рис. 4. Классификация по типу архитектуры ядра

Домашнее задание:

  1.  Конспект лекций
  2.  Подготовиться к итоговой работе


Лекция 5 (2/10)

Проверка Д/З:

1). У 3 чел. Проверить конспекты

2). Итоговая письменная работа

Раздел 2. МАШИННО-ЗАВИСИМЫЕ СВОЙСТВА

ОПЕРАЦИОННЫХ СИСТЕМ

Требования к знаниям:

  •  архитектуру рассматриваемой типовой микроЭВМ;
  •  принципы обработки прерываний;
  •  состояния процессов и алгоритмы обработки процессов;
  •  способы организации ввода-вывода;
  •  алгоритмы управления вводом-выводом;
  •  механизмы управления реальной памятью;
  •  средства и способы защиты реальной памяти;

общие методы реализации виртуальной памяти.

Тема 2.1 Архитектурные особенности модели микропроцессорной

системы семейства Pentium.

Упрощенная архитектура микроЭВМ. Структура оперативной памяти. Адресация. Основные регистры. Форматы данных и команд. Операционная система как средство управления ресурсами микроЭВМ . 

Режимы работы микропроцессора. Регистры и команды процессора.

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

Первая архитектура ЭВМ была разработана до её появления, и ей были свойственны следующие характерные черты:

  •  Единственная и последовательно адресуемая память;
  •  Хранение программ и данных в одной памяти;
  •  Последовательное выполнение команд программы до появления специальных указаний (команд перехода).

ЭВМ состоит из трёх структурных элементов: процессора, памяти и устройств ввода-вывода. Управление системой целиком возложено на процессор, и для пересылки данных между устройством ввода-вывода и памятью требуется прямое управление со стороны процессора. Особенностями фон-неймановской архитектуры является:

  1.  Хранимая программа (программы вместе с данными хранятся в памяти);
  2.  Линейная память (линейное пространство адресов, которым присваиваются порядковые номера 0, 1, 2, …);
  3.  Последовательное выполнение команд программы;
  4.  Отсутствие различий между данными и командами;
  5.  Отсутствие различий в семантике данных (типах объектов).

В 70-х годах начался активный пересмотр фон-неймановской архитектуры, причинами которого были:

  1.  Понимание неизбежности кризиса программного обеспечения (ростом потребностей пользователей);
  2.  Расширение приложений, требующих высокой надёжности;
  3.  Сложность задач и сложность обеспечения параллелизма при их обработке;
  4.  Проблемы с пересылками (процессор – основная память);
  5.  Развитие СБИС-технологий.

Материнская плата микрокомпьютера (англ. motherboard), или системная плата, основное устройство, определяющее архитектуру и производительность компьютера. На материнской плате прежде всего размещаются:

Центральный процессор (Central Processor Unit, CPU) – главная микросхема, выполняющая вычислительные и логические действия;

Оперативная память (оперативное запоминающее устройство, ОЗУ) – набор микросхем для хранения данных во время работы компьютера;

ПЗУ (постоянное запоминающее устройство) – микросхема для долговременного хранения данных;

Шины – наборы проводников для обмена сигналами между внутренними компонентами компьютера;

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

Разъемы (слоты) – расширения для подключения дополнительных устройств.

Системная магистраль данных (шина)

Шина - совокупность проводников, предназначенных для обмена данными между различными устройствами компьютера. Шина - общий канал связи, по которому внутри устройства передаются данные; она используется совместно различными блоками системы. Для рабочих мест на основе микропроцессора Intel-80486 с интенсивным использованием графики (анимация, САПР) где требуется обеспечить высокую пропускную способность ввода – вывода для двух – трёх контроллеров, например, видеоконтроллера и контроллера дисков, целесообразно выбрать локальную видеошину VESA. При этом можно получить компьютер с высокопроизводительными видео- и дисковой системами.

Шина VESA (или локальная шина, VL – шина) разработана ассоциацией VESA (Video Electronics Standards Association). Эта шина обеспечивает более дешевое  и более эффективное подключение высокоскоростных внешних устройств, поддерживая непосредственный доступ центрального процессора к соответствующим контроллерам (видеоконтроллерам, контроллерам жестких дисков, адаптерам локальной сети). Для использования остальных устройств на компьютер устанавливается другая шина EISA. Благодаря разработанным ассоциациям VESA правилам «шинного арбитража» эти шины могут сосуществовать в одном компьютере не мешая друг другу. Компьютеры с шинами VESA и EISA часто называют «VESA/ EISA».

Оперативная память

Оперативная память (RAM, ОЗУ) обеспечивает работу с программным обеспечением. Из неё процессор и сопроцессор берут программы и исходные данные для обработки, в нее же записываются полученные результаты.

Английское название RAM – Random Access Memory – переводится как «память с произвольным доступом». Произвольность доступа подразумевает возможность операций записи и чтения с любой ячейкой ОЗУ в произвольном порядке.

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

Характеристика оперативной памяти – объём, измеряемый в мегабайтах (Мб). Выбирают размер оперативной памяти с учетом задач, которые будут решаться. САПР P-CAD 8.5 требует не менее 4 Мб, а фактически 8 – 12 Мб оперативной памяти.

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

5.1.1.2. Контроллеры.

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

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

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

5.1.1.3. Жесткий диск.

Жесткий диск (винчестер (Winchester), HDD) – предназначен для постоянного хранения информации, используемой при работе компьютера: операционной системы, документов и т.д.

Минимальные требования емкости винчестера для установки P-CAD 8.5 составляют 10 Мбайт, но так как файл с одним высококачественным изображением печатной платы может занимать десятки Мбайт, то компьютер оснастим жестким диском емкостью  10 Гбайт.

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

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

Центральный процессор

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

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

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

Как мы уже выяснили, САПР P-CAD 8.5 требует 486-процессор. Это 32х разрядный процессор фирмы Intel, разработанный в 1989 году и используемый в наиболее мощных из выпускаемых в настоящее время IBM -совместимых компьютеров. У Intel - 80486 (или 80486 DX) – производительность выше, чем у предыдущего Intel – 80386 в 2 – 3 раза. Так как 486 стал первым микропроцессором со встроенным математическим сопроцессором, который существенно ускорил обработку данных, выполняя сложные математические действия вместо центрального процессора. Процессор 486 имеет встроенный в микросхему внутренний кэш для хранения 8 Кбайт команд и данных. Новые возможности расширяют многозадачность систем. Новые операции увеличивают скорость работы с семафорами в памяти. Оборудование на микросхеме гарантирует непротиворечивость кэш-памяти и поддерживает средства для реализации многоуровневого кэширования.
Таким образом, особенностью 486 процессора от предыдущих версий – это встроенная КЭШ память и встроенный математический сопроцессор.
Сопроцессор - специальная интегральная схема, которая работает в содружестве с главным процессором и помогает основному микропроцессору выполнять математические операции над вещественными числами. Он не держит под управлением основную массу цепей компьютера и когда встречается задача, с которой лучше справится математический сопроцессор, ему выдаются данные и команды, а центральный процессор ожидает результаты, благодаря чему, компьютер с сопроцессором работает намного проворнее. В компьютере с 486 микропроцессором модуль математического сопроцессора устанавливался на материнскую плату в виде отдельного чипа.
         Таким образом, процессор состоит из нескольких важных деталей: собственно процессора – «вычислителя» и сопроцессора. Применяется сопроцессор для особо точных и сложных расчётов, а также для работы с рядом графических программ.                                                                                                                                                      

Характеристики процессора.

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

Рабочее напряжение. Чем ниже рабочее напряжение, тем лучше. Во-первых, снижение напряжения дает возможность сократить расстояния между структурными элементами процессора без угрозы электрического пробоя. Во-вторых, убавляется и тепловыделение в процессоре, что позволяет повысить производительность, не опасаясь перегрева. Процессоры младших поколений 286, 386 использовали рабочее напряжение 5 В. В 486 оно уменьшено примерно в полтора раза.
Разрядность процессора определяет, сколько бит данных он способен принять за один раз (такт). Первые процессоры были 16-разрядными, 486 – 32х-разрядный.
Тактовая частота – это скорость обработки данных, измеряемая в мегагерцах. Чем она выше, тем больше команд процессор выполняет в единицу времени, тем выше производительность компьютера. Так, первые модели процессоров Intel (i808х) работали с тактовыми частотами, меньшими 5 МГц. Сегодня тактовая частота последних процессоров повышена до 1,2 ГГц и гонка за скоростью продолжается. Тактовая частота процессора Intel 80486 обычно находится в диапазоне 25 – 50 МГц.
Коэффициент умножения тактовой частоты. Тактовые импульсы генерируются и передаются процессору материнской платой. Однако, ее тактовая частота значительно ниже. Поэтому в процессоре происходит умножение тактовой частоты на определенный коэффициент.

Кэш - память. Обмен данными внутри процессора протекает заметно быстрее, чем с оперативной памятью. Поэтому для хранения копии областей оперативной памяти с наиболее частым доступом используется быстродействующая буферная память, которая называется кэш – памятью. Когда процессору требуются данные, он обращается в кэш – память, и только если там нет необходимых данных – в оперативную память. Чем больше объем кэш – памяти, тем выше производительность процессора. Работа кэш-памяти: когда процессор первый раз обращается к ячейке памяти, ее содержимое параллельно копируется в кэш, и в случае повторного обращения в скором времени может быть с гораздо большей скоростью выбрано из малого, но очень быстродействующего кэша, чем из относительно медленной основной памяти. Процессор 486 имеет внутренний (Internal) кэш объемом 8 кб, это своего рода небольшая сверхбыстрая память, предназначена для хранения промежуточных результатов. Он также обозначается как Primary (первичный) или L1 (Level 1 - первый уровень) в отличие от внешнего (External), расположенного на плате и обозначаемого Secondary (вторичный) или L2. Эта память чуть помедленнее, зато больше – 256 Кб. Обычно внешний кэш позволяет увеличить быстродействие и уменьшить полосу пропускания шины, требуемую процессором i486.  Применение кэша совместно с обычной памятью примерно на 3-15% ускоряет обработку информации  процессором.

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

Аппаратные средства поддержки мультипрограммирования имеются во всех современных процессорах. Несмотря на различия в реализации, для большинства типов процессоров эти средства имеют общие черты. Это в полной мере относится и к рассматриваемому ниже популярному семейству 32-разрядных процессоров Intel: 80386, 80486, Pentium, Pentium Pro, Pentium II, Celeron и Pentium III. Более того, средства поддержки операционной системы во всех этих процессорах построены почти идентично, поэтому далее в тексте для их обозначения используется обобщенный термин «процессоры Pentium».

Основным режимом работы процессора Pentium является защищенный режим (ргоtected mode). Для совместимости с программным обеспечением, разработанным для s предшествующих моделей процессоров Intel (главным образом, модели 8086), в процессорах Pentium предусмотрен так называемый реальный режим {real mode).

B реальном режиме процессор Pentium выполняет 16-разрядные инструкции и адресует 1 Мбайт памяти. В этом разделе рассматривается защищенный режим работы процессора, поскольку это основной режим, используемый современными мультипрограммными операционными системами. Регистры процессора В организации вычислительного процесса важную роль играют регистры про-Ябссора. В процессорах Pentium эти регистры делятся на несколько групп:

□ регистры общего назначения;

□ регистры сегментов;

□ указатель инструкций;

□ регистр флагов;

□ управляющие регистры;

□ регистры системных адресов;

□ регистры отладки и тестирования, а также регистры математического сопроцессора, выполняющего операции с плавающей точкой.

В процессоре Pentium имеется восемь 32-разрядных регистров общего назначения. Четыре из них, которые можно условно назвать А, В, С и D, используются для временного хранения операндов арифметических, логических и других команд Программист может обращаться к этим регистрам как к единому целому, используя обозначения ЕАХ, ЕВХ, ЕСХ, EDX, а также к некоторым их частям, как это показано на рис. 6.1. Здесь обозначение AL (L - Low) относится к первому, самому младшему байту регистра ЕАХ, АН (Н - High) - к следующему по старшинству байту, а АХ обозначает оба младших байта регистра. Приставка Е в обозначении этих регистров (а также некоторых других) образована от слова extended (расширенный), что указывает на то, что в прежних моделях процессоров Intel эти регистры были 16-разрядными, а затем их разрядность была увеличена до 32 бит.

Остальные четыре регистра общего назначения - ESI, EDI, ЕВР и ESP - предназначены для задания смещения адреса относительно начала некоторого сегмента данных. Эти регистры используются совместно с регистрами сегментов в системе адресации процессора Pentium для задания виртуального адреса, который затем с помощью таблиц страниц отображается на физический адрес

Регистры сегментов CS, SS, DS, ES, FS и GS в защищенном режиме ссылаются на дескрипторы сегментов памяти — описатели, в которых содержатся такие параметры сегментов, как базовый адрес, размер сегмента, атрибуты защиты и некоторые другие. Регистры сегментов хранят 16-разрядное число, называемое селектором, в котором 12 старших разрядов представляют собой индекс в таблице дескрипторов сегментов,  разряд указывает, в какой из двух таблиц, GDT или LDT, находится дескриптор, а три разряда поля RPL хранят значение уровня привилегий запроса к данному сегменту. Регистр CS {Code Segment) предназначен для хранения индекса дескриптора кодового сегмента, регистр SS {Stack Segment) — дескриптора сегмента стека, а остальные регистры используются для указания на дескрипторы сегментов данных. Все регистры сегментов, кроме CS, программно доступны, то есть в них можно загрузить новое значение селектора соответствующей командой (например, LDS). Значение регистра CS изменяется при выполнении команд межсегментных вызовов CALL и переходов JMP, а также при переключении задач. ( В этом разделе термин «задача» часто будет употребляться вместо равнозначного (и более распространенного) термина «процесс» в связи с тем, что именно этот термин выбрали иРвсвое время разработчики процессоров Intel x86 и он фигурирует в названиях регистров и структур данных )

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

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

В процессоре Pentium имеется пять управляющих регистров — CRO, CR1, CR2, CR3 и CR4, которые хранят признаки и данные, характеризующие общее состояния процессора (рис. 6.2).

Регистр CR0 содержит все основные признаки, существенно влияющие на работу процессора, такие как реальный/защищенный режим работы, включение/ выключение страничного механизма системы виртуальной памяти, а также признаки, влияющие на работу кэша и выполнение команд с плавающей точкой. Младшие два байта регистра CR0 имеют название Mashine State Word, MSW — «слово состояния машины». Это название использовалось в процессоре 80286 для обозначения управляющего регистра, имевшего аналогичное назначение.

Регистр CR1 в настоящее время не используется (зарезервирован).

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

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

Регистры системных адресов содержат адреса важных системных таблиц и структур, используемых при управлении процессами и памятью. Регистр GDTR1 {Global Descriptor Table Register) содержит физический 32-разрядный адрес глобальной таблицы дескрипторов GDT сегментов памяти, образующих общую часть виртуального адресного пространства всех процессов. Регистр IDTR {Interrupt Descriptor Table Register) хранит физический 32-разрядный адрес таблицы дескрипторов прерываний IDT, используемой для вызова процедур обработки прерываний в защищенном режиме работы процессора. Кроме этих адресов в регистрах GDTR и IDTR хранятся 16-битные лимиты, задающие ограничения нащ размер соответствующих таблиц.

Два 16-битных регистра хранят не физические адреса системных структур, а значения индексов дескрипторов этих структур в таблице GDT, что позволяет косвенно получить соответствующие физические адреса. Регистр TR {Task Register) содержит индекс дескриптора сегмента состояния задачи TSS. Регистр LDTR щ {Local Descriptor Table Register) содержит индекс дескриптора сегмента локальной таблицы дескрипторов LDT сегментов памяти, образующих индивидуальную часть виртуального адресного пространства процесса.

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


Лекция 6 Организация памяти. Средства вызова процедур и задач.

СМ. учебник!!!! Двойное слово!!!!!!!!

Средства вызова процедур и задач

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

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

Вызов процедур

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

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

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

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

При С=0 вызываемый сегмент не считается подчиненным, и вызов разрешается, толъко если уровень привилегий вызывающего кода совпадает с уровнем привилегий вызываемого сегмента (CPL=DPL). Случаи, когда вызываемый код имеет более низкий уровень привилегий или более высокий уровень привилегий, являются запрещенными.

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

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

ПРИМЕЧАНИЕ---------------------------------------------------------------------------------------------------------------------

При обсуждении вопросов доступа к сегментам данных с уровнем привилегий сегмента  DPL сравнивалось значение эффективного уровня привилегий EPL. При доступе же к кодовому сегменту с его DPL сравнивается значение CPL. Внимательный читатель мог заме тить, что здесь нет никакого противоречия или особого случая, потому что при доступе ккодовому сегменту EPL всегда равно CPL: EPL=max (RPL, CPL). А так как CPL - этой Я есть RPL кодового сегмента, то EPL=max (CPL, CPL)=CPL.

--------------------------------------------------------------------------------------------------------------------------------------------

Прямой вызов процедуры из подчиненного сегмента. Процессор должен поддерживать способ безопасного вызова модулей ОС, чтобы пользовательские программы могли получать доступ к службам ОС, например выполнять ввод-вывод с помощью соответствующих системных вызовов. Для реализации этой возможности существует несколько способов, и одним из них является размещение процедур ОС в подчиненном сегменте (С=1). Подчиненный сегмент можно вызывать с помощью указания его селектора в командах CALL или JMP из кода программ с равным или более низким уровнем привилегий (CPL>DPL). Но нужно иметь в виду, что вызываемый код будет в этом случае выполняться с привилегиями вызывающей программы. Например, если код ОС, хранящийся в сегменте с уровнем привилегий 0, будет вызван из пользовательского приложения с уровнем привилегий 3, то процедура ОС будет наследовать привилегии пользовательской программы и возможности этой процедуры по доступу к системным данным будут весьма ограничены. Тем не менее выполнить действия над пользовательскими данными вызванная таким способом процедура ОС сможет.

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

Набор точек входа в привилегированные кодовые сегменты определяется заранее, и эти точки входа описываются с помощью специальных дескрипторов — дескрипторов шлюзов вызова процедур. Дескрипторы этого типа принадлежат к системным дескрипторам, и хотя их структура отличается от структуры дескрипторов сегментов кода и данных (рис. 6.13), они также включены в таблицы LDT и GDT.

Схема вызова процедуры через шлюз приведена на рис. 6.14. Селектор из поля команды CALL указывает па дескриптор шлюза в таблицах GDT или LDT. Для того чтобы получить доступ к процедуре через шлюз, описываемый данным дескриптором, вызывающий код должен иметь не меньший уровень прав, чем дескриптор шлюза (то есть CPL<DPL). При этом вызываемый код может иметь любой уровень привилегий (в том числе и более высокий, чем у шлюза), который сохраняется при его выполнении. Это позволяет из пользовательской программы вызывать процедуры ОС, работающие с высоким уровнем привилегий. При определении адреса входа в вызываемом сегменте смещение из поля команды CALL не используется, а используется смещение из дескриптора шлюза, что не дает возможности задаче самой определять точку входа в защищенный кодовый сегмент.

При вызове кодов, обладающих различными уровнями привилегий, возникает  проблема передачи параметров между вызывающей и вызываемой процедурами. Для ее решения в процессоре предусмотрено существование стеков разных уровней, по одному стеку на каждый уровень привилегий. Используемый кодовым щ сегментом стек всегда соответствует текущему уровню привилегий кодового сегмента, то есть значению CPL. В сегменте контекста задачи TSSолее детально он описан ниже) хранятся значения селекторов стека SS для уровней привилегий 0, 1 и 2. Если вызывается процедура, имеющая уровень привилегий, отличный от текущего, то при выполнении команды CALL создается новый стек. Для этого из сегмента TSS извлекается новое значение селектора стека, соответствующее новому уровню привилегий, которое загружается в регистр SS, из текущего стека в новый стек копируется столько 32-разрядных слов, сколько указано в поле счетчика слов дескриптора шлюза. В новом стеке также запоминается селектор старого стека, который используется при возврате в вызывающую пpoцедуру.

Вызов задачи

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

Процессор Pentium производит аппаратное переключение контекстов задач, используя для этого сегменты специального типа TSS. Структура сегмента TSS Бзадачи приведена на рис. 6.15. Как видно из рисунка, сегмент TSS имеет фиксированные поля, отведенные для содержимого регистров процессора, как универсальных, так и некоторых управляющих (например, LDTR и CR3). Для описа-вРШя возможностей доступа задачи к портам ввода-вывода процессор использует в защищенном режиме поле IOPL (Input/Output Privilege Level) в своем регистре EFLAGS и карту битовых полей доступа к портам в сегменте TSS. Для получения возможности безусловно выполнять команды ввода-вывода текущий код должен иметь уровень прав CPL не ниже, чем уровень привилегий операций ввода-вывода, задаваемый значением поля IOPL в регистре EFLAGS. Если же это условие не соблюдается, то возможность доступа к порту с конкретным адресом определяется значением соответствующего бита в карте ввода-вывода сегмента TSS (карта состоит из 64 Кбит для описания доступа к 65 536 портам) — значение 0 разрешает операцию ввода-ввода с данным номером порта.

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

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

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

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

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

Непосредственный вызов задачи показан на рис. 6.16. При переключении задач щ процессор выполняет следующие действия: Я

1.Выполняется команда CALL, селектор которой указывает на дескриптор сегмента типа TSS. Происходит проверка прав доступа, успешная при CPL<DPLМ

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

3.В TR загружается селектор сегмента TSS задачи, на которую переключаетепроцессор.

4.Из нового TSS в регистр LDTR переносится значение селектора таблицы LDT в таблице GDT задачи.

5.Восстанавливаются значения регистров процессора (из соответствующих полей нового сегмента TSS).

6.В поле селектора возврата нового сегмента TSS заносится селектор сегмента TSS снимаемой с выполнения задачи для организации возврата к ней в будущем.

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

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

Контрольные вопросы:

  1.  Сколько байтов в двойном слове?
  2.  Зарисовать схематично архитектуру компьютера на доске.

Перечислить основные регистры.

Домашнее задание:

Конспект лекций


Лекция 7 (2/14)

Проверка Д/З:

1).5 чел. спросить по предыдущему (см. выше)

Тема 2.2 Обработка прерываний

Понятие прерывания. Последовательность действий при обработке прерываний. Классы прерываний. Рабочая область прерываний. Вектор прерывания. Стандартные программы обработки прерываний. Приоритеты прерываний. Вложенные прерывания.

Прерывания, их назначение и типы. Механизм прерываний

Постановка проблемной ситуации (Если отключили электричество, то какого вида произойдет прерывание?)

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

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

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

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

Механизм обработки прерываний независимо от архитектуры вычислительной системы включает следующие элементы Механизма обработки прерываний:

1. Установление факта прерывания (прием сигнала на прерывание) и идентификация прерывания (в операционных системах иногда осуществляется повторно, на шаге 4).

2. Запоминание состояния прерванного процесса. Состояние процесса определяется прежде всего значением счетчика команд (адресом следующей команды, который, например, в i80x86 определяется регистрами CS и IP — указателем команды), содержимым регистров процессора и может включать также спецификацию режима (например, режим пользовательский или привилегированный) и другую информацию.

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

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

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

6. Восстановление информации, относящейся к прерванному процессу (этап, обратный шагу 4).

7. Возврат в прерванную программу.

Шаги 1-3 реализуются аппаратно, а шаги 4-7 — программно.

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

Итак, главные функции механизма прерываний:

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

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

Стек – среда для размещения данных для возврата из подпрограмм, а так же их аргументы и автоматические данные.

Фраза «По принципу стека» означает: последним пришел, первым обслужен или первым пришел, последним обслужен.

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

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

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

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


Рис. 3. Обработка прерывания

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

Внешние прерывания вызываются асинхронными событиями, которые происходят вне прерываемого процесса, например:

  •  прерывания от таймера;
  •  прерывания от внешних устройств (прерывания по вводу/выводу);
  •  прерывания по нарушению питания;
  •  прерывания с пульта оператора вычислительной системы;
  •  прерывания от другого процессора или другой вычислительной системы.

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

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

Супервизор!!!!!– это супервизор операционной системы ее центральный управляющий модуль

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

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

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

Контрольные вопросы:

  •  Понятие прерывание
    •  Последовательность действий при обработке прерываний
    •  Классы прерываний
    •  Постановка проблемной ситуации (Если отключили электричество, то какого вида произойдет прерывание?)
    •  Зарисовка на доске схемы прерываний

Домашнее задание:

Конспект лекций


Лекция 8 (2/16)

Проверка Д/З:

1).5 чел. спросить по предыдущему (см. выше)

Диспетчеризация и приоретизация прерываний в ОС

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

Рис. 4. Распределение прерываний по уровням приоритета

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

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

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

  •  с относительными приоритетами, то есть обслуживание не прерывается даже при наличии запросов с более высокими приоритетами. После окончания обслуживания данного запроса обслуживается запрос с наивысшим приоритетом. Для организации такой дисциплины необходимо в программе обслуживания данного запроса наложить маски на все остальные сигналы прерывания или просто отключить систему прерываний;
  •  с абсолютными приоритетами, то есть всегда обслуживается прерывание с наивысшим приоритетом. Для реализации этого режима необходимо на время обработки прерывания замаскировать все запросы с более низким приоритетом. При этом возможно многоуровневое прерывание, то есть прерывание программ обработки прерываний. Число уровней прерывания в этом режиме изменяется и зависит от приоритета запроса;
  •  по принципу стека, или, как иногда говорят, по дисциплине LCFS (last come ferst served) – последним пришел – первым обслужен.

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

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

Вектор прерывания.!!!!!! 

Процессор –> Шина –>Внешнее устройство.

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

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

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

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

Контрольные вопросы:

  •  Понятие прерывание
    •  Понятие приоритет

Домашнее задание:

Конспект лекций


Лекция 9 (2/18)

Проверка Д/З:

1). У 3 чел. Проверить конспекты

2). 5 чел. спросить по предыдущему (см. выше)

Тема 2.3 Планирование процессов

Процессы и потоки. Состояния процессов и потоков.

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

ПЛАНИРОВЩИК!!!!!!!

Понятие вычислительного процесса и ресурса.

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

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

Первое упоминание о процессе появилось в 60-е годы XX века в операционной системе MULTICS.

Если говорить о соотношении между процессом и программой, то справедливы следующие два утверждения:

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

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

2. ОСНОВНАЯ Ф-ЦИЯ ОС: Повышение эффективности использования компьютера за счет рационального управления его ресурсами. 

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

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

Рис. 1. Классификация ресурсов

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

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

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

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

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

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

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

Адресное пространство процесса – совокупность всех областей оперативной памяти, выделенных ОС данному процессу.

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

  1.  Планирование выполнения процессов;
  2.  Создание, уничтожение, возобновление, приостановление выполнения процессов;

Основные состояния процесса (рис. 2):

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

Рис. 2. Основные состояния процесса

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

  •  присвоение процессу уникального номера (ID);
  •  добавление процесса в список процессов, известных системе;
  •  определение начального приоритета;
  •  формирование блока управления процессом;
  •  выделение необходимых ресурсов.

За время своего существования процесс может неоднократно совершать переход из одного состояния в другое.

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

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

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

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

Из состояния выполнения процесс может выйти по одной из следующих причин:

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

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

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

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

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

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

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

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

  •  операционные системы;
  •  сетевые серверы;
  •  встроенные системы;
  •  вычислительные программы.

Об использовании потоков

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

Многие операционные системы, ориентированные на рабочие станции и персональные компьютеры, начиная с середины 80-х годов XX века, включают поддержку многопоточности. Впервые стандарт на потоки появился в 1995 году. Это был стандарт IEEE POSIX 1003.1с-1995. Однако стандарт появился достаточно поздно, и некоторые компании успели выпустить свои версии многопоточных библиотек, существенно отличающихся от стандарта. Можно выделить следующие основные семейства потоков:

1. Потоки, поддерживающие стиль POSIX-стандарта. Это семейство состоит из трех подгрупп:

  •  "истинные" POSIX-потоки. Это потоки, базирующиеся на стандарте IEEE POSIX 1003.1с-1995 (также известного как ISO/IEC 9945-1:1996), являющегося частью стандарта ANSI/IEEE 1003.1;
  •  DCE-потоки, базирующиеся на ранней версии стандарта POSIX — 1003.1;
  •  Unix International потоки, также известные как Solaris-потоки. Они достаточно близки к стандарту и поддерживаются в операционных системах Solaris компании Sun Microsystems и UnixWare 2 компании SCO;

2. Потоки Microsoft. Это семейство состоит из двух подгрупп, причем обе разработаны в компании Microsoft:

  •  потоки WIN32, являющиеся стандартными для семейства операционных систем Windows, включая Windows 2000, Windows 95, Windows 98, Windows ME и Windows СЕ;
  •  потоки OS/2, являющиеся стандартными для операционной системы OS/2 компании IBM.

3. Другие варианты потоков. Их не так много. Отдельного упоминания заслуживает лишь пакет С threads, имеющийся в операционной системе Маch.

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

Контрольные вопросы:

  1.  .В чем состоит принципиальное отличие состояний «ожидания» и «готовности» потока, ведь и в том и в другом он ожидает некоторого события?
  2.  Мультипрограммные операционные системы принято разделять на системы реального времени, системы разделения времени, системы пакетной обработки. С другой стороны, алгоритмы планирования могут быть основаны на квантовании, относительных приоритетах, абсолютных приоритетах. Предложите для каждого из перечисленных типов ОС наиболее подходящий, по вашему мнению, тип алгоритма планирования.
  3.  В какой очереди (ожидающих или готовых) скапливается большее число процессов:

A) в интерактивных системах разделения времени;

B) в системах пакетной обработки, решающих «счетные» задачи.

Ответ: А — в очереди процессов, ожидающих ввода-вывода; В — в очереди готовых процессов.

  1.  Что такое вектор прерываний?

Домашнее задание:

1. Конспект лекций

2. В ТЕТРАДИ ВЫПИСАТЬ ОТВЕТЫ НА ВОПРОСЫ

 
Лекция 10 (2/20)

Проверка Д/З:

1). У 3 чел. Проверить конспекты

2). 3 чел. спросить по предыдущему (см. выше)

Алгоритмы планирования

Дисциплины диспетчеризации и алгоритмы планирования процессов

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

  1.  создание и удаление задач;
  2.  планирование процессов и диспетчирезация задач;

3) синхронизация задач, обеспечение их средствами коммуникации.

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

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

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

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

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

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

Пречень дисциплин диспетчеризации и их классификация приведены на рис.1.

Рис. 1. Дисциплины диспетчеризации.

Рассмотрим кратко основные дисциплины диспетчеризации.

Рис.2. Дисциплина диспетчеризации FCFS

Самой простой в реализации является дисциплина 

FCFS (первым пришел – первым обслужен).

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

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

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

2. Невытесняющие алгоритмы – основаны на том, что активному потоку позволено выполняться до тех пор, пока он сам не отдаст управление ОС (не перейдёт в ожидание). Можно сказать, что рассмотренная дисциплина FCFS относиться к не вытесняющим.

Вытесняющий алгоритм, основанный на квантовании: в соответствии с этим алгоритмом каждому потоку предоставляется ограниченный непрерывный период процессорного времени – квант. Условия смены активного потока:

  1.  Поток завершился или покинул систему;
  2.  Произошла ошибка;
  3.  Поток перешёл в состояние ожидания;
  4.  Исчерпан квант процессорного времени.

Вытесняющий алгоритм, основанный на приоритетах.

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

Смешанные алгоритмы планирования.

В их основе лежит совмещение квантования и алгоритма приоритетов: квант времени, отводимый потоку, зависит от степени его приоритета. Перепланировка происходит, если:

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


Алгоритмы планирования процессов

Планирование процессов включает в себя решение следующих задач:

  •  определение момента времени для смены выполняемого процесса;
  •  выбор процесса на выполнение из очереди готовых процессов;
  •  переключение контекстов "старого" и "нового" процессов.

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

В соответствии с алгоритмами, основанными на квантовании, смена активного процесса происходит, если:

процесс завершился и покинул систему,

произошла ошибка,

процесс перешел в состояние ОЖИДАНИЕ,

исчерпан квант процессорного времени, отведенный данному процессу.

Процесс, который исчерпал свой квант, переводится в состояние ГОТОВНОСТЬ и ожидает, когда ему будет предоставлен новый квант процессорного времени, а на выполнение в соответствии с определенным правилом выбирается новый процесс из очереди готовых. Таким образом, ни один процесс не занимает процессор надолго, поэтому квантование широко используется в системах разделения времени. Граф состояний процесса, изображенный на рисунке 3, соответствует алгоритму планирования, основанному на квантовании. Кванты, выделяемые процессам, могут быть одинаковыми для всех процессов или различными. Кванты, выделяемые одному процессу, могут быть фиксированной величины или изменяться в разные периоды жизни процесса. Процессы, которые не полностью использовали выделенный им квант (например, из-за ухода на выполнение операций ввода-вывода), могут получить или не получить компенсацию в виде привилегий при последующем обслуживании. По разному может быть организована очередь готовых процессов: циклически, по правилу "первый пришел - первый обслужился" (FIFO) или по правилу "последний пришел - первый обслужился" (LIFO). Другая группа алгоритмов использует понятие "приоритет" процесса. Приоритет - это число, характеризующее степень привилегированности процесса при использовании ресурсов вычислительной машины, в частности, процессорного времени: чем выше приоритет, тем выше привилегии. Приоритет может выражаться целыми или дробными, положительным или отрицательным значением. Чем выше привилегии процесса, тем меньше времени он будет проводить в очередях. Приоритет может назначаться директивно администратором системы в зависимости от важности работы или внесенной платы, либо вычисляться самой ОС по определенным правилам, он может оставаться фиксированным на протяжении всей жизни процесса либо изменяться во времени в соответствии с некоторым законом. В последнем случае приоритеты называются динамическими. Существует две разновидности приоритетных алгоритмов: алгоритмы, использующие относительные приоритеты, и алгоритмы, использующие абсолютные приоритеты. В обоих случаях выбор процесса на выполнение из очереди готовых осуществляется одинаково: выбирается процесс, имеющий наивысший приоритет. По-разному решается проблема определения момента смены активного процесса. В системах с относительными приоритетами активный процесс выполняется до тех пор, пока он сам не покинет процессор, перейдя в состояние ОЖИДАНИЕ (или же произойдет ошибка, или процесс завершится). В системах с абсолютными приоритетами выполнение активного процесса прерывается еще при одном условии: если в очереди готовых процессов появился процесс, приоритет которого выше приоритета активного процесса. В этом случае прерванный процесс переходит в состояние готовности. На рисунке 3 показаны графы состояний процесса для алгоритмов с относительными (а) и абсолютными (б) приоритетами.

Рис.3. Графы состояний процессов в системах
(а) с относительными приоритетами; (б)с абсолютными приоритетами
 

Контрольные вопросы:

  •  Являются ли синонимами термины «планирование процессов» и «диспетчеризация процессов»? Ответ: Да
  •  Можно ли задачу планирования процессов целиком возложить на приложения?
  •  Понятия: задание, процесс, планирование процесса.
  •  Состояния существования процесса.
  •  Диспетчеризация процесса.
  •  Блок состояния процесса.
  •  Алгоритм диспетчеризации.
  •  Способ выбора процесса для диспетчеризации.
  •  Понятие события.
  •  Блок состояния события.
  •  Механизм установления соответствия между процессом и событием.

Домашнее задание:

Конспект лекций


Лекция 2 (2/4)

Проверка Д/З:

1). У 3 чел. Проверить конспекты + ОС будущего

2). 3 чел. спросить по предыдущему (см. выше)

Тема 2.4 Обслуживание ввода-вывода

Способы организации ввода-вывода.

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

Основными задачами подсистемы ввода-вывода являются:

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

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

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

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

□ Аппаратные драйверы делятся на блок-ориентированные, обеспечивающие доступ к устройствам с поблочной непосредственной адресацией, и байт-ориентированные, управляющие устройствами, поддерживающими побайтный не адресуемый обмен.

Одной из главных задач ОС является обеспечение

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

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

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

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

Основные понятия и концепции организации ввода/вывода в ОС

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

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

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

Помимо разделяемых устройств ввода/вывода существуют неразделяемые устройства.

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

Неразделяемые устройства — принтер.

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

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

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

Вообще говоря, понятие виртуального устройства шире, нежели использование этого термина для обозначения спулинга (SPOOLingsimultaneous peripheral operation on-line, то есть имитация работы с устройством в режиме «он-лайн»). Главная задача спулинга — создать видимость параллельного разделения устройства ввода/вывода с последовательным доступом, которое фактически должно использоваться только монопольно и быть закрепленным.

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

Основные системные таблицы ввода/вывода

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

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


1
. Таблица оборудования (или список) (equipment table),

Содержит информацию обо всех устройствах ввода/вывода, подключенных к ВС.

Каждый элемент этой таблицы называется UCB (unit control block, блок управления устройством ввода/вывода). Каждый элемент UCB таблицы оборудования, содержит следующую информацию об устройстве:

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

2. Таблица описания виртуальных логических устройств.

Предназначена для реализации еще одного принципа виртуализации устройств ввода/вывода — независимости от устройства. Желательно, чтобы программист не был озабочен учетом конкретных параметров (и/или возможностей) того или иного устройства ввода/вывода, которое установлено (или не установлено) в компьютер. Для программиста должны быть важны только самые общие возможности, характерные для данного класса устройств ввода/вывода, которыми он желает воспользоваться. Например, принтер должен уметь выводить (печатать) символы или графическое изображение. А накопитель на магнитных дисках — считывать или записывать по указанному адресу порцию данных. Хотя чаще всего программист и не использует прямую адресацию при работе с магнитными дисками, а работает на уровне файловой системы. Однако в таком случае уже разработчики файловой системы не должны зависеть от того, накопитель какого конкретного типа и модели, а также какого производителя используется в данном конкретном компьютере. Важным должен быть только сам факт существования накопителя, имеющего некоторое количество цилиндров, головок чтения/записи и секторов на дорожке магнитного дискa. Упомянутые значения количества цилиндров, головок и секторов должны быть взяты из элемента таблицы оборудования. При этом для программиста также не должно иметь значения, каким образом то или иное устройство подключено к вычислительной системе, а не только какая конкретная модель устройства используется. Поэтому в запросе на ввод/вывод программист указывает именно логическое имя устройства. Действительное устройство, которое сопоставляется виртуальному (логическому), выбирается супервизором с помощью второй таблицы, о которой мы сейчас говорим. Итак, способ подключения устройства, его конкретная модель и соответствующий ей драйвер содержатся в уже рассмотренной таблице оборудования. Но для того, чтобы связать некоторое виртуальное устройство, использованное программистом при создании приложения с системной таблицей, отображающей информацию о том, какое конкретно устройство и каким образом подключено к компьютеру, используется таблица описания виртуальных логических устройств.

3. Таблица прерываний.

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

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

Контрольные вопросы:

.

Домашнее задание:

Конспект лекций


Очередь запросов ввода-вывода.
Алгоритм обработки прерываний по вводу-выводу.

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

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

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

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

Проверка Д/З:

1). У 3 чел. Проверить конспекты + ОС будущего

2). 3 чел. спросить по предыдущему (см. выше)

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

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

Функции ОС по управлению памятью.

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

Функциями ОС по управлению памятью являются:

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

Цель управления оперативной памятью:

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

Механизмы управления памятью следующие:

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

Рис. 1. Схема управления оперативной памятью вычислительной системы

ЛАП – логическое адресное пространство;

ФАП – физическое адресное пространство.

Контрольные вопросы:

.

Домашнее задание:

Конспект лекций


Лекция 14 (2/28)

Проверка Д/З:

1). У 3 чел. Проверить конспекты

2). 3 чел. спросить по предыдущему (см. выше)

Типы адресов.

Для идентификации переменных и команд используются: логические имена (метки), виртуальные адреса и физические адреса (рис. 2).

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

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

Совокупность виртуальных адресов процесса называется виртуальным адресным пространством.

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

Рис. 2. Схема «Пространство и отображение» при виртуальной памяти

ЯП – ячейка памяти

Отображение производится в два этапа:

  •  системой программирования;
  •  ОС с помощью программы управления памятью.

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

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

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

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

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

«–» а во втором случае - преобразование каждого виртуального адреса происходит каждый раз при обращении по данному адресу. 

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

Контрольные вопросы:

.

Домашнее задание:

Конспект лекций


Лекция 15 (2/30)

Проверка Д/З:

1). У 3 чел. Проверить конспекты

2). 3 чел. спросить по предыдущему (см. выше)

Алгоритмы распределения реальной памяти.

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

Распределение памяти фиксированными разделами

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

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

Подсистема управления памятью в этом случае выполняет следующие задачи.

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

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

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

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

Распределение памяти динамическими разделами

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

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

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

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

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

□ После завершения процесса корректировка таблиц свободных и занятых областей.

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

Распределение памяти динамическими разделами лежит в основе подсистем управления памятью многих мультипрограммных операционных системах 60-70-х годов, в частности такой популярной операционной системы, как OS/360.

Перемещаемые разделы

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

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

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

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

Контрольные вопросы:

.

Домашнее задание:

  1.  Конспект лекций
  2.  Дома самостоятельно изучить Страничное и Сегментное распределение памяти. В тетради выписать достоинства и недостатки. 

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


Лекция 16 (2/32)

Проверка Д/З:

1). У 6 чел. Проверить конспекты

2). 3 чел. спросить по предыдущему (см. выше)

Свопинг и виртуальная память.

Методы распределения памяти с использованием дискового пространства

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

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

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

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

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

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

преобразует виртуальные адреса в физические.

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

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

Виртуализация памяти может быть осуществлена на основе двух различных подходов:

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

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

Свопинг

Разновидностью виртуальной памяти является свопинг.

На рисунке 8 показан график зависимости коэффициента загрузки процессора в зависимости от числа одновременно выполняемых процессов и доли времени, проводимого этими процессами в состоянии ожидания ввода-вывода.

Рис. 8. Зависимость загрузки процессора от числа задач и интенсивности ввода-вывода

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

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

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

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

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

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

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

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

□ Сегментная виртуальная память предусматривает перемещение данных сегментами — частями виртуального адресного пространства произвольного гщ-мера, полученными с учетом смыслового значения данных.

□ Сегментно-страничная виртуальная память использует двухуровневое деление: виртуальное адресное пространство делится на сегменты, а затем сегменты делятся на страницы. Единицей перемещения данных здесь является страница. Этот способ управления памятью объединяет в себе элементы обоих предыдущих подходов.

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

Страничное распределение

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

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

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

Размер страницы обычно выбирается равным степени двойки (2к): 512, 1024 и т.д., это позволяет упростить механизм преобразования адресов.

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

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

При загрузке операционная система создает для каждого процесса информационную структуру - таблицу страниц,

В таблице страниц:

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

Рис. 3. Страничное распределение памяти

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

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

Популярные критерии выбора:

дольше всего не использовавшаяся страница,

первая попавшаяся страница,

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

Рис.4. Механизм преобразования виртуального адреса в физический при страничной организации памяти

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


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

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

Рассмотрим механизм преобразования виртуального адреса в физический при страничной организации памяти (рисунок 4).

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

При каждом обращении к оперативной памяти аппаратными средствами выполняются следующие действия:

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

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

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

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

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

На рис. 5 представлен алгоритм обращения к страничной памяти. 

 

Рис. 5. Алгоритм обращения к страничной памяти.

Замечание к блок-схеме алгоритма обращения к страничной памяти.

Блоки 1 7 -аппаратная реализация;      8 17 -программная реализация.

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

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

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

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

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

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

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

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

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

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

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

Рис. 7. Схема преобразования виртуального адреса в физический для сегментно-страничной организации памяти

Метод представляет собой комбинацию сегментного и страничного распределения памяти и, вследствие этого, сочетает в себе достоинства обоих подходов.

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

Контрольные вопросы:

  1.  Что такое «виртуальный адрес», «виртуальное адресное пространство»?
  2.  Объясните сегментный способ организации виртуальной памяти.

Домашнее задание:

Конспект лекций


Лекция 2 (2/4)

Проверка Д/З:

1). У 3 чел. Проверить конспекты + ОС будущего

2). 3 чел. спросить по предыдущему (см. выше)

Раздел 3. МАШИННО-НЕЗАВИСИМЫЕ СВОЙСТВА

ОПЕРАЦИОННЫХ СИСТЕМ

Требования к знаниям:

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

Тема 3.1 Работа с файлами

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

Логическая организация файловой системы.

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

Цели и задачи файловой системы

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

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

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

Файловая система (ФС) — это часть операционной системы, включающая:

□ совокупность всех файлов на диске;

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

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

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

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

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

□ именование файлов;

□ программный интерфейс для приложений;

□ отображения логической модели файловой системы на физическую организацию хранилища данных;

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

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

В многопользовательских системах появляется еще одна задача: защита файлов одного пользователя от несанкционированного доступа другого пользователя.

Еще более сложными становятся функции ФС, которая работает в составе сетевой ОС.

Типы файлов

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

Обычные файлы, или просто файлы, содержат информацию произвольного характера, которую заносит в них пользователь или которая образуется в результате работы системных и пользовательских программ. Большинство современных операционных систем (например, UNIX, Windows, OS/2) никак не ограничивает и не контролирует содержимое и структуру обычного файла. Содержание обычного файла определяется приложением, которое с ним работает. Например, текстовый редактор создает текстовые файлы, состоящие из строк символов, представленных в каком-либо коде. Это могут быть документы, исходные тексты программ и т. п. Текстовые файлы можно прочитать на экране и распечатать на принтере. Двоичные файлы не используют коды символов, они часто имеют сложную внутреннюю структуру, например исполняемый код программы или архивный файл. Все операционные системы должны уметь распознавать хотя бы один тип файлов — их собственные исполняемые файлы.

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

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

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

Иерархическая структура файловой системы

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

Граф, описывающий иерархию каталогов, может быть деревом или сетью. Каталоги образуют дерево, если файлу разрешено входить только в один каталог (рис. 7.3, б), и сеть — если файл может входить сразу в несколько каталогов (рис. 7.3, е). Например, в MS-DOS и Windows каталоги образуют древовидную структуру, а в UNIX — сетевую. В древовидной структуре каждый файл является листом. Каталог самого верхнего уровня называется корневым каталогом, или корнем (root).

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

Частным случаем иерархической структуры является одноуровневая организация, когда все файлы входят в один каталог (рис. 7.3, а).

Имена файлов

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

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

До сравнительно недавнего времени эти границы были весьма узкими. Так, в популярной файловой системе FAT длина имен ограничивались схемой 8.3 (8 символов — собственно имя, 3 символа — расширение имени), а в файловой системе s5, поддерживаемой многими версиями ОС UNIX, простое символьное имя не могло содержать более 14 символов. Однако пользователю гораздо удобнее работать с длинными именами, поскольку они позволяют дать файлам легко запоминающиеся названия, ясно говорящие о том, что содержится и этом файле, Поэтому современные файловые системы, а также усовершенствованные варианты уже существовавших файловых систем, как правило, поддерживают длинные простые символьные имена файлов. Например, в файловых системах NTFS и FAT32, входящих в состав операционной системы Windows NT, имя файла может содержать до 255 символов.

Примеры простых имен файлов и каталогов:

questul.doc

task-entran.exe

приложение к CD 254L на русском языке.doc

installable filesystem manager.doc

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

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

Полное имя является составным, в котором простые имена отделены друг от друга принятым в ОС разделителем. Часто в качестве разделителя используется прямой или обратный слеш, при этом принято не указывать имя корневого каталога. На рис. 7.3, б два файла имеют простое имя main.exe, однако их составные имена /depart/main.ехе и /user/anna/main.exe различаются.

В древовидной файловой системе между файлом и его полным именем имеется взаимно однозначное соответствие «один файл — одно полное имя».

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

Относительное имя файла определяется через понятие «текущий каталог». Для каждого пользователя в каждый момент времени один из каталогов файловой системы является текущим, причем этот каталог выбирается самим пользователем по команде ОС. Файловая система фиксирует имя текущего каталога, чтобы затем использовать его как дополнение к относительным именам для образования полного имени файла. При использовании относительных имен пользователь идентифицирует файл цепочкой имен каталогов, через которые проходит маршрут от текущего каталога до данного файла. Например, если текущим каталогом является каталог /user, то относительное имя файла /user/anna/main.exe выглядит следующим образом: anna/ main.exe.

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

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

Атрибуты файлов

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

  1.  тип файла (обычный файл, каталог, специальный файл и т. п.);
  2.  владелец файла;
  3.  создатель файла;
  4.  пароль для доступа к файлу;
  5.  информация о разрешенных операциях доступа к файлу;
  6.  времена создания, последнего доступа и последнего изменения; Отекущий размер файла;
  7.  максимальный размер файла;
  8.  признак «только для чтения»;
  9.  признак «скрытый файл»;
  10.  признак «системный файл»;
  11.  признак «архивный файл»;
  12.  признак «двоичный/символьный»;
  13.  признак «временной» (удалить после завершения процесса);
  14.  признак блокировки;
  15.  длина записи в файле;
  16.  указатель на ключевое поле в записи;
  17.  длина ключа.

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

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

Значения атрибутов файлов могут непосредственно содержаться в каталогах, как это сделано в файловой системе MS-DOS (рис. 7.6, а). На рисунке представлена структура записи в каталоге, содержащая простое символьное имя и атрибуты файла. Здесь буквами обозначены признаки файла: R — только для чтения, А — архивный, Н — скрытый, S — системный.

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

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

Логическая организация файла

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

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

Модель файла, в соответствии с которой содержимое файла представляется неструктурированной последовательностью (потоком) байт, стала популярной вместе с ОС UNIX, а теперь она широко используется в большинстве современных ОС, в том числе в MS-DOS, Windows NT/2000, NetWare. Неструктурированная модель файла позволяет легко организовать разделение файла между несколькими приложениями: разные приложения могут по-своему структурировать и интерпретировать данные, содержащиеся в файле.

Другая модель файла, которая применялась в ОС OS/360, DEC RSX и VMS, а в настоящее время используется достаточно редко, - это структурированный файл. В этом случае поддержание структуры файла поручается файловой системе. Файловая система видит файл как упорядоченную последовательность логических записей. Приложение может обращаться к ФС с запросами на ввод-вывод на уровне записей, например «считать запись 25 из файла FILE.DOC». ФС должна обладать информацией о структуре файла, достаточной для того, чтобы выделить любую запись. ФС предоставляет приложению доступ к записи, а вся дальнейшая обработка данных, содержащихся в этой записи, выполняется приложением. Развитием этого подхода стали системы управления базами данных (СУБД), которые поддерживают не только сложную структуру данных, но и взаимосвязи, между ними.

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

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

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

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

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

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

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

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

Контрольные вопросы:

.

Домашнее задание:

Конспект лекций


Лекция 2 (2/4)

Проверка Д/З:

1). У 3 чел. Проверить конспекты + ОС будущего

2). 3 чел. спросить по предыдущему (см. выше)

Тема 3.2 Планирование заданий

Введение в планирование. Категории алгоритмов планирования. Задачи алгоритмов планирования. Планирование в системах пакетной обработки данных. Планирование в интерактивных системах. Планирование в системах реального времени.

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

  •  с относительными приоритетами, то есть обслуживание не прерывается даже при наличии запросов с более высокими приоритетами. После окончания обслуживания данного запроса обслуживается запрос с наивысшим приоритетом. Для организации такой дисциплины необходимо в программе обслуживания данного запроса наложить маски на все остальные сигналы прерывания или просто отключить систему прерываний;
  •  с абсолютными приоритетами, то есть всегда обслуживается прерывание с наивысшим приоритетом. Для реализации этого режима необходимо на время обработки прерывания замаскировать все запросы с более низким приоритетом. При этом возможно многоуровневое прерывание, то есть прерывание программ обработки прерываний. Число уровней прерывания в этом режиме изменяется и зависит от приоритета запроса;
  •  по принципу стека, или, как иногда говорят, по дисциплине LCFS (last come - а прерывания по нарушению питания;

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

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

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

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

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

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

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

Повторно используемые программные модули, в свою очередь, могут быть непривилегированными, привилегированными и реентерабельными.

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

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

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

Рис. 5. Структура привилегированного программного модуля

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

Рис. 6. Реентабельный программный модуль

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

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

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

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

Планирование в системах реального времени

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

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

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

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

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

Контрольные вопросы:

.

Домашнее задание:

Конспект лекций


Лекция 2 (2/4)

Проверка Д/З:

1). У 3 чел. Проверить конспекты + ОС будущего

2). 3 чел. спросить по предыдущему (см. выше)

Тема 3.3 Распределение ресурсов

Взаимоблокировки. Обнаружение и устранение взаимоблокировок. Избежание взаимоблокировок. Предотвращение взаимоблокировок.

ОС как система управления ресурсами

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

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

ПРИМЕЧАНИЕ --------------------------------------------------------------------------------------------------

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

-----------------------------------------------------------------------------------------------------------------------------------------

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

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

Управление ресурсами включает решение следующих общих, не зависящих от типа ресурса задач:

□ планирование ресурса — то есть определение, какому процессу, когда и в каком количестве (если ресурс может выделяться частями) следует выделить данный ресурс;

□ удовлетворение запросов на ресурсы;

□ отслеживание состояния и учет использования ресурса — то есть поддержание оперативной информации о том, занят или свободен ресурс и какая доля ресурса уже распределена;

□ разрешение конфликтов между процессами.

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

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

Средства синхронизации и взаимодействия процессов

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

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

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

  •  независимые (не нуждающиеся во взаимодействии друг с другом) процессы;
  •  асинхронные (взаимодействующие и нуждающиеся в периодической синхронизации) процессы.

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

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

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

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

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

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

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

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

Рис.1. Пример необходимости синхронизации

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

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

счетчик := счетчик + 1.

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

Важным понятием синхронизации процессов является понятие "критическая секция" программы (CS).

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

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

Другим способом является использование блокирующих переменных. С каждым разделяемым ресурсом связывается двоичная переменная, которая принимает значение 1, если ресурс свободен (то есть ни один процесс не находится в данный момент в критической секции, связанной с данным процессом), и значение 0, если ресурс занят. На рис.2 показан фрагмент алгоритма процесса, использующего для реализации взаимного исключения доступа к разделяемому ресурсу D блокирующую переменную F(D). Перед входом в критическую секцию процесс проверяет, свободен ли ресурс D. Если он занят, то проверка циклически повторяется, если свободен, то значение переменной F(D) устанавливается в 0, и процесс входит в критическую секцию. После того, как процесс выполнит все действия с разделяемым ресурсом D, значение переменной F(D) снова устанавливается равным 1.

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

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

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

На рисунке 3 приведена временная диаграмма исполнения команды "Проверить и установить".

Синхронизация процессов на основе семафорных операций

Для устранения активного ожидания процесса CPU может быть использован так называемый аппарат событий. С помощью этого средства могут решаться не только проблемы взаимного исключения, но и более общие задачи синхронизации процессов. В разных операционных системах аппарат событий реализуется по-своему, но в любом случае используются системные функции аналогичного назначения, которые условно назовем WAIT(x) и POST(x), где x - идентификатор некоторого события. На рис. 4 показан фрагмент алгоритма процесса, использующего эти функции. Если ресурс занят, то процесс не выполняет циклический опрос, а вызывает системную функцию WAIT(D), здесь D обозначает событие, заключающееся в освобождении ресурса D. Функция WAIT(D) переводит активный процесс в состояние ОЖИДАНИЕ и делает отметку в его дескрипторе о том, что процесс ожидает события D. Процесс, который в это время использует ресурс D, после выхода из критической секции выполняет системную функцию POST(D), в результате чего операционная система просматривает очередь ожидающих процессов и переводит процесс, ожидающий события D, в состояние ГОТОВНОСТЬ.

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

V(S) : переменная S увеличивается на 1 одним неделимым действием; выборка, инкремент и запоминание не могут быть прерваны, и к S нет доступа другим процессам во время выполнения этой операции.

P(S) : уменьшение S на 1, если это возможно. Если S=0, то невозможно уменьшить S и остаться в области целых неотрицательных значений, в этом случае процесс, вызывающий P-операцию, ждет, пока это уменьшение станет возможным. Успешная проверка и уменьшение также является неделимой операцией.

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

Рассмотрим использование семафоров для взаимоисключения процессов.

1. Двоичный семафор

С каждым семафором связывается список процессов, ожидающих разрешения пройти семафор.

ОС может выполнить три действия над процессами:

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

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

Рис.5. Временная диаграмма для двоичного семафора (S)

До момента t1 ресурс был не занят. В момент t1 процесс Pr1, выполняет операцию P(S) и входит в критический участок (CS). В момент t2 процесс Pr2 выполняет операцию P(S) – занять ресурс, это приводит к изменению: S = -1 – означает, что Pr2 в состоянии блокирования.В момент t3 – конец критического участка для процесса Pr1. Выполняется операция V(S) – освободить, это приводит к увеличению значения S на единицу (т.е. S=0). Для процесса блокированного (Pr2) это сигнал на разблокировку и предоставления ему ресурса. В момент t4 процесс Pr2 освобождает ресурс, выполняется операция V(S), которая изменяет значение S на 1 (т.е. S=1).

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

Рис. 6. Временная диаграмма для двоичного семафора (семафоры - S1 и S2)

Б – блокировано, СS1 и CS2 – критические участки 1 и 2, идентифицированные семафорами S1 и S2.

2. Универсальный семафор (считающий семафор)

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

Числовые семафоры могут принимать отрицательные значения: если S отрицательно, то |S| - это число процессов, заблокированных по S (рис. 7).

P(S):

запрет прерываний

 S:=S-1

 IF (S<0)

  блокировать процесс по S

  выбрать другую задачу

 FI

разрешить прерывание

V(S):

запрет прерываний

 S:=S+1

IF (S<=0)

  деблокировать любой процесс,

  ожидающий S

 FI

разрешить прерывание

Рис. 7. Пример временной диаграммы считающего семафора (1 ресурс, семафор - S, 5 процессов).

Начальное значение S – количество процессов, которые могут пройти семафор до первой операции V(S) (например у двоичного – начальное значение S=1).

Выводы: на приведенных выше примерах мы рассмотрели варианты решения проблемы взаимного исключения процессов, но взаимная блокировка невозможна, т.к. процессы, пытающиеся использовать CS, будут выполняться последовательно, когда S=1.

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

Организация последовательного (а не параллельного) доступа к ресурсам с использованием мьютексов становится несложной, поскольку в каждый конкретный момент только одна задача может владеть этим объектом. Для того, чтобы объект mutex стал доступен задачам (потокам), принадлежащим разным процессам, при создании ему необходимо присвоить имя. Потом это имя нужно передать «по наследству» задачам, которые должны его использовать для взаимодействия. Для этого вводятся специальные системные вызовы (CreateMutex), в которых указываются начальное значение мьютекса, его имя и, возможно, атрибуты защиты. Если начальное значение мьютекса равно true, то считается, что задача, создающая этот объект, будет им сразу владеть. Можно указать в качестве начального значение false в этом случае мьютекс не принадлежит ни одной из задач и только специальным обращением к нему можно изменить его состояние.

Для работы с мьютексом имеется несколько функций. Помимо уже упомянутой функции создания такого объекта (CreateMutex), есть функции открытия (ОреnMutex), ожидания событий (WaitForSingleObject и WaitForMultipleObjects) и, наконец, освобождение этого объекта (ReleaseMutex).

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

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

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

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

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

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

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

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

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

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

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


Тупики и методы борьбы с ними

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

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

Тупик состояние ожидания некоторого события, которое никогда не произойдет (как правило, это круговое ожидание ресурсов).

Система находится в тупиковой ситуации, если один или более процессов находятся в состоянии тупика.

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

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

Существует четыре основных стратегии работы с тупиками.

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

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

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

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

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

4. Обнаружение тупиков (detection) — подход, который допускает возникновение тупиков, определяет процессы и ресурсы, которые вовлечены в тупиковую ситуацию, и пытается вывести систему из нее.

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

1. Граф распределения ресурсов

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

Рис. 1. Примеры графа распределения ресурсов

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

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

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

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

Рис. 2. Моделирование взаимного исключения с помощью сети Петри

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

Позиции, помеченные КУ1 и КУ2, представляют соответственно критические участки первого и второго процесса. При текущей разметке могут быть запущены переходы Р11 или Р21. Если запускается переход Р11, то позиция КУ1 получает пометку (система входит в критический участок). При этом второй процесс не может войти в КУ2, поскольку разделяемая позиция является пустой. Теперь может быть запущен только переход Р12. После его запуска система возвращается в исходное состояние.

3. Вычислительные схемы

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

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

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

Рис. 3. (a) фрагменты программ А и В, разделяющих принтер и диск;
(б) взаимная блокировка (клинч); (в) очередь к разделяемому диску;
(г) независимое использование ресурсов

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

Необходимые условия возникновения тупиковых ситуаций.

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

Проблема тупиков включает в себя следующие задачи:

предотвращение тупиков,

распознавание тупиков,

восстановление системы после тупиков.

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

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

Методы борьбы с тупиками

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

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

  •  предотвращение тупика;
  •  обход тупика;
  •  распознавание тупика с последующим восстановлением.

Предотвращение тупиков

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

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

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

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

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

Условие кругового ожидания можно исключить, предотвращая образование цепи запросов. Это можно обеспечить с помощью принципа иерархического выделения ресурсов. Все ресурсы образуют некоторую иерархию. Процесс, затребовавший ресурс на одном уровне, может затем потребовать ресурсы только на более высоком уровне. Он может освободить ресурсы на данном уровне только после освобождения всех ресурсов на всех более высоких уровнях. После того как процесс получил, а потом освободил ресурсы данного уровня, он может запросить ресурсы на том же самом уровне. Пусть имеются процессы ПР1 и ПР2, которые могут иметь доступ к ресурсам R1 и R2, причем R2 находится на более высоком уровне иерархии. Если ПР1 захватил R1, то ПР2 не может захватить R2, так как доступ к нему проходит через доступ к R1, который уже захвачен ПР1. Таким образом, создание замкнутой цепи исключается. Иерархическое выделение ресурсов часто не дает никакого выигрыша, если порядок использования ресурсов, определенный в описании процессов, отличается от порядка уровней иерархии. В этом случае ресурсы будут использоваться крайне неэффективно.

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

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

Распознавание тупика требует дальнейшего восстановления.

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

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

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

Контрольные вопросы:

Проблемная ситуация

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

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

. Вопросы для самоконтроля:

  1.  Какие вычислительные процессы называются параллельными и почему? Какие параллельные процессы называются независимыми, а какие – взаимодейтсвующими?
  2.  Объясните команду “проверка и установка”.
  3.  Что такое самфоры Дейкстры? Чем обеспечивается взаимное исключение при выполнении P- и V-примитивов?
  4.  Что такое mutex?
  5.  Изложите алгоритм решения задачи “поставщик-потребитель”.
  6.  Изложите алгоритм решения задачи “читатели-писатели”.
  7.  Что такое монитора Хоара?

Вопросы для самоконтроля:

  1.  Что такое тупиковое состояние? Перечислите условия, при которых возникает тупик.
  2.  Какие стратегии работы с тупиками вы знаете?
  3.  Какие графические средства используются для работы с тупиками?
  4.  Что собой представляет «предотвращение тупика»? Как его можно реализовать?
  5.  Что представляет собой «обход тупика»? Приведите алгоритм банкира Дейкстры.
  6.  Что такое «опасное состояние»? Приведите пример опасного состояния.
  7.  Изложите алгоритм обнаружения тупика по наличию замкнутой цепочки запросов.
  8.  

Домашнее задание:

Конспект лекций


Лекция 2 (2/4)

Проверка Д/З:

1). У 3 чел. Проверить конспекты + ОС будущего

2). 3 чел. спросить по предыдущему (см. выше)

Тема 3.4 Защищенность и отказоустойчивость операционных систем

Основные понятия безопасности. Классификация угроз. Базовые технологии безопасности. Аутентификация, авторизация, аудит.

Отказоустойчивость файловых и дисковых систем. Восстанавливаемость файловых систем. Избыточные дисковые подсистемы RAID.

Защита данных и администрирование

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

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

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

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

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

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

Контрольные вопросы:

.

Домашнее задание:

Конспект лекций


Лекция 2 (2/4)

Проверка Д/З:

1). У 3 чел. Проверить конспекты + ОС будущего

2). 3 чел. спросить по предыдущему (см. выше)

Раздел 4. РАБОТА В ОПЕРАЦИОННЫХ СИСТЕМАХ DOS И WINDOWS 2000

Требования к знаниям:

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

Требования к умениям:

  •  работать в операционных системах и средах;
  •  настраивать операционные системы;
  •  устанавливать операционные системы;
  •  восстанавливать операционные системы после сбоя;

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

Структура операционной системы MS-DOS. Структура операционной системы Windows 2000. Загрузка операционной системы. Диагностика проблем, возникающих на этапе загрузки.

Контрольные вопросы:

.

Домашнее задание:

Конспект лекций

Практическая работа №1

Изучение структуры операционной системы Windows 2000.


Лекция 2 (2/4)

Проверка Д/З:

1). У 3 чел. Проверить конспекты + ОС будущего

2). 3 чел. спросить по предыдущему (см. выше)

Тема 4.2 Интерфейс пользователя

Интерфейс пользователя ОС. Приглашение системы. Ввод команд. Запуск и выполнение команд. Active Desktop. Индивидуальная настройка интерфейса пользователя.

Контрольные вопросы:

.

Домашнее задание:

Конспект лекций

Практическая работа №2

Изучение работы с командами в операционной системе MS-DOS.

Практическая работа №3

Изучение работы с командами в операционной системе Windows 2000.

Практическая работа №4

Индивидуальная настройка интерфейса пользователя в операционной системе Windows 2000.


Лекция 2 (2/4)

Проверка Д/З:

1). У 3 чел. Проверить конспекты + ОС будущего

2). 3 чел. спросить по предыдущему (см. выше)

Тема 4.3 Организация хранения данных

Работа с файлами и каталогами. Работа с дисками. Управление дисками, обеспечение отказоустойчивости дисковых систем.

Контрольные вопросы:

.

Домашнее задание:

Конспект лекций

Практическая работа №5

Работа с файлами и каталогами в ОС MS-DOS и Windows 2000.

Практическая работа №6

Работа с дисками в операционных системах MS-DOS и Windows 2000.

Практическая работа №7

Монтирование файловых систем.

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

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

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

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

Рассмотрим, как осуществляется эта операция на примере ОС UNIX.

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

Файловая система, расположенная на системном диске, назначается корневой. Для связи иерархий файлов в корневой файловой системе выбирается некоторый существующий каталог, в данном примере — каталог man. После выполнения монтирования выбранный каталог man становится корневым каталогом второй файловой системы. Через этот каталог монтируемая файловая система подсоединяется как поддерево к общему дереву (рис. 7.5).

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


Лекция 2 (2/4)

Проверка Д/З:

1). У 3 чел. Проверить конспекты + ОС будущего

2). 3 чел. спросить по предыдущему (см. выше)

Тема 4.4 Средства управления и обслуживания

 

Пакетные командные файлы. Конфигурирование системы. Диспетчер задач. Установка и удаление программ. Работа с приложениями.

Контрольные вопросы:

.

Домашнее задание:

Конспект лекций

Практическая работа №8

Работа с пакетными файлами.

Практическая работа №9

Конфигурирование файлов autoexec.bat и config.sys.

Практическая работа №10

Управление процессами в операционной системе.

Практическая работа №11

Установка и удаление программ в Windows 2000.


Лекция 2 (2/4)

Проверка Д/З:

1). У 3 чел. Проверить конспекты + ОС будущего

2). 3 чел. спросить по предыдущему (см. выше)

Тема 4.5 Утилиты операционной системы

 

Работа с операционной оболочкой. Работа с текстовыми файлами в различных операционных оболочках. Работа с архиваторами. Работа с антивирусными программами.

Контрольные вопросы:

.

Домашнее задание:

Конспект лекций

Практическая работа №12

Работа в Проводнике.


Практическая работа №13

Работа в Total Commander

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

Однако и дружественный интерфейс, и сетевые функции появились у операционных систем персональных компьютеров не сразу. Первая версия наиболее популярной операционной системы раннего этапа развития персональных компьютеров -- MS-DOS компании Microsoft — была лишена этих возможностей. Это была однопрограммная однопользовательская ОС с интерфейсом командной строки, способная стартовать с. дискеты. Основными задачами для нее были управление файлами, расположенными на гибких и жестких дисках в UNIX-подобной иерархической файловой системе, а также поочередный запуск программ. MS-DOS не была защищена от программ пользователя, так как процессор Intel 8088 не поддерживал привилегированного режима. Разработчики первых персональных компьютеров считали, что при индивидуальном использовании компьютера и ограниченных возможностях аппаратуры нет смысла в поддержке мультипрограммирования, поэтому в процессоре не были предусмотрены привилегированный режим и другие механизмы поддержки мультипрограммных систем. Недостающие функции для MS-DOS и подобных ей ОС компенсировались внешними программами, предоставлявшими пользователю удобный графический интерфейс (например, Norton Commander) или средства тонкого управления дисками (например, PC Tools). Наибольшее влияние на развитие программного обеспечения для персональных компьютеров оказала операционная среда Windows компании Microsoft, представлявшая собой надстройку над MS-DOS. Сетевые функции также реализовывались в основном сетевыми оболочками, работавшими поверх ОС. При сетевой работе всегда необходимо поддерживать многопользовательский режим, при котором один пользователь — интерактивный, а остальные получают доступ к ресурсам компьютера по сети. В таком случае от операционной системы требуется хотя бы некоторый минимум функциональной поддержки многопользовательского режима. История сетевых средств MS-DOS началась с версии 3.1. Эта версия MS-DOS добавила к файловой системе необходимые средства блокировки файлов и записей, которые позволили более чем одному пользователю иметь доступ к файлу. Пользуясь этими функциями, сетевые оболочки могли обеспечить разделение файлов между сетевыми пользователями.

Практическая работа №14

Работа в Far.

Практическая работа №15

Работа с текстом в Total Commander и Far.

Практическая работа №16

Работа с архиваторами.