- •Введение
- •1. Основные понятия в операционных системах
- •1.1. Классификация и функции операционных систем
- •1.2. Ос общего назначения и реального времени
- •1.3. Выполнение команд в вычислительной системе
- •1.4. Прерывания
- •1.5 Архитектуры операционных систем
- •1.6. Управление оперативной памятью вычислительной системы
- •1.7. Общие сведения о процессах и потоках
- •2. Операционная система windows
- •2.1. Версии операционной системы Windows
- •2.2. Архитектура операционной системы windows
- •2.3. Процессы и потоки в Windows
- •2.4. Взаимодействие процессов
- •2.5. Управление потоками в Windows
- •2.6. Файловые системы Windows
- •2.7. Установка и последовательность загрузки Windows
- •Последовательность загрузки Windows xp
- •2.8. Интерпретатор команд и пакетные файлы
- •2.9. Конфигурирование Windows
- •3. Операционная система qnx neutrino
- •3.1. Версии операционной системы qnx Neutrino
- •3.2. Архитектура операционной системы qnx Neutrino
- •3.3. Процессы в qnx6
- •Завершение процесса
- •3.4. Потоки в qnx6
- •Завершение потока
- •3.5. Управление потоками и процессами в qnx6
- •Механизмы ipc
- •Средства синхронизации в qnx
- •3.6. Файловые системы qnx
- •Типы файлов
- •3.7. Инсталляция и последовательность загрузки qnx
- •3.8. Интерпретаторы команд и пакетные файлы в qnx
- •3.9. Конфигурирование qnx
- •4. Виртуальные машины
- •4.1. Общие сведения о виртуальных машинах
- •4.2. Работа с виртуальной машиной VmWare
- •5. Защита от сбоев и несанкционированного доступа
- •5.1. Принципы построения систем безопасности
- •5.2. Безопасность операционной системы windows
- •6. Сетевые возможности операционных систем
- •6.1. Аппратаное обеспечение локальных сетей
- •6.2. Сети Windows
- •6.3. Локальная сеть на основе qnet
- •6.4. Глобальные сети
- •7. Многопроцессорные системы
- •7.1. Архитектуры многопроцессорных операционных систем
- •7.2. Принципы функционирования smp
- •7.3. Принципы функционирования кластеров
- •Список использованной литературы
- •Компилятор
Завершение потока
При завершении потока различают два случая:
1) «естественное» завершение выполнения потока из кода самого потока;
2) завершение потока извне, из кода другого потока или по сигналу. Для этого действия, в отличии от «естественного » завершения, используется термин – отмена.
Завершение потока происходит при достижении функцией потока своего естественного конца, выполнения оператора return или выполнения потоком вызова void pthread_exit(). Если поток принадлежит к категории ожидаемых, то он может возвратить результат своей работы другому потоку, ожидающему его завершения на вызове pthread_join(). Если поток отсоединенный, то по его завершении все системные ресурсы, задействованные потоком, освобождаются немедленно. Для последнего потока процесса вызов void pthread_exit() эквивалентен exit().
Отмена потока значительно более сложная задача. Это связанно с тем, что необходимо корректно завершить все системные объекты (файловые дискрипторы, блоки динамической памяти, примитивы синхронизации и др.), связанные с отменяемым потоком.
Для отмены (принудительного завершения) потока используется вызов
int pthread_cancel(pthread_t thread);
где в качестве параметра указывается TID отменяемого потока (см. пример sy22.cc в [17]). Однако этот вызов не отменяет поток, а только запрашивает возможность отмены потока. Поток может отказаться выполнять любые отмены, вызвав из своей функции потока: int pthread_setcancelstate(int state, int* oldstate).
Отмена потока состоит из следующих этапов:
выполняются все процедуры завершения, занесенные ранее в стек завершения вызовами pthread_cleanup_push();
выполняются деструкторы собственных данных потока;
отменяемый поток завершается;
действие отмены – асинхронный с точки зрения вызывающего pthread_cancel() кода, поэтому вызывающий отмену поток должен дождаться завершения потока на вызове pthread_join().
3.5. Управление потоками и процессами в qnx6
Микроядро QNX и администратор процессов обеспечивают управление памятью и защиту адресного пространства одного процесса от других с помощью блока управления памятью. С помощью них ОС может завершить процесс сразу после возникновения ошибки доступа к памяти. ОС узнает о месте ошибочной инструкции и может запустить символьный отладчик, начиная с этой инструкции. Микроядро делит физическую память на страницы размером 4 кБайта. Процессор использует набор из множества таблиц страниц, хранящихся в системной памяти. Эти таблицы служат для описания того, как виртуальный адрес преобразуется процессором для доступа к физизической памяти [19]. Во время выполнения потока в таблицу страниц заносятся данные о том, как адреса памяти, используемые потоком, отображаются в физической памяти системы. Для сохранения высокой производительности процессор выполняет кэширование часто используемых сегментов памяти. В QNX предусмотрено управление на уровне таблиц страниц. С ними связаны биты, определяющие атрибуты каждой страницы. Страницы могут лишь различаться по степени доступа. Память выполняет процесс со страницы «только чтение» для кода и «чтение и запись» для данных. Когда применяется операция приостановки одного, и выполнения другого приоритетов, она указывает блок управления памятью применить для потока другой набор таблиц страниц. Если меняется контекст в потоке между процессами, изменения блока управления не требуется. Так же применяются аппаратные таймеры, он присоединяется к процессу, и если передачи сигнала нет, процесс перезагружается. Для пользовательских процессов отводится 2,5 Гб адресного пространства. А оставшиеся 1,5 Гб отводится для микроядра.