Разбор задачи 2: уровни вычислительной системы
Как устроен хороший ответ
Для каждого компонента ответ состоит из двух частей: уровень и почему. Пояснение опирается на три вопроса:
- Это аппаратура или программа?
- Если программа — выполняется в ядре или в режиме пользователя?
- С какими сущностями работает: физическими (кадры, устройства), логическими (файлы, процессы), программами (компоновка, загрузка) или задачами пользователя?
Образцовые ответы
(a) Программа fdisk — прикладной уровень
Прикладные системы (утилита администратора). fdisk — обычный процесс в режиме пользователя. Таблицу разделов он читает и пишет через файл блочного устройства /dev/sda вызовами open, read, write, ioctl(BLKRRPART). Сам обмен с диском выполняет драйвер ядра.
Можно упомянуть, что он управляет физическим ресурсом — разметкой диска. Поэтому отметка «упр. физическими ресурсами» с пояснением тоже допустима. Но код ядра fdisk не содержит.
(b) Программа ldd — системы программирования
Системы программирования. ldd показывает, какие разделяемые библиотеки нужны программе и где их найдёт динамический загрузчик. Технически она запускает ld-linux.so с переменной LD_TRACE_LOADED_OBJECTS=1. Это понятия компоновки и загрузки программ. Как исполняемый процесс это прикладная утилита, поэтому «+ прикладной» с пояснением тоже засчитывают.
(c) Файл /proc/cpuinfo — управление логическими ресурсами
Управление логическими ресурсами. Это не файл на диске, а псевдофайл файловой системы procfs. Ядро генерирует его текст в момент read. Он доступен через VFS, как любой файл. Содержимое — сведения об аппаратуре (модель процессора, частота, флаги). Поэтому можно добавить: «отображает аппаратный уровень и данные, собранные подсистемой управления физическими ресурсами».
(d) Таблица страниц — аппаратура и управление физическими ресурсами
Уровни 1 и 2. Это структура данных в памяти. Её формат задаёт аппаратура: MMU читает её при каждом промахе TLB и сам выставляет биты A и D. Заполняет таблицу ядро — подсистема управления памятью — при страничных отказах, fork, mmap, выгрузке страниц.
(e) Инвертированная таблица страниц — управление физическими ресурсами
Уровень 2, а на некоторых архитектурах и 1. Одна запись на физический кадр: какая виртуальная страница какого процесса в нём лежит. Её размер зависит от объёма физической памяти, а не от адресных пространств. Ядро использует такие структуры для учёта кадров (в Linux — массив struct page, обратные отображения rmap). На PowerPC и IA-64 хешированную инвертированную таблицу просматривает аппаратура, отсюда «+» в уровне 1.
(f) Страничный демон — управление физическими ресурсами
Уровень 2. Поток ядра (kswapd в Linux, pagedaemon в BSD). Следит, чтобы свободных кадров было не меньше порога. Выбирает жертвы по биту доступа (алгоритм часов), грязные страницы сначала записывает на диск, затем освобождает кадры. Работает с физическими кадрами. Можно добавить уровень 3: он оперирует страницами виртуальных адресных пространств процессов и страничным кешем файлов.
(g) DNS-сервер bind — прикладной уровень
Прикладные системы. Обычная серверная программа в режиме пользователя (named). Пользуется сокетами и файлами через системные вызовы. Решает прикладную задачу: преобразование имён в адреса.
(h) Регистр cr3 — аппаратура
Аппаратура. Управляющий регистр процессора i386. Хранит физический адрес каталога страниц текущего адресного пространства, и MMU начинает с него каждый обход таблиц. Записывать в cr3 может только ядро: это привилегированная инструкция. Подсистема управления памятью перезагружает его при переключении процессов, и при этом сбрасывается TLB. Поэтому допустимо добавить уровень 2.
Шаблон фразы
«X относится к уровню N, потому что [кто выполняет: процессор / ядро / процесс пользователя] и [с чем работает]. Также связан с уровнем M, так как [кто его использует или заполняет]». Две такие фразы на каждый пункт — и задача решена полностью.
Если какой-то ответ неочевиден, повторите урок «Уровни вычислительной системы» модуля «Вычислительная система и ядро».
Практика решено 0 из 4
Задача 2 экзамена. Отметьте все уровни, к которым относится компонент.
| Аппаратура | Упр. физическими ресурсами | Упр. логическими ресурсами | Системы программирования | Прикладные системы | |
|---|---|---|---|---|---|
| (a) Программа fdisk | |||||
| (b) Программа ldd | |||||
| (c) Файл /proc/cpuinfo | |||||
| (d) Таблица страниц | |||||
| (e) Инвертированная таблица страниц | |||||
| (f) Страничный демон | |||||
| (g) DNS-сервер bind | |||||
| (h) Регистр cr3 (i386) |
Тренировка на других компонентах. Отметьте все подходящие уровни.
| Аппаратура | Упр. физическими ресурсами | Упр. логическими ресурсами | Системы программирования | Прикладные системы | |
|---|---|---|---|---|---|
| Компилятор gcc | |||||
| TLB | |||||
| Драйвер диска | |||||
| Динамический загрузчик ld-linux.so | |||||
| Веб-сервер nginx | |||||
| Таблица открытых файлов ядра | |||||
| Обработчик прерывания таймера | |||||
| Отладчик gdb |
Какое пояснение к пункту «таблица страниц» лучше всего?
Почему fdisk — прикладной уровень, хотя он работает с разделами диска?
Войдите, чтобы отмечать пройденные уроки.