- •Расшифруйте понятия “протокол”, “интерфейс”. В чем разница между ними? какие основные виды интерфейсов существуют у компьютерных программ согласно стандарта 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 подхода к передаче данных в ней. Какие уровни интернет-стека участвуют в организации распределенного взаимодействия в ней?
-
Что такое конвейер (pipe)? что такое именованный конвейер? охарактеризуйте их. Как эти объекты можно использовать для взаимодействия программ (приведите несколько примеров)?
Конвейер в терминологии UNIX — некоторое множество процессов, для которых выполнено следующее перенаправление ввода-вывода: то, что выводит на поток стандартного вывода предыдущий процесс, попадает в поток стандартного ввода следующего процесса. Запуск конвейера реализован с помощью системного вызова pipe().
Пример запуска конвейера:
$ ps aux | grep kde | grep -v grep | gawk '{ print $2}'
Данная команда выведет номера процессов, в названии которых встречается подстрока «kde»
В программировании именованный канал или именованный конвейер (англ. named pipe) — расширение понятия конвейера в Unix и подобных ОС, один из методов межпроцессного взаимодействия. Это понятие также существует и в Microsoft Windows, хотя там его семантика существенно отличается. Традиционный канал — «безымянен», потому что существует анонимно и только во время выполнения процесса. Именованный канал — существует в системе и после завершения процесса. Он должен быть «отсоединён» или удалён когда уже не используется. Процессы обычно подсоединяются к каналу для осуществления взаимодействия между процессами.Содержание [убрать]
Именованные каналы в Unix
Вместо традиционного, безымянного конвейера оболочки (англ. shell pipeline), именованный канал создаётся явно с помощью mknod или mkfifo, и два различных процесса могут обратиться к нему по имени.
Например, можно создать канал и настроить gzip на сжатие того, что туда попадает:
mkfifo pipe
gzip -9 -c < pipe > out
Параллельно, в другом процессе можно выполнить:
cat file > pipe
что приведёт к сжатию передаваемых данных gzip-ом.
Как устроен конвейер --хз
-
ОБЪЯСНИТЕ РАЗНИЦУ МЕЖДУ ВЗАИМОДЕЙСТВИЕМ ПРОГРАММ С ПОМОЩЬЮ РАЗДЕЛЯЕМОЙ ПАМЯТИ И ОБМЕНА СООБЩЕНИЯМИ. ОПИШИТЕ ПРЕИМУЩЕСТВА И НЕДОСТАТКИ ОБОИХ ВАРИАНТОВ. В КАКИХ СЛУЧАЯХ ПРЕДПОЧТИТЕЛЬНО ИСПОЛЬЗОВАНИЕ КАЖДОГО ИЗ НИХ (ПРИВЕДИТЕ НЕСКОЛЬКО ПРИМЕРОВ)?
MPI—все процессы работают в своем адресном пространстве. Обмен данными за счет интерфейсов
STM—процессы в одном адресном пространстве, существует возможность объединения некоторых последовательностей инструкций в атомарный блок, который либо исполняется полностью либо не исполняется вообще.
MPI хорош тем, что полностью избавляет от проблем, связанных с мертвыми блокировками, а плох тем, что на программиста ложится ответсвтенность за обеспечение передачи сообещений между процессами.
STM также избавляет от мертвых блокировок, но в этом случае платой являются накладные расходы на обеспечение транзакций.
MPI хорошо применять в кластерных системах, т. к. в этом случае парадигма раздельных адресных пространств процессов хорошо согласуется с архитектурой распределенной памяти.
STM широко применяется в базах данных
-
Что такое фрагментация? какие виды фрагментации бывают? какие виды фрагментации проявляются в каждой из 3 основных схем размещения файлов?
Фрагмента́ция — процесс дробления чего-либо на множество мелких разрозненных фрагментов.
Фрагментация данных
Возникает в результате фрагментации дискового пространства: так как на диске отсутствуют последовательные свободные блоки, то новые файлы невозможно записать целиком в одном месте, их приходится делить на фрагменты и записывать в разных частях диска, что замедляет чтение этих файлов и снижает общую производительность файловой системы. Более того: во многих файловых системах (например FAT32) начало файла записывается в начало кластера, следовательно, если сам файл или его часть по объёму меньше размера кластера, то оставшееся место в кластере остается неиспользованным. Поэтому фрагментированность диска обратно пропорциональна эффективности использования его пространства.
Виды фрагментации:
1) фрагмент6ация отдельных файлов -- большой файл занимает блоки, разбросанные по файловой системе;
2) фрагментация связанных файлов -- файлы, читающиеся вместе, разбросаны по файловой системе;
3) фрагментация свободного места -- свободные блоки разбросаны по файловой системе.
Для решения проблемы фрагментации используют утилиты-дефрагментаторы.
Способы размещения файлов на винчестере:
-
Непрерывное размещение. Этому типу размещения не свойственна фрагментация файлов, т.к. каждый файл по определению записывается подряд, зато при уменьшении размеров файлов начинает в значительной степени проявляться фрагментация свободного пространства. Также в некоторой степени такому типу организации файловой системы свойственна фрагментация связанных файлов
-
Список блоков. При данном способе организации файловой системы характерно фрагментация отдельных файлов(отдельные блоки файлов разбросаны как угодно, они лишь связаны в список). Данная организация позволяет избежать фрагментации свободного места
-
Перечь блоков в i-node. Аналогичными свойствами обладает i-node
-
КАКОЙ МАКСИМАЛЬНЫЙ АДРЕСУЕМЫЙ ОБЪЕМ ПАМЯТИ ДЛЯ ПРОГРАММЫ НА 32-РАЗРЯДНОЙ АРХИТЕКТУРЕ? ПОЧЕМУ ОБЪЕМ ДОСТУПНОЙ ВИРТУАЛЬНОЙ ПАМЯТИ МЕНЬШЕ МАКСИМАЛЬНОГО (КУДА ДЕВАЕТСЯ РАЗНИЦА)? НА КАКИЕ ОСНОВНЫЕ ЧАСТИ ДЕЛИТСЯ ПАМЯТЬ РАБОТАЮЩЕЙ ПРОГРАММЫ? КАК ЭТО СООТНОСИТСЯ С ФОРМАТАМИ ИСПОЛНЯЕМЫХ ФАЙЛОВ?
Максимум 2^32 бит. Реально доступно меньше
Такое поведение является закономерным результатом влияния определенных аппаратных и программных факторов.
Различным устройствам типичного компьютера требуется доступ через отображаемую память. Этот механизм называется MMIO. Чтобы пространство MMIO было доступно 32-разрядным операционным системам, оно должно располагаться в первых 4 ГБ адресного пространства.
Например, при наличии видеоадаптера с 256 МБ собственной памяти эта память должна отображаться в первые 4 ГБ адресного пространства. Если на компьютере уже установлено 4 ГБ системной памяти, часть адресного пространства должна быть зарезервирована для отображения памяти видеоадаптера. Для отображения памяти видеоадаптера используется часть системной памяти. В результате общий объем системной памяти, доступной операционной системе, сокращается.
То, насколько сократится объем доступной системной памяти, зависит от установленных на компьютере устройств.
Если на компьютере установлено много устройств, объем доступной памяти может составить 3 ГБ или меньше. Однако максимально возможный объем доступной памяти в 32-разрядных версиях Windows Vista обычно составляет 3,12 ГБ.
Memory-mapped I/O (MMIO) and port I/O (also called port-mapped I/O (PMIO) or isolated I/O) are two complementary methods of performing input/output between the CPU and peripheral devices in a computer. Another method, not discussed in this article, is using dedicated I/O processors — commonly known as channels on mainframe computers — that execute their own instructions.
Memory-mapped I/O (not to be confused with memory-mapped file I/O) uses the same address bus to address both memory and I/O devices, and the CPU instructions used to access the memory are also used for accessing devices. In order to accommodate the I/O devices, areas of the CPU's addressable space must be reserved for I/O. The reservation might be temporary — the Commodore 64 could bank switch between its I/O devices and regular memory — or permanent. Each I/O device monitors the CPU's address bus and responds to any of the CPU's access of address space assigned to that device, connecting the data bus to a desirable device's hardware register.
На какие части делится память работающей программы
В общем случае оперативная память, с которой работает программа, подразделяется на три вида: статическую, автоматическую и динамическую.
Статическая память — это область памяти, выделяемая при запуске программы до вызова функции main из свободной оперативной памяти для размещения глобальных и статических объектов, а также объектов, определённых в пространствах имён.
Объект называют глобальным, если он определён вне функции, класса или пространства имён. Объект, определённый с использованием ключевого слова static, называют статическим.
Глобальные объекты, а также объекты, определённые в пространствах имён или статически в классах, размещаются в памяти (конструируются) до вызова функции main, а разрушаются после завершения работы этой функции.
Пространства имён — это способ разделения программы на логические составляющие; механизм ограничения области видимости имён.
Автоматическая память — это специальный регион памяти, резервируемый при запуске программы до вызова функции main из свободной оперативной памяти и используемый в дальнейшем для размещения локальных объектов: объектов, определяемых в теле функций и получаемых функциями через параметры в момент вызова. Автоматическую память часто называют стеком.
Динамическая память — это совокупность блоков памяти, выделяемых из доступной свободной оперативной памяти непосредственно во время выполнения программы под размещение конкретных объектов.
Как соотносятся распределение программы в оперативной памяти с форматами исполняемых файлов?