Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Совместное использование памяти




 

В больших многозадачных системах несколько пользователей могут одновременно работать с одной программой, поэтому возникает вопрос организации контролируемого совместного доступа нескольких процессов к определенной области памяти – разделяемой памяти (shared memory). Но не все страницы (сегменты) памяти разделяемы, например страницы текста программы можно использовать совместно, а страницы с данными – нельзя. Нецелесообразно многократно загружать код программы в оперативную память, экономичней загрузить одну копию кода, которая обслуживала бы всех пользователей, работающих в данный момент с программой. В тоже время для каждого пользователя должна быть создана личная копия сегмента данных. Так для организации разделяемого сегмента памяти нужно:

- поместить разделяемый сегмент данных в виртуальное адресное пространство каждого процесса, которому нужен доступ к данному сегменту[42];

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

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

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

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

- поддержку схемы именования ресурсов;

- проверку прав доступа определенного процесса к ресурсу;

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

Для отличия разделяемых сегментов памяти от индивидуальных сегментов, дескриптор сегмента дополнительно содержит поле, имеющее два значения: shared (разделяемый) или private (индивидуальный).

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

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

Совместное использование данных в системах со страничной организацией памяти реализовано другими методами. Например, в системе UNIX после системного вызова fork родительский и дочерний процессы должны совместно использовать текст программы и данные. Каждому из этих процессов предоставляется собственная таблица страниц, но с указателем на один и тот же набор страниц. Копирование страниц не производится, но все страницы данных для обоих процессов отображаются только для чтения (имеют статус read only). При чтении данных состояние не изменяться, но при попытке изменения данных происходит нарушение защиты «read only», которое вызывает прерывание, передающее управление операционной системе. Операционная система создает копию страницы, и каждый процесс получает индивидуальный экземпляр этой страницы. Для копий страниц разрешается чтение и запись, поэтому последующие записи в любую из двух страниц происходят без прерываний.

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

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

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

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




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


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


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



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




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