Unix

Предшественники
==== В 1957 году в Bell Labs была начата работа по созданию операционной системы для собственных нужд. Под руководством Виктора Высотского (русского по происхождению) была создана система BESYS. Впоследствии он возглавил проект Multics, а затем стал главой информационного подразделения Bell Labs. В 1964 году появились компьютеры третьего поколения, для которых возможности BESYS уже не подходили. Высотский и его коллеги приняли решение не разрабатывать новую собственную операционную систему, а подключиться к совместному проекту General Electric и Массачусетского технологического института Multics. Телекоммуникационный гигант AT&T, в состав которого входили Bell Labs, оказал проекту существенную поддержку, но в 1969 году вышел из проекта, поскольку он не приносил никаких финансовых выгод. ====

Первые UNIX
====Первоначально UNIX была разработана в конце 1960-х годов сотрудниками Bell Labs, в первую очередь Кеном Томпсоном и Деннисом Ритчи.В 1969 году Кен Томпсон, стремясь реализовать идеи, которые были положены в основу MULTICS, но на более скромном аппаратном обеспечении (DEC PDP-7), написал первую версию новой операционной системы, а Брайан Керниган придумал для неё название — UNICS (UNIplexed Information and Computing System) — в противовес MULTICS (MULTIplexed Information and Computing Service). Позже это название сократилось до UNIX. В ноябре 1971 года вышла версия для PDP-11, наиболее успешного семейства миникомпьютеров 1970-х (в СССР оно известно как СМ ЭВМ). Эта версия получила название «первая редакция» (Edition 1) и была первой официальной версией. Системное время все реализации UNIX отсчитывают с 1 января 1970. Первые версии UNIX были написаны на ассемблере и не имели встроенного компилятора с языка высокого уровня. Примерно в 1969 году Кен Томпсон при содействии Дениса Ритчи разработал и реализовал язык Би (B), представлявший собой упрощённый (для реализации на миникомпьютерах) вариант разработанного в 1966 языка BCPL. Би, как и BCPL, был интерпретируемым языком. В 1972 году была выпущена вторая редакция UNIX, переписанная на языке Би. В 1969—1973 годах на основе Би был разработан компилируемый язык, получивший название Си (C). В 1973 году вышла третья редакция UNIX, со встроенным компилятором языка Си. 15 октября того же года появилась четвёртая редакция, с переписанным на Си системным ядром (в духе системы Multics, также написанной на языке высокого уровня (ПЛ/1)), а в 1975 — пятая редакция, полностью переписанная на Си. С 1974 года UNIX стал бесплатно распространяться среди университетов и академических учреждений. С 1975 года началось появление новых версий, разработанных за пределами Bell Labs, и рост популярности системы. В том же 1975 году Bell Labs выпустила шестую редакцию, известную по широко разошедшимся комментариям Джона Лайонса. К 1978 г. система была установлена более чем на 600 машинах, прежде всего, в университетах. Седьмая редакция была последней единой версией UNIX. Именно в ней появился близкий к современному интерпретатор командной строки Bourne shell.====

Раскол
====С 1978 года начинает свою историю BSD UNIX, созданный в университете Беркли. Его первая версия была основана на шестой редакции. В 1979 выпущена новая версия, названная 3BSD, основанная на седьмой редакции. BSD поддерживал такие полезные свойства, как виртуальную память и замещение страниц по требованию. Автором BSD был Билл Джой. В начале 1980-х компания AT&T, которой принадлежали Bell Labs, осознала ценность UNIX и начала создание коммерческой версии UNIX. Эта версия, поступившая в продажу в 1982 году, носила название UNIX System III и была основана на седьмой версии системы. Важной причиной раскола UNIX стала реализация в 1980 г. стека протоколов TCP/IP. До этого межмашинное взаимодействие в UNIX пребывало в зачаточном состоянии — наиболее существенным способом связи был UUCP (средство копирования файлов из одной UNIX-системы в другую, изначально работавшее по телефонным сетям с помощью модемов). Было предложено два интерфейса программирования сетевых приложений: Berkley sockets и интерфейс транспортного уровня TLI (англ. Transport Layer Interface). Интерфейс Berkley sockets был разработан в университете Беркли и использовал стек протоколов TCP/IP, разработанный там же. TLI был создан AT&T в соответствии с определением транспортного уровня модели OSI и впервые появился в системе System V версии 3. Хотя эта версия содержала TLI и потоки, первоначально в ней не было реализации TCP/IP или других сетевых протоколов, но подобные реализации предоставлялись сторонними фирмами. Реализация TCP/IP официально и окончательно была включена в базовую поставку System V версии 4. Это, как и другие соображения (по большей части, рыночные), вызвало окончательное размежевание между двумя ветвями UNIX — BSD (университета Беркли) и System V (коммерческая версия от AT&T). Впоследствии, многие компании, лицензировав System V у AT&T, разработали собственные коммерческие разновидности UNIX, такие, как AIX, CLIX, HP-UX, IRIX, Solaris. В середине 1983 года была выпущена версия 4.2BSD, поддерживающая работу в сетях Ethernet и Arpanet. Система стала весьма популярной. Между 1983 и 1990 в BSD было добавлено много новых возможностей, таких как отладчик ядра, сетевая файловая система NFS, виртуальная файловая система VFS, и существенно улучшены возможности работы с файловыми сетями. Тем временем AT&T выпускала новые версии своей системы, названной System V. В 1983 была выпущена версия 1 (SVR1 — System V Release 1), включавшая полноэкранный текстовый редактор vi, библиотеку curses, буферизацию ввода-вывода, кеширование inode. Версия 2 (SVR2), выпущенная в 1984, реализовывала монопольный доступ к файлам (file locking), доступ к страницам по требованию (demand paging), копирование при записи (copy-on-write). Версия 3 вышла в 1987 году и включала, среди прочего, TLI, а также систему поддержки удалённых файловых систем RFS. Версия 4 (SVR4), разработанная в сотрудничестве с фирмой Sun и вышедшая 18 октября 1988, поддерживала многие возможности BSD, в частности TCP/IP, сокеты, новый командный интерпретатор csh. Кроме того, там было много других добавлений, таких как символические ссылки, командный интерпретатор ksh, сетевая файловая система NFS (заимствованная у SunOS) и т. д. Современные реализации UNIX, как правило, не являются системами V или BSD в чистом виде. Они реализуют возможности как System V, так и BSD.====

ОС UNIX имеет следующие основные характеристики:

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

Архитектура
====Структуру UNIX проще всего представить в виде двух слоев. Первым является ядро. Оно непосредственно взаимодействует с железом и обеспечивает переносимость всего остального ПО на компьютеры с разным аппаратным обеспечением. Ядро предоставляет программам определенный набор системных API, с помощью которых производятся создание процессов, управление ими, их взаимодействие и синхронизация, а также файловый ввод/вывод. Вторым слоем является программное обеспечение, прикладное или системное: командный интерпретатор, графическая оболочка и т. д.====

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

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

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

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

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

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

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

Системное программное обеспечение
====ОС 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)====

Источники информации:
В.Кравчук - [электронный ресурс] [] []

[]

http://www.openspin.org/materials/courses/admin/ch01.html - Введение в операционную систему UNIX