Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Загальні області пам'яті




Два і більш за процеси можуть використовувати одну і ту ж фізичну область пам'яті. Найпростіше це досягається в тих моделях пам'яті, які забезпечують динамічну трансляцію адрес. Нагадаємо, що кожен процес має власну таблицю сегментів або сторінок, в якій міститься, крім іншого, базова адреса сегменту/сторінки у фізичній пам'яті. Для області пам'яті, що розділяється, створюється по елементу в таблиці для кожного процесу, що її використовує. У чисто сторінковій моделі, проте, виникають труднощі, пов'язані з тим, що область пам'яті, що розділяється, може мати об'єм, некратний розміру сторінки, зазвичай в таких випадках область, що розділяється, вирівнюється до межі сторінки. У сегментній або сегментно-сторінковій моделі таких проблем немає. Оскільки для кожного процесу сегмент, що розділяється, описується своїм дескриптором, права доступу до сегменту можуть бути встановлені різними для різних процесів.

У разі іменованих областей пам'яті один процес створює загальну область пам'яті:

vAddr = createNamedMemorySegment(segmentName, segmentSize);

а другий її "відкриває":

vAddr = openNamedMemorySegment(segmentName);

У цих викликах segmentName - ім'я області, segmentSize - її розмір. Обидва виклики повертають віртуальну адресу загальної області пам'яті у віртуальному адресному просторі процесу - vAddr.

Для неіменованої області пам'яті створення області здійснюється викликом:

vAddr = createMemorySegment(segmentSize);

а "відкриття":

vAddr = openMemorySegment(hostAddr, hostPid);

де hostAddr - віртуальна адреса області пам'яті у процесу-творця області, hostPid - ідентифікатор процесу-творця області. Цей виклик повертає віртуальна адреса області в адресному просторі процесу, що відкрив область. Зрозуміло, у складі API є системні виклики "закрытия"/уничтожения загальної області пам'яті.

Області пам'яті, що розділяються, проте, породжують ряд проблем як для програмістів, так і для ОС. Проблеми програмістів - ті, що розглядалися в попередньому розділі: взаємне виключення процесів при доступі до загальної пам'яті. Програмісти можуть диференціювати права доступу для процесів або організувати взаємне виключення, використовуючи семафори (див. нижчий). Проблеми ОС - організація свопінгу. Очевидно, що вірогідність витіснення сегменту, що розділяється, або сторінки повинна бути тим менше, чим більше процесів розділяють цей сегмент/сторінку. Якщо кожен процес має власний дескриптор сегменту, що розділяється, або сторінки, то облік використання сегменту або сторінки (поля used і dirty) вестимуться по кожному процесу окремо. ОС повинна обробляти, наприклад, такий випадок: два процеси - A і B - розділяють сегмент; процес A провів запис в сегмент і в його дескрипторі сегмент помічений, як "брудний". В той час, коли активний процес B, ухвалюється рішення про витіснення цього сегменту з пам'яті. Але в дескрипторі процесу B цей сегмент має ознаку "чистий", тому сегмент може бути звільнений у фізичній пам'яті без збереження на зовнішній пам'яті і зміни в сегменті, зроблені процесом A, будуть загублені. ОС доводиться вести окрему таблицю сегментів, що розділяються, в якій відображати дійсний їх стан.

З погляду ідентифікації області пам'яті, що розділяються, можуть розглядатися як віртуальні комунікаційні порти. Для загальної області може бути за угодою між розробниками взаємодіючих процесів встановлено зовнішнє ім'я, яке буде використано для діставання доступу. (У Windows 95, наприклад, такі області називаються "Файлами пам'яті, що відображається," - memory mapped file - і для встановлення доступу до них використовуються системні виклики типу create і open). Для неіменованих областей пам'яті можлива передача селектора (номери в таблиці дескрипторів) від одного процесу до іншого.

У системах, які орієнтовані на процесор Intel-Pentium, може використовуватися та обставина, що адресація можлива через дві таблиці дескрипторів - LDT і GDT. За рахунок цього загальний адресний простір процесу може досягати 4 Гбайт. З них молодші 2 Гбайт адресуються через LDT а старші - через GDT. Глобальна таблиця дескрипторів - загальна для всіх процесів, і саме вона може використовуватися для доступу до спільно використовуваної пам'яті. Розміщення в загальних віртуальних адресах зручно для системних програм і динамічних бібліотек, до яких відбуваються часті звернення із застосувань: якщо ці компоненти ОС знаходяться в адресному просторі процесу, то звернення до них не вимагають перемикання контексту. Але з іншого боку, це знижує надійність: якщо системні компоненти доступні для застосування, то вони можуть бути їм зіпсовані. Тому така "розкіш" може бути допущена тільки в однопользовательских системах.




Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 404; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.