Переключение контекста и проектирование программного обеспечения протокола

Хотя средства параллельной обработки, предоставляемые операционными системами, позволяют создавать более мощные и простые программы, их применение все-таки связано с определенными вычислительными издержками. Для обеспечения того, чтобы все потоки выполнялись параллельно, в операционной системе используется квантование времени и осуществляется переключение одного (или нескольких) процессоров между потоками настолько быстро, что может показаться будто эти процессы выполняются одновременно.

В тот момент, когда операционная система на время останавливает выполнение одного потока и переключается на другой, происходит переключение контекста; переключение между потоками одного и того же процесса требует меньших издержек по сравнению с переключением с потока одного процесса на поток другого. И в том, и в другом случае переключение контекста требует использования ресурсов процессора, и пока процессор выполняет переключение контекста, ни один из прикладных потоков не получает процессорного времени. Поэтому мы рассматриваем переключение контекста как издержки, необходимые для обеспечения параллельной работы.

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

3.8. Параллельная работа и асинхронный ввод/вывод

Кроме предоставления поддержки параллельного использования процессора, некоторые операционные системы позволяют одному прикладному потоку инициировать и управлять параллельными операциями ввода и вывода. Системный вызов select предоставляет базовую операцию, на основе которой программисты могут разрабатывать программы управления параллельным вводом/выводом. В принципе, работу функции select понять несложно: она позволяет программе запрашивать у операционной системы информацию о том, какие устройства ввода/вывода готовы к использованию. искусственный камень Выбираем и бронируем гостиницы - попперсы. Московские интернет-магазины. Spa центр Баден Баден - центр коррекции фигуры. Хотите похудеть по-настоящему?

В качестве примера рассмотрим прикладную программу, которая считывает символы из соединения TCP и выводит их на экран дисплея. Допустим, что программа позволяет также пользователю вводить с клавиатуры команды для определения способа отображения данных. Поскольку пользователь редко вводит (или вообще может не вводить) команды, программа не может ждать ввода с клавиатуры, поэтому она должна продолжать чтение и вывод текста, полученного из соединения TCP. Но если в какой-то момент программа выполнит очередную попытку чтения из соединения TCP, но не получит данных, она заблокируется. Пользователь может ввести команду в то время, как программа заблокирована на период ожидания новых данных в соединении TCP. Проблема состоит в том, что приложение не имеет информации о том, поступит ли раньше ввод с клавиатуры или из соединения TCP. Для решения этой проблемы выполняемая программа вызывает функцию select и указывает дескрипторы, которые соответствуют двум возможным источникам ввода. Тем самым программа передает операционной системе запрос на то, чтобы ей была предоставлена информация, когда один из двух возможных источников ввода получит данные, доступные для чтения. Как только станет доступен один из источников, из этого вызова будет выполнен возврат и поток приступит к чтению из данного источника. На данный момент достаточно просто понять принцип работы функции select; в следующих главах представлены дополнительные сведения и даны примеры ее использования.

3.9. Резюме

Параллельное функционирование является основой приложений TCP/DP, поскольку оно позволяет одному пользователю обращаться к службам, не ожидая окончания работы другого пользователя. Параллельную работу клиентских программ организовать несложно, поскольку многочисленные пользователи вполне могут одновременно вызывать на выполнение клиентское прикладное программное обеспечение. Параллельную работу серверных программ обеспечить гораздо сложнее, поскольку серверное программное обеспечение должно быть специально разработано в целях обеспечения одновременного выполнения многочисленных запросов в искусственный камень Выбираем и бронируем гостиницы - попперсы. Московские интернет-магазины. Spa центр Баден Баден - центр коррекции фигуры. Хотите похудеть по-настоящему? .

В системе UNIX программа создает дополнительный процесс с использованием системного вызова fork. Неформально это можно описать так, что вызов функции fork заставляет операционную систему создать дубликат программы, в результате чего вновь созданный поток начинает выполнять второй процесс, в то время как первоначальный поток продолжает выполнять первый процесс. Формально, вызов fork представляет собой вызов функции, поскольку он возвращает значение. Единственное различие между первоначальным процессом и процессом, созданным функцией fork, заключается в том, какое именно значение возвращает этот вызов. Во вновь созданном процессе вызов возвращает нуль; в первоначальном процессе он возвращает небольшой положительный целочисленный идентификатор вновь созданного процесса. В параллельных программах возвращаемое значение используется для обеспечения выполнения в новых процессах иной части программы, чем в первоначальном процессе. В процессе можно вызвать в любое время функцию execve для вызова на выполнение кода отдельно оттранслированной программы.

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

Вызов функции select позволяет управлять параллельным вводом/выводом в одном процессе. Функция select используется в процессе для определения того, какое устройство ввода/вывода становится доступным в первую очередь.

Материал для дальнейшего изучения

Параллельная обработка описана во многих книгах по операционным системам. В книге рассматривается вся эта тема в целом. В книге обсуждается реализация процессов, передачи сообщений и механизмов координации процессов в операционной системе Xinu. В книге описана операционная система BSD UNIX версии 4.3 , от которой происходят многие современные разновидности операционных систем, включая Linux.

Упражнения
  1. Вызовите на выполнение приведенные примеры программ в своей локальной компьютерной системе. Определите приблизительное число итераций цикла вывода, которое могло быть выполнено в потоке в течение одного кванта времени.
  2. Напишите параллельную программу, которая запускает пять процессов. Пусть поток каждого процесса выведет несколько строк, а затем остановится.
  3. Прочитайте литературу о примитивах потока POSIX и напишите программу, которая создает пять параллельных потоков в одном процессе. Сравните время ее работы с программой, которая создает для выполнения той же задачи пять отдельных процессов. Напишите математическое выражение для оценки разницы в стоимости выполнения как функцию трех параметров: размера глобальных переменных, размера локальных переменных и затрат времени на выполнение потоков.
  4. Ознакомьтесь со сведениями о том, как создаются параллельные процессы или потоки в других операционных системах.
  5. Прочитайте дополнительную литературу о функции fork. Какую информацию вновь созданный процесс использует совместно с первоначальным процессом?
  6. Напишите программу, в которой функция execve применяется для смены кода выполняемого процесса.
  7. Напишите программу, в которой функция select используется для чтения с двух терминалов (т.е. последовательных линий передачи данных) и отображения результатов на экране с обозначением источника.
  8. Перепишите программу, составленную по условиям предыдущего упражнения, таким образом, чтобы в ней не использовалась функция select. Какая версия проще для понимания? Какая версия эффективнее? Укажите версию, которая позволяет легче добиться корректного завершения.
Похожие статьи Меню Опрос Фото Популярное