
- •Расшифруйте понятия “протокол”, “интерфейс”. В чем разница между ними? Какие основные виды интерфейсов существуют у компьютерных программ согласно стандарта posix?
- •Что такое ядро ос? Какие особенности его работы по сравнению с другими программами? Какие архитектуры ос бывают? в чем их преимущества и недостатки
- •Что такое виртуальная машина? Для каких целей она может служить? Какие типы виртуальных машин бывают?
- •Какие принципиальные отличия языка Ассемблера от высокоуровневых языков программирования?
- •Перечислите форматы исполняемых файлов. Опишите и охарактеризуйте формат elf.
- •Из каких этапов состоит создание исполняемой программы из исходного кода? Опишите их суть. Для каких сред исполнения может создаваться программа?
- •Перечислите этапы загрузки компьютера от включения питания до активизации gui или cli ос. Охарактеризуйте роль каждого из них.
- •Что такое процесс ос? Чем он отличается от программы? Что такое нить? Какие есть подходы к созданию многонитевых (многопоточных программ)?
- •Опишите жизненный цикл процесса. Какие требования обычно выдвигаются к алгоритмам планирования процессов?
- •Перечислите основные алгоритмы планирования процессов. Сформулируйте алгоритм “Карусель” (Round Robin) и охарактеризуйте его.
- •Перечислите основные алгоритмы планирования процессов. Сформулируйте “справедливый” алоритм планирования и охарактеризуйте его.
- •Перечислите основные алгоритмы планирования процессов. Сформулируйте и охарактеризуйте алгоритм “Очередь” (fifo). В каких системах он может применяться на практике?
- •Перечислите алгоритмы планирования процессов. Сформулируйте и охарактеризуйте алгоритм “Многоуровневые очереди с обратной связью”. В чем его преимущества и недостатки?
- •В чем разница между статическими и динамическими алгоритмами планирования процессов? Приведите минимум 2 примера каждого из них.
- •2 Примера каждого из них:
- •Назовите и кратко опишите существующие способы синхронизации многопоточных приложений.
- •Что такое критическая область процесса? Назовите прнципы разработки многопоточных программ, которые позволят избежать для них попадания в тупики.
- •Что представляет из себя примитив синхронизации “Семафор”? Опишите его интерфейс.
- •Что представляет из себя примитив синхронизации “Монитор”? Опишите его интерфейс.
- •Какие инструкции аппаратной синхронизации вы знаете? Приведите 2 примера, как на их основе можно построить различные примитивы синхронизации (условные переменные, семафоры, …).
- •Перечислите разные способы синхронизации работы многопоточных программ. Перечислите и охарактеризуйте проблемные ситуации, которые могут возникать в случае конкуренции за ресурсы между нитями.
- •Что такое мертвый замок (deadlock)? Сформулируйте требования к многопоточным программам, при соблюдении которых они гарантированно смогут избежать мертвых замков.
- •Опишите подходы, которые позволяют избежать мертвых замков в программах, которые используют блокировки с помощью замков.
- •Обнаружение взаимных блокировок
- •Что такое оптимистическое и пессимистическое блокирование? в каких случаях какое предпочтительнее?
- •Что такое программная транзакционная память (stm)? Какие свойства могут приобрести программы, которые ее используют?
- •Что такое конвейер (pipe)? Что такое именованный конвейер? Как эти объекты используются для взаимодействия программ?
- •Что такое фрагментация? Какие виды фрагментации бывают? Какие виды фрагментации проявляются в 3 основных схемах размещения файлов?
- •Опишите страничную и сегментную организацию виртуальной памяти. В чем преимущества и недостатки каждой из них?
- •Страничная организация памяти. Виртуальная память.
- •Нарисуйте обобщенную структуру программы в памяти. Каким образом на нее может повлиять использование сегментной модели виртуальной памяти?
- •Сформулируйте алгоритм выбора кандидата на удаление из кэша “Часы”. В чем его преимущества и недостатки?
- •Сформулируйте алгоритм выбора кандидата на удаление из кэша “Наименее недавно использовавшийся” (lru). В чем его преимущества и недостатки?
- •Примеры
- •Сформулируйте алгоритм выбора кандидата на удаление из кэша “Второй шанс”. В чем его преимущества и недостатки?
- •Управление свободным и занятым дисковым пространством
- •39. Что такое файловая система на основе журнала? Чем она отличается от классической файловой системы, какие у нее есть преимущества и недостатки, основные проблемы и особенности реализации?
- •40. Перечислите и кратко охарактеризуйте принципы, на которых должны строится безопасные системы.
- •41. Охарактеризуйте подходы к учету прав доступа на основе списков контроля доступа (acl) и способностей (capabilities). В чем преимущества и недостатки каждого из них?
- •43. Опишите Socket api ос. В чем его особенности, сильные и слабые стороны?
- •44. Опишите технологию удаленного вызова процедур (rpc). Сравните 2 подхода к предаче данных в ней. Какие уровни Интернет-стека участвуют в организации распределенного взаимодействия в ней?
- •45. Опишите сетевой стек tcp/ip. Чем он отличается от эталонной модели osi? Какой уровень к tcp/ip стеку добавляет rpc-приложение?
- •46. Опишите технологию удаленного вызова процедур (rpc). Сравните 2 подхода к предаче данных в ней. Какие уровни участвуют в организации распределенного взаимодействия в ней?
- •Опишите сетевой стек tcp/ip. Чем он отличается от эталонной модели osi? Какой уровень к tcp/ip стеку добавляет rpc-приложение?
- •Опишите клиент-серверную архитектуру распределенного приложения. Какое api ос лежит в ее основе? Какие еще уровни участвуют в организации распределенного взаимодействия в ней?
Что такое процесс ос? Чем он отличается от программы? Что такое нить? Какие есть подходы к созданию многонитевых (многопоточных программ)?
Процесс рассматривается операционной системой как заявка на потребление всех видов ресурсов, кроме одного — процессорного времени. Этот последний важнейший ресурс распределяется операционной системой между другими единицами работы — потоками, которые и получили свое название благодаря тому, что они представляют собой последовательности (потоки выполнения) команд.
Хотя на первый взгляд кажется, что программа и процесс понятия практически одинаковые, они фундаментально отличаются друг от друга. Программа представляет собой статический набор команд, а процесс это набор ресурсов и данных, использующихся при выполнении программы.
Нить представляет собой независимо выполняющийся поток управления со своим счетчиком команд, регистровым контекстом и стеком. Понятия процесса и нити очень тесно связаны и поэтому трудноотличимы, нити даже часто называют легковесными процессами. Основные отличия процесса от нити заключаются в том, что, каждому процессу соответствует своя независимая от других область памяти, таблица открытых файлов, текущая директория и прочая информация уровня ядра. Нити же не связаны непосредственно с этими сущностями. У всех нитей принадлежащих данному процессу всё выше перечисленное общее, поскольку принадлежит этому процессу. Кроме того, процесс всегда является сущностью уровня ядра, то есть ядро знает о его существовании, в то время как нити зачастую является сущностями уровня пользователя и ядро может ничего не знать о ней.
Опишите жизненный цикл процесса. Какие требования обычно выдвигаются к алгоритмам планирования процессов?
Жизненный цикл процесса изображен на Рис. 2-1. Процесс может создать новый процесс, который является копией исходного процесса с помощью системного вызова fork. Возврат из вызова fork происходит два раза: один раз в родительском процессе, в котором возвращаемое значение является идентификатором порожденного процесса, и второй раз в порожденном процессе, в котором возвращаемое значение равно 0. Связь родитель-потомок порождает иерархическую структуру процессов в системе. Новый процесс имеет доступ ко всем ресурсам его родителя, таким, как файловые дескрипторы, состояние обработки сигналов и распределение памяти.
Хотя есть ситуации, когда процесс должен быть копией своего родителя, наиболее типичным и полезным действием является загрузка и выполнение другой программы. Процесс может заместить себя образом памяти другой программы, передавая вновь созданному образу набор параметров, при помощи системного вызова execve. Одним из параметров является имя файла, содержимое которого имеет формате, распознаваемый системой -- это либо двоичный выполняемый файл, либо файл, который приводит к запуску указанной программы интерпретации для обработки его содержимого.
Процесс может завершить работу, выполнив системный вызов exit, посылающий 8-битовое значение состояния завершения своему родителю. Если процесс хочет передать родительскому процессу информацию, превышающую один байт, он должен либо создать канал межпроцессных коммуникаций при помощи конвейеров или сокетов, или при помощи промежуточного файла.
Процесс может приостановить выполнение до тех пор, пока не завершит работу любой из порожденных им процессов, при помощи системного вызова wait, который возвращает PID и статус завершения выполненного дочернего процесса. Родительский процесс может быть настроен на получение сигнала в случае, когда порожденный процесс завершает работу или аварийно прекращает выполнение. При помощи системного вызова wait4 родитель может получить информацию о событии, приведшем к завершению порожденного процесса и о ресурсах, использованных процессом за время его работы. Если процесс становится сиротой из-за того, что процесс, его породивший, завершил работу до окончания работы потомка, то ядро перенаправляет состояние завершения порожденного процесса особому системному процессу init.
Критерии планирования и требования к алгоритмам
Для каждого уровня планирования процессов можно предложить много различных алгоритмов. Выбор конкретного алгоритма определяется классом задач, решаемых вычислительной системой, и целями, которых мы хотим достичь, используя планирование. К числу таких целей можно отнести следующие:
Справедливость – гарантировать каждому заданию или процессу определенную часть времени использования процессора в компьютерной системе, стараясь не допустить возникновения ситуации, когда процесс одного пользователя постоянно занимает процессор, в то время как процесс другого пользователя фактически не начинал выполняться.
Эффективность – постараться занять процессор на все 100% рабочего времени, не позволяя ему простаивать в ожидании процессов, готовых к исполнению. В реальных вычислительных системах загрузка процессора колеблется от 40 до 90%.
Сокращение полного времени выполнения (turnaround time) – обеспечить минимальное время между стартом процесса или постановкой задания в очередь для загрузки и его завершением.
Сокращение времени ожидания (waiting time) – сократить время, которое проводят процессы в состоянии готовность и задания в очереди для загрузки.
Сокращение времени отклика (response time) – минимизировать время, которое требуется процессу в интерактивных системах для ответа на запрос пользователя.
Независимо от поставленных целей планирования желательно также, чтобы алгоритмы обладали следующими свойствами:
Были предсказуемыми. Одно и то же задание должно выполняться приблизительно за одно и то же время. Применение алгоритма планирования не должно приводить, к примеру, к извлечению квадратного корня из 4 за сотые доли секунды при одном запуске и за несколько суток – при втором запуске.
Были связаны с минимальными накладными расходами. Если на каждые 100 миллисекунд, выделенные процессу для использования процессора, будет приходиться 200 миллисекунд на определение того, какой именно процесс получит процессор в свое распоряжение, и на переключение контекста, то такой алгоритм, очевидно, применять не стоит.
Равномерно загружали ресурсы вычислительной системы, отдавая предпочтение тем процессам, которые будут занимать малоиспользуемые ресурсы.
Обладали масштабируемостью, т. е. не сразу теряли работоспособность при увеличении нагрузки. Например, рост количества процессов в системе в два раза не должен приводить к увеличению полного времени выполнения процессов на порядок.
Многие из приведенных выше целей и свойств являются противоречивыми. Улучшая работу алгоритма с точки зрения одного критерия, мы ухудшаем ее с точки зрения другого. Приспосабливая алгоритм под один класс задач, мы тем самым дискриминируем задачи другого класса.