Пробный экзамен

⏱ 60 мин · 🧩 заданий: 11

Как проходить

Это контрольная на новых данных: те же типы вопросов, что на экзамене, но с другими сигналами, параметрами и кодом. Так видно, поняли вы метод или запомнили ответы.

  1. Поставьте таймер на 60 минут. На настоящем экзамене задач 8, рассчитывайте примерно 10 минут на задачу.
  2. Решайте задания по порядку без возврата к урокам. Черновик для задач 7 и 8 — на бумаге.
  3. После проверки откройте пояснения и найдите урок, где разбирается тема ошибки.

Чек-лист перед экзаменом

  • 1. Сигналы: A — исключения процессора; B — Stop; C — посылают явно; D — только KILL и STOP; E — Ign; F — только RT. Спорное поясняйте.
  • 2. Уровни: кто выполняет (железо / ядро / процесс) и с чем работает. По две фразы на пункт.
  • 3. fork и потоки: task_struct, PID, копия дескрипторов, COW, 0 и PID. Потоки — clone с общими ресурсами. init — setsid, kill(-pgid), utmp.
  • 4. VFS: единый интерфейс, монтирование, таблицы операций. Поля inode — атрибуты, связи, состояние. Жёсткая ссылка — EXDEV.
  • 5. A/D: ставит MMU, читает и сбрасывает ядро. A — страничный демон (часы), D — нужно ли писать на диск.
  • 6. Пакеты: pre/post-install — то, что не описать файлами. Reinstall — восстановить файлы и перезапустить скрипты; изменённые конфиги сохраняются.
  • 7. TLB: обращения итерации → страницы (min/max) → помещаются ли в TLB → промахи × уровни + чтения указателей.
  • 8. fork + shm: нарисуйте дерево, посчитайте counter и писателей, найдите гонки и что ждёт wait. Исправление: семафоры в Mem с pshared = 1, очередь писателей, без взаимоблокировки с wait.

Разборы задач экзамена

Если в каком-то задании ошибка — откройте соответствующий урок этого модуля: «Разбор задачи 1» (сигналы), «Разбор задачи 2» (уровни), «Разбор задач 3 и 4», «Разбор задач 5 и 6», «Разбор задачи 7» (TLB) и «Разбор задачи 8» (fork и разделяемая память).

Последний совет

На экзамене почти в каждой задаче написано «ответ поясните». Короткое правильное объяснение с названными предположениями ценится выше голого числа или знака — особенно в задачах 1, 2 и 7, где в спорных местах верных ответов несколько.

Удачи на экзамене!

Практика решено 0 из 11

Вы не вошли — ответы проверяются, но прогресс не сохранится. Войти или зарегистрироваться.
Задание 1 Заполнить таблицу

1. Заполните таблицу для других сигналов.

Связан с аппаратным событиемОстанавливает процессВыставляется по инициативе программистаНельзя запретить доставкуПо умолчанию игнорируетсяНе «слипается»
SIGSEGV
SIGTSTP
SIGURG
SIGRTMAX
SIGILL
SIGQUIT
SIGTTOU
SIGWINCH
SIGUSR1
Отметьте ячейку — «+», пустая — «−».
Задание 2 Заполнить таблицу

2. Отнесите компоненты к уровням вычислительной системы.

АппаратураУпр. физическими ресурсамиУпр. логическими ресурсамиСистемы программированияПрикладные системы
MMU
Планировщик процессов ядра
Компоновщик ld
Файл /proc/self/maps
Обработчик страничного отказа
Почтовый сервер postfix
Отметьте ячейку — «+», пустая — «−».
Задание 3 Несколько вариантов

3. Что верно про fork и потоки?

Задание 4 Один вариант ответа

4. ln /mnt/usb/file.txt ~/file.txt при флешке, смонтированной в /mnt/usb, выдаёт «Invalid cross-device link». Почему?

Задание 5 Один вариант ответа

5. У страницы A = 0, D = 1. Что сделает страничный демон, выбрав её жертвой?

Задание 6 Один вариант ответа

6. Администратор случайно удалил /etc/ssh/sshd_config и сделал apt install --reinstall openssh-server. Восстановится ли файл?

Задание 7 Ввод ответа

7. Таблицы страниц 3-уровневые, страница 256 байт, TLB на 2 записи (LRU, вначале пуст). extern int *a; (указатель лежит не на страницах массива), int — 4 байта, register int i, sum;

for (i = 0; i < 100; i++) sum += a[i];

Каково минимальное число служебных обращений (обращения к таблицам страниц + чтения указателя)? (число)

Задание 8 Ввод ответа

7 (продолжение). А максимальное? (число)

Задание 9 Ввод ответа

8. Сколько процессов (включая исходный) создаст программа, если все fork успешны?

for (int i = 0; i < 3; i++)
    if (fork() == 0)
        mem->counter++;      /* mem — MAP_SHARED */
Задание 10 Заполнить таблицу

8 (продолжение). Какое значение counter может оказаться в конце (начальное 0)?

ВозможноНевозможно
7
5
8
Отметьте ячейку — «+», пустая — «−».
Задание 11 Заполнить таблицу

8 (исправление). Какие средства исправят гонку на mem->counter в этой программе?

ИсправитНе исправит
sem_t в Mem, sem_init(&mem->s, 1, 1), wait/post вокруг counter++
Глобальная переменная sem_t s с sem_init(&s, 0, 1)
__atomic_fetch_add(&mem->counter, 1, __ATOMIC_SEQ_CST)
Объявить поле volatile unsigned int counter
Мьютекс в Mem с атрибутом PTHREAD_PROCESS_SHARED
Отметьте ячейку — «+», пустая — «−».

Войдите, чтобы отмечать пройденные уроки.