
- •Расшифруйте понятия “протокол”, “интерфейс”. В чем разница между ними? Какие основные виды интерфейсов существуют у компьютерных программ согласно стандарта 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 ос лежит в ее основе? Какие еще уровни участвуют в организации распределенного взаимодействия в ней?
39. Что такое файловая система на основе журнала? Чем она отличается от классической файловой системы, какие у нее есть преимущества и недостатки, основные проблемы и особенности реализации?
Проблемы восстановления файлов
Файловые системы с журналом транзакций. При работе с файловыми системами и с дисками возможны различные экстремальные ситуации – от сбоя диска до выключения питания. Подобные ситуации могут привести к порче информации в файле или к несогласованности информации в файле и в его буферах в основной памяти. Для обнаружения и диагностики таких проблем в операционных системах имеются утилиты проверки согласованности, которые сравнивают данные в структуре директорий с блоками данных на диске и пытаются исправить несогласованности.
Еще раз повторим, что наилучший способ сохранить свои файлы – это регулярно использовать системные программы для резервного копирования (back up) данных с диска на другое устройство памяти (стример, флэшку, внешний жесткий диск, и т.д.). Восстановить испорченный файл на диске можно с помощью его резервной копии. Автор сам на себе недавно испытал ситуацию, когда по непонятной причине (видимо, из-за сбоя диска, которые случаются крайне редко) оказался испорченным файл с главой книги "Trustworthy Compilers", подготовленной для издательства John Wiley & Sons, причем копия файла на флэшке также оказалась испорченной. Проблему решила заранее предусмотрительно сделанная копия файла на вторую флэшку.
Более систематический подход к поддержанию целостности и отслеживанию состояний файлов предпринят в файловых системах с журналом транзакций (log structured filesystems). Файловые системы с журналом фиксируют любое изменение в файловой системе как транзакцию (по аналогии с системами управления базами данных и современными web-сервисами). Все транзакции записываются в журнал. Транзакция считается одобренной (committed), если она записана в журнал. Однако файловая система может быть в этот момент еще не обновлена. Транзакции из журнала асинхронно выполняются над файловой системой. Когда файловая система модифицируется, транзакция удаляется из журнала. Если имеет место сбой файловой системы, то все оставшиеся транзакции из журнала, тем не менее, должны быть выполнены.
Выводы:
Файловая система с журналом транзакций (log structured filesystem) - файловая система, фиксирующая любое изменение как транзакцию; все транзакции записываются в журнал.
Файловые системы с журналом транзакций обеспечивают повышенную надежность обработки файлов.
40. Перечислите и кратко охарактеризуйте принципы, на которых должны строится безопасные системы.
Во-первых, устройство системы не должно быть секретом. Предложение, что взломщики не знают, как работает система, может только ввести разработчиков в заблуждение. Рано или поздно злоумышленники узнают нужную им информацию, и если если защита системы окажется скомпрометированной этой утечкой информации, это значит, что такая система безопасности не годится.
Во-вторых, по умолчанию доступ не должен предоставляться. Об ошибках, в результате которых пользователям было отказано в законном доступе, сообщат значительно быстрее, чем о случаях ошибочного предоставления несанкционированного доступа. Когда есть сомнение, говорите «НЕТ».
В-третьих, необходимо проверить текущее состояние прав доступа. Система не должна, проверив наличие правд доступа и убедившись, что доступ разрешен, затем сохранять эту информацию для следующего использования. Многие системы проверяют разрешение доступа при открытии файла, но не после его. Это означает, что пользователь, открывший файл и держащий его открытым неделями, будет продолжать обладать доступом к файлу, даже если владелец файла с тех пор уже давно изменил защиту файла или, может, даже пытался удалить этот файл.
В-четвертых, предоставляйте каждому процессу как можно меньше привилегий. Если у программы-редактора есть доступ только к редактируемому файлу(указанный при вызове), то редакторы в виде троянских коней с ахейцами в брюхе не смогут причинить большого вреда. Применение этого принципа предполагает схему защиты высокой степени детализации. Подобные схемы будут рассматриваться позднее в данной главе.
В-пятых, механизм защиты должен быть простым, одинаковым для всех встроенным в самые нижние уровни системы. Попытка установить систему безопасности на существующую незащищенной систему практически невыполнима. Безопасность, как и целостность, не является свойством, которое можно добавить потом.
В-шестых, выбранная схема должна быть психологически приемлемой. Если пользователи почувствуют, что для защиты файлов требуется затратить слишком много усилий, они не станут этого делать. Тем не менее они будут громко жаловаться, если что-либо пойдет не так.