Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мои шпоры ОСиСП(1).doc
Скачиваний:
30
Добавлен:
26.09.2019
Размер:
1.63 Mб
Скачать

Int chmod(const char *path, mode_t mode);

Int fcmod(int fd, mode_t mode);

Оба вызова chmod() и fchmod() устанавливают для файла разрешения, указан­ные при помощи параметра mode. В вызове chmod() параметр path содержит отно­сительный или абсолютный путь к модифицируемому файлу. Для вызова fсhmod() файл указывается при помощи дескриптора fd. Чтобы иметь возможность изменить разрешения файла, действительный идентификатор процесса, вызывающего chmod() или fchmod(), должен совпадать с идентификатором владельца файла или же процесс должен обладать характе­ристикой CAP_FОWNER. В случае успеха оба вызова возвращают значение 0. В случае ошибки оба воз­вращают -1 и присваивают переменной errno один из кодов ошибки.

В структуре stat в полях st_uid и st_gid хранятся владелец и группа файла со­ответственно. Три системных вызова позволяют пользователю менять эти два значения:

#include <sys/types.h>

#include <unistd.h>

Int chown (const char *path, uid_t owner, gid_t group);

Int lchown (const char *path, uid_t owner, gid_t group);

Int fchown (int fd, uid_t owner, gid_t group): ,

Вызовы chown() и Ichown() определяют владение файлом, указанным при по­мощи пути в параметре path. Они работают одинаково для всех файлов, за исключением символических ссылок. В случае успеха все три вызова делают владельцем файла пользователя owner, группой файла группу group и возвращают значение 0. Если параметр owner или group равен -1, то соответствующее значение не устанавливается. Только процесс, владеющий характеристикой CAP_CHOWN (обычно это процесс, принадлежащий пользователю root), может менять владельца файла. Владелец файла может сменить группу файла на любую другую, членом которой он явля­ется; процессы с характеристикой CAP_CH0WN имеют право менять группу файла на любое другое значение.В случае ошибки вызовы возвращают -1 и присваивают переменной errno одно из значений.

2. Взаимодействие процессов. Задача взаимного исключения. Вариант 1 (4, 26) – 142

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

int turn=1;

void P0() begin integer очередь;

{ очередь := 1;

while (1) parbegin

{ процесс 1: begin L1: if (очередь = 2) then goto L1;

while(turn!=0); критический интервал 1;

критический интервал 1; очередь := 2;

turn=1; остаток цикла 1;

. goto L1;

} end;

}

void P1() процесс 2: begin L2: if (очередь = 1) then goto L2;

{ критический интервал 2;

while (1) очередь := 1;

{ остаток цикла 2;

while(turn!=1); goto L2;

критический интервал 2; end;

turn=0; parend;

. еnd;

}

}

void main()

{

parbegin(P0,P1);

}

Недостатки:1. Процессы могут входить в критический интервал строго последовательно. 2.Темп развития процессов определяется медленным процессом.

3. Если какой-то из процессов остановится в остатке цикла, то это приведет к остановке и второго процесса.

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