2004 г
Основы операционной системы UNIX
Copyleft (no c) - 1996-2004
В. Кравчук,
OpenXS Initiative, идея, составление, перевод, примеры
Назад Оглавление Вперёд
История, версии и основные характеристики ОС UNIX
История ОС UNIX началась в 1969 году в одном из подразделений AT&T Bell
Laboratories, когда на "малоиспользуемой" машине DEC PDP-7 Кен Томпсон (Ken
Thompson), Деннис Ричи (Dennis Ritchie) и другие (прежде занимавшиеся созданием ОС
Multics) начали работу над операционной системой, названной ими первоначально Unics
(UNiplexed Information and Computing System). В течение первых 10 лет развитие UNIX
происходило, в основном, в Bell Labs. Соответствующие начальные версии назывались
"Version n" (Vn) и предназначались для ЭВМ DEC PDP-11 (16-битовая) и VAX (32-битовая).
Версии Vn разрабатывались группой Computer Research Group (CRG) в Bell Labs.
Поддержкой занималась другая группа, Unix System Group (USG). Разработкой также
занималась группа Programmer's WorkBench (PWB), привнесшая систему управления
исходным кодом sccs, именованные каналы и ряд других идей. В 1983 году эти группы
были объединены в одну, Unix System Development Lab.
Ниже в хронологическом порядке представлены наиболее существенные версии и
события в истории UNIX вплоть до марта 2004 года, а также некоторая информация
о взаимосвязях между ними:
- 1971
-
V1. Первая версия UNIX Time-Sharing System на ассемблере для PDP-11/20.
Включала файловую систему, системный вызов fork() для порождения
процессов, утилиты типа
cat,
ed,
roff. Использовалась для обработки текстов
при подготовке патентов. Системный вызов pipe() и поддержка программных
каналов появилась в V2.
- 1973
-
V4. Версия, переписанная на языке C, что сделало UNIX легко переносимой на
другие платформы. Язык C создавался для разработки ОС UNIX.
- 1974
-
V5. Появление первых версий в Bell Labs (PWB/UNIX, MERT).
- 1975
-
V6. Первая версия UNIX, широко распространенная за пределами Bell Labs, в
частности, в университетах. С этого времени начинается появление множества
других версий и UNIX становится популярной ОС. На базе этой версии в
Калифорнийском университете в Беркли (UCB) создавалась 1.xBSD (для PDP-11).
- 1978
-
Версия 2.xBSD (Berkeley Systems Development) для PDP-11, созданная группой
Computer Systems Research Group (CSRG) в Беркли. Поддержка сети DARPA,
первая реализация стека протоколов TCP/IP. Командный интерпретатор csh. В
дальнейших версиях (до 1980): поддержка виртуальной памяти, termcap, curses,
редактор vi.
- 1979
-
V7. "Последняя настоящая UNIX", включала компилятор языка C, командный
интерпретатор sh, систему uucp, была перенесена на 32-разрядный VAX. При
этом размер ядра составлял около 40 Кбайт!
- 1981
-
4.1BSD: управление заданиями, автоматическое конфигурирование ядра.
System III - первый коммерческий UNIX от AT&T, реализация именованных
каналов (FIFO).
- 1982
-
UNIX начинают использовать создатели рабочих станций: SunOS 1.0 (на базе
4.1BSD) от Sun Microsystems и HP-UX (на базе System III) от Hewlett-Packard.
- 1983
-
4.2BSD: полная поддержка TCP/IP, сокетов, Ethernet. Файловая система UFS с
поддержкой длинных имен файлов и символьных связей. AT&T System V:
поддержка основных утилит и средств BSD, добавлен пакет средств
межпроцессного взаимодействия (IPC).
- 1984
-
SVR2: функции в командном интерпретаторе sh, первые попытки
стандартизации. SCO XENIX - первый коммерческий
UNIX на Intel-архитектуре. Создание Free Software Foundation
(FSF) и начало проекта GNU - создание свободно распространяемой
UNIX-подобной ОС и соответствующих утилит.
- 1985
-
V8 (модули STREAMS). Появление архитектуры микроядра Mach. Реализации
стандарта SVR2: SCO XENIX SystemV/286, Interactive 386/ix. Появление ОС Minix.
- 1986
-
4.3BSD для VAX. SVR3: модули STREAMS из V8, TLI, поддержка динамически
загружаемых библиотек. V9 (дополнения из 4.3BSD). Появление операционных
систем AIX (IBM) и A/UX (Apple).
- 1987
-
SVR3.2: SCO XENIX SV/386. Появление ОС IRIX (SVR3.0).
- 1988
-
4.3BSD Tahoe - 4.3BSD с исходниками. Создание SVR4 на базе System V, BSD и
SunOS (X11, NFS, система виртуальной памяти, динамически подключаемые
библиотеки). Добавлены: командный интерпретатор ksh, ANSI C, возможности
поддержки национальных языков, соответствие стандартам POSIX, X/Open.
Появление компьютера NeXT с ОС NeXTSTEP (4.3BSD + Mach 2.0).
- 1990
-
4.3BSD Reno: поддержка различных платформ, NFS, SLIP, Kerberos. SUN Solaris
1 (SunOS 4.1.4). Появление OSF/1 от Open Software Foundation: микроядро Mach
2.6 + SVR4, SMP, нити, Motif GUI.
- 1991
-
BSD Net2 (4.3BSD Lite) - не содержит спорного кода AT&T. Появление ОС
GNU HURD. Появление ОС Linux (на базе Minix). Выделение из AT&T
отдельного подразделения USL (Unix System Laboratories), владеющего кодом
AT&T UNIX и System V.
-
- 1992
-
4.4BSD: виртуальная память как в Mach 2.5, журнализируемая файловая система
UFS. Закрытие CSRG в Беркли. SVR4.2: журнализируемая файловая система
Veritas FS, списки контроля доступа ACL, динамически загружаемые модули
ядра. USL UnixWare 1 - реализация SVR4.2. SunOS 5 = Solaris 2 (SunOS 4 +
SVR4).
- 1993
-
Появление ОС FreeBSD. Solaris 2.2. NeXTSTEP 3.2. IRIX 5.3, HP-UX 9.04, AIX
4.0, Linux 0.99, UnixWare 1.1.
- 1994
-
OSF 1.3: микроядро Mach 3, поддержка 64-битовых платформ. FreeBSD 2.0,
SCO OpenDesktop 3.2.4. UnixWare 1.1.2. Linux 1.0.9. USL куплена компанией
Novell.
- 1995
-
Появление OpenBSD и NetBSD. Solaris 2.5. Появление Digital UNIX (DEC
OSF/1). Появление SCO OpenServer 5.0. UnixWare 2.0: SVR4.2 MP от Novell.
Novell продает UnixWare и весь исходный код AT&T компании
SCO. Выход HP-UX 10 (с добавлениями из UnixWare).
Завершение работ над A/UX.
- 1996
-
FreeBSD 2.1.6. OpenBSD 2.0. IRIX 6.3. Linux 2.0.21. OpenSTEP 4 - завершение
проекта NeXTSTEP. SCO UnixWare 2.1. Микроядро Mach 4.
- 1997
-
FreeBSD 2.2.5, OpenBSD 2.2, NetBSD 1.3, Solaris 2.6 (под SPARC и Intel), SCO
OpenServer 5.0.4. IRIX 6.4. GNU Hurd 0.2 (+ Mach 4). Linux 2.0.28.
- 1998
-
FreeBSD 3.0 (+4.4BSD), Solaris 7, DigitalUNIX 4, SCO: OpenServer 5.0.5,
UnixWare 7 (SVR5). HP-UX 11.0. Linux 2.0.36. IBM: проект Monterey
(AIX 4.3 + SVR5).
- 1999
-
FreeBSD 3.4. OpenBSD 2.6, NetBSD 1.4. Появление Mac OS X и проекта Darwin
(Mach 4 + FreeBSD 3.1). Solaris 8 beta. Компанию DEC купил Compaq: Tru64
Unix V.5.0. (DigitalUNIX). IRIX 6.5.6. SCO: OpenServer 5.0.5a, UnixWare 7.1.1.
AIX 4.3.3. Linux 2.2.13.
- 2000
-
FreeBSD 4.0-4.2. OpenBSD 2.8. NetBSD 1.5. Solaris 8. Apple: Mac OS X Server,
Darwin 1.2.1. Tru64 Unix V.5.1. IRIX 6.5.10. SCO: OpenServer 5.0.6. Компания
SCO продала все свои ОС компании Caldera (Caldera OpenLinux). Hurd A1,
Linux 2.4.0, 2.2.18. HP-UX 11i. AIX 5L alpha (проект Monterey).
- 2001
-
FreeBSD 4.4. OpenBSD 3.0. NetBSD 1.5.2. Mac OS X 10.1.2. SUN: Solaris 8
10/01, Solaris 9 alpha (не для Intel-архитектуры). Tru64 Unix V.5.1A, IRIX 6.5.13. SCO
OpenServer 5.0.6a. Hurd h3. Caldera: OpenUNIX 8: UnixWare 7.1.1 + LKP=Linux
2.4.0 - прозрачная поддержка Linux-приложений. Linux 2.4.17, 2.0.39, 2.2.20.
AIX 5L v.5.1.
- 2002
-
FreeBSD 4.7. OpenBSD 3.2. NetBSD 1.6. Mac OS X 10.2 (Jaguar).
Darwin 6.2. SUN: Solaris 8 12/02, Solaris 9 OE. QNX 6.2. IRIX 6.5.18. Debian GNU/Hurd J2.
SCO: UnixWare 7.1.3 (в продолжение OpenUNIX 8. Caldera снова стала SCO...).
Linux (влияние IRIX и AIX, в частности, файловые системы): 2.5.2-2.5.52 -
экспериментальное ядро. 2.4.20, 2.2.23. HP-UX 11i v1.6.
AIX 5L v.5.2.
- 2003
-
FreeBSD 5.1, FreeBSD 4.9. OpenBSD 3.4. NetBSD 1.6.1. Mac OS X 10.3.2.
Darwin 6.6-7.2. SUN: Solaris 9 OE 12/03, Solaris 9 x86 PE, Solaris 10 Preview.
QNX 6.2.1. IRIX 6.5.22. Debian GNU/Hurd K5. Tru64 Unix V5.1B-1.
SCO: UnixWare 7.1.3/OKP (OpenServer Kernel Personality), OpenServer 5.0.7.
Linux: 2.6.0, 2.4.23, 2.2.25. HP-UX 11i v2 (в том числе, для Intel Itanium).
- 2004
-
FreeBSD 5.2. NetBSD 1.6.2. Solaris 10 Software Express 02/04.
IRIX 6.5.23. Linux: 2.6.3, 2.4.25, 2.2.26, 2.0.40.
Ожидается:
- дальнейшее развитиие ветки Linux 2.6 и обновления по старым веткам ядер
(2.0, 2.2, 2.4);
- Solaris 10 (вышла);
- последовательное развитиие FreeBSD, OpenBSD, NetBSD, других веток BSD.
- дальнейшее развитие Mac OS X и Darwin;
- дальнейшее последовательное развитие IRIX.
Итак, в настоящее время (начало 2004 года - В.К.) мы имеем на платформе Intel
x86 следующие основные версии UNIX:
- FreeBSD 5.2;
- OpenBSD 3.4;
- NetBSD 1.6.2;
- Linux 2.0, 2.2, 2.4, 2.6 в виде множества различных дистрибутивов;
- Solaris 9;
- SCO OpenServer 5.0.7 и UnixWare 7.1.3
На других платформах (основные версии):
- Linux 2.6.x (практически все платформы);
- NetBSD 1.6.2 (практически все платформы);
- Mac OS X 10.3.2 (PowerPC);
- AIX 5L v5.2 (PowerPC);
- Solaris 9, 10 (SPARC);
- HP-UX 11i (PA-RISC, Intel Itanium);
- Tru64 Unix V.5.1B-1 (Alpha);
- IRIX 6.5.23 (MIPS)
ОС UNIX имеет следующие основные характеристики:
- переносимость;
- вытесняющая многозадачность на основе процессов, работающих в изолированных
адресных пространствах в виртуальной памяти;
- поддержка одновременной работы многих пользователей;
- поддержка асинхронных процессов;
- иерархическая файловая система;
- поддержка независимых от устройств операций ввода-вывода (через специальные
файлы устройств);
- стандартный интерфейс для программ (программные каналы, IPC) и пользователей
(командный интерпретатор, не входящий в ядро ОС);
- встроенные средства учета использования системы.
Архитектура ОС UNIX - многоуровневая. На нижнем уровне, непосредственно над
оборудованием, работает ядро операционной системы. Функции ядра доступны через
интерфейс системных вызовов, образующих второй уровень. На следующем уровне
работают командные интерпретаторы, команды и утилиты системного
администрирования, коммуникационные драйверы и протоколы, - все то, что обычно
относят к системному программному обеспечению. Наконец, внешний уровень образуют
прикладные программы пользователя, сетевые и другие коммуникационные службы,
СУБД и утилиты.
Основные функции ядра UNIX (которое может быть монолитным или
модульным) включают:
- планирование и переключение процессов;
- управление памятью;
- обработку прерываний;
- низкоуровневую поддержку устройств (через драйверы);
- управление дисками и буферизация данных;
- синхронизацию процессов и обеспечение средств межпроцессного взаимодействия
(IPC).
Системные вызовы обеспечивают:
- сопоставление действий пользователя с запросами драйверов устройств;
- создание и прекращение процессов;
- реализацию операций ввода-вывода;
- доступ к файлам и дискам;
- поддержку функций терминала.
Системные вызовы преобразуют процесс, работающий в режиме пользователя, в
защищенный процесс, работающий в режиме ядра. Это позволяет процессу вызывать
защищенные процедуры ядра для выполнения системных функций.
Системные вызовы обеспечивают программный интерфейс для доступа к процедурам
ядра. Они обеспечивают управление системными ресурсами, такими как память,
пространство на дисках и периферийные устройства. Системные вызовы оформлены в
виде библиотеки времени выполнения. Многие системные вызовы доступны через
командный интерпретатор.
Пользовательские процессы образуют следующие два уровня и:
- защищены от других пользовательских процессов;
- не имеют доступа к процедурам ядра, кроме как через системные вызовы;
- не могут непосредственно обращаться к пространству памяти ядра.
Пространство (памяти) ядра - это область памяти, в которой процессы ядра (процессы,
работающие в контексте ядра) реализуют службы ядра. Любой процесс,
выполняющийся в пространстве ядра, считается работающим в режиме ядра.
Пространство ядра - привилегированная область; пользователь получает к ней доступ
только через интерфейс системных вызовов. Пользовательский процесс не имеет прямого
доступа ко всем инструкциям и физическим устройствам, - их имеет процесс ядра.
Процесс ядра также может менять карту памяти, что необходимо для переключения
процессов (смены контекста).
Пользовательский процесс работает в режиме ядра, когда начинает выполнять код ядра
через системный вызов.
Поскольку пользовательские процессы и ядро не имеют общего адресного пространства
памяти, необходим механизм передачи данных между ними. При выполнении системного
вызова, аргументы вызова и соответствующий идентификатор процедуры ядра
передаются из пользовательского пространства в пространство ядра. Идентификатор
процедуры ядра передается либо через аппаратный регистр процессора, либо через стек.
Аргументы системного вызова передаются через пользовательскую область вызывающего
процесса.
Пользовательская область процесса содержит информацию о процессе, необходимую
ядру:
- корневой и текущий каталоги, аргументы текущего системного вызова, размеры
сегмента текста, данных и стека для процесса;
- указатель на запись в таблице процессов, содержащую информацию для
планировщика, например, приоритет;
- таблицу дескрипторов файлов пользовательского процесса с информацией об
открытых файлах;
- стек ядра для процесса (пустой, если процесс работает в режиме пользователя).
Пользовательский процесс не может обращаться к пространству ядра, но ядро может
обращаться к пространству процесса.
ОС UNIX обеспечивает ряд стандартных системных программ для решения задач
администрирования, переконфигурирования и поддержки файловой системы, в частности:
- для настройки параметров конфигурации системы;
- для перекомпоновки ядра (если она необходима) и добавления новых драйверов
устройств;
- для создания и удаления учетных записей пользователей;
- создания и подключения физических файловых систем;
- установки параметров контроля доступа к файлам.
Для решения этих задач системное ПО (работающее в пользовательском режиме) часто
использует системные вызовы.
Назад Оглавление Вперёд
|
|