Product SiteDocumentation Site

B.4. Некоторые Выполняемые Ядром Задачи

B.4.1. Управление Оборудованием

Ядро, прежде всего, предназначено для контролирования оборудования, его обнаружения, его включения когда компьютер запускается и так далее. Это также делает оборудование доступным для программного обеспечения более высокого уровня с упрощенным интерфейсом программирования, так что последнее может воспользоваться преимуществами устройств, не беспокоясь о деталях, таких как: в какой слот расширения вставлена дополнительная плата. Программный интерфейс также предоставляет уровень абстракции; это позволяет, например, программе для видео-конференции использовать веб-камеру независимо от ее производителя и модели. Программа может просто использовать интерфейс Video for Linux (V4L), а ядро транслирует функциональные вызовы этого интерфейса в фактические машинные команды, необходимые для использования веб-камеры.
Ядро экспортирует информацию об обнаруженном аппаратном обеспечении в виртуальные файловые системы /proc/ и /sys/. Некоторые инструменты суммируют эту информацию. Среди них, lspci (из пакета pciutils) выводит список PCI устройств, lsusb (из пакета usbutils) выводит список USB устройств, а lspcmcia (из пакета pcmciautils) выводит список PCMCIA плат. Эти инструменты очень полезны для определения точной модели какого-либо устройства. Эта идентификация также позволяет находить в интернете более точную информацию, которая в свою очередь, приводит к актуальной документации.

Пример B.1. Пример информации, предоставляемой lspci и lsusb

$ lspci
[...]
00:02.1 Display controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 (rev 03)
00:1d.0 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 03)
[...]
01:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5751 Gigabit Ethernet PCI Express (rev 01)
02:03.0 Network controller: Intel Corporation PRO/Wireless 2200BG Network Connection (rev 05)
$ lsusb
Bus 005 Device 004: ID 413c:a005 Dell Computer Corp.
Bus 005 Device 008: ID 413c:9001 Dell Computer Corp.
Bus 005 Device 007: ID 045e:00dd Microsoft Corp.
Bus 005 Device 006: ID 046d:c03d Logitech, Inc.
[...]
Bus 002 Device 004: ID 413c:8103 Dell Computer Corp. Wireless 350 Bluetooth
Эти программы имеют опцию -v, с которой выводятся списки с более подробной (но зачастую ненужной) информацией. Наконец, команда lsdev (из пакета procinfo) выводит список коммуникационных ресурсов, используемых устройствами.
Приложения часто получают доступ к устройствам через специальные файлы, созданные в /dev/ (см. на боковой панели BACK TO BASICS Device access permissions). Это специальные файлы, представляющие дисковые устройства (например, /dev/hda и /dev/sdc), разделы (/dev/hda1 или /dev/sdc3), мыши (/dev/input/mouse0), клавиатуры (/dev/input/event0), звуковые карты (/dev/snd/*), серийные порты (/dev/ttyS*) и так далее.

B.4.2. Файловые системы

Файловые системы - один из наиболее выдающихся аспектов ядра. Unix системы соединяют все хранилища файлов в одну единственную иерархическую систему, которая позволяет пользователям (и приложениям) получать доступ к данным просто, зная их местоположение в этой иерархии.
Начальная точка этого иерархического дерева называется корнем, /. Этот каталог может содержать именованные подкаталоги. Например, подкаталог home каталога / называется /home/. Эти подкаталоги могут, в свою очередь, содержать другие подкаталоги и так далее. Каждый каталог также может содержать файлы, в которых фактически и хранятся данные. Таким образом, имя /home/rmas/Desktop/hello.txt ссылается на файл с именем hello.txt, хранящийся в подкаталоге Desktop подкаталога rmas подкаталога home корневого каталога. Ядро занимается преобразованием между этой системой именования и фактической, физической памятью на диске.
В отличии от других систем, есть только одна такая иерархия, и она может содержать данные с разных дисков. Один из этих дисков используется в качестве корня, а остальные - монтируются как каталоги в этой иерархии (в Unix команда называется mount); после чего, эти диски становятся доступны в этих "точках монтирования". Это позволяет хранить домашние каталоги пользователей (традиционно хранятся в /home/) на втором жёстком диске, который будет содержать каталоги rhertzog и rmas. После того как диск монтируется в /home/, эти каталоги становятся доступны в их обычных местах, и будут работать пути, такие как /home/rmas/Desktop/hello.txt.
Существует множество форматов файловых систем, соответствующих множеству способов физического хранения данных на диске. Наиболее широко известны: ext2, ext3 и ext4, но есть и другие. Например, vfat исторически используется в операционных системах DOS и Windows, и позволяет использовать жёсткие диски как в Debian так и в Windows. В любом случае, файловая система должна быть подготовлена на диске перед тем, как он будет монтироваться (эта операция известна как “форматирование”). Команды, такие как mkfs.ext3 (где mkfs от MaKe FileSystem) производят форматирование. Эти команды нуждаются, в качестве параметра, в представляющем раздел для форматирования файле устройства (например, /dev/sda1). Эта операция является разрушительной и должна выполняться только один раз, за исключением тех случаев, если нужно будет уничтожить файловую систему и начать все заново.
Также есть и сетевые файловые системы такие как NFS, в которых данные на хранятся на локальном диске. Вместо этого, данные передаются через сеть на сервер, который хранит и извлекает их по требованию. Абстракция файловой системы защищает пользователей от необходимости беспокоится о том, чтобы файлы оставались по их обычному иерархическому пути.

B.4.3. Общие Функции

Поскольку некоторые функции используются всем программным обеспечением, имеет смысл их централизация в ядре. Например, общая файловая система позволяет любому приложению просто открыть файл по его имени, не заботясь о том, где физически находится файл. Файл может храниться, разделенным на множество частей, на одном или нескольких жёстких дисках или на уделенном сервере. Общие функции взаимодействия используются приложениями для обмена данными, независимо от способа их передачи. К примеру, пусть может проходить через комбинацию локальных или беспроводных сетей, или по телефонной линии.

B.4.4. Управление Процессами

Процесс - запущенный экземпляр программы. Он требует памяти для хранения как самой программы, так и ее оперативных данных. Ядро отвечает за их создание и отслеживание. Когда программа запускается, ядро выделяет некоторый объем памяти, потом загружает исполняемый код из файловой системы в эту память, а затем начинает исполнение этого кода. Оно хранит сведения об этом процессе, наиболее просматриваемое из которых - идентификационный номер, известный как pid (от англ. process identifier).
Unix-подобные ядра (включая Linux), как и большинство других современных операционных систем, поддерживают “многозадачность”. Другими словами, они позволяют запускать много процессов "одновременно". Хотя на самом деле только один процесс выполняется в одну единицу времени, но ядро делит время на маленькие промежутки и исполняет каждый процесс пошагово. Так как эти временные интервалы очень короткие (в диапазоне миллисекунды), создается иллюзия параллельного выполнения процессов, хотя на самом деле они активны только в течение нескольких временных промежутков и простаивают остальную часть времени. Работа ядра заключается в регулировании его механизма планирования для поддержания этой иллюзии, увеличивая производительность системы в целом. Если временные интервалы слишком большие, приложение может показаться не таким отзывчивым как хотелось бы. Если слишком короткие, то система будет терять много времени на переключение между задачами. Эти решения могут изменяться с приоритетами процессов. Процессы с высоким приоритетом будут работать дольше и с большей частотой временных промежутков нежели процессы с низким приоритетом.
Конечно, ядро позволяет запускать несколько независимых экземпляров одной и той же программы. Но каждый из них имеет доступ только к собственным временным интервалам и памяти. Их данные, таким образом, остаются независимыми.

B.4.5. Управление Правами

Также Unix-подобные системы являются многопользовательскими. Они предоставляют систему управления правами, которая поддерживает создание отдельных пользователей и групп; она также позволяет контролировать действия на основе разрешений. Ядро управляет данными для каждого процесса, что позволяет контролировать разрешения. Большую часть времени процесс идентифицируется пользователем, запустившем его. Этот процесс имеет право на действия, доступные его владельцу. Например, попытка открыть файл, требует от ядра проверить идентификатор процесса для предоставления доступа (для более подробной информации по данному примеру, см. Раздел 9.3, «Управление правами»).