Системные вызовы управления памятью

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

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 03.10.2010
Размер файла 349,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Системные вызовы управления памятью

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

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

Получение виртуальной памяти. У приложения есть две возможности заказать для себя страницы виртуальной памяти.

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

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

Для чего может потребоваться резервирование диапазона адресов?

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

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

Для того чтобы зарезервировать или получить в свое распоряжение некоторое количество страниц виртуальной памяти, приложение должно воспользоваться функцией VirtualAlloc(), прототип которой представлен ниже:

LPVOID VirtualAlloc (LPVOID lpvAddress, DWORD dwSize, DWORD dwAllocationType, DWORD dwProtect)

Параметры:

lpvAddress - указатель на желаемый начальный адрес области.

dwSize - размер области памяти.

dwAllocationType - способ получения памяти.

dwProtect - тип доступа.

Возвращаемое значение: при успешном выполнении базовый адрес распределенной области страниц; в противном случае - NULL.

При резервировании адрес округляется в меньшую сторону, до следующей границы 64Кб. При выделении памяти адрес округляется в меньшую сторону до границы следующей страницы. Если параметр lpvAddress указан как NULL, то при этом операционная система выберет начальный адрес самостоятельно.

Параметр dwSize округляется до целого числа страниц. Поэтому, если с помощью функции VirtualAlloc() требуется получить область памяти размером 1 байт, то будет выделена страница размером 4096 байт. Аналогично при попытке получить блок памяти размером 1 байт - будет получено две страницы памяти общим размером 8192 байта. Программный интерфейс системы управления виртуальной памятью не предназначен для работы с областями малого размера.

Для параметра dwAllocationType можно использовать одно из значений табл.1.

Таблица1 Способы получения памяти

Значение

Описание

MEM_RESERVE

Функция VirtualAlloc() выполняет резервирование диапазона адресов в адресном пространстве приложения

MEM_COMMIT

Выполняется выделение страниц памяти для непосредственной работы с ними. Выделенные страницы заполняются нулями

MЕМ_TOP_DOWN

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

MEM_RESET

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

С помощью параметра dwProtect приложение может установить желаемый тип доступа для заказанных страниц. Можно использовать одно из значений табл.2.

Таблица2 Типы доступа к страницам памяти

Значение

Разрешенный доступ

PAGE_READWRITE

Чтение и запись

PAGE_READONLY

Только чтение

PAGE_EXECUTE

Только исполнение программного кода

PAGE_EXECUTE_READ

Исполнение и чтение

PAGE_EXECUTE_READWRITE

Исполнение, чтение и запись

PAGE_NOACCESS

Запрещен любой вид доступа

PAGE_GUARD

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

PAGE_NOCACHE

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

Если страница отмечена как PAGE_READONLY, при попытке записи в нее возникает аппаратное прерывание защиты доступа (access violation). Эта страница также не может содержать исполнимый код. Попытка выполнения такого кода приведет к возникновению прерывания.

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

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

В случае успешного завершения функция VirtualAlloc() возвратит адрес зарезервированной или полученной области страниц. При ошибке будет возвращено значение NULL.

Приложение может вначале зарезервировать страницы, вызвав функцию VirtualAlloc() с параметром MEM_RESERVE, а затем получить их в пользование, вызвав эту же функцию еще раз для полученной области памяти, но уже с параметром МЕМ_СОММIТ.

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

BOOL VirtualFree (LPVOID lpvAddress, DWORD dwSize, DWORD dwFreeType)

Параметры:

lpvAddress - указатель на начальный адрес области.

dwSize - размер области памяти в байтах, которая должна быть освобождена. Если параметр dwFreeType включает флажок MEM_RELEASE, этот параметр должен иметь значение 0.

dwFreeType - тип операции освобождения.

Возвращаемое значение: при успешном выполнении - TRUE; в противном случае - NULL.

Через параметры lpvAddress и cbSize передаются соответственно адрес и размер освобождаемой области.

Если зарезервирована область виртуальной памяти функцией VirtualAlloc() с параметром MEM_RESERVE для последующего получения страниц в пользование и затем вызвана эту функция еще раз с параметром MЕМ_СОММIТ, то можно либо совсем освободить область памяти, обозначив соответствующие страницы как свободные, либо оставить их зарезервированными, но неиспользуемыми.

В первом случае вызывается функция VirtualFree() с параметром dwFreeType, равным MEM_RELEASE, во втором - с параметром MEM_DECOMMIT.

Три состояния страниц виртуальной памяти. Страницы виртуальной памяти, принадлежащие адресному пространству процесса в Windows, могут находиться в одном из трех состояний (рис.2):

- свободными (Free);

- зарезервированными (Reserved);

- выделенными для использования (Committed).

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

Функция VirtualAlloc() может либо зарезервировать свободные страницы памяти (для чего ее нужно вызвать с параметром MEM_RESERVE), либо делить свободные или зарезервированные страницы для непосредственного использования (для этого функция вызывается с параметром MЕМ_СОММIТ). Приложение может либо сразу получить страницы памяти для использования, либо предварительно зарезервировать их, обеспечив доступное сплошное адресное пространство достаточного размера.

Для того чтобы зарезервированная или используемая область памяти стала свободной, вызывается для нее функцию VirtualFree() с параметром MEM_RELEASE.

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

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

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

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

BOOL VirtualLock (LPVOID lpvAddress, DWORD dwSize)

Параметры:

lpvAddress - указатель на начальный адрес области.

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

Возвращаемое значение: при успешном выполнении - TRUE; в противном случае - NULL.

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

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

Для расфиксирования страниц памяти следует вызвать функцию VirtualUnlock(), имеющую аналогичное назначение параметров:

BOOL VirtualUnLock (LPVOID lpvAddress, DWORD dwSize)

Параметры:

lpvAddress - указатель на начальный адрес области.

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

Возвращаемое значение: при успешном выполнении - TRUE; в противном случае - NULL.

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

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

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

BOOL VirtualProtect (LPVOID lpvAddress, DWORD dwSize, DWORD dwNewProtect, PDWORD pdwOldProtect)

Параметры:

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

dwSize - размер области памяти, для которой должны быть изменены атрибуты защиты доступа.

dwNewProtect - новый тип доступа.

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

Возвращаемое значение: при успешном выполнении - TRUE; в противном случае - NULL.

Через параметр lpvAddress передается адрес области памяти, расположенной в готовых для использования страницах (а не в зарезервированных страницах).

Новый тип доступа передается через параметр dwNewProtect. Здесь можно использовать все константы, которые применяются и для последнего параметра функции VirtualAlloc(), например PAGE_READWRITE или PAGE_READONLY.

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

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

BOOL VirtualProtectEx (HANDLE hProcess, LPVOID lpvAddress, DWORD dwSize, DWORD dwNewProtect, PDWORD pdwOldProtect)

Параметры:

hProcess - хэндл процесса, для которого должна быть изменена защита памяти. Хэндл должен обеспечивать доступ PRCESS_VM_OPERATION.

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

dwSize - размер области памяти, для которой должны быть изменены атрибуты защиты доступа.

dwNewProtect - новый тип доступа.

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

Возвращаемое значение: При успешном выполнении - TRUE; в противном случае - NULL.

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

При выборе третьего - освобождается выделенная страница виртуальной памяти. В листингах1 -2 представлены модули программы.

Листинг1. Основной файл Example2.cpp

#include <windows.h>

#include "Example2.h"

LPCTSTR lpszClassName = "Example 2";

LPCTSTR lpszTitle = "My Application";

HACCEL hAccel;

HINSTANCE hInst;

HWND hWnd;

LPVOID AdrPage;

BOOL IsAlloc = FALSE;

int TypeActiv[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)

{

//-------- <<Стандартное определение функции WinMain() >>-----

...

wc.lpfnWndProc = (WNDPROC)WndProc; ...

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, UINT wParam, LONG lParam)

{

switch (Message)

{

case WM_COMMAND:

if (LOWORD(wParam) == FILE_EXIT)

PostQuitMessage(0);

//------<< Выделение памяти >>------

if (LOWORD(wParam) == ALLOCATE)

if (!IsAlloc)

{

AdrPage = VirtualAlloc(NULL, 1096, MEM_RESERVE, PAGE_EXECUTE_READWRITE);

if (!AdrPage) MessageBox(NULL, "Не вдалося виділити пам'ять!!!", "Помилка", MB_OK);

IsAlloc = TRUE;

} else MessageBox(NULL, "Сторінка пам'яті уже виділена!!!", "Помилка", MB_OK);

//------<< Освобождение памяти >>------

if (LOWORD(wParam) == FREE)

{ if (!VirtualFree(AdrPage, 0, MEM_RELEASE))

MessageBox(NULL, "Не вдалося освободити пам'ять!!!", "Помилка", MB_OK);

IsAlloc = FALSE; }

//------<< Установка типов доступа >>------

if (LOWORD(wParam) == READONLY) //0

{ CheckMenuRadioItem(GetMenu(hWnd), READONLY, NOACCESS,

READONLY, MF_BYCOMMAND);

for (int i=1; i<7; i++) TypeActiv[i] = 0;

TypeActiv[0] = 1;

SetTypeA(); }

if (LOWORD(wParam) == READWRITE) //1

{

CheckMenuRadioItem(GetMenu(hWnd), READONLY, NOACCESS,

READWRITE, MF_BYCOMMAND);

for (int i=0; i<7; i++) TypeActiv[i] = 0;

TypeActiv[1] = 1;

SetTypeA();

}

if (LOWORD(wParam) == WRITECOPY) //2

{ CheckMenuRadioItem(GetMenu(hWnd), READONLY, NOACCESS,

WRITECOPY, MF_BYCOMMAND);

for (int i=0; i<7; i++) TypeActiv[i] = 0;

TypeActiv[2] = 1;

SetTypeA(); }

if (LOWORD(wParam) == EXECUTE) //3

{ CheckMenuRadioItem(GetMenu(hWnd), READONLY, NOACCESS,

EXECUTE, MF_BYCOMMAND);

for (int i=0; i<7; i++) TypeActiv[i] = 0;

TypeActiv[3] = 1;

SetTypeA(); }

if (LOWORD(wParam) == EXECUTE_READ) //4

{ CheckMenuRadioItem(GetMenu(hWnd), READONLY, NOACCESS,

EXECUTE_READ, MF_BYCOMMAND);

for (int i=0; i<7; i++) TypeActiv[i] = 0;

TypeActiv[4] = 1;

SetTypeA(); }

if (LOWORD(wParam) == EXECUTE_READWRITE) //5

CheckMenuRadioItem(GetMenu(hWnd), READONLY, NOACCESS,

EXECUTE_READWRITE, MF_BYCOMMAND);

for (int i=0; i<7; i++) TypeActiv[i] = 0;

TypeActiv[5] = 1;

SetTypeA(); }

if (LOWORD(wParam) == NOACCESS) //6

{ if (TypeActiv[7] || TypeActiv[8])

MessageBox(NULL, «Недопустима комбінація типів доступу!!!», «Помилка», MB_OK);

else

{

CheckMenuRadioItem(GetMenu(hWnd), READONLY, NOACCESS,

NOACCESS, MF_BYCOMMAND);

for (int i=0; i<6; i++) TypeActiv[i] = 0;

TypeActiv[6] = 1;

SetTypeA(); }

}

if (LOWORD(wParam) == GUARD) //7

{ if (TypeActiv[6])

MessageBox(NULL, "Недопустима комбінація типів доступу!!!", «Помилка», MB_OK);

else

if (TypeActiv[7])

{

CheckMenuItem(GetMenu(hWnd), GUARD, MF_BYCOMMAND | MF_UNCHECKED);

TypeActiv[7] = 0; }

else

if (!TypeActiv[7])

{ CheckMenuItem(GetMenu(hWnd), GUARD, MF_BYCOMMAND | MF_CHECKED);

TypeActiv[7] = 1; }

SetTypeA(); }

if (LOWORD(wParam) == NOCACHE) //8

{ if (TypeActiv[6])

MessageBox(NULL, "Недопустима комбінація типів доступу!!!", «Помилка», MB_OK);

else

if (TypeActiv[8])

{ CheckMenuItem(GetMenu(hWnd), NOCACHE, MF_BYCOMMAND | MF_UNCHECKED);

TypeActiv[8] = 0;

} else

if (!TypeActiv[8])

{ CheckMenuItem(GetMenu(hWnd), NOCACHE, MF_BYCOMMAND | MF_CHECKED);

TypeActiv[8] = 1; }

SetTypeA();

}

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

}

return DefWindowProc(hWnd, Message, wParam, lParam);

}

void SetTypeA()

{

DWORD OldProtect;

if (IsAlloc)

{

if (TypeActiv[0])

if (!VirtualProtect(AdrPage, 1096, PAGE_READONLY, &OldProtect))

MessageBox(NULL, "Не вдалося змінити тип доступу до пам'яті!!!", «Помилка», MB_OK);

} else MessageBox(NULL, "Сторінка пам'яті не виділена!!!", «Попередження», MB_OK);

2. Функции управления динамически распределяемыми областями памяти

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

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

Механизм управления памятью в Win32 динамически распределяемыми областями памяти называется кучей (heaps) или пулом. Они весьма удобны при создании множества небольших блоков данных.

В Win32 схема управления динамически распределяемой памятью принципиально отличается от Win16. Вот лишь некоторые отличия:

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

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

? процессу разрешается создавать несколько куч, являющихся частью его адресного пространства.

? DLL-модулю собственная куча не выделяется; он использует кучи, являющиеся частью адресного пространства процесса. Но DLL-модуль может создать кучу в адресном пространстве процесса и использовать ее для себя. Поскольку многие 16-битные DLL-модули обменивались данными с процессами через специальную локальную кучу выделяемую DLL-модулям, то и здесь часто возникают проблемы при переносе программ.

Виртуальные адресные пространства приложений Windows NT/2003 разделены (рис.17), поэтому в этой операционной системе нет глобальных пулов памяти. Вместо этого каждому приложению по умолчанию выделяется один стандартный пул памяти в его адресном пространстве. При необходимости приложение может создавать (опять же в своем адресном пространстве) произвольное количество так называемых динамических пулов памяти.

По умолчанию для стандартного пула резервируется 1 Мбайт сплошного адресного пространства, причем 4 Кбайт памяти выделяется приложению для непосредственного использования. Если приложению требуется больше памяти, в адресном пространстве резервируется еще один или несколько мегабайт памяти.

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

Итак, в распоряжении приложения Windows имеется один стандартный пул и произвольное количество динамических пулов памяти.

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


Подобные документы

  • Архитектура компьютеров и возможности операционной системы по управлению памятью. Суть концепции виртуальной памяти. Аппаратно-независимые и аппаратно-зависимые средства управления виртуальной памятью. Сегментно-страничная организации виртуальной памяти.

    презентация [355,2 K], добавлен 27.12.2010

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

    контрольная работа [236,2 K], добавлен 23.12.2016

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

    курсовая работа [43,5 K], добавлен 18.06.2009

  • Распределение виртуальной памяти. Страничная и сегментная организации виртуальной памяти. Сегментно-страничная организация виртуальной памяти. Преобразование виртуального адреса в физический. Упрощение адресации памяти клиентским программным обеспечением.

    курсовая работа [440,7 K], добавлен 04.03.2014

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

    курсовая работа [3,1 M], добавлен 19.01.2016

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

    курсовая работа [99,5 K], добавлен 02.12.2009

  • Понятие виртуальной памяти, ее реализация. Особенности страничной организации по требованию. Этапы обработки ситуации отсутствия страницы в памяти. Стратегии (алгоритмы) замещения страниц. Особенности некоторых операционных систем: Windows NT и Solaris.

    презентация [2,2 M], добавлен 24.01.2014

  • Критерии различия между механизмами межпроцессного обмена. Системные вызовы для работы с разделяемой памятью, выделение ее области. Создание и инициализация семафора. Задачи использования потока. Способ обмена между виртуальной машиной Linux и Windows.

    лекция [485,2 K], добавлен 29.07.2012

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

    лабораторная работа [1,5 M], добавлен 23.07.2012

  • Основные функции и процессы подсистемы управления процессами. Диспетчеризация процессов (потоков). Алгоритмы планирования выполнения потоков. Назначение и разновидности приоритетов в операционных системах. Функции подсистемы управления основной памятью.

    презентация [117,7 K], добавлен 20.12.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.