Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект 58 страниц 2002.doc
Скачиваний:
91
Добавлен:
15.06.2014
Размер:
4.07 Mб
Скачать

Атрибуты процесса

Атрибут обеспечивает возможность ОС по управлению работойпроцесса. К ним относятся:

  1. Идентификатор процесса PID (Process ID). Каждый процесс имеет уникальный идентификатор, позволяющий ядру системы различать процессы. Когда создается новый процесс, ядро присваивает ему следующий свободный идентификатор. Присваивание идентификаторов происходит по возрастанию, т.е. идентификатор следующего процесса больше идентификатора процесса, созданного перед ним. Если идентификатор достиг максимально возможного значения, то следующий процесс получит минимальный свободный идентификатор и цикл выделяет индетификатор повторно. Когда процесс завершит свою работу, ядро освобождает занятый им идентификатор. Т.о.:

  • Принципиально в ОС можно породить ограниченное число процессов.

  • Ограничение на максимальное число процессов одного пользователя.

  • С каждым процессом связано уникальное имя.

  • Есть система идентификатора для процессов.

  • Чтобы создать новый процесс, необходимо освобождать идентификатор завершения процессов.

  • Идентификатор родительского процесса PPID(Parent Process ID)  идентификатор процесса, породившего данный процесс.

  • Приоритет процесса Vice Number - относительный приоритет процесса, учитываемый планировщиком процессов при очерёдности запуска. Фактически распределение процессорных ресурсов определяется приоритетом выполнения, зависящим от нескольких факторов (в том числе и от относительного приоритета процессов). Относительный приоритет не изменяется системой на всём протяжении жизни процесса, но может быть изменён пользователем или администратором,в отличие от приоритета выполнения,динамически обновляемого ядром.

  • Терминальная линия TTY  это терминал (псевдотерминал), ассоциированный с процессом,если таковой существует. Демоны не имеют ассоциированного терминала.

  • Реальный (RID) и эффективный (EUID) идентификаторы пользователя. Реальный идентификатор  это идентификатор пользователя, запустившего процесс, а эффективный идентификатор используется для определения прав доступа процесса к системным ресурсам, в первую очередьк рессурсам файловой системы. В большинстве случаев, реальный и эффективный идентификаторы совпадают, однако есть возможность задать процессу более широкие права, путём установки специального флага SUID. В этом случае эффективный идентификатор пользователя получит значение идентификатора владельца выполняемого файла.

  • Реальный (RGID) и эффективный (EGID) идентификаторы группы. Реальный идентификатор группы равен идентификатору первичной группы пользователя, запустившего процесс. Эффективный идентификатор служит для определения прав доступа к системным ресурсам по классу доступа групп. Также можно его модифицировать с помощью SUID.

    Процесс создания и запуска программ

    #include <sys\types.h> #include <unistd.h>

    pid_t fork(void);

    pid_t getpid (void); //функция, возвращающая идентификатор данного процесса.

    pid_t getppid (void); //системный вызов, возвращающий идентификатор процесса-отца для текущего процесса.

    sh

    PID=324

    PPID=1

    #include <sys/types.h>

    #include <unistd.h>

    main( )

    {

    int pid;

    pid = fork( );

    if (pid == -1)

    {

    printf(“Ошибка создания процесса”);

    exit(-1);

    }

    if (pid == 0)

    {

    printf(“\n Процесс-потомок”);

    }

    else

    { printf(“\nПроцесс-родитель”);

    . . .

    }

    }

    Новый процесс порождается с помощью системного вызова fork. Процесс, сделавший вызов fork называется родительским, а вновь созданный процесс – дочерним (или процессом-сыном).

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

    Процесс сын следующие атрибуты родительского процесса:

    • идентификатор пользователя и группы

    • переменные окружения

    • диспозиция сигналов и их обработчики

    • ограничения, накладываемые на процесс

    • текущий и корневой каталоги

    • маска создания файлов

    • все файловые дескрипторы, включая файловые указатели

    • управляющий терминал.

    Но между порождающим и порожденным процессом имеются отличия:

    • процессу-сыну присваивается уникальный идентификатор PID

    • родительские идентификаторы для процесса-отца и процесса-сына различны

    • дочерний процесс свободен от сигналов, ожидающих доставки.

    • значение, возвращаемое системным вызовом fork, различно для процесса-отца и процесса-сына. Отцу возвращается значение, равное идентификатору PID сына, а процессу-сыну возвращается значение 0. При ошибке возвращается значение –1.

    При этом могут обнаруживаться две ошибочные ситуации, которые записываются в глобальную переменную errno:

    • ENOMEM  для создания нового процесса не хватает памяти.

    • EAGAIN  количество текущих процессов превышает допущенные в системе ограничения.

    • CHILD_MAX – количество процессов, созданных одним пользователем.

    • MAXPID – количество процессов, одновременно существующих во всей системе.