Все тесты предмета

Ответы на тесты Системное программирование.кс_СПО

Вопросы и варианты доступны бесплатно. 15 ответов доступны бесплатно — откройте их кнопкой ниже. Полный набор — в личном кабинете на 7 дней.

50 вопросов 1 тест в одном предмете Доступ 7 дней
Содержание предмета

Бесплатные ответы на тесты по предмету «Системное программирование» — Синергия и МТИ

Вопрос 1Ответ открыт бесплатно

Какая последовательность наиболее корректно описывает полный путь C-программы от исходного файла до исполняемого файла в Linux?

  1. компилятор → препроцессор → линкер → ассемблер
  2. препроцессор → компилятор → ассемблер → линкер✓ Правильный ответ
  3. линкер → препроцессор → компилятор → ассемблер
  4. ассемблер → компилятор → препроцессор → линкер
✓ Правильный ответ

препроцессор → компилятор → ассемблер → линкер

Вопрос 2

Что означает использование ключа `-c` при вызове `gcc`?

  1. программа компилируется и сразу запускается
  2. создаётся исполняемый файл без объектных файлов
  3. создаётся объектный файл, но этап линковки не выполняется
  4. создаётся только препроцессированный текст без машинного кода
Вопрос 3

Почему при линковке C-программы порядок объектных файлов и библиотек может иметь значение?

  1. потому что компилятор читает только первый файл в команде
  2. потому что библиотеки обычно должны идти после объектных файлов, которые на них ссылаются
  3. потому что Linux запрещает указывать библиотеки после ключа `-o`
  4. потому что объектные файлы всегда должны идти после всех библиотек
Вопрос 4

Что представляет собой статическая библиотека `.a` в типичной сборке Linux?

  1. исполняемый файл, запускаемый динамическим загрузчиком
  2. архив объектных файлов, обычно создаваемый утилитой `ar`
  3. текстовый список зависимостей проекта
  4. специальный файл окружения для `gcc`
Вопрос 5

Какое утверждение о shared-библиотеке `.so` является наиболее точным?

  1. её код всегда полностью копируется в исполняемый файл на этапе компиляции
  2. она является объектом, который может подгружаться динамическим загрузчиком при запуске программы
  3. она используется только для хранения заголовочных файлов
  4. она создаётся исключительно командой `make clean`
Вопрос 6Ответ открыт бесплатно

Если одновременно доступны `libname.a` и `libname.so`, что обычно выберет GCC/линкер без явного указания статической сборки?

  1. всегда статическую библиотеку `.a`
  2. динамическую библиотеку `.so`✓ Правильный ответ
  3. ни одну библиотеку, пока не будет указан полный путь
  4. случайную библиотеку в зависимости от размера файла
✓ Правильный ответ

динамическую библиотеку `.so`

Вопрос 7

Для чего чаще всего используют команду `ldd` применительно к уже собранному бинарному файлу?

  1. чтобы посмотреть динамические зависимости исполняемого файла
  2. чтобы удалить неиспользуемые объектные файлы
  3. чтобы преобразовать `.so` в `.a`
  4. чтобы заменить исходный код на машинный
Вопрос 8

Зачем при сборке shared-библиотеки часто используют ключ `-fPIC`?

  1. чтобы запретить программе пользоваться динамическим линкером
  2. чтобы получить позиционно-независимый код, подходящий для shared object
  3. чтобы автоматически создать Makefile
  4. чтобы удалить символы отладки из исходного файла
Вопрос 9

Что означает передача параметров линкеру через конструкцию вида `-Wl,...`?

  1. `gcc` передаёт указанные параметры непосредственно линкеру
  2. `gcc` воспринимает эти параметры как комментарии
  3. параметры применяются только к препроцессору
  4. параметры используются только при запуске программы, но не при сборке
Вопрос 10Ответ открыт бесплатно

Какую задачу решает `rpath/runpath` при работе с shared-библиотеками?

  1. сообщает компилятору, какие строки исходного файла пропустить
  2. позволяет встроить в бинарный файл информацию о путях поиска `.so`✓ Правильный ответ
  3. преобразует динамическую библиотеку в статическую
  4. запрещает динамическому линкеру искать зависимости
✓ Правильный ответ

позволяет встроить в бинарный файл информацию о путях поиска `.so`

Вопрос 11

В чём основной смысл использования `Makefile` в учебном проекте сборки?

  1. Makefile всегда заменяет компилятор GCC
  2. Makefile делает сборку воспроизводимой и позволяет пересобирать только изменившиеся части
  3. Makefile нужен только для запуска уже готовой программы
  4. Makefile используется только для редактирования файлов в `nano`
Вопрос 12

Что означает автоматическая переменная `$@` в типичном правиле Makefile?

  1. имя текущей цели правила
  2. имя первого зависимого файла
  3. список всех переменных окружения
  4. код завершения последней команды shell
Вопрос 13Ответ открыт бесплатно

Какой вариант наиболее правильно раскрывает различие между `man 2 open` и `man 3 printf`?

  1. `man 2 open` относится к системному вызову, а `man 3 printf` — к библиотечной функции✓ Правильный ответ
  2. `man 2 open` открывает редактор, а `man 3 printf` запускает компилятор
  3. оба варианта показывают одну и ту же страницу справки
  4. `man 2` используется только для команд shell, а `man 3` — только для драйверов
✓ Правильный ответ

`man 2 open` относится к системному вызову, а `man 3 printf` — к библиотечной функции

Вопрос 14

Что такое окружение процесса в Linux?

  1. набор открытых файлов, доступных только ядру
  2. массив строк вида `NAME=VALUE`, передаваемый процессу при запуске
  3. список всех пользователей системы
  4. двоичный файл, который создаётся после линковки
Вопрос 15

Что делает команда или встроенная функция shell `export`?

  1. удаляет переменную из памяти родительского процесса
  2. помечает переменную так, чтобы она попала в окружение запускаемых далее команд
  3. автоматически записывает переменную в исходный код программы
  4. делает переменную доступной ядру как системный вызов
Вопрос 16Ответ открыт бесплатно

Как ведёт себя окружение при `fork()`?

  1. дочерний процесс наследует копию окружения родительского процесса✓ Правильный ответ
  2. дочерний процесс всегда получает пустое окружение
  3. окружение родителя полностью переносится в ядро и удаляется из процесса
  4. `fork()` запрещён, если в окружении есть пользовательские переменные
✓ Правильный ответ

дочерний процесс наследует копию окружения родительского процесса

Вопрос 17

Что наиболее точно описывает роль файлового дескриптора в Linux?

  1. это имя файла, сохранённое в каталоге
  2. это маленькое неотрицательное число, через которое процесс обращается к открытому файлу или каналу
  3. это адрес функции в shared-библиотеке
  4. это номер строки в Makefile
Вопрос 18

Когда аргумент `mode` в вызове `open(path, flags, mode)` имеет практический смысл?

  1. только при использовании флага `O_CREAT`
  2. только при чтении из уже существующего файла
  3. всегда, независимо от флагов
  4. только при закрытии файла через `close()`
Вопрос 19

Что означает возвращаемое значение `0` у `read()` при чтении обычного файла?

  1. произошла ошибка доступа
  2. файл был успешно удалён
  3. достигнут конец файла
  4. ядро автоматически повторит чтение
Вопрос 20Ответ открыт бесплатно

Почему при использовании `write()` нельзя всегда считать, что все байты были записаны за один вызов?

  1. `write()` в Linux никогда не записывает больше одного байта
  2. возможна частичная запись, поэтому оставшиеся данные нужно дозаписывать в цикле✓ Правильный ответ
  3. `write()` используется только для каталогов
  4. `write()` всегда завершает процесс после первой записи
✓ Правильный ответ

возможна частичная запись, поэтому оставшиеся данные нужно дозаписывать в цикле

Вопрос 21

Для каких объектов `lseek()` неприменим в обычном смысле изменения позиции чтения/записи?

  1. для обычных файлов на диске
  2. для файлов, открытых только на чтение
  3. для pipe, FIFO и socket
  4. для файлов, созданных через `O_CREAT`
Вопрос 22

Для чего в учебной программе-копировщике используется `perror()`?

  1. чтобы вывести текстовое описание ошибки на основе текущего `errno`
  2. чтобы автоматически исправить ошибку чтения
  3. чтобы заменить системный вызов `read()`
  4. чтобы очистить содержимое файла назначения
Вопрос 23Ответ открыт бесплатно

Какое утверждение лучше всего объясняет роль каталога в файловой системе Linux?

  1. каталог — это обычная строковая переменная shell
  2. каталог хранит соответствие между именем файла и индексным дескриптором✓ Правильный ответ
  3. каталог всегда содержит только текстовые файлы
  4. каталог является копией всех данных файлов внутри него
✓ Правильный ответ

каталог хранит соответствие между именем файла и индексным дескриптором

Вопрос 24

Что такое inode в контексте файловой системы Linux?

  1. только пользовательское имя файла
  2. объект метаданных файла, связанный с содержимым, правами, владельцем, размером и другими свойствами
  3. команда для создания shared-библиотеки
  4. переменная окружения, отвечающая за поиск `.so`
Вопрос 25

Чем символическая ссылка принципиально отличается от жёсткой ссылки?

  1. символическая ссылка содержит путь к другому файлу, а жёсткая ссылка является ещё одним именем того же inode
  2. символическая ссылка всегда больше исходного файла, а жёсткая всегда меньше
  3. символическая ссылка создаётся только для каталогов, а жёсткая — только для устройств
  4. между ними нет различий на уровне файловой системы
Вопрос 26Ответ открыт бесплатно

Что показывает первый символ в выводе `ls -l`?

  1. размер файла в байтах
  2. тип объекта файловой системы✓ Правильный ответ
  3. номер процесса, который открыл файл
  4. количество строк в файле
✓ Правильный ответ

тип объекта файловой системы

Вопрос 27

Какой первый символ в `ls -l` обычно соответствует каталогу?

  1. `-`
  2. `d`
  3. `l`
  4. `p`
Вопрос 28

Какое утверждение о правах доступа к каталогу в Linux является наиболее корректным?

  1. право `x` для каталога связано с возможностью проходить через каталог и обращаться к объектам внутри него
  2. право `x` для каталога всегда означает запуск каталога как программы
  3. право `r` для каталога автоматически разрешает удалять любые файлы внутри него
  4. права доступа к каталогам в Linux не проверяются
Вопрос 29

Что представляет собой файловая система `/proc`?

  1. обычный каталог с резервными копиями пользовательских файлов
  2. виртуальную файловую систему, через которую можно получать сведения о процессах и состоянии системы
  3. архив статических библиотек ядра
  4. каталог, который существует только после запуска компилятора
Вопрос 30Ответ открыт бесплатно

Что характерно для разреженного файла?

  1. он не может иметь логический размер больше физически занятых блоков
  2. он может содержать «дыры», которые логически читаются как нули и не занимают соответствующий объём на диске✓ Правильный ответ
  3. он всегда является символьной ссылкой
  4. он создаётся только в оперативной памяти и не связан с файловой системой
✓ Правильный ответ

он может содержать «дыры», которые логически читаются как нули и не занимают соответствующий объём на диске

Вопрос 31

Для чего применяются блокировки областей файла?

  1. чтобы запретить компилятору собирать программу
  2. чтобы координировать доступ процессов к определённым участкам файла
  3. чтобы преобразовать inode в имя файла
  4. чтобы заменить механизм прав доступа `rwx`
Вопрос 32

В каком случае неименованный канал `pipe` подходит лучше всего?

  1. когда нужно связать потоки внутри одного процесса без участия ядра
  2. когда нужно организовать потоковую передачу данных между родственными процессами, например после `fork()`
  3. когда нужно сохранить сообщения в каталоге `/proc`
  4. когда требуется заменить все shared-библиотеки статическими
Вопрос 33Ответ открыт бесплатно

Какое событие обычно приводит к `SIGPIPE` при работе с каналом или сокетом?

  1. успешное чтение всех данных из файла
  2. запись в канал или сокет, у которого больше нет читателя✓ Правильный ответ
  3. создание нового inode
  4. вызов `make clean`
✓ Правильный ответ

запись в канал или сокет, у которого больше нет читателя

Вопрос 34

Чем FIFO отличается от обычного неименованного `pipe`?

  1. FIFO имеет имя в файловой системе и может использоваться неродственными процессами
  2. FIFO не относится к механизмам IPC
  3. FIFO всегда хранит данные на диске навсегда
  4. FIFO работает только внутри одного потока
Вопрос 35

Почему очередь сообщений может быть предпочтительнее простого байтового канала?

  1. потому что она запрещает нескольким процессам обмениваться данными
  2. потому что она позволяет работать с сообщениями как с отдельными единицами, а не только с непрерывным потоком байтов
  3. потому что она автоматически компилирует C-код
  4. потому что она используется только для удаления файлов
Вопрос 36Ответ открыт бесплатно

Какое утверждение о сигналах в многопоточной программе Linux является наиболее точным?

  1. disposition сигнала является свойством процесса, а маска сигналов — свойством конкретного потока✓ Правильный ответ
  2. disposition сигнала является свойством файла, а маска сигналов — свойством каталога
  3. каждый поток имеет полностью независимую таблицу обработчиков сигналов
  4. маска сигналов всегда одинакова для всех процессов системы
✓ Правильный ответ

disposition сигнала является свойством процесса, а маска сигналов — свойством конкретного потока

Вопрос 37

Что означает утверждение, что стандартные сигналы обычно не очередятся?

  1. если один и тот же стандартный сигнал несколько раз пришёл в заблокированном состоянии, после разблокировки обычно фиксируется один факт доставки
  2. стандартные сигналы вообще никогда не доставляются процессу
  3. каждый стандартный сигнал обязательно хранится с точным счётчиком повторов
  4. стандартные сигналы можно использовать только в драйверах ядра
Вопрос 38

Какие сигналы нельзя поймать, заблокировать или проигнорировать?

  1. `SIGINT` и `SIGTERM`
  2. `SIGKILL` и `SIGSTOP`
  3. `SIGUSR1` и `SIGUSR2`
  4. `SIGALRM` и `SIGPIPE`
Вопрос 39

Почему для нового кода предпочтительнее использовать `sigaction()`, а не `signal()`?

  1. `sigaction()` даёт более предсказуемое и расширяемое управление обработкой сигналов
  2. `sigaction()` полностью запрещает доставку сигналов процессу
  3. `signal()` работает только с файлами, а не с процессами
  4. `sigaction()` нужен только для сборки shared-библиотек
Вопрос 40Ответ открыт бесплатно

Какой подход к обработчику сигнала считается наиболее безопасным для начинающего системного программиста?

  1. выполнять в обработчике всю логику программы, включая ввод-вывод и выделение памяти
  2. в обработчике ограничиться простым действием, например установкой флага, а основную работу выполнить в обычном коде✓ Правильный ответ
  3. запускать из обработчика `gcc` для пересборки программы
  4. всегда вызывать `printf()` из обработчика без ограничений
✓ Правильный ответ

в обработчике ограничиться простым действием, например установкой флага, а основную работу выполнить в обычном коде

Вопрос 41

Какой режим `sigprocmask()` полностью заменяет текущую маску сигналов новой маской?

  1. `SIG_BLOCK`
  2. `SIG_UNBLOCK`
  3. `SIG_SETMASK`
  4. `SIG_REPLACE_ONLY`
Вопрос 42

Почему связка `sigprocmask()` + `sigsuspend()` важна при ожидании сигнала?

  1. она позволяет ждать сигнал без гонки между проверкой условия и засыпанием процесса
  2. она полностью отключает планировщик Linux
  3. она создаёт новый дочерний процесс
  4. она заменяет `fork()` и `exec()`
Вопрос 43Ответ открыт бесплатно

Что происходит после успешного вызова `fork()`?

  1. родительский процесс исчезает, а дочерний продолжает работу один
  2. родитель и дочерний процесс продолжают выполнение со следующей строки, но имеют разные PID и разные адресные пространства✓ Правильный ответ
  3. код программы автоматически заменяется другой программой
  4. создаётся новый поток в том же адресном пространстве без нового процесса
✓ Правильный ответ

родитель и дочерний процесс продолжают выполнение со следующей строки, но имеют разные PID и разные адресные пространства

Вопрос 44

Какое возвращаемое значение `fork()` получает дочерний процесс?

  1. `0`
  2. PID родительского процесса
  3. `-1` при любом успешном создании
  4. дескриптор исполняемого файла
Вопрос 45

Что делает успешный вызов семейства `exec`?

  1. создаёт второй процесс, полностью копируя память родителя
  2. заменяет образ текущего процесса новой программой и при успехе обычно не возвращается в старый код
  3. только добавляет новую переменную окружения
  4. завершает только дочерние потоки, не затрагивая программу
Вопрос 46Ответ открыт бесплатно

Почему родительскому процессу обычно нужно вызывать `wait()` или `waitpid()` после завершения дочернего процесса?

  1. чтобы собрать статус завершения ребёнка и не оставить зомби-процесс✓ Правильный ответ
  2. чтобы повторно выполнить препроцессор
  3. чтобы превратить дочерний процесс в поток
  4. чтобы автоматически создать FIFO
✓ Правильный ответ

чтобы собрать статус завершения ребёнка и не оставить зомби-процесс

Вопрос 47

Чем поток принципиально отличается от отдельного процесса в рассматриваемой модели?

  1. поток обычно выполняется в адресном пространстве своего процесса, а отдельный процесс имеет собственное адресное пространство
  2. поток всегда имеет собственную независимую файловую систему
  3. поток нельзя планировать операционной системой
  4. поток не может выполнять функции на языке C
Вопрос 48

Что делает `pthread_join()`?

  1. запускает новый процесс через `execve()`
  2. ожидает завершения указанного потока и позволяет получить его результат завершения
  3. немедленно уничтожает весь процесс
  4. блокирует все сигналы в системе
Вопрос 49

Зачем при работе с разделяемыми данными между потоками используют mutex?

  1. чтобы исключить одновременный некорректный доступ к критической секции
  2. чтобы заменить объектные файлы `.o`
  3. чтобы автоматически преобразовать поток в процесс
  4. чтобы запретить системные вызовы `read()` и `write()`
Вопрос 50Ответ открыт бесплатно

Какое утверждение наиболее точно связывает `mmap()`, модули ядра и драйверы в общей логике системного программирования Linux?

  1. `mmap()` всегда используется только внутри драйверов и не доступен пользовательским программам
  2. `mmap()` связывает виртуальную память процесса с файлом или областью памяти, а модули и драйверы встраиваются в ядро через специальные точки входа вроде `module_init()` и `module_exit()`, не имея обычной функции `main()`✓ Правильный ответ
  3. модули ядра собираются как обычные пользовательские программы и запускаются командой `./module`
  4. драйвер устройства — это только текстовый файл в `/proc`, не связанный с файловой моделью Linux
✓ Правильный ответ

`mmap()` связывает виртуальную память процесса с файлом или областью памяти, а модули и драйверы встраиваются в ядро через специальные точки входа вроде `module_init()` и `module_exit()`, не имея обычной функции `main()`

О материалах и доступе

Что входит в набор «Системное программирование.кс_СПО»?

50 вопросов с вариантами из опубликованных тестов (1). Сверьте формулировки и варианты с вашим заданием перед покупкой: разные программы могут содержать разные вопросы.

Какие ответы можно посмотреть бесплатно?

Нажмите «Показать ответы бесплатно»: после завершения индикатора откроется бесплатная часть ответов. Бесплатные ответы отмечены зелёным. При нескольких правильных вариантах отмечены все варианты из ключа ответа. Остальные ответы доступны после покупки.

Как получить полный доступ?

Стоимость — 2 499 ₽. Войдите в личный кабинет и оплатите выбранный предмет. Доступ действует 7 дней; подписки и автоматических списаний нет.

Что делать, если обнаружена ошибка?

Напишите нам и пришлите номер заказа, формулировку вопроса и подтверждение ошибки. Гарантия: 1 ошибка — вернём деньги.

Связаться с АртемХелп · Условия покупки · Политика конфиденциальности