
- •Расшифруйте понятия “протокол”, “интерфейс”. В чем разница между ними? какие основные виды интерфейсов существуют у компьютерных программ согласно стандарта 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 подхода к передаче данных в ней. Какие уровни интернет-стека участвуют в организации распределенного взаимодействия в ней?
39. Журналируемая файловая система
Журналируемая файловая система — файловая система (ФС), в которой осуществляется ведение журнала, хранящего список изменений и, в той или иной степени, помогающего сохранить целостность файловой системы при сбоях.
Журналируемая файловая система сохраняет список изменений, которые она будет проводить с файловой системой, перед фактическим их осуществлением. Эти записи хранятся в отдельной части файловой системы, называемой журналом (англ. journal) или логом (англ. log). Как только изменения файловой системы внесены в журнал, она применяет эти изменения к файлам или метаданным, а затем удаляет эти записи из журнала. Записи журнала организованы в наборы связанных изменений файловой системы.
При перезагрузке компьютера программа монтирования может гарантировать целостность журналируемой файловой системы простой проверкой лог-файла на наличие ожидаемых, но не произведённых изменений и последующей записью их в файловую систему. То есть, при наличии журнала в большинстве случаев системе не нужно проводить проверку целостности файловой системы. Соответственно, шансы потери данных в связи с проблемами в файловой системе значительно снижаются.
По типу внесения в журнал журналируемые ФС подразделяются на:
* в режиме обратной связи (журналируются только метаданные): XFS, ext3fs;
* упорядоченные (журналируются только метаданные синхронно относительно данных): JFS2, ext3fs (по умолчанию), ReiserFS (основной);
* в режиме данных (журналируются как метаданные, так и данные): ext3fs;
40. Перечислите и кратко охарактеризуйте принципы, на которых должны строится безопасные системы.
Компания Microsoft предложила ряд простых схем для оценки и разработки безопасного программного обеспечения , для оценки угроз и атак и оценки последствий атаки, которые мы и рассмотрим.
Схема (формула) SD3C определяет основные принципы разработки безопасного программного обеспечения:
Secure in Design – применение принципов безопасного проектирования; учет возможных атак; реализация способов их отражения;
Secure by Default – включение установок безопасности по умолчанию;
Secure in Deployment – безопасное развертывание и инсталляция программного обеспечения;
Communication – постоянное взаимодействие группы сопровождения продукта с пользователями, быстрый выпуск новых версий продукта с исправленными ошибками безопасности; рекомендации по настройке безопасности.
Принципы:
_ учиться на ошибках;
_ уменьшать «площадь» приложения, открытую для нападений;
_ создавать систему безопасности с защитой на всех уровнях;
_ использовать минимальные привилегии;
_ в конфигурации по умолчанию назначать безопасные параметры;
_ помнить, что обратная совместимость всегда чревата проблемами;
_ всегда предполагать незащищенность внешних систем;
_ предусмотреть план действий при сбоях и отказах;
_ позаботиться, чтобы при любых сбоях система сохраняла конфиденциальность
информации;
_ помнить, что возможности подсистемы безопасности — это не то же самое,
что безопасные возможности системы;
_ никогда не полагаться на защиту, основанную только на ограниченности ин_
формации (не рассчитывайте, что, если вы скроете информацию о приложе_
нии, злоумышленник не догадается об уязвимости);
_ не смешивать код и данные;
_ корректно исправлять ошибки в подсистеме безопасности.