- •Методические рекомендации по выполнению практических работ
- •Оп.04 «Операционные системы»
- •Практическая работа №1 Обзор аппаратного обеспечения компьютера: процессоры
- •Практическая работа №2 Обзор аппаратного обеспечения компьютера: память
- •Практическая работа №3 Обзор аппаратного обеспечения компьютера: устройства ввода-вывода
- •Практическая работа №4 Обзор аппаратного и программного обеспечения компьютерных сетей
- •Практическая работа №5 Обслуживание ввода-вывода
- •Практическая работа №6 Принцип уровней абстракции и его использование при разработке операционных систем
- •Практическая работа №7
- •Практическая работа №8 Оценка производительности системы
- •Практическая работа №9
- •Практическая работа №10
- •Практическая работа №11 Обзор многопоточности в unix
- •Практическая работа №12
- •Практическая работа №13 Обзор многопоточности в .Net
- •Практическая работа №14 Обзор многопоточности в Java
- •Практическая работа №15 Методы управления памятью в операционных системах
- •Практическая работа №16 Методы адресации в компьютерных системах
- •Практическая работа №17 Этапы обработки программы от исходного кода к исполняемому в операционных системах
- •Практическая работа №18
- •Практическая работа №19 Организация оверлейной структуры программ
- •Практическая работа №20 Реализация смежного распределения памяти
- •Методы распределения памяти без использования дискового пространства Распределение памяти фиксированными разделами
- •Распределение памяти разделами переменной величины
- •Перемещаемые разделы
- •Методы распределения памяти с использованием дискового пространства Страничное распределение
- •Сегментное распределение
- •Странично-сегментное распределение
- •Свопинг
- •Практическая работа №21
- •Практическая работа №22 Реализация хешированных таблиц страниц
- •Практическая работа №23 Создание резервных копий
- •Практическая работа №24 Восстановление данных
- •Практическая работа №25 Работа с антивирусными программами
- •Практическая работа №26 Основные правила и требования к парольной защите
- •Практическая работа №28 Осуществление мероприятий по защите персональных данных
- •Практическая работа №29
- •Приложение а
- •Практическая работа №30 Обеспечение работы системы регистрации и авторизации пользователей сети
- •Практическая работа №31 Осуществление системного администрирования локальных сетей
- •Практическая работа №32 Типы и решения сетевых проблем
- •Сети имеют сложную структуру
- •Средство устранения неполадок сети поможет решить проблему
- •Практическая работа №33 Установка контроллера домена и dns–сервера
- •Установка контроллера домена в существующий домен с использованием интерфейса Windows
- •Практическая работа №34 Добавление роли dhcp-сервера и его настройка
Практическая работа №11 Обзор многопоточности в unix
Цель работы: научиться проводить анализ преимуществ, недостатков, проблем многопоточностив UNIX
Оборудование: Персональный компьютер с ОС Linux
Индивидуальное задание. Провести анализ многопоточности, выявить особенности, достоинства и недостаткимногопоточности в UNIX.
Теоретические сведения
Многопоточность — свойство платформы (например, операционной системы, виртуальной машины и т. д.) или приложения, состоящее в том, что процесс, порождённый в операционной системе, может состоять из нескольких потоков, выполняющихся «параллельно», то есть без предписанного порядка во времени. При выполнении некоторых задач такое разделение может достичь более эффективного использования ресурсов вычислительной машины.
Процессы в традиционных Unix-системах
В Unix для исполнения программ создаются процессы
Процесс – это процесс исполнения образа процесса
Образ процесса – виртуальное адресное пространство, содержащее код и данные. Кроме этого, образ процесса включает в себя пользовательскую область (структуры данных ядра, связанные с процессом)
В не-Unix системах процессы также называют задачами (task)
Unix – многозадачная ОС
Программа исполняется в рамках процесса последовательно, как будто под управлением однозадачной ОС
Это упрощает программирование
Если задача требует распараллеливания, необходимо запускать несколько процессов.
Межпроцессное взаимодействие в традиционном Unix через:
Трубы
Сокеты TCP
Unix domain sockets
Разделяемые файлы и блокировка участков файлов
System V IPC (разделяемая память, семафоры, очереди сообщений)
Семафоры и разделяемая память Xenix
Разделяемые файлы
Что дает многопоточность (по сравнению с System V IPC)
Потоки дешевле процессов (нет своего адресного пространства)
Потоки дают все преимущества разделяемой памяти
Потоки проще использовать, чем разделяемую память System V IPC
переменные гарантированно находятся по одним и тем же адресам,
можно взаимодействовать через глобальные переменные и произвольные структуры данных
Зачем нужна многопоточность
Улучшение времени реакции интерактивных программ
Повышение производительности (улучшение времени реакции) серверных приложений
Использование многопроцессорных машин и многоядерных процессоров
Приложения мультимедиа и жесткого реального времени
Улучшение времени реакции
Фоновое скачивание страницы в браузере
Фоновый ввод-вывод (например, утилита просмотра файла может считывать файл по мере его просмотра)
Фоновая проверка орфографии
Фоновое переразбиение текста на страницы в WYSIWYG текстовых процессорах
Серверные приложения
Что мешает перейти к многопоточности
Несовместимость со старыми (однопоточными) компиляторами
Несовместимость со старыми библиотеками
Несовместимость или ограниченная поддержка многопоточных программ другими инструментальными средствами, в первую очередь отладчиками
Несовместимость многих принятых практик программирования с многопоточностью
Как эти проблемы решались
Многие языки высокого уровня поддерживают многопоточность на уровне языка:
Simula 67
Ada
Occam
Parallel Fortran
Директивы (#pragma) OpenMP
Это требует переделки компиляторов
POSIXThreadAPI требует лишь минимальной поддержки со стороны компилятора
отказ от некоторых опасных оптимизаций,
в С++ - стандартизованный ABI вызова деструкторов
Не рекомендуется использовать OpenMP и POSIXthreads в одной и той же программе (на нижнем уровне это одни и те же потоки)
Проблемы многопоточности
Многопоточность – весьма сложная, еще не полностью изученная и, тем более, не полностью формализованная область, в которой имеется много интересных проблем. Рассмотрим некоторые из них.
Семантика системных вызовов fork() и exec().Как уже отмечалось, в классической ОС UNIX системный вызов fork создает новый "тяжеловесный" процесс со своим адресным пространством, что значительно "дороже", чем создание потока. Однако, с целью поддержания совместимости программ снизу вверх, приходится сохранять эту семантику, а многопоточность вводить с помощью новых системных вызовов.
Прекращение потоков. Важной проблемой является проблема прекращения потоков: например, если родительский потокпрекращается, то должен ли при этом прекращаться дочерний поток? Если прекращается стандартный процесс, создавший несколько потоков, то должны ли прекращаться все его потоки? Ответы на эти вопросы в разных ОС неоднозначны.
Ход работы:
1. Ознакомиться с теоретическими сведениями.
2. Провести анализ многопоточности, выявить особенности, достоинства и недостатки. Результаты оформить в таблице.
Содержание отчета
Отчет по практической работе должен содержать следующие пункты:
- название практической работы;
- цель работы;
- краткие теоретические сведения;
- индивидуальное задание для выполнения практической работы;
- краткое описание хода выполнения работы;
- результаты выполнения работы;
- выводы.
Контрольные вопросы:
1. Что такое многопоточность?
2. Какие достоинства имеет многопоточность?
3. Какие недостатки имеет многопоточность?
4. Что такое взаимоисключение?
5. Что такое семафоры?
6. Для чего предназначены критические секции и события?
