Э. Таненбаум - Архитектура компьютера (1127755), страница 139
Текст из файла (страница 139)
Все эти механизмы работают не с процессами, а с программными потоками, поэтому когда поток блокируется на семафоре, это никак не влияет на другие программные потоки этого процесса— они просто продолжают работать. Семафор создается с помощью функции Сгеа1е5евардоге АР!, которая может установить его на определенное значение и определить его максимальное значение. Семафоры являются объектами ядра, поэтому они имеют дескрипторы безопасности и описатели. Описатель семафора можно продублировать с помощью функции Оцр11сатейап61е и передать другому процессу, поэтому один семафор может обеспечить синхронизацию нескольких процессов.
Поддерживаются также функции цр и 6оип, хотя они имеют другие названия: йе1еазе5евардоге (для цр) и ва11Гог51пО1 еОьзес1 (для с1отчп). можно определить для функции ва1тГог51 пО1 еОьзес1 предельное время простоя, и тогда вызывающий программный поток в конце концов может быть разблокирован, даже если семафор сохраняет значение О (однако таймеры способствуют возникновению условий гонок). краткое содержание главы 549 Мьютексы тоже являются объектами ядра, но они проще семафоров, поскольку у них нет счетчиков. Они, по сути, представляют собой объекты с функциями АР1 для блокирования (Иа1«Ро«51пд1еОЬЗес«) и разблокирования (ке1еазейи«ех). Описатели мьютексов, как и описатели семафоров, можно дублировать и передавать другим процессам, так что программные потоки разных процессов могут иметь доступ к одному и тому же мьютексу.
Третий механизм синхронизации основан на критических секциях. Критические секции похожи на мьютексы, если не считать их локальности по отношению к адресному пространству исходного программного потока. Поскольку критические секции не являются объектами ядра, у них нет описателей и дескрипторов безопасности, поэтому их нельзя передавать другим процессам.
Блокирование и разблокирование осуществляется с помощью функций Еп«е«С«1«1«а15ес«агап и ЕеачеС«1«1са15ес«1оп соответственно. Так как эти функции АР1 выполняются исключительно в пользовательском пространстве, они работают гораздо бь«стрее, чем мьютексы. Последний механизм связан с использованием объектов ядра, которые называются событиями. Если программному потоку нужно дождаться того или иного события, он вызывает Иа1«Ро«51пв1еОЬбесЬ.
С помощью функции 5е«Ечеп«можно разблокировать один ожидающий программный поток, а с помощью функции Ри1зеЕчеп« вЂ” все ожидающие. Существует несколько видов событий, которые имеют по несколько параметров. События, мьютексы и семафоры можно определенным образом назвать и сохранить в файловой системе, как именованные каналы. Можно синхронизировать работу двух и более процессов путем открытия одного н того же события, мьютекса нли семафора.
В этом случае им не нужно создавать объект, а затем дублировать описатели, хотя такой подход тоже возможен. Краткое содержание главы Операционную систему можно считать интерпретатором определенных особенностей архитектуры, которых нет на уровне архитектуры команд. Главными среди них являются виртуальная память, виртуальные команды ввода-вывода и средства поддержания параллелизма. Виртуальная память нужна для того, чтобы позволить программам использовать больше адресного пространства, чем есть у машины на самом деле, или предоставить удобный механизм зашиты и разделения памяти.
Виртуальную память можно реализовать путем «чистого» разбиения на страницы, «чистой» сегментации или того и другого вместе. При страничной организации памяти адресное пространство разбивается на равные по размеру виртуальные страницы. Одни из них отображаются на физические страничные кадры, другие — нет. Обращение к отображенной странице преобразуется диспетчером памяти в правильный физический адрес. Обращение к неотображенной странице вызывает ошибку отсутствия страницы.
Реп«(пш 4 и 111«гаЯРАВС П1 имеют сложные диспетчеры памяти, поддерживающие виртуальную память и страничную организацию. Самой важной абстракцией ввода-вывода на этом уровне является файл. Файл состоит из последовательности байтов, или логических записей, которые можно 550 Глава 6. Уровень операционной системы читать и записывать, не зная при этом о том, как работают диски и другие устройства ввода-вывода. Доступ к файлам может осуществляться последовательно, непоследовательно по номеру записи и непоследовательно по ключу. Для груп- пирования файлов используются каталоги.
Файлы могут храниться в последовательных секторах, а могут быть разбросаны по всему диску. В последнем случае требуются специальные структуры данных для нахождения всех блоков файла. Чтобы отслеживать свободное пространство на диске, можно использовать список пустот (неиспользуемых областей) или битовую карту (битовое отображение).
Параллелизм часто поддерживается и реализуется в однопроцессорных системах путем разделения времени — так моделируется работа нескольких процессоров. Неконтролируемое взаимодействие различных процессов может привести к состоянию гонок. Чтобы избежать их, вводятся специальные средства синхронизации. Самыми простыми из них являются семафоры. ()"п11Х и ЪПпс1отуз ХР являются сложными операционными системами.
Обе системы поддерживают страничную организацию памяти и отображение файлов на память. Кроме того, они поддерживают иерархические файловые системы, где файлы состоят из последовательности байтов. Наконец, обе системы поддерживают процессы и программные потоки и предоставляют механизмы их синхронизации, Вопросы и задания 1. Почему операционная система интерпретирует только некоторые команды уровня 3 (см. рис. 1.2), тогда как микропрограмма интерпретирует все команды уровня архитектуры команд? 2. Машина содержит 32-разрядное виртуальное адресное пространство с побайтовой адресацией. Размер страницы составляет 4 Кбайт. Сколько существует страниц виртуального адресного пространства? 3.
Должен ли размер страницы соответствовать степени двойки? Есть ли теоретическая возможность реализации страницы размером, скаукем, 4000 байт? Если да, насколько такой размер оправдан? 4. Виртуальная память содержит 8 виртуальных страниц и 4 физических страничных кадра. Размер страницы составляет 1024 слова. Соответствую1цая таблица страниц выглядит так, как табл. 6.10. Таблица 6.10. Таблица страниц для задания 4 Виртуальная страница Страничный кадр Нет е основной памяти Нет е основной памяти Нет е основной памяти Нет е основной памяти Вопросы и задания 551 1) Создайте список виртуальных адресов, обращение к которым будет вызывать ошибку отсутствия страницы. 2) Каковы физические адреса для виртуальных адресов О, 3728, 1023, 1024, 1025, 7800 и 4096? 5.
Компьютер имеет 16 страниц виртуального адресного пространства и только 4 страничных кадра. Изначально память пуста. Программа обращается к виртуальным страницам в следующем порядке: О, 7, 2, 7, 5, 8, 9, 2, 4 1) Какие из обращений по алгоритму ЕМЗ вызовут ошибку отсутствия страницы? 2) Какие из обращений по алгоритму НГО вызовут ошибку отсутствия страницы? 6.
В подразделе «Политика замещения страниц» раздела «Виртуальная память» был предложен алгоритм замещения страниц НРО. Разработайте более эффективный алгоритм. Подсказка: можно обновлять счетчик во вновь загружаемой странице, оставляя все другие. 7. В системах со страничной организацией памяти, которые мы обсуждали в этой главе, обработчик ошибок отсутствия страниц был частью уровня архитектуры команд и, следовательно, отсутствовал в адресном пространстве операционной системы. На практике же такой обработчик занимает некоторые страницы и может быть удален при определенных обстоятельствах (например, в соответствии с политикой замещения страниц).
Что бы случилось, если бы обработчика ошибок не было в наличии в тот момент, когда произошла ошибка? Как разрешить эту проблему? 8. Не все компьютеры содержат специальный бит, который автоматически уста- навливается, когда производится запись на страницу. Однако нужно каким-то образом следить, какие страницы изменены, чтобы не приходилось записывать все страницы обратно на диск после их использования. Если предположить, что каждая страница имеет специальные биты для разрешения чтения, записи и выполнения, то как операционная система сможет проследить, какие страницы изменялись, а какие — нет? 9. Сегментированная память содержит сегменты страниц.
Каждый виртуальный адрес содержит 2-разрядный номер сегмента, 2-разрядный номер страницы и 11-разрядное смещение внутри страницы. Основная память содержит 32 Кбайт, которые разделены на страницы по 2 Кбайт. Каждый сегмент разрешается либо только читать, либо читать и выполнять, либо читать и записывать, либо читать, записывать и выполнять.
Таблицы страниц и варианты защиты приведены в табл. 6.11. Вычислите физический адрес для каждого из перечисленных в табл. 6.12 вариантов доступа к виртуальной памяти. Если происходит ошибка, укажите, какого она типа. 10. Некоторые компьютеры позволяют осуществлять ввод-вывод непосредствен- но в пользовательское пространство. Например, программа может начать передачу данных с диска в буфер внутри пользовательского процесса. Вызовет ли это какие-либо проблемы, если для реализации виртуальной памяти используется уплотнение? Аргументируйте.
552 Глава 6. Уровень операционной системы Сегмент 0 Сегмент 2 Сегмент 3 Сегмент 1 Только чтение Чтение и выполнение Чтение, Чтение и запись Виртуаль- Странич- запись Виртуаль- Страничная ный кадр страница страница Виртуаль- Странич ная ный страница кадр Таблицы стра- 0 ниц нвт в основ- ной памяти 14 На диске Таблицы стра- 1 ниц нвт в Основ- ной памяти Таблицы стра- 2 ниц нвт в Основ- ной памяти На диске 2 15 Таблицы стра- 3 ниц нвт в Основ.
ной памяти Нв диске 12 Таблица 6.12. Варианты доступа к виртуальной памяти для задания 9 Доступ 1. Вызов данных 2. Вызов данных 3. Вызов данных Сегмент Страница Смещение внутри страницы 4. Сохранение данных 5. Сохранение данных 5. Сохранение данных 7. Переход 8. Вызов данных 9. Вызов данных 10. Переход 11. Операционные системы, в которых можно использовать файлы, отображаемые на память, всегда требуют, чтобы файлы отображались в границах страниц. Например, если у нас есть 4-килобайтные страницы, файл может быть отображен, начиная с виртуального адреса 4096, а не с виртуального адреса 5000.
Зачем это нужно? 12. При загрузке сегментного регистра в Репггцш 4 вызывается соответствующий дескриптор, который загружается в невидимую часть сегментного регистра. Как вы думаете, почему разработчики !псе! решили это сделать? 13. Программа в компьютере Репг!цш 4 обращается к локальному сегменту 10 со смещением 8000. Поле ВАКЕ сегмента 10 в локальной таблице дескрипторов содержит число 10000. Какой элемент таблицы страниц использует Репгшш 4? Каков номер страницы? Каково смещение? 14. Рассмотрите возможные алгоритмы для удаления сегментов в сегментированной памяти без страничной организации. Таблица 6.11. Таблицы страниц для задания 9 1 10 2047 4 2 14 100 50 5 80 Вопросы и задания 553 23.