- •Лекция №1
- •История операционных систем.
- •Управление памятью.
- •Однозадачные системы.
- •Лекция №2
- •Способы учета участков памяти.
- •2 Алгоритм (наиболее подходящий).
- •3 Алгоритм (наименее подходящий).
- •4 Алгоритм (алгоритм двоичного разбиения).
- •Лекция №4
- •Принципы
- •Лекция №5
- •Лекция №6 Управление процессами.
- •Алгоритмы планирования системы.
- •Лекция №7
- •Два подхода к планированию.
- •Синхронизация.
- •Лекция №8
- •Тупики.
- •Способы взаимодействия между процессами.
- •Лекция №9 Управление процессами в среде Window’s.
- •Лекция №10
- •Волокна
- •Лекция №11 Синхронизация процессов.
- •Ссобытия
- •Способы взаимодействия процессов.
- •Серверная сторона
- •Второй семестр Управление процессами в среде unix Лекция №1
- •Лекция №2
- •Сигналы.
- •Способ взаимодействия общая память.
- •Лекция №3
- •Семафоры.
- •Лекция №4 Файлы как средства сообщения.
- •Файловыe системы.
- •Примеры файловых систем
- •Лекция № 6
- •Система ext 2
- •Лекция № 7
- •Лекция № 8 Функции работы с файлами в unix.
- •Лекция № 9 Java — скрипт.
- •Лекция № 10
- •Лекция № 11
Лекция №5
2. Набор функций вирт. с префикс. (ВП), которые предназначены для непосредственной работы с памятью. Работают минимально со страницей.
LPVOID VirtualAlloc(
LPVOID Addres,
SIZE_T Bytes,
DWORD Alloctype,
DWORD Protection,
);
Небольшое отступление:
В Windows ВП могут находиться в трех состояниях
1. Free – свободное
2. Reserve – зарезервированное
3. Commit – выделенная
Free – физических носителей не выделено, адресного пространства не выделено
Reserve – выделено множество адресов, а физической памяти не выделено
Commit – есть адреса и физическое хранилище
Функция VirtualAlloc позволяет двигаться в направлении Free->Reserve->Commit
Addres – адрес, по которому мы хотели бы выделить память, если все равно где выделять, то можно указать 0.
Bytes – размер участка, который нам нужен. Но размер будет округлен в большую сторону до размера страницы
Alloctype – что именно мы хотим сделать:
MEM_RESERVE – зарезервировать
MEM_COMMIT – выделить кусок
MEM_RESET - указывает системе, что вам временно указанный участок памяти не нужен, но мы его не освобождаем
MEM_DOWN – приказ системе найти участок памяти в как можно более старших адресах
Protection – атрибуты защиты системы
PAGE_READONLY – страницу можно только читать
PAGE_READWRITE – данные, которые можно и читать и писать
PAGE_EXECUTE – код, но его нельзя ни читать ни писать
PAGE_EXECUTE_READ – код, который можно читать как данные
PAGE_EXECUTE_READWRITE – код, который можно и читать и писать как данные
PAGE_NOACCESS – никакого доступа (нельзя читать и писать)
PAGE_WRITECOPY:
PAGE_NOCACHE – не кэшировать страницы в проц-ый кэш
Небольшое отступление:
ПИРАМИДА ПАМЯТИ
Чем ниже память, тем она больше и дешевле. Кэширование: используется часть из более быстрой памяти для хранения данных из более медленной с целью уменьшить среднее время доступа.
PAGE_GUARD - защитная страница
3.
BOOL VirtualFree(
LPVOID Ptr,
SIZE_T Bytes,
DWORD FreeType
);
FreeType: MEM_DECOMMIT – переводим из COMMIT в RESERVE(физической памяти нет, а адреса остались)
MEM_RELEASE – освобождаем память
Указатель Ptr должен быть установлен на начало выделенного блока, а размер установлен в 0, Bytes округляется в меньшую сторону до размера страницы.
BOOL Virtual[lock/unlock](
LPVOID Ptr,
SIZE_T Bytes
);
Virtuallock блокирует участок страниц в физической памяти, запрещая механизм SWAP. Процесс не может заблокировать страниц памяти меньше, чем размер его рабочего набора, который по умолчанию =32страницы – 128 Кб. Увеличивать рабочий размер можно, но для этого нужны права администратора.
Virtualunlock – наоборот .
BOOL VirtualProtect(
LPVOID Ptr,
SIZE_T Bytes,
DWORD Protection,
DWORD OldProtect
);
Изменяет защиту страницы.
Protection – новые атрибуты защиты
В OldProtect будет записан старый атрибут защиты.
4. Функции для работы с кучей.
Куча – системный объект, который в участке ВП организует динамическое выделение памяти. Используется, когда надо работать с небольшими участками с постоянным выделением и освобождением памяти. Кучу можно создать.
Возвращает дескриптор системного блока.
HANDLE HeapCreate(
DWORD Options,
SIZE_T ImtSize,
SIZE_T MaxSize
);
Options – опции при создании кучи:0.
ImtSize – начальный размер кучи.
MaxSize – максимальный размер кучи.
Если не получается создать кучу, то функция возвращает значение INVALID_HANDLE_VALUE.
Выделить кусок памяти из кучи
LPVOID HeapAlloc(
HANDLE heap,
DWORD Options,
SIZE_T Bytes
);
heap – из какой кучи выделить.
Options – HEAP_ZERO_MEMORY – выделить и занулить участок памяти.
Bytes – размер в байтах.
Освободить память:
BOOL HeapFree(
HANDLE heap,
DWORD Options,
LPVOID Ptr
);
Заблокировать/разблокировать общую кучу(с этой кучей могут/не могут выполнять различные операции другие процессы)
BOOL Heap[lock/unlock] (HANDLE heap);
Удаляет кучу полностью:
BOOL HeapDestroy (HANDLE heap);