Операционные Системы и их компоненты
Эта глава посвящена в первую очередь терминологии.
Ядро операционной системы
В процессе написания
Пользовательский интерфейс
В процессе написания
Дерево файлов
Обычно современные ОС представляют «содержимое» компьютера как ориентированный граф, традиционно называемый деревом файлов (хотя деревом, строго говоря, он никогда не является).
Рёбра в дереве файлов бывают двух типов: файлы и папки (папки также называют каталогами и директориями). С точки зрения теории графов файлы от папок отличаются только тем, что из концов файлов не выходят рёбра. С точки зрения ОС папки служат только для создания иерархической структуры, а вот файлы (а точнее, их концы) отождествляются с какими-то участками памяти компьютера, какими-то функциями ядра ОС или даже с какими-то запущенными процессами.
Один из специальных видов файлов, поддерживаемый почти всеми ОС, — мягкие ссылки или ярлыки. Такие файлы отождествляются с воображаемыми рёбрами дерева файлов, и ОС пытается делать вид, что эти рёбра почти равноправны с настоящими.
У каждого ребра дерева файлов есть название, под большинством ОС
регистрозависимое (особая ситуация с Windows: названия регистрозависимы,
но почти все функции ядра считают их регистронезависимыми). Название .
традиционно зарезервировано под папку-петлю (начало совпадает с концом);
такая папка есть в каждой вершине, не являющейся концом файла.
Для удобства навигации по дереву файлов в каждой его связной компоненте
обычно выделяется вершина-корень; при этом их всех вершин, не являющихся концами
файлов, выпускается папка ..
, получающаяся разворотом какого-нибудь из
рёбер (обычно отличных от .
), входящих в эту вершину.
При этом для корня есть дополнительные ограничения: в корень входят
только папка .
и папки ..
, выпущенные из концов папок, выходящих из корня.
Процессы
В современных многозадачных ОС работающие одновременно друг с другом программы отождествляются с вершинами дерева процессов (которое уже по-настоящему является деревом с выделенным корнем). Рёбра дерева процессов ориентированы в сторону «от корня». Вершины дерева процессов называются процессами. Для ребра, идущего из процесса А в процесс Б, процесс А называется предком (или родителем) процесса Б, а процесс Б — потомком (или ребёнком) процесса А.
Каждый процесс обычно имеет право при помощи тех или иных механизмов ОС создавать новых потомков. Потомки при создании наследуют от родителя некоторые их свойства, но в целом довольно независимы от них. В частности, при убийстве родителя его дети обычно выживают. При этом дальнейшее избавление от этих сирот (если они не умирают сами) иногда оказывается нетривиальной задачей.
У каждого процесса есть рабочий каталог — вершина (sic!) дерева файлов,
из которой функции ядра ОС выпускают пути в дереве файлов. Пути задаются
их текстовыми представлениями, которые имеют вид последовательности названий
рёбер этого пути, разделённых символом-разделителем (стандартный
символ-разделитель — косая черта /
, хотя под Windows чаще используется
обратная черта \
). Также ОС поддерживают отсчёт путей от какого-нибудь из
корней дерева файлов: такой режим называется абсолютными путями (что интересно,
в ОС Windows некоторые приложения имеют урезанную поддержку абсолютных
путей).
Также у каждого процесса есть стандартные потоки ввода/вывода в количестве трёх штук: один входной stdin и два выходных stdout и stderr. Выходные потоки процессов можно привязывать к входным потокам процессов. Ядро ОС предоставляет приложениям функции записи данных в один из стандартных потоков и чтения данных из stdin. Это — наиболее примитивный механизм передачи данных между различными процессами (позволяющий, в частности, связывать процессы в длинные цепочки, в которых каждый следующий процесс преобразует вывод предыдущего). Отметим, что в ОС Windows большинство приложений не использует этот механизм передачи информации.
Терминалы и их эмуляторы
В процессе написания
Обычно при включении терминала (запуске эмулятора) запускается командная оболочка, с которой драйвер этого терминала связывается стандартными потоками ввода/вывода. Командная оболочка — это процесс, который получает команды от пользователя в том или ином текстовом формате и исполняет их.
Терминальное соединение с удалённым компьютером
В процессе написания
В заключение напомним, что сочетание клавиш Ctrl-d терминал интерпретирует как команду «закрыть стандартный поток входа». Большинство программ, ожидающих ввода данных, встречая неожиданный конец потока, завершают свою работу. Те программы, которые игнорируют отсутствие стандартного входа или же переоткрывают его, обычно можно завершить сочетанием Ctrl-c.
Также есть два сочетания, которые часто случайно попадают под руку и приводят к неожиданным последствиям:
- Ctrl-z усыпляет процесс, запущенный из командной оболочки;
разбудить обратно исходный процесс можно командой
fg
- Ctrl-s блокирует ввод данных с терминала; разблокировать можно сочетанием Ctrl-q
Отметим, что есть командные оболочки, не поддерживающие механизм усыпления процессов. Также есть терминалы, позвляющие выключить механизм блокировки ввода. Поэтому не удивляйтесь, если одно или даже оба этих сочетания не сработают.