1. Что произойдет в том случае,
если в программе debug будет
отсутствовать вызов функции wait (Рисунок 11.3)? (Намек:
возможны два исхода.) 2. С помощью функции ptrace отладчик
считывает данные из пространства
трассируемого процесса по одному
слову за одну операцию. Какие
изменения следует произвести в
ядре операционной системы для того,
чтобы увеличить количество
считываемых слов? Какие изменения
при этом необходимо сделать в самой
функции ptrace? 3. Расширьте область действия
функции ptrace так, чтобы в качестве
параметра pid можно было указывать
идентификатор процесса, не
являющегося потомком текущего
процесса. Подумайте над вопросами,
связанными с защитой информации:
При каких обстоятельствах процессу
может быть позволено читать данные
из адресного пространства другого,
произвольного процесса? При каких
обстоятельствах разрешается вести
запись в адресное пространство
другого процесса? 4. Организуйте из функций работы с
сообщениями библиотеку
пользовательского уровня с
использованием обычных файлов,
поименованных каналов и элементов
блокировки. Создавая очередь
сообщений, откройте управляющий
файл для записи в него информации о
состоянии очереди; защитите файл с
помощью средств захвата файлов и
других удобных для вас механизмов.
Посылая сообщение данного типа,
создавайте поименованный канал для
всех сообщений этого типа, если
такого канала еще не было, и
передавайте сообщение через него (с
подсчетом переданных байт).
Управляющий файл должен соотносить
тип сообщения с именем
поименованного канала. При чтении
сообщений управляющий файл
направляет процесс к
соответствующему поименованному
каналу. Сравните эту схему с
механизмом, описанным в настоящей
главе, по эффективности, сложности
реализации и функциональным
возможностям. 5. Какие действия пытается
выполнить программа,
представленная на Рисунке
11.22? *6. Напишите программу, которая
подключала бы область разделяемой
памяти слишком близко к вершине
стека задачи и позволяла бы стеку
при увеличении пересекать границу
разделяемой области. В какой момент
произойдет фатальная ошибка
памяти? 7. Используйте в программе,
представленной на Рисунке
11.14, флаг IPC_NOWAIT, реализуя условный
тип семафора. Продемонстрируйте,
как за счет этого можно избежать
возникновения взаимных блокировок.
8. Покажите, как операции над
семафорами типа P и V реализуются
при работе с поименованными
каналами. Как бы вы реализовали
операцию P условного типа? 9. Составьте программы захвата
ресурсов, использующие (а)
поименованные каналы, (б) системные
функции creat и unlink, (в) функции обмена
сообщениями. Проведите
сравнительный анализ их
эффективности. 10. На практических примерах
работы с поименованными каналами
сравните эффективность
использования функций обмена
сообщениями, с одной стороны, с
функциями read и write, с другой. 11. Сравните на конкретных
программах скорость передачи
данных при работе с разделяемой
памятью и при использовании
механизма обмена сообщениями.
Программы, использующие
разделяемую память, для
синхронизации завершения операций
чтения-записи должны опираться на
семафоры. Рисунок 11.22 Предыдущая
глава || Оглавление
11.6 УПРАЖНЕНИЯ
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define ALLTYPES 0
main()
{
struct msgform
{
long mtype;
char mtext[1024];
} msg;
register unsigned int id;
for (id = 0; ; id++)
while (msgrcv(id,&msg,1024,ALLTYPES,IPC_NOWAIT) > 0)
;
}