CAOS-2021/Exam

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск

Темы для тестов по теории

Язык ассемблера 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) сокеты.

Примеры тестов

  1. Что из перечисленного копируется во время выполнения системного вызова fork() (используется ядро Linux на процессоре x86)?
    1. таблица файловых дескрипторов
    2. идентификатор родительского процесса (ppid)
    3. отображения виртуальной памяти
    4. маска заблокированных сигналов
    5. маска сигналов, ожидающих доставки (pending)
    6. физическая память, отображённая как MAP_SHARED
    7. физическая память, отображённая как MAP_PRIVATE
  2. Какие из утверждений про сигналы верны?
    1. несколько сигналов SIGINT, пришедших последовательно, могут быть объединены в один и доставлены один раз;
    2. сигнал SIGTERM невозможно заблокировать;
    3. обработчик сигнала должен быть реентерабельной функцией;
    4. процесс может отправить сигнал самому себе;
    5. если отправленный сигнал заблокирован процессом-получателем, то он теряется;
    6. для передачи данных между обработчиком сигнала и основной программой следует использовать переменные, аннотированные как _Atomic;
    7. если обработчик сигнала установлен с флагом 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 баллов.