Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Неименованные программные каналы

Читайте также:
  1. VII) Добавляю дополнительные эффекты на имеющиеся каналы в микшере.
  2. Защита информации в ПЭВМ. Каналы утечки информации.
  3. Ионные каналы
  4. Используемые информационные, инструментальные и программные средства
  5. КАНАЛЫ И ПРАНА
  6. Каналы и сигналы SDL. 14) Определение SDL-системы;
  7. Каналы коммуникации

Неименованный программный канал в 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);

}

}

Уровни планирования.

Уровни планирования

Существует два вида планирования в вычислительных системах:

· планирование заданий;

· планирование использования процессора.

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

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

Критерии планирования и требования к алгоритмам планирования.

Критерии планирования и требования к алгоритмам

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

§ Справедливость: гарантировать каждому заданию или процессу определенную часть времени использования процессора в компьютерной системе, стараясь не допустить возникновения ситуации, когда процесс одного пользователя постоянно занимает процессор, в то время как процесс другого пользователя фактически не приступал к выполнению.

§ Эффективность: постараться занять процессор на все 100% рабочего времени, не позволяя ему простаивать в ожидании процессов готовых к исполнению. В реальных вычислительных системах загрузка процессора колеблется от 40 до 90 процентов.

§ Сокращение полного времени выполнения (turnaround time): обеспечить минимальное время между стартом процесса или постановкой задания в очередь для загрузки и его завершением.

§ Сокращение времени ожидания (waiting time): минимизировать время, которое проводят процессы в состоянии готовность и задания в очереди для загрузки.

§ Сокращение времени отклика (response time): минимизировать время, которое требуется процессу в интерактивных системах для ответа на запрос пользователя.

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

§ Были предсказуемыми. Одно и то же задание должно выполняться приблизительно за одно и то же время. Применение алгоритма планирования не должно приводить, к примеру, к извлечению корня квадратного из 4 за сотые доли секунды при одном запуске и за несколько суток при втором запуске.

§ Имели минимальные накладные расходы, связанные с их работой. Если на каждые 100 миллисекунд, выделенных процессу для использования процессора, будет приходиться 200 миллисекунд на определение того, какой именно процесс получит процессор в свое распоряжение, и на переключение контекста, то такой алгоритм, очевидно, использовать не стоит.

§ Равномерно загружали ресурсы вычислительной системы, отдавая предпочтение тем процессам, которые будут занимать малоиспользуемые ресурсы.

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

Параметры планирования.

К статическим параметрам процессов относятся характеристики, как правило, присущие заданиям уже на этапе загрузки:

§ Каким пользователем запущен процесс или сформировано задание.

§ Насколько важной является поставленная задача, т. е. каков приоритет ее выполнения.

§ Сколько процессорного времени запрошено пользователем для решения задачи.

§ Каково соотношение процессорного времени и времени, необходимого для осуществления операций ввода-вывода.

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

Для среднесрочного планирования в качестве таких характеристик может выступать следующая информация:

§ Сколько времени прошло со времени выгрузки процесса на диск или его загрузки в оперативную память.

§ Сколько оперативной памяти занимает процесс.

§ Сколько процессорного времени было уже предоставлено процессу.

Вытесняющее и невытесняющее планирование.

. Вытесняющее и невытесняющее планирование

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

1. Когда процесс переводится из состояния исполнение в состояние завершение.

2. Когда процесс переводится из состояния исполнение в состояние ожидание.

3. Когда процесс переводится из состояния исполнение в состояние готовность (например, после прерывания от таймера).

4. Когда процесс переводится из состояния ожидание в состояние готовность (завершилась операция ввода-вывода или произошло другое событие). Подробно процедура такого перевода была рассмотрена нами в разделе «Введение в управление процессами» (параграф 6.3.5 «Переключение контекста»), где мы показали, почему при этом возникает возможность смены процесса, находящегося в состоянии исполнение.

Если планирование осуществляется только в случаях 1 и 2, говорят, что имеет место невытесняющее (nonpreemptive) планирование. В противном случае говорят о вытесняющем (preemptive) планировании. Термин “вытесняющее планирование” возник потому, что исполняющийся процесс помимо своей воли может быть вытеснен из состояния исполнение другим процессом.

Алгоритмы планирования First-Come, First-Served (FCFS) и Round Robin (RR).


Дата добавления: 2015-08-18; просмотров: 123 | Нарушение авторских прав


Читайте в этой же книге: ОС как расширенная машина. | Особенности алгоритмов управления ресурсами | Особенности аппаратных платформ. | Особенности областей использования ОС. | Особенности методов построения. | Типы файлов | Определение имени текущего каталога (команда pwd) | Команда cat - конкатенация файлов | Структура и аргументы Shell-программы. | Process Control Block и контекст процесса |
<== предыдущая страница | следующая страница ==>
Сигналы| First-Come, First-Served (FCFS)

mybiblioteka.su - 2015-2024 год. (0.012 сек.)