- •Расшифруйте понятия “протокол”, “интерфейс”. В чем разница между ними? какие основные виды интерфейсов существуют у компьютерных программ согласно стандарта posix? опишите их.
- •Что такое ядро ос? какие особенности его работы по сравнению с другими программами? какие архитектуры ос по реализации ядра бывают? в чем их преимущества и недостатки?
- •Что такое виртуальная машина? для каких целей она может служить? какие типа виртуальных машин бывают? приведите примеры виртуальных машин и их ключевые характеристики.
- •Какие принципиальные отличия языка ассемблера от высокоуровневых языков программирования? что такое байткод? в чем разнца между языком ассемблера и байткодом?
- •Приведите примеры форматов исполняемых файлов и кратко охарактеризуйте их. Подробно формат elf.
- •Перечислите этапы загрузки компьютера от включения питания до активизации gui или cli ос. Охарактеризуйте роль каждого из них.
- •Что такое процесс ос? чем он отличается от программы? что такое нить? какие есть подходы к созданию многонитевых (многопоточных программ)? что такой фибр, в чем его отличие от нити?
- •Опишите жизненный цикл процесса. Назовите требования к алгоритмам планирования процессов.
- •Перечислите основные алгоритмы планирования процессов. Сформулируйте и охарактеризуйте алгоритм “очередь” (fifo). Приведите простой пример. В каких системах он может применяться на практике?
- •Назовите и кратко опишите существующие способы синхронизации многопоточных приложений.
- •Что такое критическая область процесса? что такое тупик? какие виды тупиков бывают? назовите принципы разработки многопоточных программ, которые позволят избежать для них попадания в тупики.
- •Что представляет из себя примитив синхронизации “семафор”? опишите его интерфейс (набор операций) и приведите простой пример использования.
- •Что представляет из себя примитив синхронизации “монитор”? опишите его интерфейс (набор операций) и приведите простой пример использования.
- •Что такое оптимистическое и пессимистическое блокирование? в каких случаях какое предпочтительнее? какие еще виды блокирования вы знаете?
- •Что такое программная транзакционная память (stm)? какие качества имеют программы, которые ее используют?
- •Что такое конвейер (pipe)? что такое именованный конвейер? охарактеризуйте их. Как эти объекты можно использовать для взаимодействия программ (приведите несколько примеров)?
- •Что такое фрагментация? какие виды фрагментации бывают? какие виды фрагментации проявляются в каждой из 3 основных схем размещения файлов?
- •Нарисуйте обобщенную структуру программы в памяти. Каким образом на нее может повлиять использование сегментной модели виртуальной памяти?
- •Опишите страничную и сегментную организацию виртуальной памяти. В чем преимущества и недостатки каждой из них?
- •Какая главная проблема эффективной реализации систем виртуальной памяти? назовите несколько способов ее решения?
- •Сформулируйте алгоритм выбора кандидата на удаление из кэша “часы”. Опишите его работу на простом примере. В чем его преимущества и недостатки?
- •31. Алгоритм lru
- •32. Алгоритм «второй шанс»
- •33. Алгоритм старения (aging) – программная реализация lru.
- •34. Копированием при записи (copy-on-write) и изменением на месте (in-place modification)
- •35. Способы учета свободного места на диске
- •36. Непрерывный метод
- •37. Метод распределения блоков в виде связного списка
- •39. Журналируемая файловая система
- •40. Перечислите и кратко охарактеризуйте принципы, на которых должны строится безопасные системы.
- •41. Охарактеризуйте подходы к учету прав доступа на основе списков контроля доступа (acl) и способностей (capabilities). В чем преимущества и недостатки каждого из них?
- •42. В чем основные проблемы реализации системы безопасности на основе способностей (capabilities)? в каких случаях они проявляются? какие пути их решения существуют?
- •43. Опишите socket api ос. В чем его особенности, сильные и слабые стороны?
- •44. Опишите технологию удаленного вызова процедур (rpc). Сравните 2 подхода к передаче данных в ней. Какие уровни интернет-стека участвуют в организации распределенного взаимодействия в ней?
-
Перечислите этапы загрузки компьютера от включения питания до активизации gui или cli ос. Охарактеризуйте роль каждого из них.
Процесс загрузки компьютера может несколько отличаться, в зависимости от установленной операционной системы. Поэтому достаточно сложно универсально однозначно описать этот процесс. Тем не менее, можно попытаться выделить некоторые общие этапы загрузки. После включения питания сбрасывается процессор и логика, а затем процессором выполняются инструкции, вшитые в ПЗУ материнской платы.
Сразу после включения питания однократно запускается тест, который называется POST или Power On Self Test. Основная задача этого теста – проверка функционирования аппаратной части на отсутствие грубых ошибок. В рамках этого теста происходит и проверка памяти, ход которой можно наблюдать на экране компьютера. Если этот тест не проходит, возможно, одно или несколько устройств повреждены, и понадобится компьютерная помощь специалистов.
После включения или перезагрузки компьютера обязательно происходит инициализация устройств на материнской плате и в слотах расширения.
После процедуры инициализации загружается BIOS – базовая низкоуровневая система ввода-вывода. BIOS компьютера записан на отдельную микросхему, распложенную на материнской плате. В большинстве современных компьютеров BIOS перезаписываемый, то есть имеет возможность изменения программными средствами. Большинство операционных систем копирует BIOS в оперативную память для ускорения процесса загрузки.
Важная часть процесса загрузки компьютера – инициализация видеоадаптера. Заметьте, что уже во время теста POST на экране можно увидеть данные. То есть, в этот момент видеоадаптер уже инициализирован. Происходит это потому, что любая видеокарта имеет собственный BIOS, и BIOS системы, опросив все доступные слоты, в которые может быть установлен видеоадаптер, обнаруживает этот BIOS и передает на него управление изображением.
Нужно отметить, что видеокарта – не единственное устройство, у которого есть свой BIOS. Есть он, например, и у сетевых плат. Обнаружив BIOS такого устройства, система незамедлительно передает ему управление соответствующим оборудованием.
После загрузки BIOS проверяется наличие жестких дисков, CD или DVD-приводов и других устройств, с которых можно будет осуществить загрузку операционной системы. Также проверяется наличие клавиатуры. В случае ошибки, система сообщит о ней звуковым сигналом или выведет сообщение об ошибке на экран.
Следующий этап – инициализация и проверка устройств Plug and Play, установленных в слотах расширения. Как правило, такие устройства также имеют собственный BIOS.
Завершающий этап загрузки компьютера – считывание boot-области жесткого диска, то есть первой дорожки первой головки. Если загрузочный диск не обнаружен, система выдает предупреждения. В случае же успешной загрузки boot-области, она управляет дальнейшей загрузкой операционной системы. Аналогично происходит загрузка и с внешнего носителя (CD-диска, дискеты и т.д.).
Этапы загрузки Линукс:
-
BIOS выполняет загрузочные шаги, специфичные для данного аппаратного обеспечения.
-
Когда все устройства распознаны и правильно запущены, BIOS загружает и выполняет загрузочный код с одного из разделов заданного загрузочного устройства, который содержит фазу 1 загрузчика Linux. Фаза 1 загружает фазу 2 (значительный по размеру код загрузчика). Некоторые загрузчики могут использовать для этого промежуточный этап (под названием фаза 1,5), поскольку современные диски большого объёма могут некорректно считываться без дальнейшего кода.
-
Загрузчик зачастую предлагает пользователю меню с доступными вариантами загрузки. Затем он загружает ядро, которое распаковывается в память, настраивает системные функции, такие как работа необходимого оборудования и управление страницами памяти, после чего делает вызов start_kernel().
-
После этого start_kernel() выполняет основную настройку системы (прерывания, остальные функции управления памятью, инициализацию устройств, драйверов и т. д.), а потом порождает процесс бездействия, диспетчер и отдельно от них — процесс Init (выполняющийся в пользовательском пространстве).
-
Планировщик начинает более эффективно управлять системой, в то время как ядро переходит к бездействию.
-
Процесс Init выполняет необходимые сценарии, которые настраивают все службы и структуры, не относящиеся к уровню ядра, в результате чего будет создано пользовательское окружение, и пользователю будет предоставлен экран входа в систему.