- •1)Права доступа к файлу
- •2)Родительский процесс, порожденный, «сирота»
- •3)Системные вызовы fork, exec ,wait.
- •4)Файловая система. Системные вызовы mount, umount.
- •5)Файловая система. I-nodes.
- •6)Жесткая и символическая ссылки.
- •7)Схема переходов процесса из состояния в состояние
- •8)Системные вызовы getpid, getppid
- •9)Системный вызов times. Ядерная и пользовательские фазы процессов.
- •10)Программные каналы. Fifo-файлы.
- •11)Очередь сообщений. Последовательность системных вызовов.
- •12) Параметры функции msgget.
- •13)Параметры функции msgsnd.
- •14)Параметры функции msgrcv.
- •15)Параметры функции msgctl.
- •16)Семафоры. Последовательность системных вызовов.
- •17)Параметры функции semget.
- •18)Параметры функции semop.
- •19)Параметры функции semctl.
- •20)Разделяемая память. Последовательность системных вызовов.
- •21)Параметры функции shmget.
- •22)Параметры функции shmat.
- •23)Параметры функции shmdt.
- •24)Параметры функции shmctl.
- •25)Последовательность системных вызовов при работе с socket.
- •26)Потоки стандарта Posix.1c
- •27) Системный вызов pthread_create.
- •28)Системные вызовы pthread_self,exit и sched_yield
- •29) Системные вызовы pthread_join kill
- •30) Взаимоисключающие блокировки. Пример тупиковой ситуации.
- •34)Условные переменные
- •35) Системные вызовы pthread_cond_init, pthread_cond_signal и pthread_cond_timedwait. Их предназначение и параметры.
- •36) Системные вызовы pthread_cond_broadcast, pthread_cond_wait и pthread_cond_destroy. Их предназначение и параметры.
- •38) Системный вызов sem_open. Его предназначение и параметры.
- •39) Системные вызовы sem_init. Его предназначение и параметры.
- •40) Системные вызовы sem_getvalue, sem_wait и sem_close. Их предназначение и параметры.
- •41) Системные вызовы sem_trywait и sem_unlink. Их предназначение и параметры.
- •42) Системные вызовы sem_post и sem_destroy. Их предназначение и параметры.
- •43.Последовательность вызовов api серверного гнезда.
- •44.Последовательность вызовов api клиентского гнезда.
- •45.Последовательность вызовов api дейтаграммного гнезда.
- •46.Предназначение системного вызова socket().
- •47.Предназначение системного вызова bind().
- •48.Предназначение системного вызова listen().
- •49.Предназначение системного вызова accept().
- •50.Предназначение системного вызова connect().
- •51.Предназначение системных вызовов send() и sendto().
- •52.Предназначение системных вызовов recv() и recvfrom().
26)Потоки стандарта Posix.1c
Поток состоит из следующих элементов:
• идентификатора потока;
• динамического стека;
• набора регистров (счетчик команд, указатель стека);
• сигнальной маски;
• значения приоритета;
• специальной памяти.
Поток выполнения создается функцией pthread_create. Каждому потоку присваивается идентификатор, уникальный среди всех потоков процесса. Вновь созданный поток наследует сигнальную маску процесса, динамический стек, значение приоритета и набор регистров. Динамический стек и регистры (счетчик команд и указатель стека) позволяют потоку выполняться независимо от других потоков. Поток может изменить унаследованную сигнальную маску и выделить динамическую память для хранения своих данных.
Потоку при создании назначается соответствующая функция. Поток завершается, когда эта назначенная функция возвращает результат или когда поток вызывает функцию pthread_exit. Когда в процессе создается первый поток, то фактически создаются два потока: один - для выполнения указанной функции, а другой - для продолжения выполнения процесса. Последний поток завершается, когда функция main возвращает результат или он сам вызывает функцию pthread_exit.
Все потоки в процессе совместно используют одни сегменты данных и кода. Когда один поток записывает данные в глобальные переменные в процессе, остальные потоки сразу же видят эти изменения. Если какой-либо поток вызывает функцию exit или exec, то завершаются все потоки и сам процесс. Поэтому завершающийся поток, если он не хочет разрушить процесс, в котором выполняется, должен вызывать функцию pthread_exit.
Поток может изменить свою сигнальную маску с помощью функции pthread_sigmask. Сигнал, передаваемый процессу, получат все потоки, которые не замаскировали его. Поток может посылать сигналы в другие потоки этого же процесса, используя функцию pthread_kill, но не может посылать сигналы в потоки другого процесса, так как уникальность идентификаторов потоков не распространяется на другие процессы.
Потоку присваивается целочисленное значение приоритета. Чем больше это значение, тем чаще планируемое выполнение потока. Значение приоритета потока можно запросить с помощью функции pthread_attr_getschedparam и изменить с помощью функции pthread_attr_setschedparam. Поток может намеренно передать выполнение другим потокам с таким же приоритетом; для этого используется функция sched_yield. Кроме того, поток может ожидать завершения другого потока и получить его код возврата с помощью функции pthread_join.
Потоки бывают присоединяемые (joinable) и отсоединенные (detached). Различия между ними заключаются в управлении ресурсами по завершению потока. Присоединяемый поток после своего завершения не освобождает память до вызова pthread_join, который освобождает всю занимаемую память (стек и т.п.) и возвращает результат выполнения потока. Отсоединенный поток этого не требует – все ресурсы возвращаются системе непосредственно по его завершению, узнать результат в таком случае невозможно ввиду того, что нет переменной, в которую этот результат может быть сохранен.