| 
  
 
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 обеспечивает ряд стандартных системных программ для решения задач 
администрирования, переконфигурирования и поддержки файловой системы, в частности: 
- для настройки параметров конфигурации системы;
 
- для перекомпоновки ядра (если она необходима) и добавления новых драйверов 
устройств;
 
- для создания и удаления учетных записей пользователей;
 
- создания и подключения физических файловых систем;
 
- установки параметров контроля доступа к файлам.
 
 
Для решения этих задач системное ПО (работающее в пользовательском режиме) часто 
использует системные вызовы. 
Назад Оглавление Вперёд
 
 | 
 |