
- •Расшифруйте понятия “протокол”, “интерфейс”. В чем разница между ними? Какие основные виды интерфейсов существуют у компьютерных программ согласно стандарта 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 ос лежит в ее основе? Какие еще уровни участвуют в организации распределенного взаимодействия в ней?
Перечислите разные способы синхронизации работы многопоточных программ. Перечислите и охарактеризуйте проблемные ситуации, которые могут возникать в случае конкуренции за ресурсы между нитями.
Блокировка потока
Синхронизированный поток, определенный как метод типа synchronized, может переходить в заблокированное состояние автоматически при попытке обращения к ресурсу, занятому другим синхронизированным методом, либо при выполнении некоторых операций ввода или вывода. Однако в ряде случаев полезно иметь более тонкие средства синхронизации, допускающие явное использование по запросу приложения.
Блокировка на заданный период времени
С помощью метода sleep можно заблокировать поток на заданный период времени.
Временная приостановка и возобновление работы
Методы suspend и resume позволяют, соответственно, временно приостанавливать и возобновлять работу потока.
Ожидание извещения
Если вам нужно организовать взаимодействие потоков таким образом, чтобы один поток управлял работой другого или других потоков, вы можете воспользоваться методом wait. Этот метод переводит поток в состояние ожидания, в котором он будет находиться до тех пор, пока для потока не будет вызван извещающий метод notify, notifyAll, или пока не истечет период времени, указанный в параметре метода wait.
Ожидание завершения потока
С помощью метода join вы можете выполнять ожидание завершения работы потока, для которой этот метод вызван.
Какие существуют подходы, для того чтобы избежать их?
Если операция определена в некотором классе, то можно сказать, что точкой выполнения является конкретный экземпляр этого класса. В одной операции (и, стало быть, в одном объекте) могут одновременно находиться несколько потоков управления, а бывает и так, что разные потоки находятся в разных операциях, но все же в одном объекте.
Проблема возникает тогда, когда в одном объекте находится сразу несколько потоков управления. Если не проявить осторожность, то потоки могут мешать друг другу, что приведет к некорректному изменению состояния объекта. Это классическая проблема взаимного исключения. Ошибки при обработке этой ситуации могут стать причиной различных видов конкуренции между потоками (Race conditions) и их взаимной интерференции, что проявляется в таинственных и не поддающихся воспроизведению сбоях параллельной системы.
Ключом к решению этой проблемы в объектно-ориентированных системах является трактовка объекта как критической области. У этого подхода есть три разновидности, суть каждой из которых заключается в присоединении к операциям, определенном в классе, некоторых сихронизирующих свойств. UML позволяет моделировать все три возможности:
sequential(последовательная) - вызывающие стороны должны координировать свои действия еще до входа в вызываемый объект, так что в любой момент времени внутри объекта находится ровно один поток управления. При наличии нескольких потоков управления не могут гарантироваться семантика и целостность объекта;
guarded(охраняемая) - семантика И целостность объекта гарантируются при наличии нескольких потоков управления путем упорядочения вызовов всех охраняемых операций объекта. По существу, в каждь1й момент времени может выполняться ровно одна операция над объектом, что сводит такой подход к последовательному;
concurrent(параллельная) - семантика и целостность объекта при наличии нескольких потоков управления гарантируются тем, что операция рассматривается как атомарная.
Некоторые языки программирования поддерживают перечисленные конструкции непосредственно. Так в языке Java есть свойство synchronized, эквивалентное свойству concurrentв UML. В любом языке, поддерживающем параллельность, все три подхода можно реализовать с помощью семафоров (Semaphores).