47. Виртуальная память в процессоре Pentium II Режим работы этого процессора. Pentium II имеет сложную систему виртуальной памяти, которая использует вызов страниц по требованию, чистую сегментацию и сегментацию с разбиением на страницы. Виртуальная память поддерживается двумя видами таблиц: LDT (Local Descriptor Table - локальная таблица дескрипторов) и GDT (Global Descriptor Table - глобальная таблица дескрипторов). Каждая программа имеет свою собственную LDT, а единственная GDT разделяется всеми выполняющимися программами. Таблица LDT описывает локальные сегменты каждой программы (ее код, данные, стек и т. д.), а таблица GDT описывает системные сегменты, в том числе саму операционную систему.
Чтобы получить доступ к сегменту, Pentium II вначале загружает селектор сегмента в один из сегментных регистров. Во время выполнения программы регистр CS содержит селектор сегмента кода, DS - селектор сегмента данных, SS – селектор сегмента стека и т. д. Каждый селектор представляет собой 16-битное число.
Биты 0-1 связаны с защитой (уровень привилегий). Бит 2 селектора показывает, является сегмент локальным или глобальным (то есть к какой из двух таблиц он относится: 1~LDT, 0~GDT). Оставшиеся 13 битов определяют номер соответствующего элемента в таблице дескрипторов, поэтому объем каждой из двух таблиц ограничен величиной 213 = 8К сегментных дескрипторов.
Дескриптор с номером 0 недействителен и при попытке использования вызывает ловушку. Тем не менее его можно загрузить в регистр, чтобы показать недоступность сегмента.
Когда селектор загружается в сегментный регистр, соответствующий дескриптор автоматически выбирается из LDT или GDT и сохраняется во внутренних регистрах контроллера управления памятью, поэтому к нему можно быстро получить доступ. Дескриптор состоит из 8 байтов. Здесь содержится базовый адрес сегмента, его размер и другая информация. Формат селектора подобран с целью упростить нахождение дескриптора в таблице. Сначала на основе бита 2 в селекторе выбирается локальная таблица дескрипторов LDT или глобальная таблица дескрипторов GDT. Затем селектор копируется во временный регистр контроллера управления памятью (MMU), а три младших бита принимают значение 0, в результате 13-битный индекс селектора умножается на 8 (это и есть длина дескриптора). Наконец, к нему прибавляется адрес LDT или GDT (он хранится в одноименных внутренних регистрах MMU), и в результате получается указатель на дескриптор. Например, селектор 72 = 0x48 обращается к элементу 9 в глобальной таблице дескрипторов, который находится в ячейке с адресом GDT+72.
Бит S содержит признак системного объекта. Дело в том, что подобный механизм (таблица дескрипторов) используется не только для поддержки LDT и GDT. Аналогичную структуру имеет, например, таблица дескрипторов прерываний (IDT). Ее элементы определяют адреса обработчиков системных прерываний.
“Разбросанность” полей Base и Lim (их части – в двух словах) объясняется тем, что в ранних версиях процессоров (80286) эти поля были короче и затем расширялись с сохранением обратной совместимости. Во время работы процессора части полей объединяются. (на обороте…) 48. Виртуальная память в компьютере UltraSPARC II Из-за огромного виртуального адресного пространства использование обычных таблиц страниц (подобно Pentium II) было бы непрактичным. В UltraSPARC II применяется другой подход. Устройство управления памятью содержит таблицу - TLB (Translation Lookaside Buffer - буфер быстрого преобразования адреса). Эта таблица отображает номера виртуальных страниц в номера физических страничных кадров. Для страниц размером в 8К существует 231 номеров виртуальных страниц, то есть более двух миллиардов. Поскольку все они не могут быть отображены, TLB содержит лишь номера самых последних использованных виртуальных страниц. Страницы команд и данных обрабатываются отдельно. Для каждой из двух категорий в TLB хранятся номера 64-х последних виртуальных страниц. Элемент TLB содержит номер виртуальной страницы и соответствующий ему номер физического страничного кадра.
Каждый работающий процесс имеет собственный номер контекста. При обращении к памяти ее виртуальный адрес (вместе с номером контекста) передается контроллеру управления памятью. По этому адресу он вычисляет номер содержащей его виртуальной страницы и смещение в ней. Затем с помощью специальной микросхемы он сравнивает номер виртуальной страницы одновременно со всеми элементами TLB (для контекста данного процесса). Если обнаруживается совпадение, то из TLB выбирается соответствующий номер страничного кадра, который объединяется с полученным ранее смещением, чтобы получить 41-битный физический адрес и обработать некоторые флаги (например, биты защиты).
Если совпадение не обнаружилось (происходит промах в TLB), то вызывается ловушка в операционной системе. Обрабатывать такую ошибку должна сама ОС. Заметим, что данный промах отличается от ошибки отсутствия страницы. Промах буфера TLB может также произойти, если нужная страница присутствует в памяти, но давно не использовалась. В обоих случаях можно заново загрузить страницу в память и сформировать новый элемент TLB. Теоретически это может сделать сама операционная система, но для ускорения данной операции к работе обычно подключается аппаратное обеспечение. Для определения удаляемого элемента буфера TLB аппаратура применяет алгоритм LRU. Другой путь при промахе TLB - использовать дополнительные таблицы.
Операционная система может также сохранять наиболее часто используемые элементы буфера TLB в таблице под названием TSB (Translation Storage Buffer - буфер хранения преобразований). Эта таблица работает для виртуальных страниц подобно кэш-памяти прямого отображения (см. п. 4.3.1). Каждый 16-байтный элемент данной таблицы указывает на одну виртуальную страницу и содержит определенную информацию о ней (бит достоверности, номер контекста, тег виртуального адреса, номер физической страницы и несколько флаговых битов). Пусть, например, размер TSB составляет 8192 элемента (213). Тогда все виртуальные страницы, у которых младшие 13 битов виртуального адреса равны 0000000000000, будут претендовать в TSB на элемент 0. Аналогично страницы с последними цифрами адреса 0000000000001 соответствуют элементу 1 и т. д. Размер этой таблицы определяется программным обеспечением и передается в контроллер управления памятью через специальные регистры, доступные только операционной системе. (на обороте…)
| 49. Файлы Набор команд уровня операционной системы предоставляет возможности ввода-вывода. С другой стороны, ввод-вывод возможен также и на уровне системы команд. Это пересечение, но не дублирование, т.к. ввод-вывод на двух указанных уровнях существенно отличается. Разработка ввода-вывода на уровне ОС преследует две основные цели: упрощение доступа к внешним устройствам и защита информации. По аналогии с памятью, ввод-вывод на уровне ОС также можно назвать виртуальным.
Один из способов организации виртуального ввода-вывода - использование абстракции под названием файл. Файл состоит из последовательности байтов, записанных на устройство ввода-вывода. Для устройств, которые являются устройствами хранения информации (например, диск), файлы можно считывать и записывать. Для некоторых устройств файлы можно только считывать (клавиатура) или только записывать (принтер).
Ввод-вывод файла на уровне ОС осуществляется с помощью системных вызовов для открытия, чтения, записи и закрытия файлов. Перед обменом информацией файл нужно открыть. Процесс открытия файла позволяет операционной системе найти файл на диске и передать в память информацию, необходимую для доступа к нему.
С каждым открытым файлом связан указатель текущей позиции. Он сообщает, какой байт может считываться (или записываться) следующим. После команды read/write указатель передвигается на число считанных/записанных байтов, поэтому последовательные команды read считывают последовательные блоки данных из файла. Когда программа заканчивает считывание файла, она может закрыть его (этим она сообщает системе, что больше не будет использовать данный файл).
В современных операционных системах файл может быть устроен сложнее, чем просто последовательность байтов. Он может быть последовательностью логических записей, каждая из которых имеет определенную структуру. Некоторые ОС различают файлы, в которых все элементы имеют одинаковую структуру, и файлы, содержащие разные типы данных. Стандартная виртуальная команда ввода считывает очередную запись из нужного файла и помещает ее в основную память, начиная с определенного адреса. Стандартная виртуальная команда вывода записывает логическую запись из памяти в файл.
Один из основных вопросов реализации файлов - распределение дисковой памяти. Единичный блок файла чаще всего состоит из нескольких смежных секторов. Последовательно расположенными файлами легко управлять, но если максимальный размер файла неизвестен заранее, то эту технологию использовать нельзя. Обычной нормой для жестких дисков является фрагментированное расположение блоков файла. Поэтому для правильного позиционирования внутри файла ОС поддерживает специальную структуру (индекс файла), которая ставит в соответствие единичным блокам или логическим записям файла их физические адреса на диске.
Иногда каждая логическая запись имеет ключ, и программы могут обращаться к записи по этому ключу, а не по номеру. В этом случае каждый элемент таблицы должен содержать не только информацию о местонахождении записи на диске, но и ее ключ. (на обороте…)
| 50. Принципы параллельной обработки на уровне ОС Интерес к параллельной обработке вызван потребностью повышения эффективности вычислений. Согласно законам физики, возможности увеличения производительности за счет быстродействия одного процессора ограничены. Однако решение многих задач можно разделить на независимые части, которые могут выполняться параллельно несколькими микросхемами. Если имеется только один процессор, эффект параллельной обработки можно смоделировать. Для этого процессы будут выполняться по очереди, каждый понемногу.
Даже если параллельная обработка моделируется, удобно считать, что каждому процессу приписан его собственный виртуальный процессор. Тогда при моделируемой параллельной обработке возникают те же технологии, что и при реальной.
В современных ОС каждая программа выполняется как часть некоторого процесса. Этот процесс характеризуется текущим состоянием и адресным пространством, посредством которого можно получить доступ к программам и данным. Состояние включает счетчик команд, слово состояния программы, указатель стека, регистры общего назначения и другую информацию. Большинство ОС позволяют одним процессам динамически формировать другие процессы. Для этого применяется системный вызов. В одних случаях исходный процесс сохраняет контроль над порожденным процессом. Виртуальные команды позволяют исходному процессу останавливать, запускать, проверять и завершать подчиненные процессы. В других случаях исходный процесс никак не контролирует порожденный процесс, тогда эти два процесса работают независимо друг от друга.
Многие операционные системы позволяют создавать параллельные линии выполнения в пределах одного процесса – потоки. В отличие от процессов, потоки одного процесса существуют в едином адресном пространстве и соответственно имеют широкие возможности для использования общих данных и процедур.
Во многих случаях параллельные процессы (потоки – тем более) должны взаимодействовать, и их работу нужно синхронизировать.
Семафор – это переменная в памяти на уровне ОС, которая может содержать неотрицательные целые числа, причем задается также ее верхняя граница. Значение семафора для конкретного процесса равное нулю означает его остановку, а значение единица – продолжение работы.
Еще одно часто применяемое средство синхронизации – мьютексы. Мьютекс гарантирует нескольким процессам (или потокам) взаимоисключающий доступ к некоторому единственному ресурсу. Мьютекс может быть свободен или захвачен некоторым процессом. В последнем случае другие процессы для доступа к ресурсу должны ждать освобождения мьютекса. Логически мьютекс соответствует семафору с максимальным значением 1, однако его реализация существенно отличается. Мьютекс содержит идентификатор захватившего его процесса, и только этот процесс может освободить мьютекс. Кроме того, для мьютекса можно обычно задавать максимальное время ожидания. Еще одно отличие состоит в учете рекурсий: если процесс повторно пытается захватить мьютекс, то он не переводится в состояние “спячки”. Все проверки и изменения состояния мьютекса являются неделимыми операциями.
|
|
|
|
|
Поиск в TSB также осуществляется контроллером, а прерывание (в случае промаха) обрабатывается операционной системой. При удачном поиске контроллер управления памятью вычисляет адрес нужного элемента и помещает его в свой внутренний регистр, доступный ОС. При этом также обновляется некоторый элемент TLB.
Операционная система может использовать для хранения информации о загруженных страницах другие дополнительные таблицы, не поддерживаемые непосредственно аппаратурой. Обращение к ним может происходить при промахах TSB. Это позволяет уменьшить количество повторных загрузок страниц в физическую память.
|
Заданная в выполняемой команде пара {селектор, смещение} с использованием дескриптора сегмента трансформируется в линейный адрес. Если при этом сегмент отсутствует (P=0), то срабатывает ловушка и операционная система загружает сегмент в память. Проверяется также, не выходит ли смещение за пределы сегмента (если выходит, то также срабатывает ловушка). Если сегмент находится в памяти, а смещение не выходит за границу, Pentium II прибавляет величину Base из дескриптора к смещению, в результате чего получается линейный адрес памяти.
Далее действует страничная организация. Если разбиение на страницы отключено (это определяется битом PG в регистре глобального управления CR0), линейный адрес интерпретируется как физический адрес и отправляется в память для чтения или записи. Если разбиение на страницы используется, то линейный адрес рассматривается как виртуальный и отображается в физический адрес с использованием таблиц страниц. Дополнительная сложность здесь состоит в том, что при 32-битном виртуальном адресе и страницах по 4К сегмент теоретически может содержать 1 миллион страниц.
Все таблицы имеют фиксированный размер, соответствующий величине одной страницы (1024 дескриптора по 32 разряда = 4Kb). Таким образом, таблицы сами могут загружаться и выгружаться. Одна таблица - каталог страниц - всегда находится в физической памяти. Ее абсолютный адрес содержится в регистре CR3.
Элемент таблицы страниц похож на элемент таблицы дескрипторов сегментов, но имеет более простую структуру. Он так же содержит базовый адрес (адрес страничного кадра - 20 битов, еще 12 младших считаются нулями), бит присутствия, бит обращения и т.д. Однако там нет полей типа и размера, т.к. все страницы одинаковы. Поле привилегий состоит всего из одного бита U/S (User - соответствует DPL = 3 / Supervisor - соответствует DPL = 0, 1, 2).
Линейный виртуальный адрес считается разбитым на три поля: DIR (биты 31-22, справа дополняются двумя нулями), PAGE (биты 21-12, также дополняются двумя нулями) и OFFSET (11-0). Поле DIR используется в качестве индекса в каталоге страниц для нахождения указателя на нужную таблицу страниц. Поле PAGE применяется как индекс в таблице страниц для нахождения физического адреса страничного кадра. Наконец, поле OFFSET прибавляется к адресу страничного кадра, и таким образом из линейного адреса получается физический адрес нужного байта или слова.
Чтобы уменьшить количество повторных обращений к памяти, устройство управления памятью Pentium II (MMU) имеет аппаратную поддержку для хранения недавно использовавшихся комбинаций DIR-PAGE и их отображения в физические адреса.
Взаимное расположение сегментов и страниц может быть произвольным. Сегменты могут пересекаться, начинаться с любого адреса. Сегмент может включать несколько страниц или содержаться внутри страницы. Страницы же всегда выровнены и расположены последовательно. Сегментация в 32-разрядном режиме Pentium действует всегда, в то время как страничное преобразование необязательно. Таким образом, страничная организация невозможна без сегментации. Если же некоторое приложение не нуждается в сегментации и довольствуется единым 32-битным адресным пространством со страничной организацией, то это можно смоделировать. Все сегментные регистры могут быть заполнены одним и тем же селектором, дескриптор которого содержит поле Base=0, и поле Lim с максимальным значением. Смещения команд будут тогда линейными адресами в единственном адресном пространстве.
|
|
|
|
|
Чтобы распределить для файла пространство на диске, операционная система должна следить, какие блоки доступны, а какие уже заняты другими файлами. Один из способов - хранить список всех неиспользованных пространств, состоящих из смежных единичных блоков. Он называется списком свободной памяти. Альтернативный подход - сохранить битовое отображение, один бит на единичный блок. Бит со значением 1 показывает, что соответствующий блок занят, а бит со значением 0 показывает, что блок свободен. Первый подход позволяет легко находить промежуток определенной длины, зато битовая карта имеет постоянный размер. Оба метода требуют, чтобы при записи или удалении файла поддерживающая структура (список размещения или битовая карта) обновлялась.
В современных ОС файлы группируются в директории. Это позволяет избежать конфликтов имен файлов, присваивать группам файлов общие свойства (например, схемы защиты), легко выполнять групповые операции над файлами (перемещение, удаление, …).
Каждая директория обычно сама представляет собой файл и как таковая может быть вставлена в другую директорию, в результате чего получается дерево директорий. Большое количество директорий важно для программистов, работающих над несколькими проектами. Директории - это также удобный способ делить файлы между членами рабочих групп.
|
|
|
|
|
| 0. Навигатор 1. Понятие архитектуры ЭВМ. Языки, уровни и виртуальные машины.
2. Уровни архитектуры современных компьютеров.
3. Аппаратное и программное обеспечение. Роль микропрограммирования и ОС.
4. Поколения ЭВМ. Типы компьютеров.
5. Примеры семейств компьютеров: Pentium, UltraSPARC, picoJava.
6. Общие функции и свойства процессоров. Архитектуры CISC и RISC.
7. Возможности параллельного выполнения программ.
8. Основная память компьютера. Роль кэш-памяти.
9. Внешняя память компьютера: магнитные диски.
10. Внешняя память компьютера: компакт-диски.
11. Процесс ввода/вывода.
12. Терминалы, клавиатуры и мониторы.
13. Мыши. Принтеры.
14. Модемы. Цифровая телефония. Коды символов.
15. Вентили, булева алгебра и схемы.
16. Виды цифровых логических схем. Микросхемы процессоров.
17. Шины.
18. Примеры центральных процессоров: Pentium II.
19. Примеры центральных процессоров: UltraSPARC II.
20. Примеры центральных процессоров: picoJava II.
21. Примеры шин: ISA и PCI.
22. Примеры шин: USB. Микросхемы ввода-вывода.
23. Основы микроархитектуры. Направления разработки.
24. Увеличение производительности на микроархитектурном уровне.
25. Примеры микроархитектурного уровня: Pentium II.
26. Примеры микроархитектурного уровня: UltraSPARC II.
27. Примеры микроархитектурного уровня: picoJava II.
28. Обзор уровня команд: модели памяти и регистры.
29. Особенности уровня команд Pentium II.
30. Особенности уровня команд UltraSPARC II.
31. Особенности уровня команд JVM.
|
|
|
32. Типы данных. Принципы разработки форматов команд.
33. Форматы команд процессора Pentium II.
34. Форматы команд процессора UltraSPARC II.
35. Форматы команд JVM.
36. Обзор методов адресации.
37. Методы адресации Pentium II, UltraSPARC II и JVM.
38. Обзор типов машинных команд.
39. Ввод-вывод на уровне команд.
40. Команды процессора Pentium II.
41. Команды процессора UltraSPARC II.
42. Команды компьютера picoJava II.
43. Поток управления. Виды процедур.
44. Обзор архитектуры Intel IA-64.
45. Страничная организация памяти.
46. Сегментация памяти.
47. Виртуальная память в компьютере Pentium II.
48. Виртуальная память в компьютере UltraSPARC II.
49. Файлы.
50. Принципы параллельной обработки на уровне ОС.
|
|
Над шпаргалками работали:
Pakshin A. S.
Agent_007
dArt Весь материал основан на электронных лекциях Махортова С. Д. Впервые использованы на зимней сессии 2006-2007 учебного года Copyright © 2007, Студенты |