Этот краткий (предположительно, 16 часов, из которых 6 - практические занятия) вводный курс предназначен для ознакомления с архитектурой, ос обенностями и основными средствами ОС UNIX. При успешном освоении, курс позволит свободно и продуктивно работать
Автор:
Разместил: Amro   Дата: 2006-04-04 09:01
Комментарии: (0)   Рейтинг:
Пока комментариев нет

Основы операционной системы UNIX - 01. Введение

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

Изложение ведется, в основном, без привязки к особенностям какой-либо версии UNIX, но при необходимости конкретизации, она делается для систем SVR4, в частности, ОС Solaris 8.

В последней версии (1.2, 11 марта 2004 года) обновлена хронология основных событий в истории ОС UNIX.

Основы операционной системы UNIX - 02. История

История ОС 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

Ниже в хронологическом порядке представлены наиболее существенные версии и события в истории 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.

Современные версии ОС UNIX

Итак, в настоящее время (начало 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 - многоуровневая. На нижнем уровне, непосредственно над оборудованием, работает ядро операционной системы. Функции ядра доступны через интерфейс системных вызовов, образующих второй уровень. На следующем уровне работают командные интерпретаторы, команды и утилиты системного администрирования, коммуникационные драйверы и протоколы, - все то, что обычно относят к системному программному обеспечению. Наконец, внешний уровень образуют прикладные программы пользователя, сетевые и другие коммуникационные службы, СУБД и утилиты.

Основные функции ядра

Основные функции ядра UNIX (которое может быть монолитным или модульным) включают:

  • планирование и переключение процессов;
  • управление памятью;
  • обработку прерываний;
  • низкоуровневую поддержку устройств (через драйверы);
  • управление дисками и буферизация данных;
  • синхронизацию процессов и обеспечение средств межпроцессного взаимодействия (IPC).

Системные вызовы

Системные вызовы обеспечивают:

  • сопоставление действий пользователя с запросами драйверов устройств;
  • создание и прекращение процессов;
  • реализацию операций ввода-вывода;
  • доступ к файлам и дискам;
  • поддержку функций терминала.

Системные вызовы преобразуют процесс, работающий в режиме пользователя, в защищенный процесс, работающий в режиме ядра. Это позволяет процессу вызывать защищенные процедуры ядра для выполнения системных функций.

Системные вызовы обеспечивают программный интерфейс для доступа к процедурам ядра. Они обеспечивают управление системными ресурсами, такими как память, пространство на дисках и периферийные устройства. Системные вызовы оформлены в виде библиотеки времени выполнения. Многие системные вызовы доступны через командный интерпретатор.

Пользовательские процессы и процессы ядра

Пользовательские процессы образуют следующие два уровня и:

  • защищены от других пользовательских процессов;
  • не имеют доступа к процедурам ядра, кроме как через системные вызовы;
  • не могут непосредственно обращаться к пространству памяти ядра.

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

Пользовательский процесс работает в режиме ядра, когда начинает выполнять код ядра через системный вызов.

Обмен данными между пространством ядра и пользовательским пространством

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

Пользовательская область процесса содержит информацию о процессе, необходимую ядру:

  • корневой и текущий каталоги, аргументы текущего системного вызова, размеры сегмента текста, данных и стека для процесса;
  • указатель на запись в таблице процессов, содержащую информацию для планировщика, например, приоритет;
  • таблицу дескрипторов файлов пользовательского процесса с информацией об открытых файлах;
  • стек ядра для процесса (пустой, если процесс работает в режиме пользователя).

Пользовательский процесс не может обращаться к пространству ядра, но ядро может обращаться к пространству процесса.

Системное программное обеспечение

ОС UNIX обеспечивает ряд стандартных системных программ для решения задач администрирования, переконфигурирования и поддержки файловой системы, в частности:

  • для настройки параметров конфигурации системы;
  • для перекомпоновки ядра (если она необходима) и добавления новых драйверов устройств;
  • для создания и удаления учетных записей пользователей;
  • создания и подключения физических файловых систем;
  • установки параметров контроля доступа к файлам.

Для решения этих задач системное ПО (работающее в пользовательском режиме) часто использует системные вызовы.