Ресурс – средство системы обработки информации, которое может быть выделено процессу на определённый интервал времени. К основным ресурсам относятся память, время процессора, П.У., системные подпрограммы.
Управление памятью.
ОС разделяет память между прикладными процессами и системными процессами. Задача распределения памяти состоит в выработке алгоритма выделения блоков и слежение за целостностью выделенных участков памяти.
Существует несколько возможных моделей поведения процессов при обработке запросов на выделение памяти.
1. Процесс обращается за свободным блоком к функциям О.С.
+ Надёжность.
— Расходуются системные ресурсы.
2. Процесс самостоятельно распределяет для себя память в пределах выделенного ему участка.
+ Поскольку существует информация о том, какие объекты распределены в этом участке, то можно написать алгоритм , который выделяет блоки памяти под объекты более эффективно, чем стандартные функции.
— Потенциальные возможности ошибок.
Функции управления памятью.
Физическая память – реальная память, реализованная в вычислительной системе.
Логическая память – набор адресов, по которым может ссылаться программа.
1. Отображение адресов ЛАП и ФАП. Существование нескольких процессов, каждый из которых для своей нормальной работы, должен занимать определённый участок памяти, обусловило появление механизма отображения адресов. Поскольку несколько процессов не могут использовать участок памяти от 0 до N, то ОС предоставляет каждому процессу диапазон логических адресов от 0 до N, расположенных в различных участках физической памяти. Примером служит сегментация памяти и страничное преобразование.
2. Распределение физической памяти между несколькими пользователями.
ОС должна решать каким образом распределять имеющуюся физическую память между несколькими прикладными процессами. Решение м этой задачи занимается блок-менеджер памяти. Его задачи:
— Определить, куда поместить программу.
— Распределить для нее необходимый участок физ. памяти.
— Поместить программу в память.
— Слежение за целостностью распределённых участков.
3. Защита. Защита прикладных процессов и кода ОС от взаимного влияния. Функцию защиты реализует частично ОС, частично центральный процессор. Каждый выделенный блок памяти снабжён атрибутом доступа. Возможные значения: полный доступ, запрет доступа, только чтение, только запись, чтение и выполнение.
4. расширение границы логического адр. пространства за границу доступного ФАП. 2 варианта:
1- Аппаратный, поддерживается специальными схемами расширения адресного пространства.
2- Программный механизм – виртуализация адресного пространства, обмен, сцепление, swapping, overlay.
Способы формирования физических адресов.
1- Абсолютная трансляция – непосредственное задание адреса ячейки памяти в программе.
2- Статическая трансляция – все адреса генерируются относительно некоторого базового адреса. Это позволило сделать программу перемещаемой.
3- Динамическая трансляция – реальные адреса определяются ОС в момент загрузки приложения.
Динамическое распределение памяти.
Механизм, который позволяет ОС распоряжаться блоком свободной памяти по запросам других процессов.
Стратегии размещения.
1. Первый подходящий – Есть очередь, упорядоченная по возрастанию свободных участков, отыскивается первый участок памяти, больший или равный требуемому. Цель стратегии – максимально быстрое удовлетворение запросу. Неэффективное управление памятью.
2. Память разбивается на несколько блоков, каждый из которых управляется своим списком свободных блоков. Размер блока в каждом банке кратен степени числа 2 и в каждом следующем банке блоков в 2 раза больше, чем в предыдущем. При поступление запроса на свободный участок , просматривается список, соответствующий размеру запрашиваемого. Если найден свободный участок, тот он выделяется, если не найден, то просматривается следующий банк, в нем находится свободный участок, делится пополам и включается в предыдущий список. В случае если 2 рядом расположенных блока свободны, то они объединяются и включаются в список вышестоящего уровня.
Распределение локальной памяти в прикладных программах.
Void * operator new(size_t s)
Void operator delete(void*)
Вызов глобального оператора ::new.
Переопределение стандартных операций управления памятью с целью максимально быстрого распределения памяти.
#define SIZEOF_BUF 10000
#define HOW_IN_BUF SIZEOF_BUF/sizeof(Record)
class Record{
…
public:
Record(…){…}
Void * operator new(size_t size);
Void operator delete(Void *p);
}
void * Record:: operator new(size_t size)
{
for(int i=0;i<HOW_UN_BUF;i++)
{
isLocked[i]=TRUE;
return Buf*sizeof(Record)*i;
}
Return NULL;
}
BYTE Buf [SIZEOF_BUF];
Boolean isLocked [HOW_IN_BUF];
Void Record :: operator delete(void* p)
{
isLoced[(p-Buf)/sizeof(Record)]=FALSE;
}
Архитектура памяти WIN32.
1. 0x0000 0000: 0x0000 0FFF – блок для выявления нулевых указателей явл защищенным
2. 0x0000 1000: 0x003F FFFF – (4Mb – 4Kb) – для совместимости приложений дос виндовс
3. 0x0040 0000: 0x7FFF FFFF – закрытое адресное простр-во блок свободен для использования прикладными программи.
4. 0x8000 0000: BFFF FFFF – для системных DLL располагаются проецируемые в память файлы, блок не защищен.
5. 0xC000 0000: FFFF FFFF – хранится ОС нет защиты
Карта памяти WINNT:
1. 0x0000 0000: 0x0000 FFFF – для выявления нулевых указателей
2. 0x0001 0000: 0x7FFE FFFF – закрытое адресное простр-во проца. Код и ланные проца, свободен для использования.
3. 0x7FFF 0000: 0x7FFF FFFF – для выявления неверных указателей.
4. 0x8000 0000: 0xFFFF FFFF – код ОС защищен
Виртуальная Память
1. регионы в адресном пространстве
при загрузке процесса все адресное пространство, выделяемое ему явл изначально свободным, чтобы этот участок можно было использовать ему необх-мо передать физ память т.е. за адресами закрепетить физ память. Участок резервируемого адр прост-ва наз регионом. Размер региона кратен размеру стрвницы (4Kb).
После того как надобность в физ памяти отпадает физ-ю память надо вернуть системе. После того как регион более не нужен это адр прост-во тоже надо вернуть системе.
