Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК 2 Лекционный курс.doc
Скачиваний:
13
Добавлен:
16.08.2019
Размер:
3.92 Mб
Скачать

1.2.Организация работы эвм

Организацию работы ЭВМ легко проследить на рис. 1.1. Следует отметить лишь некоторые моменты.

Как было сказано ранее, передача данных между элементами ЭВМ взаимодействие идет через системный интерфейс.

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

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

1.3.Иерархия памяти компьютера

Кратко об иерархии памяти компьютера было рассказано в пункте 1.1. Физическая память компьютера имеет иерархическую структуру. Но логическая память организована иным способом. Об этом и пойдет речь в данном пункте.

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

Память можно разделить на внутреннюю и внешнюю. Внутренняя – это упорядоченный массив однобайтовых ячеек, обладающих уникальным адресом. Как было сказано в пункте 1.1, эта память энергозависима. Внешняя – энергонезависима, обладает намного большим объемом. Между внутренней и внешней памятью можно поместить промежуточную память (см. рис. 1.2).

Рис. 1.2 Иерархия памяти [2]

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

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

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

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

Рис. 1.3. Расположение сегментов процессов в памяти компьютера [2]

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

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

Как правило максимальный размер логического адресного про­странства определяется разрядностью процессора (232, 264 и т.д.), что значи­тельно превышает реальное физическое адресное пространство. Т.о. ОС и процессор должны отображать ссылки в коде программы в реальные физи­ческие адреса. Подобное отображение называют трансляцией (привязкой). Схема связывания адресов приведена на рис. 1.4.

Рис. 1.4. Формирование логического адреса и связывание логического адреса с физическим [2]

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

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

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

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

Лекция 3. Управление памятью ЭВМ и доступ к данным

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

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

Среди недостатков такой системы выделяют следующие.

Число одновременно выполняемых процессов ограничено числом разделов.

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

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

Оверлейная структура. Как было сказано выше, процесс может занимать больше места, чем выделенное ему адресное пространство (может быть даже больше, чем целый раздел). В такой ситуации можно воспользоваться структурой с перекрытием (overlay). При такой организации в памяти содержатся только те инструкции программы, которые необходимы в текущий момент. Реализовывать подобную схему имеет смысл в ситуации, когда логическое адресное пространство мало. Коды ветвей хранятся на диске в качестве абсолютных образов памяти. Драйвер считывает их при необходимости. Совокупность исполняемых программных файлов дополняется файлом, чаще всего, с расширением .odl Такое расширение связано с названием языка для описания оверлейной структуры – overlay description language. В приведенном примере на рисунке 1.6 текст фала может выглядеть как:

A-(В,С)

С-(D,E)

Рис. 1.5. Система управления памятью с фиксированными разделами. (а) – с общей очередью процессов, (b) – с отдельными очередями процессов [2]

Рис. 1.6. Оверлейная структура организации памяти [2]

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

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

Рис. 1.7 Динамика распределения памяти между процессами (серым цветом обозначена неиспользуемая память) [2]

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

First fit. Первый подходящий. Процесс помещается в первый подходящий по размеру раздел.

Best fit. Наиболее подходящий. Процесс помещается в раздел, в котором останется меньше всего свободного места после размещения.

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

В ходе исследований было показано, что лучше со своей задачей справляются первый и второй способы. Причем первый делает это несколько быстрее. Работа происходит следующим образом: анализ запроса на выделение участка памяти, выбор среди доступных участков в соответствии со стратегией, загрузка процесса в выбранный раздел, изменение таблиц свободных и занятых областей. Такая же корректировка необходима и при выгрузке процесса из памяти. Связать адреса можно на этапе загрузки или выполнения. Такой метод более гибок по сравнению с методом фиксированных разделов. Но и ему свойственна фрагментация. Она вызвана тем, что остается много неиспользованных участков, которые не выделяются ни одному из процессов. Даже если работать по принципу Best fit, фрагментация все равно будет. Причем, не исключено, что этот метод даст наихудшие показатели в этой области, т.к. он оставляет очень много маленьких несвязанных блоков памяти. По статистике пропадает около 1/3 памяти. Решить эту проблему от части помогает дефрагментация – перемещение занятых частей памяти в одну ее часть, а свободных – в другую. Тут срабатывает тот факт, что в отличие от занятой памяти, свободную можно объединять. Но эта операция связана с большими накладными расходами (влечет за собой операции выгрузки и загрузки в память).

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

Рис. 1.8. Связь логического и физического адресов при страничной организации памяти [2]

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

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

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

Рис. 1.9. Преобразование логического адреса при сегментной организации памяти [2]

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

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

Рис. 1.10 Схема формирования физического адреса при сегментно-страничной организации памяти [2]