Меню
Бесплатно
Главная  /  Проблемы  /  Основные функции ос по управлению памятью. Функции ос по управлению памятью

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

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

1. Отслеживание свободной и занятой памяти

2. Выделение памяти процессам и освобождение памяти при завершении процессов

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

4. Настройка адресов программ на конкретную область физической памяти

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

Типы адресов

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

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

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

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

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

Методы распределения делятся на две группы:

1. Без использования внешней памяти

a. Фиксированными разделами

b. Динамическими разделами

c. Перемещаемыми разделами

2. С использованием внешней памяти

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

b. Сегментное распределение

c. Сегментно-страничное распределение

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

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

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

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

2. Осуществляет загрузку программы в этот раздел и настройку адресов

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

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

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

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

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

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

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

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

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

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

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

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

Понятие виртуальной памяти

Развитие методов организации вычислительного процесса привело к появлению метода известного под названием «виртуальная память». Виртуальным называется ресурс который пользователю или пользовательской программе представляется обладающим свойствами которыми он в действительности не обладает. Так пользователю может быть предоставлена виртуальная оперативная память размер которой превосходит имеющуюся в системе реальную память. Таким образом виртуальная память – совокупность программно-аппаратных средств позволяющих пользователям писать программы размер которых превосходит имеющуюся оперативную память. Для этого система виртуальной памяти решает следующие задачи:

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

2. Перемещает по мере необходимости данные между устройствами разного типа

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

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

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

1. Страничная

2. Сегментная

3. Странично-сегментное распределение памяти

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

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

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

1. Дольше всего не использовавшаяся страница

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

3. Первая попавшая страница.

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

1. На основании начального адреса торицы страниц (содержимое регистра адреса таблицы страниц)номер виртуальной страницы(стар) Длины записи в таблицы страниц

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

3. К номеру физической страницы присоединяется смещение (младшие разряды виртуального адреса)

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

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

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

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

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

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

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

Иерархия запоминающих устройств. Принцип кеширования данных.

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

Файловая система

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

1. совокупность всех файлов на диске

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

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

Имена файлов

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

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

Виды файлов

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

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

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

1. Информация о разрешенном доступе

3. Владелец файла

4. Создатель файла

5. Признак “только для чтения”

6. Признак “скрытый”

7. Признак “системный файл”

8. Признак “временный файл”

9. Признак блокировки

10. Времена создания, последнего доступа, последнего изменения

11. Текущий размер файла

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

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

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

Физическая организация и адрес файлов

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

1. во время создания файла не известна его длина неизвестно сколько памяти нужно резервировать

2. при таком порядке размещения неизбежно возникает фрагментация.

Следующий способ физической организации – размещение в виде связанного диска блоков дисковой памяти. При таком способе в начале каждого блока содержится указатель на следующий блок. В этом случае адрес файла может быть задан одним числом – номером первого блока и каждый блок может быть присоединен в цепочку какого-либо файла, а файл может изменяться во время своего существования наращивая количество блоков. Недостатком является сложность реализации доступа к произвольно заданному месту файла. Например, что бы прочитать 10-ый по порядку блок необходимо последовательно просмотреть первые 9 блоков, прослеживая цепочку номеров блоков. Кроме того при этом способе количество данных файла содержащихся в одном блоке не равно степени двойки, а многие программы читают данные блоками, размер которых равен степени двойки. Следующим способом является использование связанного списка индексов. С каждым блоком связывается некоторый элемент – индекс. Индексы располагаются в отдельной области диска. Если некоторый блок распределен файлу, то индекс этого блока содержит номер следующего блока данного файла. При такой физической организации сохраняются достоинства предыдущего способа, и снимаются недостатки: для доступа к произвольному месту файлов достаточно прочитать только блок индексов, отсчитать нужное количество файлов по цепочке и определить номер нужного блока. Во-вторых данные файлы занимают блок целиком, а значит имею объем равный степени двойки.

Задание физического расположения файла простым перечислением номеров блоков занимаемым этим файлом. Операционная система UNIX использует вариант данного способа, позволяющий обеспечить фиксированную длину адреса независимо от размера файла. Для хранения адреса файла выделено 13 полей. Если размер файла меньше или равен 10 блокам, то номера этих блоков непосредственно перечислены в первых 10 полях адреса. Если размер файла больше 10 блоков, то следующее 11 поле содержит адрес блока в котором могут быть расположены еще 128 номеров следующих блоков файла. Если файл больше 10 + 128 блоков, то используется 12 поле в котором находится номер блока содержащего 128 номеров блоков которые содержат еще 128 номеров блоков данного файла. Если файл больше даже этого размера, то используется последнее 13 поле для тройной косвенной адресации.

Права доступа к файлу

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

1. Создание файла

2. Уничтожение файла

3. Открытие файла

4. Закрытие файла

5. Чтение файла

6. Запись в файл

7. Дополнение файла

8. Поиск в файле

9. Получение атрибутов файла

10. Установление новых значений атрибутов

11. Переименование файлов

12. Выполнение файла

13. Чтение каталога

14. И другие операции с файлами и каталогами

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

Раздевают два основных подхода к определению прав доступа:

1. Избирательный подход – каждый файл и каждый пользователь сам владелец может определить допустимые операции

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

Кеширование диска

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

Общая модель файловой системы

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

Уровни снизу вверх

1. Физический уровень – обращается только к подсистеме ввода/вывода. Его задача определение номера физического блока содержащего логическую запись

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

3. Уровень проверки прав доступа – его задача проверка допустимости заданной операции к заданному файлу

4. Базовый уровень – определение по уникальному имени характеристик файла

5. Символьный уровень – определение по символьному имени файла его уникального имени

Отображаемая в память файлы

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

Современная архитектура файловых систем

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

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

Под памятью здесь подразумевается оперативная память.

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

1. отслеживание свободной и занятой памяти

2. выделение памяти процессам и освобождение памяти пи их завершении

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

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

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

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

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

ЭТАПЫ РАЗВИТИЯ КОМПЬЮТЕРОВ И ОС, ОХАРАКТЕРИЗОВАТЬ КАЖДЫЙ ЭТАП

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

1. Первое поколение (1945-55гг)

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

С выпуском перфокарт стало возможно записывать и считывать программы.

2. Второе поколение (1955-65гг)

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



Программирование на языках Фортран и Ассембрер

3. Третье поколение (1965-80гг)

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

4. Четвертое поколение (1980-наши дни)

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

РАЗДЕЛ I АРХИТЕКТУРА ЭВМ

1 Общая структурная схема ЭВМ. Типы и классы ЭВМ. Устройство персональных ЭВМ.

2 Понятие о многомашинных и многопроцессорных вычислительных системах.

3 Виды накопителей информации. Виртуальная память. Резервное копирование.

4 Системное программное обеспечение.

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

6 Типы дисковых накопителей. Физические и логические ошибки.

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

8 Периферийные устройства для персональных компьютеров.

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

10 Программные сетевые протоколы. Модель OSI (hardware level, transport level, user level). Подробности о протоколах транспортного уровня на примере NetBEUI, IPX/SPX и TCP/IP.

11 Основные услуги сети Интернет. Web-страницы (HTTP), передача файлов (FTP), электронная почта (SMTP, POP3), удаленное управление ресурсами (Telnet, SSH). Система доменных имен (DNS).

12 Информационная безопасность. Системы парольной и биометрической аутентификации. Несанкционированный доступ к данным.

13 Сетевые атаки на отказ в обслуживании (DOS, DDOS),

14 Атаки на «срыв стэка».

15 Компьютерные вирусы, программы типа “троянский конь”

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

16 ОС реального времени, описание и назначение.

17 Основные функции ОС, дать описание.

18 Определение планирования. Основные задачи

19 Описание алгоритма, основанного на приоритетах. Привести граф

20 Понятие процесса и потока. Виртуальное адресное пространство

21 Описание алгоритма, основанного на квантовании. Привести граф

22 Определение диспетчеризации. Основные задачи

23 Вытесняющие и невытесняющие алгоритмы планирования. Перечислить достоинства и недостатки

24 Определение свопинга и виртуальной памяти. Достоинства и недостатки

25 Понятия конфиденциальности, целостности и доступности данных

26 Основы симметричного алгоритма шифрования. Пример

27 Основы не симметричного шифрования. Пример

28 Основные подходы к созданию резервной копии реестра

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

30 Этапы развития компьютеров и ОС, охаракт-ать каждый этап

Функции операционных систем по управлению ресурсами компьютера.

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

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

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

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

1 - планирование ресурса – то есть определение, какому процессу, когда и в каком количестве (если ресурс может выделяться частями) следует выделить данный ресурс;

2 - удовлетворение запросов на ресурсы;

3 - отслеживание состояния и учет использования ресурса – то есть поддержание оперативной информации о том, занят или свободен ресурс и какая доля ресурса уже распределена;

4 - разрешение конфликтов между процессами.

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

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

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

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

каждого процесса.

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

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

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

Типы адресов

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

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

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

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

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

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

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

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

Разделяемые сегменты памяти

Кэширование данных

Иерархия запоминающих устройств

Кэш-память

Принцип действия кэш-памяти

Проблема согласования данных

Способы отображения основной памяти на кэш

Схемы выполнения запросов в системах с кэш-памятью

Выводы

Задачи и упражнения

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

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

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

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

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

отслеживание свободной и занятой памяти;

выделение памяти процессам и освобождение памяти по завершении процессов;

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

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

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

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

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

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

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

Рис. 6.3. Варианты распределения памяти

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

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

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

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

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

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

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

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

Совокупность виртуальных адресов процесса называется виртуальным адресным пространством. Диапазон адресов виртуального пространства у всех процессов один и тот же и определяется разрядностью адреса процессора (для Pentium адресное пространство составляет объем, равный 2 32 байт, с диапазоном адресов от 0000.0000 16 до FFFF.FFFF 16).

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

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

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

Существует ряд базовых вопросов управления памятью, которые в различных ОС решаются по-разному. Например, следует ли назначать каждому процессу одну непрерывную область физической памяти или можно выделять память участками? Должны ли сегменты программы, загруженные в память, находиться на одном месте в течение всего периода выполнения процесса или их можно время от времени сдвигать? Что делать, если сегменты программы не помещаются в имеющуюся память? Как сократить затраты ресурсов системы на управление памятью? Имеется и ряд других не менее интересных проблем управления памятью [5 , 10 , 13 , 17 ].

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

Рис. 6.5. Классификация методов распределения памяти

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

Рис. 6.6. Варианты фиксированного распределения памяти

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

  1. Программа может быть слишком велика для размещения в разделе. В этом случае программист должен разрабатывать программу, использующую оверлеи, чтобы в любой момент времени требовался только один раздел памяти. Когда требуется модуль, отсутствующий в данный момент в ОП, пользовательская программа должна сама его загрузить в раздел памяти программы. Таким образом, в данном случае управление памятью во многом возлагается на программиста.
  2. Использование ОП крайне неэффективно. Любая программа, независимо от ее размера, занимает раздел целиком. При этом могут оставаться неиспользованные участки памяти большого размера. Этот феномен появления неиспользованной памяти называется внутренней фрагментацией (internal fragmentation).

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

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

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

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

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

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

Для преодоления сложностей, связанных с фиксированным распределением, был разработан альтернативный подход, известный как динамическое распределение. В свое время этот подход был применен фирмой IBM в операционной системе для мэйнфреймов в OS/MVT (мультипрограммирование с переменным числом задач –Multiprogramming With a Variable number of Tasks). Позже этот же подход к распределению памяти использован в ОС ЕС ЭВМ [12 ] .

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

Рис. 6.7. Вариант использования памяти

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

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

Перечислим функции операционной системы по управлению памятью в этом случае.

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

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

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

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

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

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