Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек_1_2_Архитектура UNIX.doc
Скачиваний:
3
Добавлен:
21.09.2019
Размер:
92.16 Кб
Скачать

5 Спо Лек 1_2 Кузнецова а.В. Общий взгляд на архитектуру unix

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

Рис. 1

В центре находится ядро системы (kernel). Ядро непосредственно взаимодействует с аппаратной частью компьютера, изолируя прикладные (пользовательские) и системные (обеспечивающие функциональность системы) программы от особенностей ее архитек­туры. Ядро имеет набор услуг, предоставляемых прикладным программам. К услугам ядра относятся: операции ввода вывода (открытия, чтения, записи и управления файлами), соз­дание и управление процессами, их синхронизации и взаимодействия. Все приложения запрашивают услуги у ядра посредством системных вызовов.

Основой работы UNIX является ядро операционной системы. Это обычный выполняемый файл, лежащий в директории типа /unix, или /stand/unix, или /vmunix, или /vmlinuz (в зависимости от конкретной реализации). При старте системы он целиком грузится в память и, постоянно находясь там, выполняет все системные функции. В ядре находятся драйверы устройств, порой ненужных, подпрограммы управления системными ресурсами, таблицы текущих процессов и открытых файлов, системные вызовы, то есть обработчики сис­темно-зависимых функций. Аналогом последних является 21h прерывание в MS-DOS или многочисленные экспортируемые функции в DLL в Windows.

Второй уровень составляют приложения или задачи, как системные (определяющие функциональность системы), так и прикладные, обеспечивающие пользовательский ин­терфейс UNIX. Несмотря на внешнюю разнородность приложений, схемы их взаимодей­ствия с ядром одинаковы.

Общая организация традиционного ядра ос unix

Следует заметить, что удобство и эффективность современных вариантов ОС UNIX не означает, что вся система, включая ядро, спроектирована и структурирована наилучшим образом. ОС UNIX развивалась на протяжении многих лет. Естественно, наращивались возможности системы, и, как это часто бывает в больших системах, качественные улучшения структуры ОС UNIX не поспевали за ростом ее возможностей. В результате, ядро большинства современных коммерческих вариантов ОС UNIX представляет собой не очень четко структурированный монолит большого размера. По этой причине программирование на уровне ядра ОС UNIX продолжает оставаться искусством (если не считать отработанной и понятной технологии разработки драйверов внешних устройств).

Одно из основных достижений ОС UNIX состоит в том, что система обладает свой­ством высокой мобильности. Смысл этого качества состоит в том, что вся операционная система, включая ядро, сравнительно просто переносится на различные аппаратные плат­формы. Все части системы, не считая ядра, являются полностью машинно-независимыми. Эти компоненты аккуратно написаны на языке Си, и для их переноса на новую платформу (по крайней мере, в классе 32-разрядных компьютеров) требуется только перекомпиляция исходных текстов в коды целевого компьютера. В самом ядре можно выделить машинно-зависимые и машинно-независимые компоненты. Основная часть ядра не зависит от архи­тектурных особенностей целевой платформы, написана полностью на языке Си и для пе­реноса на новую платформу нуждается только в перекомпиляции.

Однако сравнительно небольшая часть ядра является машинно-зависимой и напи­сана на смеси языка Си и языка ассемблера целевого процессора. При переносе системы на новую платформу требуется переписывание этой части ядра с использованием языка ассемблера и учетом специфических черт целевой аппаратуры. Машинно-зависимые части ядра хорошо изолированы от основной машинно-независимой части, и при хорошем понимании назначения каждого машинно-зависимого компонента переписывание ма­шинно-зависимой части является в основном технической задачей (хотя и требует высо­кой программистской квалификации). Машинно-зависимая часть традиционного ядра ОС UNIX включает следующие компоненты:

  • раскрутка и инициализация системы на низком уровне (пока это зависит от особенно­стей аппаратуры);

  • первичная обработка внутренних и внешних прерываний;

  • управление памятью (в той части, которая относится к особенностям аппаратной под­держки виртуальной памяти);

  • переключение контекста процессов между режимами пользователя и ядра;

  • связанные с особенностями целевой платформы части драйверов устройств.