Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Неименованные программные каналыСодержание книги
Поиск на нашем сайте
Неименованный программный канал в Unix является однонаправленным синхронным средством связи, используемым двумя родственными процессами для обмена данными и синхронизации друг друга. Если при организации взаимодействия между процессами с помощью программного канала данные должны пересылаться в обоих направлениях, то необходимо организовать два канала. При организации взаимодействия процессов через программный канал один процесс записывает данные с одного конца канала, а другой процесс считывает данные с другого конца этого канала. Программные каналы аналогичны файлам, хотя и несколько отличаются от них - попытка записи в «полный» канал приводит к приостановке процесса записи до тех пор, пока канал снова не окажется в состоянии принимать данные, т.е. пока данные не будут прочитаны с другого конца канала. Аналогичная ситуация возникает при попытке чтения из «пустого» канала. Такие приостановки процессов являются главным средством синхронизации в параллельных программах на языке Си. Свойства программных каналов: · до создания нового процесса каналы должны быть установлены в порождающем процессе; · должны быть назначены дескрипторы каналов, указывающие концы канала для чтения и записи (аналогично дескрипторам файлов). · порожденный процесс «наследует» каналы, файлы и данные от порождающего его процесса. · дескрипторы файлов и каналов в порожденном процессе являются копиями дескрипторов файлов и каналов порождающего процесса. Рассмотрим процесс создания программного канала между родственными процессами подробнее. Для организации программного канала необходимо выполнить следующие действия: 1) Установить программный канал системным вызовом pipe(p) ДО создания нового процесса: int p; pipe(p); В результате выполнения системного вызова pipe() в p[0] содержится дескриптор №3 (это дескриптор для чтения из программного канала). Для удобства будем его обозначать p[R]. В p[1] содержится дескриптор №4 (это дескриптор для записи в программный канал). Для удобства будем его обозначать p[W]. Замечание. Для того чтобы можно было воспользоваться обозначениями p[R] и p[W], в программе необходимо использовать следующие определения: #define R 0 #define W 1 После выполнения системного вызова pipe() программный канал установлен и определены дескрипторы №3 и №4 (первые свободные дескрипторы) 2). После установки программного канала системным вызовом fork() создается параллельный процесс. При этом происходит дублирование сегмента данных и вновь созданному (порожденному) процессу передается информация о созданном программном канале и соответствующих ему дескрипторах. Пересылка файлов через программный канал между родственными процессами. В приводимой ниже программе показана установка программного канала (системный вызов pipe()), создание параллельного процесса (системный вызов fork()), закрытие лишних дескрипторов и пересылка файла (его имя запрашивает порожденный процесс) от потомка к предку. #include <stdio.h> int main(void) /* pipe1.c */ /* Пересылка файла между родственными */ /* процессами через программный канал */ { int fd[2], N, F, L, status; char A[20], IN[512], OUT[512]; int f; pipe(fd); /* установка программного канала */ /* до создания параллельного процесса */ printf("PIPE READY:"): printf("fd[0]= %d fd[1]= %d \n", fd[0], fd[1]); /*создание параллельного процесса*/ switch(fork()) { case -1: /* Ошибка при порождении процесса */ puts("Ошибка... fork()\n"); exit(0); case 0: /* Это потомок... */ close(fd[0]); /* Потомок не будет читать */ /* из программного канала */ printf("Введите имя файла:"); scanf("%s", A); f = open(A, 0); /* Открытие файла в режиме чтения (0) */ while((N = read(f, IN, 512))!= 0) write(fd[1], IN, N); /* Запись в канал */ exit(2); default: /* Коды предка */ close(fd[1]); /* Предок писать в канал не будет */ while((L = read(fd[0], OUT, 512)) == 512) printf("%s", OUT); printf("%s\n", OUT); wait(&status); } } 24. Уровни планирования. Уровни планирования Существует два вида планирования в вычислительных системах: · планирование заданий; · планирование использования процессора. Планирование заданий появилось в системах пакетной обработки после того, как для хранения сформированных пакетов заданий начали использоваться магнитные диски. Магнитные диски, будучи устройствами прямого доступа, позволяют загружать задания в компьютер в произвольном порядке, а не только в том, в котором они были записаны на диск. Изменяя порядок загрузки заданий в вычислительную систему, можно повысить эффективность ее использования. Процедуру выбора очередного задания для загрузки в машину, т.е. для порождения соответствующего процесса, называют планированием заданий. Планирование использования процессора впервые возникает в мультипрограммных вычислительных системах, где в состоянии готовность могут одновременно находиться несколько процессов. Именно для процедуры выбора из них одного процесса, который получит процессор в свое распоряжение, т.е. будет переведен в состояние исполнение, используется это словосочетание. 25. Критерии планирования и требования к алгоритмам планирования. Критерии планирования и требования к алгоритмам Для каждого уровня планирования процессов можно предложить много различных алгоритмов. Выбор конкретного алгоритма определяется классом задач, решаемых вычислительной системой, и целями, которых мы хотим достичь, используя планирование. К числу таких целей можно отнести: § Справедливость: гарантировать каждому заданию или процессу определенную часть времени использования процессора в компьютерной системе, стараясь не допустить возникновения ситуации, когда процесс одного пользователя постоянно занимает процессор, в то время как процесс другого пользователя фактически не приступал к выполнению. § Эффективность: постараться занять процессор на все 100% рабочего времени, не позволяя ему простаивать в ожидании процессов готовых к исполнению. В реальных вычислительных системах загрузка процессора колеблется от 40 до 90 процентов. § Сокращение полного времени выполнения (turnaround time): обеспечить минимальное время между стартом процесса или постановкой задания в очередь для загрузки и его завершением. § Сокращение времени ожидания (waiting time): минимизировать время, которое проводят процессы в состоянии готовность и задания в очереди для загрузки. § Сокращение времени отклика (response time): минимизировать время, которое требуется процессу в интерактивных системах для ответа на запрос пользователя. Независимо от поставленных целей планирования желательно также, чтобы алгоритмы обладали следующими свойствами: § Были предсказуемыми. Одно и то же задание должно выполняться приблизительно за одно и то же время. Применение алгоритма планирования не должно приводить, к примеру, к извлечению корня квадратного из 4 за сотые доли секунды при одном запуске и за несколько суток при втором запуске. § Имели минимальные накладные расходы, связанные с их работой. Если на каждые 100 миллисекунд, выделенных процессу для использования процессора, будет приходиться 200 миллисекунд на определение того, какой именно процесс получит процессор в свое распоряжение, и на переключение контекста, то такой алгоритм, очевидно, использовать не стоит. § Равномерно загружали ресурсы вычислительной системы, отдавая предпочтение тем процессам, которые будут занимать малоиспользуемые ресурсы. § Обладали масштабируемостью, т.е. не сразу теряли работоспособность при увеличении нагрузки. Например, рост количества процессов в системе в два раза не должен приводить к увеличению полного времени выполнения процессов на порядок. 26. Параметры планирования. К статическим параметрам процессов относятся характеристики, как правило, присущие заданиям уже на этапе загрузки: § Каким пользователем запущен процесс или сформировано задание. § Насколько важной является поставленная задача, т. е. каков приоритет ее выполнения. § Сколько процессорного времени запрошено пользователем для решения задачи. § Каково соотношение процессорного времени и времени, необходимого для осуществления операций ввода-вывода. § Какие ресурсы вычислительной системы (оперативная память, устройства ввода-вывода, специальные библиотеки и системные программы и т. д.) и в каком количестве необходимы заданию. Для среднесрочного планирования в качестве таких характеристик может выступать следующая информация: § Сколько времени прошло со времени выгрузки процесса на диск или его загрузки в оперативную память. § Сколько оперативной памяти занимает процесс. § Сколько процессорного времени было уже предоставлено процессу. 27. Вытесняющее и невытесняющее планирование. . Вытесняющее и невытесняющее планирование Процесс планирования осуществляется частью операционной системы, называемой планировщиком. Планировщик может принимать решения о выборе для исполнения нового процесса, из числа находящихся в состоянии готовность, в следующих четырех случаях: 1. Когда процесс переводится из состояния исполнение в состояние завершение. 2. Когда процесс переводится из состояния исполнение в состояние ожидание. 3. Когда процесс переводится из состояния исполнение в состояние готовность (например, после прерывания от таймера). 4. Когда процесс переводится из состояния ожидание в состояние готовность (завершилась операция ввода-вывода или произошло другое событие). Подробно процедура такого перевода была рассмотрена нами в разделе «Введение в управление процессами» (параграф 6.3.5 «Переключение контекста»), где мы показали, почему при этом возникает возможность смены процесса, находящегося в состоянии исполнение. Если планирование осуществляется только в случаях 1 и 2, говорят, что имеет место невытесняющее (nonpreemptive) планирование. В противном случае говорят о вытесняющем (preemptive) планировании. Термин “вытесняющее планирование” возник потому, что исполняющийся процесс помимо своей воли может быть вытеснен из состояния исполнение другим процессом. 28. Алгоритмы планирования First-Come, First-Served (FCFS) и Round Robin (RR).
|
||||
Последнее изменение этой страницы: 2016-08-16; просмотров: 282; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.93.227 (0.009 с.) |