Содержание
- 2. Структура раздела Процессы Понятие процесса Управление процессами Процессы и потоки Параллельные процессы Процессы в ОС UNIX
- 3. Процессы
- 4. Понятие процесса Процесс – некоторая деятельность, связанная с исполнением программы на процессоре. Процесс – система действий,
- 5. Виды процессов По принадлежности к центральному процессору Внутренние процессы – связаны с программами, исполняемыми на центральном
- 6. По динамическому признаку Последовательные процессы – процессы, которые не могут выполняться одновременно. Параллельные процессы – одновременно
- 7. Состояния процесса Порождение Готовность Активное Ожидание Окончание
- 8. Атрибуты процессов Идентификатор процесса Таблицы адресов выделенных процессу областей памяти Таблицы файлов Приоритет процесса Состояние процесса
- 9. Управление процессами Основные функции ОС Создание и удаление процессов Планирование и диспетчеризация Синхронизация процессов и обеспечение
- 10. Планирование Планирование – управление очередями с целью минимизации задержек и максимизации производительности системы Виды планирования Долгосрочное
- 11. Уровни планирования Создание Завершение Выполнение Готов Блокирован Блокирован приостановлен Готов приостановлен Краткосрочное планировани Краткосрочное планирование Среднесрочное
- 12. Дисциплины диспетчеризации Бесприоритетные Приоритетные Линейные Нелинейные В порядке очереди Случайный выбор Циклический алгоритм Многоприоритетный циклический С
- 13. В порядке очереди (FIFO) Процессор Очередь
- 14. Циклический алгоритм (Round robin) Очереди Процессор Обслуженные заявки Заявки, обслуживание которых не закончено Порядок просмотра очередей
- 15. Процессы и потоки Многопоточность - способность ОС поддерживать в рамках одного процесса выполнение нескольких потоков. Поток
- 16. Один поток Несколько потоков
- 17. Блок управления процессом Адресное пространство Поток 1 Поток 2 Процесс
- 18. Параллельные процессы Взаимодействующие процессы имеют информационные связи и используют общие ресурсы Критический ресурс не допускает одновременное
- 19. Конкурирующие процессы Процесс 1 Процесс 2 Критический ресурс Критическая секция Освобождение Освобождение Блокировка
- 20. Блокирующие переменные F==1 нет да F=0 F=1 Проверка занятости Занять ресурс Критическая секция Освободить ресурс F
- 21. Семафоры Дейкстры S – семафор P(S) – операция закрытия (проверки) V(S) – операция открытия (увеличения) P(S):
- 22. Взаимное исключение var S: semafore; begin S:=1; parbegin ПР1: begin P(S); {критическая секция} V(S); end ПР2:
- 23. Производитель - потребитель Писатели Читатели Читатели - писатели
- 24. var S_св, S_зап , S_иск; begin S_св:=1; S_зап:=0; S_иск:=1; parbegin ПРОИЗВОДИТЕЛЬ: while true do begin {подготовка
- 25. ПОТРЕБИТЕЛЬ: while true do begin P(S_зап); P(S_иск); {прием сообщения} V(S_св); V(S_иск); {обработка сообщения} end parend end
- 26. "Читатели – писатели" с приоритетом читателей var R,W: semaphore; NR: integer; procedure ЧИТАТЕЛЬ; begin P(R); NR:=NR+1;
- 27. procedure ПИСАТЕЛЬ; begin P(W); Write_Data; V(W); end begin NR:=0; InitSem(R,1); InitSem(W,1); parbegin while true do ЧИТАТЕЛЬ
- 28. while true do ЧИТАТЕЛЬ and while true do ПИСАТЕЛЬ and while true do ПИСАТЕЛЬ and ………………….
- 29. Счетные семафоры (Читатели-писатели) var S: sevmafore; Q,R: integer; begin R:=1; Q:=n; {Инициализация} parbegin ЧИТАТЕЛЬ: do {……….}
- 30. ПИСАТЕЛЬ: do {…………..} P(S,Q); {запись} V(S,Q); end; parend end
- 31. Обедающие философы
- 32. Множественные семафоры var S: array 1..5 of semaphore; i: integer; begin i:=5; repeat S[i]:=1; i:=i-1; until
- 33. i: begin var left, right: 1..5; begin left:=(i-1) mod 5; right:= (i+1) mod 5; repeat {размышления}
- 34. Тупики Взаимные блокировки (deadlock) П1 П2
- 35. Условия возникновения Взаимные исключения. Одновременно использовать ресурсы может только один процесс. Удержание и ожидание. Процесс может
- 36. Предотвращение тупиков Условие взаимного исключения можно подавить путем неограниченного разделения ресурсов. Условие ожидания предотвращается, если выделять
- 37. Процессы в ОС UNIX
- 38. Виды процессов Системные процессы. Системные процессы – часть ядра. Запускаются при инициализации системы. - управление свопингом.
- 39. Атрибуты процесса Идентификатор процесса (PID) Идентификатор родительского процесса (PPID) Реальный идентификатор пользователя (RID) Эффективный идентификатор пользователя
- 40. Дескриптор процесса Таблица процессов Блок управления процессом (PCB)
- 41. Состояния процесса
- 42. Создание и уничтожение процессов #include #include pid_t fork(void);
- 43. #include #include #include main() { int pid; pid = fork(); if (pid == -1){ perror("fork"); exit
- 44. #include #include #include #include int main() { int x, pid; x=2; printf("Один процесс, x=%d\n",x); pid=fork(); if(pid
- 45. Результат выполнения fork() Отводится место в таблице процессов под новый процесс Порожденному процессу присваивается идентификатор Создается
- 46. Порожденный процесс наследует Идентификаторы пользователя и группы Переменные окружения Сигналы и их обработчики Ограничения, накладываемые на
- 47. Различия между процессами Порожденный процесс имеет свой идентификатор PID Идентификаторы родительского процесса PPID различны Порожденный процесс
- 48. Завершение процесса Процесс завершается по функции exit. Код нормального завершения 0. Действия: Отключаются сигналы. Сохраняется код
- 49. Синхронизация процессов #include pid_t wait(int* status_p); pid_t waitpid(pid_t child_pid, int* status, int option); WNOHANG – неблокирующий
- 50. Запуск новой программы Дерево семейства вызовов exec execl execle execlp execv execve execvp
- 51. Аргументы передаются списком execl(const char* path, const char *arg0,…,const char *argn, NULL); передается полный путь к
- 52. #include #include #include #include #include int main() { pid_t pid; int status; if ((pid=fork())==-1) { perror("Error
- 53. if (pid == 0) { printf("Child\n"); execl("/home/sbd/child",NULL); perror("execl"); exit(errno); } else { printf("Parent\n"); wait(&status); exit (0);
- 54. Вызываемая программа #include #include #include int main() { sleep(4); printf("Execut child\n"); exit (0); }
- 55. Планирование процессов Таймер Фиксированный тик – интервал между соседними прерываниями. Функции обработчика прерываний от таймера: Обновление
- 56. Функции работы со временем time.h – ANSI C time_t time(time_t *tmv); возвращает количество секунд, прошедшее с
- 57. struct tm { int tm_sec; //секунды int tm_min; //минуты int tm_hour; //часы (от 0 до 24)
- 58. struct tm* localtime(const time_t *tmv); struct tm* gmtime(const time_t *tmv); time_t mktime(struct tm* tm_ptr); #include
- 59. #include #include #include #include #include int main() { time_t tick= CLOCKS_PER_SEC; time_t tmv; struct tm *tp;
- 60. Алармы Таймер реального времени (SIGALARM) - используется для подсчета реального времени Таймер профилирования (SIGPROF) – изменяется
- 61. Операции над процессами Создание процесса Уничтожение процесса Приостановка процесса Возобновление процесса Изменение приоритета процесса Блокирование процесса
- 62. Взаимодействие процессов (IPC) Сигналы Каналы (pipe) Именованные каналы (FIFO) Сообщения (messages) Семафоры Разделяемая память Сокеты (socket)
- 63. Сигналы Генерация сигнала Особые ситуации Терминальные прерывания (Del, Ctrl+C…) Другие процессы (вызов kill) Управление заданиями Квоты
- 64. Доставка и обработка сигнала Ядро от имени процесса проверяет наличие сигнала Если сигнал есть, ядро обрабатывает
- 65. #include #include #include #include // Handler void my_hand() {cout int main() { struct sigaction act, old_act;
- 66. // Формирование сигнала #include #include #include int main() { int pid; cout cin >> pid; cout
- 67. Неименованные каналы (pipe) #include Int pipe(int fd[2]); процесс fd[1] fd[0] канал процесс ядро
- 68. Канал после вызова fork()
- 69. Родительский процесс Дочерний процесс fork Канал Односторонний канал
- 70. #include #include #include #include #include int main() { pid_t childPid; int flds[2], status; char buf[]="Message"; if
- 71. who | sort | lp who sort lp Канал 1 Канал 2 stdout stdout stdin stdin
- 72. родительский процесс дочерний процесс Канал 1 Канал 2 fd2[0] fd1[1] fd1[0] fd2[1] Двусторонняя передача по двум
- 73. Именованные каналы #include #include int mkfifo(const char *pathname, mode_t mode); При успешном звершении возвращается 0, в
- 74. Логика открытия объекта IPC
- 75. #include #include #include #include #include #include #define NAME " fifo_s.cc" int main() { int fd; char
- 76. #include #include #include #include #include #include #include #include #define NAME " fifo_s.cc" int main() { char
- 77. Создание ключей #include #include key_t ftok(const char *pathname, int id); Возвращает ключ, в случае ошибки возвращает
- 78. #include #include #include #include int main() { key_t key; if((key = ftok("main.c",0))==-1) printf("Error 1\n"); printf("key1->%x\n",key); if((key
- 79. Управляющая структура IPC struct ipc_perm { uid_t uid; //идентификатор пользователя владельца gid_t gid; //идентификатор группы владельца
- 80. Сообщения (messages) Ядро Процесс А Процесс Г Процесс Б Процесс В А-В А-В А-Г А-Г В-Б
- 81. Очереди сообщений Таблица сообщений Заголовок очереди msgid_ds Область памяти ядра msg_perm msg_first msg_last ipc_perm struct msg
- 82. Структуры данных struct msgid_ds
- 83. struct msg
- 84. Функции #include #include #include #include int msgget(key_t key, int flag); int msgsnd(int msgfd, const void* msgPtr,
- 85. /* mes.h */ #define PERM 0666 typedef struct msgbuf { long mtype; char buff[80]; } Message;
- 86. #include #include #include #include #include "mes.h" int main() { Message message; key_t key; int msgid, length,
- 87. #include #include #include #include #include "mes.h" int main() { Message message; key_t key; int msgid, length;
- 88. Семафоры Таблица семафоров struct sem struct sem sem_base struct semid_ds
- 89. struct semid_ds { struct ipc_perm sem_perm; //права доступа struct sem *sem_base; //указатель на массив семафоров ushort
- 90. #include #include #include int semget(key_t key, int num_sem, int flag); flag – SEM_R или SEM_A (R
- 91. int semctl(int semfd; int num, int cmd, union semun arg); union semun { int val; //значение
- 92. sem_op > 0 => v(s) semval = semval + sem_op Если есть процессы, ожидающие изменения этого
- 93. sem_op p(s) if (semval >= abs(sem_op)) semval = semval – abs(sem_op) else if (sem_flg & IPC_NOWAIT)
- 94. Разделяемая память Пространство пользователя Пространство ядра общая память
- 95. Процесс 1 Процесс 2 Память shmget() shmat() shmat()
- 96. struct shmid_ds { struct ipc_perm shm_perm; // режим и права доступа size_t shm_size; //размер сегмента pid_t
- 97. Функции #include int shmget(key_t key, size_t size, int shmflag); void *shmat(int shmid, const void *shmaddr, int
- 98. /* share.h */ #include #include #include #include #include #include #define SHMKEY1 (key_t)010 #define SHMKEY2 (key_t)015 #define
- 99. #include "share.h" #define IFLAGS (IPC_CREAT | IPC_EXCL) #define ERR ((struct databuf *) -1) static int shmid1,
- 100. int getsem(void) { union semun x; x.val = 0; if((semid = semget(SEMKEY, 2, 0600|IFLAGS))==-1) {perror("semget"); exit(1);}
- 101. void reader(int semid, struct databuf *buf1, struct databuf *buf2) { for(;;) { buf1->d_nread=read(0,buf1->d_buf, SIZ); semop(semid, &v1,
- 102. void writer(int semid, struct databuf *buf1, struct databuf *buf2) { for(;;) { semop(semid, &p1, 1); semop(semid,
- 103. main() { int semid; pid_t pid; struct databuf *buf1, *buf2; semid = getsem(); getseg(&buf1, &buf2); switch(pid
- 104. Процессы в ОС Windows
- 105. Особенности процессов Процесс виртуальное адресное пространство; управляющая информация, необходимая для выполнения набора потоков (указатель на карту
- 106. Потоки Каждый процесс начинается с одного потока, но новые потоки могут создаваться динамически Потоки имеют состояния
- 107. Волокна Переключение потоков в операционной системе Windows занимает довольно много времени, так как для этого необходимо
- 108. Создание процесса Открывается файл образа (exe – файл) Создается объект «процесс» Создается первичный поток (стек, контекст
- 109. Новый процесс создается при помощи функции CreateProcess Функция имеет 10 параметров: 1. Указатель на имя исполняемого
- 110. В операционной системе Windows не поддерживается какой-либо иерархии процессов, например «родительский - дочерний». Все созданные процессы
- 111. Создание потока Каждый процесс в Windows создается с одним потоком Процесс может позднее создать дополнительные потоки
- 112. Планирование процессов В операционной системе Windows нет центрального потока планирования. Когда какой-либо поток не может более
- 113. Приоритеты процессов Классы приоритетов реального времени высокий выше нормы нормальный ниже нормы неработающий Приоритеты потоков критичный
- 114. Взаимодействие процессов каналы байтовый режим режим сообщений именованные каналы почтовые ящики сокеты вызов удаленной процедуры совместно
- 115. Механизмы синхронизации семафоры мьютексы критические секции события
- 117. Скачать презентацию