- •Вычислительные машины, системы и сети
- •Оглавление
- •Введение
- •Раздел 1. Центральный процессор
- •1.1. Архитектура центрального процессора
- •1.2. Организация памяти и способы адресации
- •1.3. Общая характеристика системы команд
- •1.4. Команды пересылки данных
- •1.5. Арифметические команды
- •1.6. Сдвиги и логические команды
- •1.7. Команды обработки строк данных
- •1.8. Команды передачи управления
- •1.9. Команды управления процессором
- •Раздел 2. Арифметический процессор
- •2.1. Архитектура арифметического процессора
- •2.2. Программная модель арифметического процессора
- •2.3. Система команд арифметического процессора
- •Раздел 3. Эволюция характеристик цп
- •3.1. Архитектура цп Pentium
- •3.2. Программная модель цп Pentium
- •3.3. Система команд ммх-расширения
- •3.4. Система команд sse-расширения
- •Раздел 4. Системные устройства вм
- •4.1. Программируемый контроллер прерываний
- •4.2. Программируемый контроллер пдп
- •4.3. Системный таймер
- •4.4. Системные регистры
- •Раздел 5. Защищенный режим работы вм
- •5.1. Максимальный режим работы цп
- •5.2. Дескрипторы и шлюзы
- •Контрольные вопросы
- •Раздел 6. Язык ассемблера
- •6.1. Программирование на языке ассемблера
- •6.2. Директивы языка ассемблера asm-86
- •6.3. Использование регистров Pentium
- •6.4. Директивы языка ассемблера asm-89
- •6.5. Модели программ, компиляция и отладка
- •Контрольные вопросы
- •Раздел 7. Специфика вычислительных систем
- •7.1. Мультипроцессорные системы
- •7.2. Управление процессами
- •7.3. Семафорные операции
- •7.4. Разделение общих процедур
- •7.5. Управление памятью
- •Контрольные вопросы
- •Раздел 8. Специализированные процессоры и вм
- •8.1. Процессор ввода-вывода
- •8.2. Программная модель процессора ввода-вывода
- •8.3. Система команд процессора ввода-вывода
- •8.4. Процессор операционной системы
- •Контрольные вопросы
- •Раздел 9. Назначение и топология сетей
- •9.1. Особенности и назначение сетей различных типов
- •Топология «звезда».
- •9.2. Кодирование информации
- •9.3. Назначение и структура пакетов
- •9.4. Методы управления обменом
- •9.5. Эталонные модели
- •Контрольные вопросы
- •Раздел 10. Практическая реализация сетей
- •10.1. Адресация в сетях
- •10.2. Основные службы Internet
- •10.3. Особенности web-дизайна
- •10.4. Особенности и тенденции развития Internet
- •Контрольные вопросы
- •Глоссарий
- •Литература
7.3. Семафорные операции
В мультипрограммных системах процессам разрешается разделять общие программные, аппаратные и информационные ресурсы. Во многих ситуациях одновременно обращаться к общему ресурсу и модифицировать его может только один процесс, а другие процессы должны ожидать завершения его операций. Такой ресурс, обычно называемый последовательно используемым, должен быть защищен от одновременного доступа и модификации двумя или более процессами. Ресурсом этого типа может быть аппаратный ресурс (принтер, сканер, сетевая плата), файл данных или разделенная область памяти.
Рассмотрим, например, файл персонала, который разделяется процессами 1 и 2. Предположим, что процесс 1 выполняет введения, удаления и изменения, а процесс 2 упорядочивает файл в алфавитном порядке по фамилиям. При последовательном доступе файл либо модифицируется процессом 1, а затем сортируется процессом 2, либо наоборот, Однако, если разрешить обоим процессам одновременный доступ к файлу, результаты окажутся непредсказуемыми и почти наверняка неправильными. Решение данной задачи заключается в том, чтобы разрешить одновременно только одному процессу выполнять его критическую секцию кода, т. е. секцию кода, которая осуществляет доступ к последовательно используемому ресурсу.
Предотвращение ситуации, когда два и более процессов одновременно выполняют свои критические секции при доступе к разделенному ресурсу, называется взаимным исключением. Один из способов реализации взаимного исключения — использовать флажки.
Флажок, используемый для резервирования разделенного ресурса, называется семафором, а операции запроса и освобождения ресурса обычно называются семафорными операторами Р и V:
P: xor al,al
Check: xchg al,semaphore
test al,al
jz Check
Критическая
секция
…
…
V: mov semaphore,1
Если semaphore = 1 при выполнении команды xchg, он сбрасывается, а в al оказывается 1. Даже если система переключает процессы после команды xchg, новый процесс не сможет войти в свою критическую секцию, так как semaphore уже сброшен. Такое решение стало возможным благодаря загрузке и установке операнда одной командой (именно командой xchg) и может быть применено к любому числу процессов.
Как видно из приведенного примера, оператор Р легко реализуется командами xor, xchg, test и jz, а оператор V — командой mov. Однако, при такой реализации, когда один процесс находится в критической секции, другие процессы, претендующие на тот же самый ресурс, будут простаивать в циклах ожидания операторов Р, что приводит к значительным потерям времени.
Для лучшего использования времени ЦП операторы Р и V следует модифицировать следующим образом:
P: xor al,al
xchg al,semaphore
test al,al
jnz Use
Перевод
текущего процесса в
заблокированное
состояние
…
…
jmp P
U
Критическая
секция
…
…
V: mov semaphore,1
Разблокирование
процессов, ожидающих светофора
…
…
Если семафор сброшен, вместо повторения цикла ожидания текущий процесс переводится в заблокированное состояние, а ЦП начинает выполнять выбранный процесс, находящийся в состоянии готовности. Аналогично в операторе V после установки семафора в 1 осуществляется пересылка процессов, которые были заблокированы из-за недоступности разделенного ресурса, из списка заблокированных процессов в список процессов, находящихся в состоянии готовности. Первый из этих процессов, который возобновляет выполнение, сможет войти в свою критическую секцию.
Рис. 7.6. Синхронизация процессов А и В
Рассмотренный метод не только экономит время ЦП, но может применяться для синхронизации двух процессов или для передачи сообщения от одного процесса другому. На рис. 7.6 процессы А и В должны взаимодействовать в определенных точках. Они могут выполняться в режиме с разделением времени до тех пор, пока процесс В не достигает точки РВ1, где он должен ожидать сообщения или обращаться к результатам, полученным процессом А. После точки РА1 оба процесса вновь выполняются в режиме разделения времени до достижения точки РА2. В этой точке процесс А должен получать сообщение от процесса В или синхронизироваться с ним.