Основы операционных систем. Практикум



         

Прогон программ с использованием разделяемой памяти


Для иллюстрации использования разделяемой памяти давайте рассмотрим две взаимодействующие программы.

Листинг 6.1a. Программа 1 (06-1а.с) для иллюстрации работы с разделяемой памятью (html, txt)

Листинг 6.1b. Программа 2 (06-1b.с) для иллюстрации работы с разделяемой памятью (html, txt)

Эти программы очень похожи друг на друга и используют разделяемую память для хранения числа запусков каждой из программ и их суммы. В разделяемой памяти размещается массив из трех целых чисел. Первый элемент массива используется как счетчик для программы 1, второй элемент – для программы 2, третий элемент – для обеих программ суммарно. Дополнительный нюанс в программах возникает из-за необходимости инициализации элементов массива при создании разделяемой памяти. Для этого нам нужно, чтобы программы могли различать случай, когда они создали ее, и случай, когда она уже существовала. Мы добиваемся различия, используя вначале системный вызов shmget() с флагами IPC_CREAT и IPC_EXCL. Если вызов завершается нормально, то мы создали разделяемую память. Если вызов завершается с констатацией ошибки и значение переменной errno равняется EEXIST, то, значит, разделяемая память уже существует, и мы можем получить ее IPC дескриптор, применяя тот же самый вызов с нулевым значением флагов. Наберите программы, сохраните под именами 06-1а.с и 06-1b.c cоответственно, откомпилируйте их и запустите несколько раз. Проанализируйте полученные результаты.




Содержание  Назад  Вперед