Робачевский А. М., Немнюгин С. А., Стесик О. Л.




Е издание

Санкт-Петербург
«БХВ-Петербург»
2010

УДК 681.3.06

ББК 32.973.26-018.2

Р58

Робачевский А. М., Немнюгин С. А., Стесик О. Л.

Р58 Операционная система UNIX. — 2-е изд., перераб. и доп. — СПб.:
БХВ-Петербург, 2010. — 656 с.: ил.

ISBN 978-5-94157-538-1

Книга является вторым изданием рекомендованного Министерством общего
и профессионального образования России одноименного учебного пособия.

Даны основы организации, идеологии и архитектуры, объединяющие различные версии UNIX. Рассматриваются: архитектура ядра (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка (протоколы семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).

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

Для студентов, преподавателей, пользователей и системных администраторов

УДК 681.3.06
ББК 32.973.26-018.2

Группа подготовки издания:

Главный редактор Екатерина Кондукова

Зам. гл. редактора Евгений Рыбаков

Зав. редакцией Григорий Добин

Редактор Алия Амирова

Компьютерная верстка Натальи Караваевой

Корректор Виктория Пиотровская

Дизайн обложки Игоря Цырульникова

Зав. производством Николай Тверских

Лицензия ИД № 02429 от 24.07.00. Подписано в печать 07.12.09.
Формат 70x1001/16. Печать офсетная. Усл. печ. л. 52,89.
Доп. тираж 1500 экз. Заказ № 1469
"БХВ-Петербург", 190005, Санкт-Петербург, Измайловский пр., 29.

Санитарно-эпидемиологическое заключение на продукцию

№ 77.99.60.953.Д.005770.05.09 от 26.05.2009 г. выдано Федеральной службой
по надзору в сфере защиты прав потребителей и благополучия человека.

Отпечатано с готовых диапозитивов
в ГУП "Типография “Наука”"
199034, Санкт-Петербург, 9 линия, 12

ISBN 978-5-94157-538-1 © Робачевский А. М., Немнюгин С. А., Стесик О. Л., 2005
© Оформление, издательство "БХВ-Петербург", 2005


Оглавление

Введение. 1

Причины популярности UNIX.. 1

Общий взгляд на архитектуру UNIX.. 2

Ядро системы.. 3

Файловая подсистема. 5

Подсистема управления процессами. 5

Подсистема ввода-вывода. 6

История создания. 6

Исследовательские версии UNIX.. 7

Генеалогия UNIX.. 9

System V UNIX.. 9

System V Release 4 (SVR4) 10

UNIX компании Berkeley Software Distribution. 10

OSF/1. 11

Версии UNIX, использующие микроядро. 11

Свободно распространяемая система UNIX.. 12

Основные стандарты.. 13

IEEE и POSIX.. 14

ANSI. 15

SVID.. 15

Х/Open и SUS. 15

Некоторые известные версии UNIX.. 16

Глава 1. Работа в операционной системе UNIX.. 21

Файлы и файловая система. 22

Типы файлов. 23

Обычный файл. 23

Каталог. 23

Специальный файл устройства. 24

FIFO (First-In-First-Out) или именованный канал. 24

Связь. 25

Сокеты.. 29

Структура файловой системы UNIX.. 30

Владельцы файлов. 33

Права доступа к файлу. 35

Дополнительные атрибуты файла. 40

Скрытые специфические атрибуты файлов. 43

Процессы.. 46

Программы и процессы.. 46

Типы процессов. 47

Системные процессы.. 47

Демоны.. 48

Прикладные процессы.. 48

Атрибуты процесса. 49

Идентификатор процесса Process IDentifier (PID) 49

Идентификатор родительского процесса Parent Process ID (PPID) 49

Приоритет процесса (Nice Number) 49

Терминальная линия (TTY) 49

Реальный (RID) и эффективный (EUID) идентификаторы пользователя. 50

Реальный (RGID) и эффективный (EGID) идентификаторы группы.. 50

Жизненный путь процесса. 50

Сигналы.. 53

Устройства. 56

Файлы блочных устройств. 56

Файлы символьных устройств. 57

Мнемоника названий специальных файлов устройств
в файловой системе UNIX.. 58

Пользователи системы.. 60

Атрибуты пользователя. 61

Поле namе. 62

Поле passwd-encod. 62

Поле UID.. 63

Поле GID.. 63

Поле comments. 63

Поле home-dir. 63

Поле shell 63

Пароли. 64

Стандартные пользователи и группы.. 65

Пользовательская среда UNIX.. 66

Командный интерпретатор shell 67

Синтаксис языка Bourne shell 69

Общий синтаксис команд. 70

Именованные переменные. 72

Встроенные переменные. 77

Перенаправление ввода-вывода. 80

Встроенные функции. 83

Подстановки, выполняемые командным интерпретатором.. 94

Система управления заданиями. 96

Основные утилиты UNIX.. 98

Утилиты для работы с файлами. 98

Утилиты для управления процессами. 104

Заключение. 106

Глава 2. Среда программирования UNIX.. 107

Программный интерфейс ОС UNIX.. 108

Системные вызовы и функции стандартных библиотек. 108

Обработка ошибок. 109

Создание программы.. 115

Исходный текст. 116

Заголовки. 116

Компиляция. 120

Форматы исполняемых файлов. 122

Формат a.out 124

Формат ELF. 125

Формат COFF. 129

Выполнение программы в операционной системе UNIX.. 132

Запуск C-программы.. 132

Завершение C-программы.. 137

Работа с файлами. 139

Основные системные функции для работы с файлами. 140

Функция open(2) 141

Функция creat(2) 143

Функция close(2) 144

Функции dup(2) и dup2(2) 144

Функция lseek(2) 145

Функция read(2) и readv(2) 146

Функции write(2) и writev(2) 147

Функция pipe(2) 148

Функция fcntl(2) 149

Стандартная библиотека ввода-вывода. 151

Связи. 154

Файлы, отображаемые в памяти. 158

Владение файлами. 162

Права доступа. 162

Перемещение по файловой системе. 165

Метаданные файла. 166

Процессы.. 169

Идентификаторы процесса. 170

Выделение памяти. 174

Создание процессов и управление ими. 178

Сигналы.. 184

Надежные сигналы.. 192

Группы и сеансы.. 200

Текущие и фоновые группы процессов. 203

Ограничения. 205

Примеры программ.. 211

Демон. 211

Командный интерпретатор. 215

Заключение. 218

Глава 3. Подсистема управления процессами.. 219

Основы управления процессом.. 220

Структуры данных процесса. 222

Состояния процесса. 229

Принципы управления памятью.. 232

Виртуальная и физическая память. 233

Сегменты.. 236

Страничный механизм.. 239

Адресное пространство процесса. 242

Управление памятью процесса. 244

Области. 245

Замещение страниц. 248

Управление памятью в ОС Linux. 254

Планирование выполнения процессов. 255

Обработка прерываний таймера. 257

Отложенные вызовы.. 258

"Будильники" (алармы) 259

Контекст процесса. 260

Принципы планирования процессов. 262

Планирование выполнения процессов в ОС Linux. 266

Создание процесса. 269

Запуск новой программы.. 275

Выполнение в режиме ядра. 278

Сон и пробуждение. 279

Завершение выполнения процесса. 281

Сигналы.. 282

Группы и сеансы.. 282

Управление сигналами. 282

Отправление сигнала. 283

Доставка и обработка сигнала. 284

Взаимодействие между процессами. 286

Каналы.. 287

FIFO.. 288

Идентификаторы и имена в IPC.. 291

Сообщения. 294

Семафоры.. 300

Разделяемая память. 305

Межпроцессное взаимодействие в BSD UNIX. Сокеты.. 312

Программный интерфейс сокетов. 314

Пример использования сокетов. 325

Сравнение различных систем межпроцессного взаимодействия. 329

Заключение. 330

Глава 4. Файловая подсистема. 331

Базовая файловая система System V.. 332

Суперблок. 333

Индексные дескрипторы.. 334

Имена файлов. 338

Недостатки и ограничения. 339

Файловая система BSD UNIX.. 340

Каталоги. 344

Файловая система ext2fs. 345

Журнальные файловые системы.. 351

Файловая система ext3fs. 353

Файловая система ufs2. 353

Архитектура виртуальной файловой системы.. 354

Виртуальные индексные дескрипторы.. 355

Монтирование файловой системы.. 359

Трансляция имен. 367

Доступ к файловой системе. 369

Файловые дескрипторы.. 370

Файловая таблица. 372

Блокирование доступа к файлу. 374

Буферный кэш.. 376

Внутренняя структура буферного кэша. 378

Операции ввода-вывода. 379

Кэширование в SVR4. 382

Целостность файловой системы.. 383

Заключение. 387

Глава 5. Подсистема ввода-вывода. 389

Драйверы устройств. 390

Типы драйверов. 390

Базовая архитектура драйверов. 392

Файловый интерфейс. 400

Клоны.. 403

Встраивание драйверов в ядро. 406

Блочные устройства. 407

Символьные устройства. 410

Интерфейс доступа низкого уровня. 411

Буферизация. 412

Архитектура терминального доступа. 414

Псевдотерминалы.. 415

Подсистема STREAMS. 418

Архитектура STREAMS. 420

Модули. 424

Сообщения. 426

Типы сообщений. 429

Передача данных. 431

Управление передачей данных. 433

Драйвер. 437

Головной модуль. 438

Доступ к потоку. 440

Создание потока. 442

Управление потоком.. 444

Мультиплексирование. 446

STREAMS в ОС Linux. 450

Заключение. 452

Глава 6. Поддержка сети в операционной системе UNIX.. 453

Семейство протоколов TCP/IP. 454

Краткая история TCP/IP. 455

Архитектура TCP/IP. 457

Общая модель сетевого взаимодействия OSI. 462

Протокол IP. 465

Адресация. 469

Протокол IP версии 6. 472

Формат заголовка IPv6. 472

Адресация IPv6. 475

Протоколы транспортного уровня. 478

User Datagram Protocol (UDP) 480

Transmission Control Protocol (TCP) 482

Состояния TCP-сеанса. 484

Передача данных. 489

Стратегии реализации TCP. 492

Синдром "глупого окна". 492

Медленный старт. 495

Устранение затора. 496

Повторная передача. 498

Программные интерфейсы.. 499

Программный интерфейс сокетов. 499

Программный интерфейс TLI/XTI. 505

Программный интерфейс высокого уровня. Удаленный вызов процедур. 522

Передача параметров. 524

Связывание. 525

Обработка особых ситуаций. 526

Семантика вызова. 526

Представление данных. 527

Сеть. 527

Как это работает?. 528

Поддержка сети в BSD UNIX.. 535

Структуры данных. 536

Маршрутизация. 541

Реализация TCP/IP. 548

Модуль IP. 550

Модуль UDP. 552

Модуль TCP. 554

Поддержка сети в UNIX System V.. 555

Интерфейс TPI. 557

Взаимодействие с прикладными процессами. 569

Интерфейс DLPI. 574

Доступ к среде передачи. 577

Протокол LLC.. 579

Инкапсуляция IP. 580

Внутренняя архитектура. 581

Примитивы DLPI. 585

Заключение. 590

Приложения. 591

Приложение А.. Дополнительная информация
об операционной системе UNIX.. 593

Книги. 593

Информация в Интернете. 595

Приложение Б. Глоссарий.. 599

Предметный указатель. 619




Введение

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

Созданная небольшой группой разработчиков, система UNIX расширялась и дорабатывалась; тысячи специалистов вложили в нее свой талант, десятки тысяч обогатили приложениями, и сегодня она служит миллионам людей, которые используют эту операционную систему в своей деятельности.

За время своего существования система UNIX претерпела значительные изменения, стала мощней, сложней и удобней. Однако основные идеи сохранились, удивляя нас своим изяществом и простотой. Именно они определяют "генотип" операционной системы, позволяя увидеть за красивыми названиями различных версий лаконичное слово UNIX. Именно изящество и простота этих идей являются основой жизненной силы UNIX, ее способности всегда идти в ногу со временем.

Причины популярности UNIX

Можно смело сказать, что операционная система UNIX полностью выдержала проверку временем. На каждом этапе своего развития UNIX решала определенные задачи, и сегодня, несмотря на появление более простых и удобных, с точки зрения администрирования, систем, она прочно занимает место среди лидеров. Самое удивительное, что, несмотря на наличие версий-лидеров, во многих случаях речь при этом идет не о конкретной реализации, например Linux, FreeBSD, Solaris или SCO, а именно о системе UNIX как таковой.

Перечислим основные черты UNIX, позволяющие понять причины долгожительства этой операционной системы:

ясность и переносимость. Код системы написан на языке высокого уровня C, что сделало ее простой для переноса на разные платформы. По оценкам одного из создателей UNIX, Дэнниса Ритчи, система на языке С имела на 20—40 % больший размер, а производительность ее была на 20% ниже аналогичной системы, написанной на ассемблере. Однако ясность и переносимость, полученные в результате, сыграли решающую роль в популярности UNIX;

модифицируемость. Код системы изначально распространялся в виде исходных текстов, что позволяло легко вносить в нее изменения. В связи с этим новые компании и новые специалисты (и не только специалисты) легко вливались в ряды разработчиков UNIX;

модульность. Разработчики заложили в основу системы модульную структуру: пользователь имел возможность дописать и включить в нее то, чего там, по его мнению, не хватало;

многозадачность. Удачно написанная система разделения времени в полной мере отвечала потребностям начала эры стремительного роста производи­тельности процессоров. В результате UNIX оказалась многозадачной много­пользовательской системой с широким спектром услуг, работая в которой можно было не замечать присутствия пользователей-конкурентов;

стандартизация. Несмотря на многообразие версий UNIX, основой всего семейства являются принципиально одинаковая архитектура и ряд стандартных интерфейсов. Опытный администратор без большого труда сможет обслужить другую версию системы, для пользователей переход на другую версию и вовсе может оказаться незаметным;

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

Общий взгляд на архитектуру UNIX

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

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

 

Рис. В.1. Модель системы UNIX

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

Рассмотрим более внимательно отдельные компоненты ядра системы.

Ядро системы

Ядро обеспечивает базовую функциональность операционной системы: создает процессы и управляет ими, распределяет память и обеспечивает доступ к файлам и периферийным устройствам.

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

В приведенном примере программа открывает файл, считывает из него данные и закрывает этот файл. При этом операции открытия (open), чтения (read) и закрытия (close) файла выполняются ядром по запросу задачи, а функции open(2), read(2)и close(2)являются системными вызовами:

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

main()

{

int fd;

char buf[80];

/*Откроем файл — получим ссылку (файловый дескриптор) fd*/

fd = open("file1", O_RDONLY);

/*Считаем в буфер buf 80 символов*/

read(fd, buf, sizeof(buf));

/*Закроем файл*/

close(fd);

}

Структура ядра представлена на рис. В.2.

Рис. В.2. Внутренняя структура ядра UNIX

Ядро состоит из трех основных подсистем:

1. Файловая подсистема;

2. Подсистема управления процессамии памятью;

3. Подсистема ввода-вывода.

Файловая подсистема

Обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисковых накопителях, и к периферийным устройствам. Одни и те же функции open(2), read(2), write(2) могут использоваться как при чтении или записи данных на диск, так и при выводе текста на принтер или терминал.

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

Файловая подсистема обеспечивает перенаправление запросов, адресованных периферийным устройствам, соответствующим модулям подсистемы ввода-вывода.

Подсистема управления процессами

Запущенная на выполнение программа порождает в системе один или более процессов (или задач). Подсистема управления процессами контролирует:

❒ создание и удаление процессов;

❒ распределение системных ресурсов (памяти, вычислительных ресурсов) между процессами;

❒ синхронизацию процессов;

❒ межпроцессное взаимодействие.

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

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

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

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

Подсистема ввода-вывода

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

История создания

В 1965 году Bell Telephone Laboratories(подразделение AT&T) совместно с General Electric Company и Массачусетским институтом технологии (MIT) начали разрабатывать новую операционную систему, названную MULTICS(MULTiplexed Information and Computing Service). Перед участниками проекта стояла цель создания многозадачной операционной системы разделения времени, способной обеспечить одновременную работу нескольких сотен пользователей. От Bell Labs в проекте приняли участие два сотрудника — Кен Томпсон (Ken Thompson) и Дэннис Ритчи (Dennis Ritchie). Хотя система MULTICS так и не была завершена (в 1969 году Bell Labs вышла из проекта), она стала предтечей операционной системы, впоследствии получившей название UNIX.

Однако Томпсон, Ритчи и ряд других сотрудников продолжили работу над созданием удобной среды программирования. Используя идеи и разработки, появившиеся в результате работы над MULTICS, они создали в 1969 году небольшую операционную систему, включавшую файловую систему, подсистему управления процессами и небольшой набор утилит. Система была написана на ассемблере и применялась на компьютере PDP-7. Эта операционная система получила производное от MULTICS название UNICS (UNiplexed Information and Computing Service), придуманное другим членом группы разработчиков, Брайаном Керниганом (Brian Kernighan).

Официальной датой рождения UNIX можно считать 1 января 1970 года. Именно с этого момента UNIX отсчитывает свое системное время.

Хотя ранняя версия UNIX многое обещала, она не смогла бы реализовать весь свой потенциал без применения в каком-либо реальном проекте. И такой проект нашелся. Когда в 1971 году патентному отделу Bell Labs понадобилась система обработки текста, в качестве операционной системы была выбрана UNIX. К тому времени система UNIX была перенесена на более мощный PDP-11, да и сама немного подросла: 16 Кбайт занимала собственно система, 8 Кбайт отводились прикладным программам, максимальный размер файла был установлен равным 64 Кбайт при 512 Кбайт дискового пространства.

Вскоре после создания первых ассемблерных версий Томпсон начал работать над компилятором для языка FORTRAN, а в результате разработал язык B. Это был интерпретатор со всеми свойственными интерпретатору ограничениями, и Ритчи переработал его в другой язык, названный С, позволявший генерировать машинный код. В 1973 году ядро операционной системы было переписано на языке высокого уровня С, — неслыханный до этого шаг, оказавший громадное влияние на популярность UNIX. Это означало, что теперь система UNIX могла быть перенесена на другие аппаратные платформы за считанные месяцы, кроме того, значительная модернизация системы и внесение изменений не представляли особых трудностей. Число работающих систем в Bell Labs превысило 25, и для сопровождения UNIX была сформирована группа UNIX System Group(USG).

Исследовательские версии UNIX

В соответствии с федеральным законодательством США AT&T не имела права коммерческого распространения UNIX и использовала ее для собственных нужд, но начиная с 1974 года операционная система стала передаваться университетам для образовательных целей.

Операционная система модернизировалась, каждая новая версия снабжалась соответствующей редакцией Руководства Программиста, откуда и сами версии системы получили название редакций. Всего было выпущено 10 версий-редакций, первая из которых вышла в 1971, а последняя — в 1989 году. Первые семь редакций были разработаны в Bell Labs Группой компьютерных исследований (Computer Research Group, CRG) и предназначались для компьютеров PDP-11, позже — для VAX. Другая группа, UNIX System Group, отвечала за сопровождение системы. Третья группа (Programmer's WorkBench, PWB) занималась разработкой среды программирования, ей мы обязаны появлением системы SCCS, именованных каналов и других важных идей.

Вскоре после выпуска Седьмой редакции разработкой системы стала заниматься USG.

Наиболее важные версии описаны в табл. В.1.

Таблица В.1. Наиболее значительные версии UNIX

Редакция Год выпуска Описание
Первая редакция   Первая версия UNIX, написанная на ассемблере для PDP‑11. Включала компилятор В и много известных команд и утилит, в том числе cat(1), chdir(1), chmod(1), cp(1), ed(1), find(1), mail(1), mkdir(1), mkfs(1M), mount(1M), mv(1), rm(1), rmdir(1), wc(1), who(1). В основном использовалась как инструментальное средство обработки текстов для патентного отдела Bell Labs
Третья редакция   В системе появилась команда cc(1), запускавшая компилятор С. Число установленных систем достигло 16
Четвертая редакция   Первая система, в которой ядро написано на языке высокого уровня С
Шестая редакция   Первая версия системы, доступная за пределами Bell Labs. Система полностью переписана на языке С. С этого времени появляются новые версии, разработанные за пределами Bell Labs, и растет популярность UNIX. В частности, эта версия системы была установлена Томпсоном в Калифорнийском университете в Беркли, и на ее основе вскоре была выпущена первая версия BSD (Berkeley Software Distribution) UNIX
Седьмая редакция   Эта версия включала командный интерпретатор Bourne Shell и компилятор языка С от Кернигана и Ритчи. Ядро было переписано для упрощения переносимости системы на другие платформы. Лицензия на эту версию была куплена фирмой Microsoft, которая разработала на ее базе операционную систему XENIX

Популярность UNIX росла, и к 1977 году число работающих систем уже превысило 500. В 1977 году компания Interactive Systems Corporation стала первым VAR (Value Added Reseller) системы UNIX, расширив ее для использования в системах автоматизации. Этот же год стал годом первого портирования UNIX с незначительными изменениями на компьютер, отличный от PDP.

Генеалогия UNIX

Хотя в книге речь пойдет о системах с общим названием UNIX, стоит оговориться, что обсуждать мы будем различные операционные системы. Не существует некоторой "стандартной" системы UNIX. Вы столкнетесь со множеством операционных систем, имеющих собственные названия и особенности. Но за этими особенностями и названиями все же нетрудно увидеть архитектуру, пользовательский интерфейс и среду программирования UNIX. Объясняется это достаточно просто — все эти операционные системы являются близкими или дальними родственниками. Поэтому знакомство с ними мы начнем с рассказа о генеалогии UNIX.

System V UNIX

Начиная с 1975 года фирма AT&T начала предоставлять лицензии на использование операционной системы как научно-образовательным учреждениям, так и коммерческим организациям. Поскольку основная часть системы поставлялась в исходных текстах, написанных на языке С, опытным программистам не требовалось детальной документации, чтобы разобраться в архитектуре UNIX. С ростом популярности микропроцессоров другие компании переносили UNIX на различные платформы, причем простота и ясность операционной системы искушали многих на ее расширение и модификацию, в результате чего появилось много различных вариантов базовой системы.

Не желая терять инициативу, AT&T в 1982 году объединила несколько существующих версий UNIX и создала версию под названием System III. В отличие от редакций, предназначавшихся, в первую очередь, для внутреннего использования и не получивших дальнейшего развития, System III была создана для распространения за пределами Bell Labs и AT&T и положила начало мощной ветви UNIX, которая и сегодня жива и развивается.

В 1983 году Bell Labs выпустила новую версию системы — System V. В 1984 году группа USG была трансформирована в лабораторию (UNIX System Development Laboratory, USDL), которая вскоре выпустила новую модификацию системы — System V Release 2 (SVR2). В этой версии были реализованы такие механизмы управления памятью, как замещение страниц и копирование при записи, и представлена система межпроцессного взаимодействия (InterProcess Communication, IPC) с разделяемой памятью, очередью сообщений и семафорами.

В 1987 году появилась следующая версия — System V Release 3 (SVR3). За ее разработку отвечало новое подразделение AT&T — Информационные системы AT&T (AT&T Information Systems, ATTIS). Эта версия отличалась большим набором дополнительных возможностей, включавших:

❒ подсистему ввода-вывода, основанную на архитектуре STREAMS;

❒ переключатель файловой системы, обеспечивавший одновременную поддержку различных файловых систем;

❒ разделяемые библиотеки;

❒ программный интерфейс сетевых приложений Transport Layer Interface (TLI).

System V Release 4 (SVR4)

В 1989 году была выпушена новая основная версия — System V Release 4. По существу, она объединила возможности нескольких известных версий UNIX: SunOS фирмы Sun Microsystems, BSD UNIXкомпании Berkeley Software Distribution и предыдущих версий System V.

Новые черты системы включали:

❒ командные интерпретаторы Korn и C (BSD);

❒ символические ссылки;

❒ систему терминального ввода-вывода, основанную на STREAMS (System V);

❒ отображаемые в память файлы (SunOS);

❒ сетевую файловую системуNFSи систему вызова удаленной процедуры RPC (SunOS);

❒ быструю файловую систему FFS (BSD);

❒ сетевой программный интерфейс сокетов (BSD);

❒ поддержку диспетчеризации реального времени.

Многие компоненты системы были поддержаны стандартами ANSI, POSIX, Х/Open и SVID.

UNIX компании Berkeley Software Distribution

Четвертая редакция UNIX была установлена в Калифорнийском университете в Беркли в 1974 году. С этого момента начинает свою историю ветвь UNIX, известная под названием BSD UNIX. Первая версия этой системы основывалась на Шестой редакции и была выпущена в 1978 году. В 1979 году на базе Седьмой редакции была разработана новая версия UNIX — 3BSD. Она явилась первой версией BSD, перенесенной на ЭВМ VAX. В этой системе, в частности, были реализованы виртуальная памятьи страничное замещение по требованию.

Важным для развития системы стал 1980 год, когда фирма Bolt, Beranek and Newman (BBN) подписала контракт с Отделом перспективных исследовательских проектов (DARPA) Министерства обороны США на разработку поддержки семейства протоколов TCP/IPв BSD UNIX. Эта работа была закончена в конце 1981 года, а ее результаты интегрированы в 4.2BSD UNIX.

Версия 4.2BSD была выпущена в середине 1983 года и включала поддержку работы в сетях, в частности, в сетях Ethernet. Это способствовало широкому распростра­нению локальных сетей, основанных на этой технологии. Система 4.2BSD также позволяла подключиться к сети ARPANET, быстрый рост которой наблюдался с начала 80-х. Разумеется, такая операционная система не могла не пользоваться большой популярностью. К тому же, в отличие от положения в AT&T, где сетевые разработки обычно не выходили за пределы компании, результаты, полученные в Беркли, были широко доступны. Поэтому 4.2BSD стала наиболее популярной системой в исследовательских кругах.

Однако большое количество нововведений привело к тому, что система получилась сырой, содержала ряд ошибок и имела определенные проблемы с быстродействием. В 1986 году была выпущена следующая версия — 4.3BSD, более надежная и с лучшей производительностью. В период с 1986 по 1990 год в систему было внесено много дополнений, включая сетевую файловую систему NFS, виртуальную файловую систему VFS, отладчик ядра и мощную поддержку сети.

Последними версиями, выпущенными в Беркли, стали системы 4.4BSD и BSD Lite, появившиеся в 1993 году.

OSF/1

В 1988 году AT&T и Sun Microsystems заключили соглашение о сотрудничестве в области разработки будущих версий System V. В ответ на это ряд компаний, производящих компьютеры или имеющих отношение к вычислительной технике, включая IBM, DEC, Hewlett Packard, создали организацию под названием Open Software Foundation (OSF), целью которой являлась разработка независимой от AT&T версии операционной системы. Результатом деятельности этой организации стала операционная система OSF/1. Хотя ряд коммерческих операционных систем связывают себя с этой ветвью, нельзя сказать, что OSF/1 явилась новым словом в мире UNIX. Скорее, это был политический шаг, призванный снизить доминирующую роль ряда фирм, занимавшихся разработкой UNIX System V.

Версии UNIX, использующие микроядро

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

Наиболее известны следующие версии микроядра:

❒ микроядро Mach, разработанное в университете Карнеги-Меллона. На его основе разработаны многие известные операционные системы: NeXT, Flux, GNUHurd, MkLinux, Darwin;

❒ микроядро Chorus. Разработка Sun Microsystem[2]2. На базе этого микроядра были созданы системы Chorus/MiX V.3, Chorus/MiX V.4 и ChorusOS;

❒ QNX— быстрое микроядро для платформы x86, соответствующее стандарту POSIX 1. Основа UNIX-подобной ОС реального времени QNX Neutrino;

❒ Minix— микроядро очень популярной версии UNIX для PC, которая была разработана Энди Тэненбаумом (Andy Tanenbaum) как приложение к его книге по архитектуре UNIX. Широко использовалось в научных и академических кругах, сыграло громадную роль в распространении UNIX.

Свободно распространяемая система UNIX

Система UNIX никогда бы не завоевала той популярности, которой она пользуется, если бы не было свободно распространяемых версий этой системы для платформы x86. Дешевые персональные компьютеры и свободно распространяемая система UNIX делают эту систему сегодня доступной практически каждому. Соединение изящества и прозрачности UNIX с дешевизной и производительностью Intel стало причиной повсеместного внедрения и распространения UNIX.

Во многом развитие свободно распространяемого программного обеспечения обязано Фонду свободного программного обеспечения (Free Software Foundation, FSF), проекту GNU (GNU project) и их руководителю Ричарду Столмену (Richard Stallman). Он основал FSF в 1984 году для разработки программного обеспечения, главным образом, прикладного, на общественных началах. За двадцать лет работы FSF пришел к полной комплектации свободно распространяемых ОС прикладными и сервисными программами, разработанными в рамках проекта GNU.

Наиболее известны четыре версии, ориентированные на архитектуру x86 и распространяемые бесплатно. Это NetBSD, FreeBSD, OpenBSD и Linux. Первые три произошли от BSD-ветви UNIX и базируются на BSD 4.4-Lite, не попавшей под лицензионные ограничения AT&T. ОС Linux была создана "из ничего" сотрудником университета Хельсинки Линусом Торвальдсом (Linus Torvalds). Получилось это так. Очень популярная версия UNIX для PC, называемая Minix, была разработана Энди Тэненбаумом как приложение к его книге по архитектуре UNIX. Книга Тэненбаума содержала полные листинги исходных текстов системы. Дополнительный набор дискет позволял установить Minix даже на PC с процессором 8086 (если найдется такой компьютер). В 1991 году тогда еще студент университета Хельсинки Линус Торвальдс объявил в группе новостей comp.os.minix, что он разрабатывает (как любитель) новую Minix-подобную операционную систему для 386(486) АТ. Через полтора месяца версия 0.01 операционной системы, названной Linux, была выпущена. Первый десяток версий Linux еще находился в зависимости от Minix, но Линус упорно трудился. Разработка системы была поддержана организацией Free Software Foundation, к работе над проектом присоединились сотни программистов. Вскоре началась разработка многочисленных коммерческих версий. Операционная система Linux стала настоящим всемирным проектом. Первый ощутимый результат — Linux RedHat 1.0 — был выпущен в ноябре 1994 года, к началу 2000-х годов Linux RedHat стала реальным конкурентом



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-08-04 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: