Какие процессы могут обмениваться информацией через Pipe?
Какие из вариантов реализации системного вызова read могут прочитать меньше байт, чем запросил процесс?
Какие из перечисленных механизмов синхронизации могут быть реализованы в вычислительной системе с помощью специальных системных вызовов?
Известно, что для доступа к памяти через таблицу страниц необходимо 80 нс, а для доступа через ассоциативную память – 10 нс. Частота попаданий в ассоциативную память при обращении к данным (hit ratio) соcтавляет 90%. Чему равно среднее время обращения к памяти?
Для чего нужен синхронизирующий процесс при реализации семафоров через очереди сообщений?
Пусть в вычислительную систему поступают пять процессов различной длительности по следующей схеме:
Номер процесса | Момент поступления в систему | Время исполнения |
---|---|---|
1 | 2 | 4 |
2 | 1 | 3 |
3 | 4 | 5 |
4 | 3 | 2 |
5 | 0 | 9 |
Чему равно среднее время ожидания процесса (waiting time) при использовании вытесняющего алгоритма SJF? При вычислениях считать, что процессы не совершают операций ввода-вывода, временем переключения контекста пренебречь.
Пусть в вычислительную систему поступают пять процессов различной длительности по следующей схеме:
Номер процесса | Момент поступления в систему | Время исполнения |
---|---|---|
1 | 2 | 4 |
2 | 1 | 3 |
3 | 4 | 5 |
4 | 3 | 2 |
5 | 0 | 9 |
Чему равно среднее время ожидания процесса (waiting time) при использовании вытесняющего алгоритма SJF? При вычислениях считать, что процессы не совершают операций ввода-вывода, временем переключения контекста пренебречь.
Какие процессы могут обмениваться информацией через FIFO?
Сколько ситуаций отказа страницы (page fault) возникнет для данного процесса при использовании алгоритма замещения страниц FIFO (First Input First Output) и трех страничных кадрах?
Какие из перечисленных функций базовой подсистемы ввода-вывода могут быть делегированы драйверам:
Какие из вариантов реализации системного вызова read могут прочитать меньше байт, чем запросил процесс?
Какие из перечисленных механизмов синхронизации могут быть реализованы в вычислительной системе с помощью специальных системных вызовов?
Известно, что для доступа к памяти через таблицу страниц необходимо 80 нс, а для доступа через ассоциативную память – 10 нс. Частота попаданий в ассоциативную память при обращении к данным (hit ratio) соcтавляет 90%. Чему равно среднее время обращения к памяти?
Для чего нужен синхронизирующий процесс при реализации семафоров через очереди сообщений?
Какой из вариантов адресации может использоваться для организации передачи информации через pipe?
Пусть в вычислительную систему поступают пять процессов различной длительности по следующей схеме:
Номер процесса | Момент поступления в систему | Время исполнения |
---|---|---|
1 | 2 | 4 |
2 | 1 | 3 |
3 | 4 | 5 |
4 | 3 | 2 |
5 | 0 | 9 |
Чему равно среднее время ожидания процесса (waiting time) при использовании вытесняющего алгоритма SJF? При вычислениях считать, что процессы не совершают операций ввода-вывода, временем переключения контекста пренебречь.
Пусть в вычислительную систему поступают пять процессов различной длительности по следующей схеме:
Номер процесса | Момент поступления в систему | Время исполнения |
---|---|---|
1 | 2 | 4 |
2 | 1 | 3 |
3 | 4 | 5 |
4 | 3 | 2 |
5 | 0 | 9 |
Чему равно среднее время ожидания процесса (waiting time) при использовании вытесняющего алгоритма SJF? При вычислениях считать, что процессы не совершают операций ввода-вывода, временем переключения контекста пренебречь.
Организация взаимодействия процессов через pipe и FIFO в UNIX
Как мы выяснили, доступ к информации о расположении pip ‘а в операционной системе и его состоянии может быть осуществлен только через таблицу открытых файлов процесса , создавшего pipe , и через унаследованные от него таблицы открытых файлов процессов-потомков. Поэтому изложенный выше механизм обмена информацией через pipe справедлив лишь для родственных процессов, имеющих общего прародителя, инициировавшего системный вызов pipe() , или для таких процессов и самого прародителя и не может использоваться для потокового общения с другими процессами. В операционной системе UNIX существует возможность использования pip ‘а для взаимодействия других процессов, но ее реализация достаточно сложна и лежит далеко за пределами наших занятий.
Для организации потокового взаимодействия любых процессов в операционной системе UNIX применяется средство связи, получившее название FIFO (от First Input First Output) или именованный pipe . FIFO во всем подобен pip ’у, за одним исключением: данные о расположении FIFO в адресном пространстве ядра и его состоянии процессы могут получать не через родственные связи, а через файловую систему. Для этого при создании именованного pip ’а на диске заводится файл специального типа, обращаясь к которому процессы могут получить интересующую их информацию. Для создания FIFO используется системный вызов mknod() или существующая в некоторых версиях UNIX функция mkfifo() .
Следует отметить, что при их работе не происходит действительного выделения области адресного пространства операционной системы под именованный pipe , а только заводится файл-метка, существование которой позволяет осуществить реальную организацию FIFO в памяти при его открытии с помощью уже известного нам системного вызова open() .
После открытия именованный pipe ведет себя точно так же, как и неименованный. Для дальнейшей работы с ним применяются системные вызовы read() , write() и close() . Время существования FIFO в адресном пространстве ядра операционной системы, как и в случае с pip ’ом, не может превышать время жизни последнего из использовавших его процессов. Когда все процессы, работающие с FIFO , закрывают все файловые дескрипторы , ассоциированные с ним, система освобождает ресурсы, выделенные под FIFO . Вся непрочитанная информация теряется. В то же время файл -метка остается на диске и может использоваться для новой реальной организации FIFO в дальнейшем.
Использование системного вызова mknod для создания FIFO
Прототип системного вызова
Какие процессы могут обмениваться информацией через pipe
Имеются два типа каналов (абстрактных файлов) для двусторонней связи: анонимные (неименованные) и именованные каналы. Анонимные (или без имени) каналы (Anonymous pipes) дают возможность родственным процессам передавать информацию друг другу. Как правило, неименованный канал используется для переназначения стандартного ввода или вывода данных дочернего процесса так, чтобы он мог обмениваться данными со своим родительским процессом. Чтобы обмениваться данными в обоих направлениях (дуплексная работа), Вы должны создать два анонимных канала. Родительский процесс записывает данные по одному каналу, используя его дескриптор записи, в то время как дочерний процесс читает данные из этого канала, используя его дескриптор чтения. Точно так же дочерний процесс записывает данные по другому каналу, а родительский процесс читает из него. Анонимные каналы не могут быть использованы в сети, и при этом они не могут быть использованы между несвязанными процессами.
Именованные каналы (Named pipes) используются для передачи данных между процессами, которые являются не связанными процессами и между процессами на разных компьютерах. Как правило, процесс сервера именованного канала (named-pipe server) создает именованный канал с известным именем или именем, которое должно быть сообщено его клиентам. Процесс— клиент именованного канала (named-pipe client) , который знает имя канала (абстрактного файла), может открыть его с другого конца, подчиняясь ограничениям доступа, которые определяются процессом сервера именованного канала. После этого, и сервер, и клиент присоединяются к каналу, они могут обмениваться данными, выполняя операции чтения и записи в канале.
Ключевой пункт. Анонимные каналы обеспечивают эффективный способ переназначения стандартного ввода или вывода данных дочерним процессам на том же самом компьютере. Именованные каналы обеспечивают простой интерфейс программирования для передачи данных между двумя процессами, которые постоянно находятся на том же самом компьютере или в сети. Для получения дополнительной информации, см. главу Каналы.