
- •Расшифруйте понятия “протокол”, “интерфейс”. В чем разница между ними? Какие основные виды интерфейсов существуют у компьютерных программ согласно стандарта posix?
- •Что такое ядро ос? Какие особенности его работы по сравнению с другими программами? Какие архитектуры ос бывают? в чем их преимущества и недостатки
- •Какие принципиальные отличия языка Ассемблера от высокоуровневых языков программирования? Что такое байткод? в чём разница между язіком Ассемблера и байткодом?
- •Приведите примеры форматов исполняемых файлов и кратко охарактеризуйте их. Подробно формат elf.
- •Перечислите этапы загрузки компьютера от включения питания до активизации gui или cli ос. Охарактеризуйте роль каждого из них.
- •Что такое процесс ос? Чем он отличается от программы? Что такое нить? Какие есть подходы к созданию многонитевых (многопоточных программ)? Что такой фибр, в чем его отличие от нити?
- •Опишите жизненный цикл процесса. Какие требования обычно выдвигаются к алгоритмам планирования процессов?
- •Перечислите основные алгоритмы планирования процессов. Сформулируйте и охарактеризуйте алгоритм “Очередь” (fifo). Приведите простой пример. В каких системах он может применяться на практике?
- •2 Примера каждого из них:
- •Назовите и кратко опишите существующие способы синхронизации многопоточных приложений.
- •Что такое критическая область процесса? Что такое тупик? Какие виды тупиков бывают? Назовите прнципы разработки многопоточных программ, которые позволят избежать для них попадания в тупики.
- •Что представляет из себя примитив синхронизации “Семафор”? Опишите его интерфейс (набор операций) и приведите простой пример использования.
- •Что представляет из себя примитив синхронизации “Монитор”? Опишите его интерфейс (набор операций) и приведите простой пример использования.
- •Какие инструкции аппаратной синхронизации вы знаете? Сравните их. Приведите 2 примера, как на их основе можно построить различные примитивы синхронизации (условные переменные, семафоры, …).
- •Что такое оптимистическое и пессимистическое блокирование? в каких случаях какое предпочтительнее? Какие еще виды блокирования вы знаете?
- •Что такое программная транзакционная память (stm)? Какие качества имеют программы, которые ее используют?
- •Что такое конвейер (pipe)? Что такое именованный конвейер? Охарактеризуйте их. Как эти объекты можно использовать для взаимодействия программ (приведите несколько примеров)?
- •Что такое фрагментация? Какие виды фрагментации бывают? Какие виды фрагментации проявляются в 3 основных схемах размещения файлов?
- •Нарисуйте обобщенную структуру программы в памяти. Каким образом на нее может повлиять использование сегментной модели виртуальной памяти?
- •Опишите страничную и сегментную организацию виртуальной памяти. В чем преимущества и недостатки каждой из них?
- •Какая главная проблема эффективной реализации систем виртуальной памяти? Назовите несколько способов ее решения?
- •Сформулируйте алгоритм выбора кандидата на удаление из кэша “Наименее недавно использовавшийся” (lru). Опишите его работу на простом примере. В чем его преимущества и недостатки?
- •Назовите способы учета свободного места на диске, кратко опишите их. В каких файловых системах какие способы используются?
- •Управление свободным и занятым дисковым пространством
- •38. Что такое файловая система на основе журнала? Чем она отличается от классической файловой системы, какие у нее есть преимущества и недостатки, основные проблемы и особенности реализации?
- •39. Опишите Socket api ос. В чем его особенности, сильные и слабые стороны?
- •40. Опишите технологию удаленного вызова процедур (rpc). Сравните 2 подхода к предаче данных в ней. Какие уровни Интернет-стека участвуют в организации распределенного взаимодействия в ней?
- •41. Опишите сетевой стек tcp/ip. Чем он отличается от эталонной модели osi? Какой уровень к tcp/ip стеку добавляет rpc-приложение?
Приведите примеры форматов исполняемых файлов и кратко охарактеризуйте их. Подробно формат elf.
форматы исполняемых файлов:
.COM. Расширение файла .COM (англ. command) использовалось в некоторых компьютерных операционных системах в различных целях.В системах DOS и в 8-битной CP/M, файл COM — простой тип исполняемого файла, размер которого не может превышать 64 Кбайт-256 байт (65280 = 216 − 28 байт).
.EXE .EXE (сокр. англ. executable — программа) — расширение исполнимого файла, применяемое в системах DOS, Microsoft Windows, Symbian, OS/2, и в некоторых других. Кроме объектного кода, может содержать различные метаданные (значок, цифровую подпись).
A.out a.out (от англ. assembler output) — формат запускаемых файлов в некоторых (старых) версиях UNIX. Формат исполняемого файла a.out преимущественно используется в Linux. Раcширенная версия этого формата a.outb используется группой BSD-совместимых операционных систем (NetBSD, FreeBSD и OpenBSD). Компилятор NASM может генерировать файлы обоих форматов, если указать ключ -f aout для Linux или -f aoutb для BSD. Компилятор GCC по умолчанию выдаёт файл a.out, если не используется опция -o.
Executable and Linkable Format ELF (англ. Executable and Linkable Format — формат исполняемых и компонуемых файлов) — формат файлов, используемый во многих UNIX-подобных операционных системах, например, в GNU/Linux и Solaris, а также, после некоторой модификации ПО, — в некоторых мобильных телефонах компаний Siemens, Sony Ericsson, Motorola (платформа P2K) и во многих цифровых фотовидеокамерах (Olympus, Rekam и проч.). Каждый файл формата ELF имеет специальный заголовок, в котором, в частности, указан адрес точки входа (стартовый адрес) программы. Поля этого заголовка использует загрузчик (ELF interpreter) для загрузки программы в оперативную память перед исполнением. Каждый ELF файл состоит из одного заголовка ELF, за которым следуют данные. Файлы могут включать в себя
Таблицу Program Header, описывающую ноль или более сегментов
Таблицу Section Header, описывающую ноль или более секций
Данные, упомянутые в записях названных таблиц
Сегменты содержат данные, необходимые для исполнения файла, а секции содержат информацию для линковки и обработку relocation. Каждый байт в файле может относится не более чем к одной секции.
MZ (формат) MZ — стандартный формат 16-битных исполняемых файлов с расширением .EXE для DOS. Файлы .EXE и .DLL для Windows начинаются с заглушки в формате MZ, которая при попытке запустить файл в DOS выводит сообщение This program cannot be run in DOS mode. («Эту программу невозможно запустить в режиме DOS»).
Portable Executable Portable Executable — (PE) — формат исполняемых файлов, объектного кода и динамических библиотек, используемый в 32- и 64-битных версиях операционной системы Microsoft Windows. Формат PE представляет собой структуру данных, содержащую всю информацию, необходимую PE загрузчику для проецирования файла в память.
Из каких этапов состоит создание исполняемой программы из исходного кода? Опишите их суть. Для языков C++, Java и Python перечислите этапы создания программы, которые имеют место в реальности и укажите, в какое время они происходят. Для каких сред исполнения может создаваться программа?
Первый этап — который модифицирует исходный код программы перед компиляцией в соответствии с командами препроцессора, содержащимися в программе. В соответствии с этими командами выполняются простые подстановки текста. Второй — собственно компилятор, который обрабатывает исходный код и преобразует его в код на языке ассемблера. Третий этап — ассемблер, который генерирует объектный код. И, наконец, четвертый этап — компоновщик, который собирает исполняемый файл из файлов объектного кода.
Исходная программа, подготовленная на СИ в виде текстового файла, проходит 3 этапа обработки:
1) препроцессорное преобразование текста ;
2) компиляция;
3) компоновка (редактирование связей или сборка).
Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор. Трансляция в байтовый код увеличивает скорость выполнения и уменьшает размер Java программ.
Достоинство подобного способа выполнения программ — в полной независимости байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание.
Часто к недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Данное утверждение было справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность. Этому способствовал ряд усовершенствований:
применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,
широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках,
аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).