CAOS-2021/Exam — различия между версиями
(→Темы для тестов по теории: СОКЕТЫ ДОБАВИЛ) |
(→Примеры тестов: скоринг) |
||
(не показана одна промежуточная версия этого же участника) | |||
Строка 32: | Строка 32: | ||
СОКЕТЫ. IP, IPv6, TCP, UDP, потоковые и датаграммные сокеты, активные (connect) и пассивные (bind/listen/accept) сокеты. | СОКЕТЫ. IP, IPv6, TCP, UDP, потоковые и датаграммные сокеты, активные (connect) и пассивные (bind/listen/accept) сокеты. | ||
+ | |||
+ | === Примеры тестов === | ||
+ | # Что из перечисленного копируется во время выполнения системного вызова fork() (используется ядро Linux на процессоре x86)? | ||
+ | ## таблица файловых дескрипторов | ||
+ | ## идентификатор родительского процесса (ppid) | ||
+ | ## отображения виртуальной памяти | ||
+ | ## маска заблокированных сигналов | ||
+ | ## маска сигналов, ожидающих доставки (pending) | ||
+ | ## физическая память, отображённая как MAP_SHARED | ||
+ | ## физическая память, отображённая как MAP_PRIVATE | ||
+ | # Какие из утверждений про сигналы верны? | ||
+ | ## несколько сигналов SIGINT, пришедших последовательно, могут быть объединены в один и доставлены один раз; | ||
+ | ## сигнал SIGTERM невозможно заблокировать; | ||
+ | ## обработчик сигнала должен быть реентерабельной функцией; | ||
+ | ## процесс может отправить сигнал самому себе; | ||
+ | ## если отправленный сигнал заблокирован процессом-получателем, то он теряется; | ||
+ | ## для передачи данных между обработчиком сигнала и основной программой следует использовать переменные, аннотированные как _Atomic; | ||
+ | ## если обработчик сигнала установлен с флагом SA_RESTART, то системные вызовы read, write, sleep, connect и другие подобные продолжат обрабатываться после того, как выполнится обработчик сигнала. | ||
+ | |||
+ | Баллы за тест начисляются в зависимости от количества пунктов в тесте и правильных ответов: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Пунктов в тесте !! 4 правильных !! 5 !! 6 !! 7 !! 8 !! 9 | ||
+ | |- | ||
+ | | 6 || 20 баллов || 60 || 100 || || | ||
+ | |- | ||
+ | | 7 || 10 || 40 || 70 || 100 || || | ||
+ | |- | ||
+ | | 8 || 0 || 20 || 40 || 70 || 100 || | ||
+ | |- | ||
+ | | 9 || 0 || 10 || 20 || 40 || 70 || 100 | ||
+ | |||
+ | |} | ||
+ | |||
+ | Например, в вопросах выше по 7 пунктов, и если в любом из них правильно ответить на 5 пунктов, это принесёт 40 баллов. Ответы "везде да" и "везде нет" всегда оцениваются в 0 баллов. |
Текущая версия на 15:41, 15 июня 2022
Темы для тестов по теории
Язык ассемблера x86-32. Инструкции, регистры, стек, соглашения о вызовах.
Числа с плавающей точкой. IEEE 754, float/double/long double, представление в памяти, класификация чисел с плавающей точкой, операции над ними.
Виртуальная память. MMU, page fault, таблица страниц, TLB, mmap.
Иерархия физической памяти: регистры, кэши, оперативная память. SRAM, DRAM.
Ядро ОС. Функции ядра, системные вызовы.
Процессы. PID, fork, таблица файловых дескрипторов, адресное пространство процесса.
Файлы и файловые дескрипторы. open/close/dup/…, file descriptions, позиция чтения-записи.
Файловая система. Структура директорий, имена файлов, dentry, inode, жёсткие и символические ссылки.
Каналы. Неименованные каналы (pipe), именованные каналы (FIFO), поведение операций чтения и записи над каналами.
Сигналы. Обработчики сигналов, стандартные действия (dispositions), маски заблокированных и ожидающих доставки сигналов, поведение при fork/exec.
Работа с общей памятью. Синхронизация, модели памяти, data races, атомики, спинлоки, мьютексы, условные переменные.
Треды. Создание и завершение тредов в POSIX threads.
Стандартная библиотека языка Си. Stdio (printf/scanf/fopen/…, буферизация потоков ввода-вывода), аллокатор (malloc/free/realloc).
Стадии сборки программы на языке Си: препроцессирование, трансляция в ассемблер, ассемблирование, компоновка. Формат ELF, стандартные секции .text и .data.
Загрузка программ на исполнение. Статическая и динамическая компоновка, разделяемые библиотеки, перемещаемый код (PIC). Динамический загрузчик.
СОКЕТЫ. IP, IPv6, TCP, UDP, потоковые и датаграммные сокеты, активные (connect) и пассивные (bind/listen/accept) сокеты.
Примеры тестов
- Что из перечисленного копируется во время выполнения системного вызова fork() (используется ядро Linux на процессоре x86)?
- таблица файловых дескрипторов
- идентификатор родительского процесса (ppid)
- отображения виртуальной памяти
- маска заблокированных сигналов
- маска сигналов, ожидающих доставки (pending)
- физическая память, отображённая как MAP_SHARED
- физическая память, отображённая как MAP_PRIVATE
- Какие из утверждений про сигналы верны?
- несколько сигналов SIGINT, пришедших последовательно, могут быть объединены в один и доставлены один раз;
- сигнал SIGTERM невозможно заблокировать;
- обработчик сигнала должен быть реентерабельной функцией;
- процесс может отправить сигнал самому себе;
- если отправленный сигнал заблокирован процессом-получателем, то он теряется;
- для передачи данных между обработчиком сигнала и основной программой следует использовать переменные, аннотированные как _Atomic;
- если обработчик сигнала установлен с флагом SA_RESTART, то системные вызовы read, write, sleep, connect и другие подобные продолжат обрабатываться после того, как выполнится обработчик сигнала.
Баллы за тест начисляются в зависимости от количества пунктов в тесте и правильных ответов:
Пунктов в тесте | 4 правильных | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|
6 | 20 баллов | 60 | 100 | |||
7 | 10 | 40 | 70 | 100 | ||
8 | 0 | 20 | 40 | 70 | 100 | |
9 | 0 | 10 | 20 | 40 | 70 | 100 |
Например, в вопросах выше по 7 пунктов, и если в любом из них правильно ответить на 5 пунктов, это принесёт 40 баллов. Ответы "везде да" и "везде нет" всегда оцениваются в 0 баллов.