Какие процессы могут обмениваться информацией через 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? При вычислениях считать, что процессы не совершают операций ввода-вывода, временем переключения контекста пренебречь.
Какие процессы могут обмениваться информацией через 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? При вычислениях считать, что процессы не совершают операций ввода-вывода, временем переключения контекста пренебречь.
Какие процессы могут обмениваться информацией через pipe
Для хранения информации при передаче между процессами используется буфер. Можно выделить следующие виды буферов:
ü Буфер нулевой емкости или отсутствует. Никакая информация не может сохраняться на линии связи. В этом случае процесс, посылающий информацию, должен ожидать, пока процесс, принимающий информацию, не будет готов ее получить (в реальности этот случай никогда не реализуется).
ü Буфер ограниченной емкости.Размер буфера равен n то есть линия связи не может хранить до момента получения более чем n единиц информации. Если в момент передачи данных в буфере хватает места, то передающий процесс не должен ничего ожидать. Информация просто копируется в буфер. Если же в момент передачи данных буфер заполнен или места недостаточно, то необходимо задержать работу процесса отправителя до появления в буфере свободного пространства.
ü Буфер неограниченной емкости. Теоретически это возможно, но практически плохо не реализумо. Процесс, посылающий информацию, ни
когда не ждет окончания ее передачи и приема другим процессом.
При использовании канального средства связи с непрямой адресацией под емкостью буфера обычно понимается количество информации,
которое может быть помещено в промежуточный объект для хранения
данных
ü Четвертый вопрос – это модели передачи данных по каналам связи.
ü Существует две модели— поток ввода -вывода и сообщения. При передаче данных с помощью потоковой модели, операции передачи/приема информации не интересуются содержимым данных. Процесс, прочитавший 100 байт из линии связи, не знает и не может знать, были ли они переданы одновременно, или порциями по 20 байт, пришли они от одного процесса или от разных. Данные представляют собой простой поток байтов, без какой-либо их интерпретации со стороны системы. Примерами потоковых каналов связи могут служить pipe и FIFO.
ü Одним из наиболее простых способов передачи информации между процессами по линиям связи является передача данных через pipe (канал, труба или конвейер). Такой способ реализует потоковую модель ввода/вывода. Информацией о расположении трубы в операционной системе обладает только процесс, создавший ее. Этой информацией он может поделиться исключительно со своими наследниками — процессами-детьми и их потомками. Поэтому использовать pipe для связи между собой могут только родственные процессы, имеющие общего предка, создавшего данный канал связи.
ü Если разрешить процессу, создавшему трубу, сообщать о ее местонахождении в системе другим процессам, сделав вход и выход трубы каким-либо образом видимыми для всех остальных, например, зарегистрировав ее в операционной системе под определенным именем, мы получим объект, который принято называть FIFO или именованный pipe. Именованный pipe может использоваться для организации связи между любыми процессами в системе.
ü В модели сообщений процессы налагают на передаваемые данные некоторую структуру. Весь поток информации они разделяют на отдельные сообщения, вводя между данными, по крайней мере, границы сообщений. Кроме того, к передаваемой информации могут быть присоединены указания на то, кем конкретное сообщение было послано и для кого оно предназначено. Все сообщения могут иметь одинаковый фиксированный размер или могут быть переменной длины.
ü И потоковые линии связи, и каналы сообщений всегда имеют буфер конечной длины.
Пятый вопрос – это надежность средств связи.
Способ коммуникации считается надежным, если при обмене данными выполняются четыре условия:
1. Не происходит потери информации.
2. Не происходит повреждения информации.
3. Не появляется лишней информации.
4. Не нарушается порядок данных в процессе обмена
Каким образки достигается надежность в вычислительной системе? Например, при передаче сообщениями. Для обнаружения повреждения информации каждое передаваемое сообщение снабжается некоторой контрольной суммой, вычисленной по посланной информации. При приеме сообщения контрольную сумму вычисляется заново и проверятся ее соответствие пришедшему значению. Если данные не повреждены, то контрольные суммы совпадают и подтверждается правильность их получения. Если данные повреждены (контрольные суммы не совпадают), и считается, что сообщение не поступило. Вместо контрольной суммы также используется специальное кодирование передаваемых данных с помощью кодов, исправляющих ошибки. Такое кодирование позволяет при числе искажений информации, не превышающем некоторого значения, восстановить первоначальные неискаженные данные. Для гарантии правильного порядка получения сообщений их нумеруют. При приеме сообщения с номером, не соответствующим ожидаемому, с ним поступают, как с утерянным.
Подобные действия могут быть возложены: на операционную систему; на процессы, обменивающиеся данными; совместно на систему и процессы, разделяя их ответственность.
Шестой вопрос – это вопрос прекращения обмена.
Здесь нужно выделить два аспекта: требуются ли от процесса какие-либо специальные действия по прекращению использования средства коммуникации и влияет ли такое прекращение на поведение других процессов. Для способов связи, которые не подразумевали никаких инициализирующих действий, обычно ничего специального для окончания взаимодействия предпринимать не надо.
Если же установление связи требовало некоторой инициализации, то, как правило, при ее завершении бывает необходимо выполнить ряд операций, например сообщить операционной системе об освобождении выделенного связного ресурса.
Нити
Любой отдельно взятый процесс в мультипрограммной системе никогда не может быть выполнен быстрее, чем при работе в однопрограммном режиме на том же вычислительном комплексе. Тем не менее, если алгоритм решения задачи обладает определенным внутренним параллелизмом, то можно ускорить его работу, организовав взаимодействие нескольких процессов. Параллелизм одного процесса достигается за счет нитей.
Нить исполнения или просто нить (в англоязычной литературе используется термин thread). Нити процесса разделяют его программный код, глобальные переменные и системные ресурсы, но каждая нить имеет собственный программный счетчик, свое содержимое регистров и свой стек. Процесс можно представить как совокупность взаимодействующих нитей и выделенных ему ресурсов.
Процесс, содержащий всего одну нить исполнения считается «традиционным процессом».
Иногда нити называют облегченными процессами или мини-процессами, так как во многих отношениях они подобны традиционным процессам. Нити, как и процессы, могут порождать нити-потомки, правда, только внутри своего процесса, и переходить из одного состояния в другое.
Поскольку нити одного процесса разделяют существенно больше ресурсов, чем различные процессы, то операции создания новой нити и переключения контекста между нитями одного процесса занимают значительно меньше времени, чем аналогичные операции для процессов в целом.
Различают операционные системы, поддерживающие нити на уровне ядра и на уровне библиотек.
Для операционных систем, поддерживающих нити на уровне ядра планирование использования процессора происходит в терминах нитей, а управление памятью и другими системными ресурсами остается в терминах процессов.
В операционных системах, поддерживающих нити на уровне библиотек пользователей, и планирование процессора, и управление системными ресурсами осуществляются в терминах процессов. Распределение использования процессора по нитям в рамках выделенного процессу временного интервала осуществляется средствами библиотеки. В подобных системах блокирование одной нити приводит к блокированию всего процесса, ибо ядро операционной системы не имеет представления о существовании нитей. По сути дела, в таких вычислительных системах просто имитируется наличие нитей исполнения.
Linux pipes tips & tricks
Pipe (конвеер) – это однонаправленный канал межпроцессного взаимодействия. Термин был придуман Дугласом Макилроем для командной оболочки Unix и назван по аналогии с трубопроводом. Конвейеры чаще всего используются в shell-скриптах для связи нескольких команд путем перенаправления вывода одной команды (stdout) на вход (stdin) последующей, используя символ конвеера ‘|’:
grep выполняет регистронезависимый поиск строки “error” в файле log, но результат поиска не выводится на экран, а перенаправляется на вход (stdin) команды wc, которая в свою очередь выполняет подсчет количества строк.
Логика
Конвеер обеспечивает асинхронное выполнение команд с использованием буферизации ввода/вывода. Таким образом все команды в конвейере работают параллельно, каждая в своем процессе.
Размер буфера начиная с ядра версии 2.6.11 составляет 65536 байт (64Кб) и равен странице памяти в более старых ядрах. При попытке чтения из пустого буфера процесс чтения блокируется до появления данных. Аналогично при попытке записи в заполненный буфер процесс записи будет заблокирован до освобождения необходимого места.
Важно, что несмотря на то, что конвейер оперирует файловыми дескрипторами потоков ввода/вывода, все операции выполняются в памяти, без нагрузки на диск.
Вся информация, приведенная ниже, касается оболочки bash-4.2 и ядра 3.10.10.
Простой дебаг
Исходный код, уровень 1, shell
Т. к. лучшая документация — исходный код, обратимся к нему. Bash использует Yacc для парсинга входных команд и возвращает ‘command_connect()’, когда встречает символ ‘|’.
parse.y:
Также здесь мы видим обработку пары символов ‘|&’, что эквивалентно перенаправлению как stdout, так и stderr в конвеер. Далее обратимся к command_connect():make_cmd.c:
где connector это символ ‘|’ как int. При выполнении последовательности команд (связанных через ‘&’, ‘|’, ‘;’, и т. д.) вызывается execute_connection():execute_cmd.c:
PIPE_IN и PIPE_OUT — файловые дескрипторы, содержащие информацию о входном и выходном потоках. Они могут принимать значение NO_PIPE, которое означает, что I/O является stdin/stdout.
execute_pipeline() довольно объемная функция, имплементация которой содержится в execute_cmd.c. Мы рассмотрим наиболее интересные для нас части.
execute_cmd.c:
Таким образом, bash обрабатывает символ конвейера путем системного вызова pipe() для каждого встретившегося символа ‘|’ и выполняет каждую команду в отдельном процессе с использованием соответствующих файловых дескрипторов в качестве входного и выходного потоков.
Исходный код, уровень 2, ядро
Обратимся к коду ядра и посмотрим на имплементацию функции pipe(). В статье рассматривается ядро версии 3.10.10 stable.
fs/pipe.c (пропущены незначительные для данной статьи участки кода):
Если вы обратили внимание, в коде идет проверка на флаг O_NONBLOCK. Его можно выставить используя операцию F_SETFL в fcntl. Он отвечает за переход в режим без блокировки I/O потоков в конвеере. В этом режиме вместо блокировки процесс чтения/записи в поток будет завершаться с errno кодом EAGAIN.
Максимальный размер блока данных, который будет записан в конвейер, равен одной странице памяти (4Кб) для архитектуры arm:
arch/arm/include/asm/limits.h:
Для ядер >= 2.6.35 можно изменить размер буфера конвейера:
Максимально допустимый размер буфера, как мы видели выше, указан в файле /proc/sys/fs/pipe-max-size.
Tips & trics
В примерах ниже будем выполнять ls на существующую директорию Documents и два несуществующих файла: ./non-existent_file и. /other_non-existent_file.
Перенаправление и stdout, и stderr в pipe
или же можно использовать комбинацию символов ‘|&’ (о ней можно узнать как из документации к оболочке (man bash), так и из исходников выше, где мы разбирали Yacc парсер bash):
Перенаправление _только_ stderr в pipe
Shoot yourself in the foot
Важно соблюдать порядок перенаправления stdout и stderr. Например, комбинация ‘>/dev/null 2>&1′ перенаправит и stdout, и stderr в /dev/null.
Получение корректного кода завершения конвейра
По умолчанию, код завершения конвейера — код завершения последней команды в конвеере. Например, возьмем исходную команду, которая завершается с ненулевым кодом:
И поместим ее в pipe:
Теперь код завершения конвейера — это код завершения команды wc, т.е. 0.
Обычно же нам нужно знать, если в процессе выполнения конвейера произошла ошибка. Для этого следует выставить опцию pipefail, которая указывает оболочке, что код завершения конвейера будет совпадать с первым ненулевым кодом завершения одной из команд конвейера или же нулю в случае, если все команды завершились корректно:
Shoot yourself in the foot
Следует иметь в виду “безобидные” команды, которые могут вернуть не ноль. Это касается не только работы с конвейерами. Например, рассмотрим пример с grep:
Здесь мы печатаем все найденные строки, приписав ‘new_’ в начале каждой строки, либо не печатаем ничего, если ни одной строки нужного формата не нашлось. Проблема в том, что grep завершается с кодом 1, если не было найдено ни одного совпадения, поэтому если в нашем скрипте выставлена опция pipefail, этот пример завершится с кодом 1:
В больших скриптах со сложными конструкциями и длинными конвеерами можно упустить этот момент из виду, что может привести к некорректным результатам.
Основы операционных систем — фундаментальные принципы — ответы на тесты Интуит
Пусть в вычислительную систему поступают пять процессов различной длительности по следующей схеме:
Номер процесса | Момент поступления в систему | Время исполнения |
---|---|---|
1 | 2 | 4 |
2 | 1 | 3 |
3 | 4 | 5 |
4 | 3 | 2 |
5 | 0 | 9 |
Чему равно среднее время ожидания процесса (waiting time) при использовании вытесняющего алгоритма SJF? При вычислениях считать, что процессы не совершают операций ввода-вывода, временем переключения контекста пренебречь.
В вычислительной системе моделируется движение самосвалов от карьера к заводу и обратно по дороге со стареньким мостом. Движение по мосту может осуществляться в обоих направлениях, но на нем не может быть одновременно более трех машин, иначе он рухнет. Каждый самосвал представлен программистом процессом следующей структуры:
Semaphore mutex = 1; Semaphore not_full = 0; Shared int n_on_bridge = 0; Процесс i-й самосвал: While (1)
Что может произойти в результате такого моделирования?
Рассмотрим две активности, P и Q :
P | Q |
---|---|
y=x+1 | z=x-3 |
f=y-4 | f=z+1 |
Набор из этих двух активностей является:
Для некоторого процесса известна следующая строка запросов страниц памяти
7, 1, 2, 3, 2, 4, 2, 1, 0, 3, 7, 2, 1, 2, 7, 1, 7, 2, 3.
Сколько ситуаций отказа страницы (page fault) возникнет для данного процесса при использовании алгоритма замещения страниц FIFO (First Input First Output) и трех страничных кадрах?
Предположим, что в системе, где работают три пользователя, имеется 11 ресурсов, а потребность пользователей в ресурсах описывается следующей таблицей
Максимальная потребность в ресурсах | Выделенное пользователям количество ресурсов | |
---|---|---|
Первый пользователь | 8 | 5 |
Второй пользователь | 11 | 3 |
Третий пользователь | 3 | 1 |
Это состояние является
Для некоторого процесса известна следующая строка запросов страниц памяти
7, 1, 2, 3, 2, 4, 2, 1, 0, 3, 7, 2, 1, 2, 7, 1, 7, 2, 3.
Сколько ситуаций отказа страницы (page fault) возникнет для данного процесса при использовании алгоритма замещения страниц LRU (the Least Recently Used) и трех страничных кадрах?
Пусть в вычислительную систему поступают пять процессов различной длительности по следующей схеме:
Номер процесса | Момент поступления в систему | Время исполнения |
---|---|---|
1 | 2 | 4 |
2 | 1 | 3 |
3 | 4 | 5 |
4 | 3 | 2 |
5 | 0 | 9 |
Чему равно среднее время ожидания процесса (waiting time) при использовании вытесняющего алгоритма SJF? При вычислениях считать, что процессы не совершают операций ввода-вывода, временем переключения контекста пренебречь.
В вычислительной системе моделируется движение самосвалов от карьера к заводу и обратно по дороге со стареньким мостом. Движение по мосту может осуществляться в обоих направлениях, но на нем не может быть одновременно более трех машин, иначе он рухнет. Каждый самосвал представлен программистом процессом следующей структуры:
Что может произойти в результате такого моделирования?
Для некоторого процесса известна следующая строка запросов страниц памяти
7, 1, 2, 3, 2, 4, 2, 1, 0, 3, 7, 2, 1, 2, 7, 1, 7, 2, 3.
Сколько ситуаций отказа страницы (page fault) возникнет для данного процесса при использовании алгоритма замещения страниц OPT (оптимальный алгоритм) и трех страничных кадрах?
В вычислительной системе со страничной организацией памяти и 32-х битовым адресом размер страницы составляет 8 Mбайт. Для некоторого процесса таблица страниц в этой системе имеет вид:
Номер страницы | Адрес начала страницы |
---|---|
1 | 0x00000000 |
2 | 0x02000000 |
5 | 0x06000000 |
6 | 0x10000000 |
Какому физическому адресу соответствует виртуальный адрес 0х00827432 ?
Пусть в вычислительную систему поступают пять процессов различной длительности с разными приоритетами по следующей схеме:
Номер процесса | Момент поступления в систему | Время исполнения | Приоритет |
---|---|---|---|
1 | 3 | 10 | 1 |
2 | 6 | 4 | 0 |
3 | 0 | 4 | 3 |
4 | 2 | 1 | 4 |
5 | 4 | 3 | 2 |
Чему равно среднее время между стартом процесса и его завершением (turnaround time) при использовании вытесняющего приоритетного планирования? При вычислениях считать, что процессы не совершают операций ввода-вывода, временем переключения контекста пренебречь. Наивысшим приоритетом является приоритет 0.
В маленьком ресторанчике, где готовят пиццу, работают отец и три его дочери. Приготовление пиццы требует трех ингредиентов: теста, соуса и сыра. Одна дочь должна непрерывно поставлять тесто, вторая — соус, третья — тертый сыр. Приготовление пиццы происходит следующим образом: первая дочь формирует из теста основу пиццы, после чего вторая дочь намазывает лепешку соусом, а третья — посыпает сыром. Отец берет подготовленную дочерьми пиццу и помещает ее в печь. Используя классические мониторы Хора, программист предложил следующую модель приготовления пиццы с помощью четырех процессов: для отца и для каждой из дочерей.
Похожие публикации:
- Как уменьшить расстояние между столбцами в гистограмме в excel
- Как упорядочить слова по алфавиту
- Как установить bomber
- Как установить dlc в epic games
Основы операционных систем — ответы
При модернизации некоторой операционной системы, поддерживающей только три состояния процессов: готовность, исполнение, ожидание, решено ввести два новых системных вызова. Один из этих вызовов позволяет любому процессу приостановить жизнедеятельность любого другого процесса (кроме самого себя), до тех пор, пока какой-либо процесс не выполнит второй системный вызов. Сколько новых переходов из состояния исполнение появится в системе?
Преимущество локального алгоритма замещения страниц перед глобальным состоит в том, что
В операционных системах, поддерживающих нити исполнения (threads) внутри одного процесса на уровне ядра системы, процесс находится в состоянии готовность, если:
Какие из перечисленных ниже компонентов входят в регистровый контекст процесса?
Чем обусловлена эффективность иерархической схемы памяти?
Какие из перечисленных механизмов синхронизации могут быть реализованы в вычислительной системе с помощью специальных системных вызовов?
Предположим, что один из файлов в ОС Unix в директории пользователя 1 символически связан с файлом в каталоге пользователя 2 . Что произойдет, если пользователь 2 удалит файл?
Какой из вариантов адресации может использоваться для организации передачи информации через pipe?
В маленьком ресторанчике, где готовят пиццу, работают отец и три его дочери. Приготовление пиццы требует трех ингредиентов: теста, соуса и сыра. Одна дочь должна непрерывно поставлять тесто, вторая — соус, третья — тертый сыр. Приготовление пиццы происходит следующим образом: первая дочь формирует из теста основу пиццы, после чего вторая дочь намазывает лепешку соусом, а третья — посыпает сыром. Отец берет подготовленную дочерьми пиццу и помещает ее в печь. Используя классические мониторы Хора, программист предложил следующую модель приготовления пиццы с помощью четырех процессов: для отца и для каждой из дочерей.
monitor make_pizza < condition c[3]; make_item(int i)
Что может произойти в результате такого моделирования?