Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
всі білети.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
695.81 Кб
Скачать

1.Взаємодія з диском підчас керування пам'яттю. Блокування сторінок у пам'яті. Фонове заміщення сторінок. Блокування сторінок у пам'яті

Для організації блокування сторінок у пам'яті в Linux використовують системні

виклики mlock() і munlock(), прототипи яких визначені в заголовному файліsys/mman.h. Системний виклик mlock() блокує у пам'яті набір сторінок,munlock()знімає це блокування. Обидва ці виклики приймають два параметри: адресу, зякої починається блокований набір сторінок, і розмір пам'яті, яку потрібнозаблокувати або розблокувати.Приклад блокування однієї сторінки із використанням цих викликів:

#include <sys/mman.h>

#include <stdlib.h> // для malloc()

size_t pagesize = getpagesize();

// виділення пам'яті під сторінку

char* page = (char *)malloc(pagesize);

// сторінка заблокована у пам'яті й не може бути вивантажена на диск

mlock(page, pagesize);

// ...

// розблокування сторінки

munlock(page, pagesize);

Системний виклик mlockall() блокує у пам'яті всі сторінки поточного процесу.

Заблоковану пам'ять не можна використовувати під час розподілу пам'яті доти,

поки вона не буде розблокована (або поки процес не завершиться).

Використовують функції Win32 API VirtualLock() і Vi rtualUnlock(). Відповідні

сторінки мають бути до цього часу підтверджені.

SYSTEM_INFO info;

GetSystemInfo(&info);

DWORD pagesize = info.dwPageSize;

// резервування і підтвердження сторінки

char *pageaddr = (char *)VirtualAlloc(NULL,pagesize,

MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);

// блокування сторінки у пам'яті

VirtualLock(pageaddr, pagesize);

//... розблокування

VirtualUnlock(pageaddr, pagesize);

Оскільки блокування сторінок призводить до того, що відповідна фізичнапам'ятьвиявляється втраченою для інших застосувань і системи, обсяг пам'яті,

дозволеної для блокування, не може перевищувати нижньої межі робочогонабору процесу.

Фонове заміщення сторінок.

У Linux реалізоване фонове заміщення сторінок, за яке відповідає потік ядраkswapd. Необхідність його запуску визначає наявність вільних сторінок пам'яті усистемі.Організація заміщення сторінок у Linux ґрунтується на їхбуферизації.Організовують два списки сторінок: список активних (active_list) — міститьсторінки, які використовують процеси і визначає робочий набір процесів; списокнеактивних (inactive_list) — містить сторінки, які не так важливі для процесів (невикористовуються в цей момент часу). Модифікована сторінка перебуває всписку неактивних якийсь час, перш ніж її збережуть на диску.Нові сторінки додають у початок списку неактивних сторінок. За нестачі пам'ятічастину сторінок переміщують з кінця списку активних сторінок у початоксписку неактивних, а потім починають вивільнення сторінок із кінця спискунеактивних сторінок.

Взаємодія потоків.Взаємодія потоків у Linux.

Бібліотеки підтримки потоків Linux (LinuxThreads і NPTL) надають програмам

користувача набір синхронізаційних примітивів, визначених стандартом POSIX

(м'ютекси, умовні змінні, семафори, блокування читання-записування, бар'єри).

Крім того, у NPTL допускають використання цих примітивів у поєднанні з відображуваною або розподілюваною пам'яттю для реалізації міжпроцесової синхронізації. Описані примітиви реалізовані на основі базових механізмів синхронізації, доступних через системні виклики (у ядрі версії 2.6 до них належать ф'ютекси). Крім того, код ядра може використовувати спеціальні механізми синхронізації, доступні тільки у ядрі. Далі розглянемо базові механізми синхронізації ядра і застосувань користувача.

5.4.1. Механізми синхронізації ядра Linux

Ядро Linux є реентерабельним. Це означає, що одночасно в режимі ядра може виконуватися код кількох процесів. В однопроцесорних системах процесор у конкретний момент виконує код тільки одного процесу, інші перебувають у стані очікування. У багатопроцесорних системах код різних процесів може виконуватися паралельно. Для досягнення реентерабельності всередині ядра повинна бути реалізована така сама синхронізація, що і між потоками одного процесу. Для цього у ядрі передбачені механізми взаємного виключення, які забезпечують безпечний доступ до спільно використовуваних даних ядра.

Аналогом потоків у ядрі виступають шляхи передачі керування ядра (kernel

control paths). Таким шляхом є послідовність інструкцій, виконуваних ядром для реалізації реакції на системний виклик або обробку переривання. Така послідовність звичайно зводиться до виконання кількох функцій ядра. Наприклад, для обробки системного виклику шлях передачі керування починають з виклику функції system_cal ІО і завершують викликом ret_system_call О. Надалі іноді говоритимемо не про шляхи керування, а про процеси в режимі ядра, маючи на увазі шляхи передачі керування, що відповідають системним викликам, виконаним процесами.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]