close

Вход

Забыли?

вход по аккаунту

?

linux.pnhost.ru/downloads/referat

код для вставкиСкачать
Введение
Операционная система -- комплекс управляющих и обрабатывающих программ, которые, с одной стороны, выступают
как интерфейс между устройствами вычислительной системы и прикладными программами, а с другой стороны -предназначены для управления устройствами, управления вычислительными процессами, эффективного
распределения вычислительных ресурсов между вычислительными процессами и организации надёжных
вычислений.
Сейчас трудно представить себе компьютер без операционной системы, отвечающей определению, приведенному
выше. Без операционной системы, для запуска программы вам придется каждый раз загружать компьютер заново, а
для хранения данных придется работать напрямую с носителем. Все стандартные алгоритмы для работы с памятью и
устройствами пришлось бы хранить в телепрограммы. Если учесть разнообразие оборудования, нетрудно
представить, что размер программы вырастет в разы. Самым разумным решением всех этих проблем будет
объединение основных алгоритмов работы с памятью, устройствами ввода и вывода и прочего в одной программе,
которая будет способна запускать другие программы и предоставлять им доступ к стандартным алгоритмам через
удобный интерфейс. Именно этим и занимается операционная система.
Функции операционных систем
Основные функции:
Выполнение по запросу программ (ввод и вывод данных, запуск и остановка других программ, выделение и
освобождение дополнительной памяти и др.).
Загрузка программ в оперативную память и их выполнение.
Стандартизованный доступ к периферийным устройствам (устройства ввода-вывода).
Управление оперативной памятью (распределение между процессами, организация виртуальной памяти).
Управление доступом к данным на энергонезависимых носителях (таких как жёсткий диск, оптические диски и др.),
организованным в той или иной файловой системе.
Обеспечение пользовательского интерфейса.
Сохранение информации об ошибках системы.
Дополнительные функции:
Параллельное или псевдопараллельное выполнение задач (многозадачность).
Эффективное распределение ресурсов вычислительной системы между процессами.
Разграничение доступа различных процессов к ресурсам.
Организация надёжных вычислений (невозможности одного вычислительного процесса намеренно или по ошибке
повлиять на вычисления в другом процессе), основана на разграничении доступа к ресурсам.
Взаимодействие между процессами: обмен данными, взаимная синхронизация.
Защита самой системы, а также пользовательских данных и программ от действий пользователей (злонамеренных
или по незнанию) или приложений.
Многопользовательский режим работы и разграничение прав доступа (см. аутентификация, авторизация).
История операционных систем
Предыстория
Раньше пользователь получал машину в единоличное пользование; он приходил с программой и данными, обычно
записанными на перфокартах или магнитных лентах. Программа загружалась в машину, которая начинала работать,
до тех пор, пока программа не завершалась или не выдавала ошибку. Отладка программ осуществлялась при помощи
панели управления, снабжённой тумблерами и лампочками. Наибольших успехов в этом достиг Алан Тьюринг на
ранней машине Манчестерский Марк I, к тому времени он уже разрабатывал основные принципы работы
операционных систем.
Более поздние машины имели библиотеки, которые связывались с пользовательской программой для поддержки
таких операций как ввод и вывод. Это было началом современных операционных систем. Однако машины всё ещё
выполняли одну задачу за один промежуток времени.
По мере увеличения производительности машин, время на исполнение программ уменьшалось, а время передачи
оборудования от одного пользователя другому оставалось прежним. Выстраивались длинные очереди из людей,
желающих запустить свою программу, каждый из них имел по несколько магнитных лент с программами и данными.
Операторы машин не успевали контролировать все операции, проводимые с компьютерами, поэтому возникла
необходимость в автоматическом контроле и выявлении ошибок.
Эти требования были учтены при создании первых операционных систем. Сначала для этого были использованы
библиотеки времени исполнения, которые запускались до первой пользовательской задачи, считывали информацию
с носителей, контролировали исполнение, записывали результаты и немедленно переключались на исполнение
следующей задачи.
Эра мейнфреймов
Первой в мире операционной системой считается GM OS (General Motors Operating System).
Ранние операционные системы были очень разнородными, каждый поставщик или заказчик создавали одну или
более систем для конкретного компьютера. Каждая операционная система, даже одного производителя, могла иметь
совершенно разные команды и возможности. Обычно с появлением новой машины появлялась и новая
операционная система, и приложения приходилось приспосабливать, перекомпилировать, перепикрепивать и
перепроверять.
Системы для оборудования IBM
Такое состояние дел продолжалось до 1960-х, когда IBM, лидирующий поставщик оборудования на тот момент,
прекратила разработку существующих систем и направила усилия на создание серии машин System/360, все
представители которой должны были использовать одинаковые инструкции и архитектуру ввода/вывода. IBM начала
разрабатывать единую операционную систему для этих машин, OS/360. Проблемы, возникшие при создании OS/360,
стали легендарными и были описаны в книге Мифический человеко-месяц Фредерика Брукса. Из-за различий в
производительности и задержек при разработке программного обеспечения, вместо единой OS/360 было
представлено семейство операционных систем под таким же названием.
IBM выпустила ещё несколько операционных систем, среди них три оказались наиболее долгоживущими:
OS/MFT для систем среднего класса. Она имела одного преемника, систему OS/VSI, развитие которой продолжалось
до 1980-х.
OS/MVT для крупных машин. Она была сходна с OS/MFT (программы могли переноситься между ними без
перекомпилирования), но имела более продвинутое управление памятью и систему разделения времени, TSO. MVT
имела несколько наследников, включая z/OS.
DOS/360 для низших моделей System/360 имела несколько преемников, включая z/VSE, используемую до настоящего
времени. Она значительно отличалась от OS/MFT и OS/MVT.
IBM поддерживает полную совместимость, поэтому разработанные в шестидесятых программы всё ещё можно
запускать под z/VSE (если они создавались для DOS/360) или z/OS (если создавались для OS/MFT или OS/MVT) без
изменений.
IBM разрабатывала, но официально не выпустила TSS/360, операционную сиcтему с разделением времени для S/360
Model 67.
Несколько операционных систем для архитектур IBM S/360 и S/370 были разработаны третьими фирмами, включая
Michigan Terminal System (MTS) и MUSIC/SP.
Другие операционные системы для мейнфреймов
Control Data Corporation разработала операционную систему SCOPE в 1960-х для обработки пакетных заданий. В
сотрудничестве с Университетом Миннесота были созданы операционные системы KRONOS и NOS в 1970-х, которые
поддерживали одновременный запуск заданий и разделение времени.
В конце 1970-х Control Data и Университет Иллинойс разработали машину PLATO, привнесшей множество инноваций
для своего времени. Система использовала язык программирования TUTOR, что позволило создавать такие
программы, как чат в реальном времени и многопользовательские графические игры.
UNIVAC, первый производитель коммерческих компьютеров, создала серию операционных систем EXEC. Как
большинство ранних операционных систем для мейнфреймов, это были операционные системы, ориентированные
на обработку пакетных заданий. В 1970-х UNIVAC выпустила систему Real-Time Basic.
Burroughs Corporation представила машину B5000 в 1961 с операционной системой MCP (Master Control Program).
B5000 поддерживала исключительно языки высокого уровня и не поддерживала машинные языки или ассемблер;
таким образом, MCP стала первой операционной системой, написанной только на высокоуровневом языке (ESPOL,
диалект Алгола). MCP также представила несколько инноваций, включая первую коммерческую реализацию
виртуальной памяти. MCP по сей день используется на компьютерах Unisys ClearPath/MCP.
Project MAC разработал Multics и General Electric Comprehensive Operating Supervisor (GECOS), в которых была введена
концепция уровней привилегий.
Digital Equipment Corporation разработала множество операционных систем для своих различных линеек
компьютеров, включая системы TOPS-10 и TOPS-20 с разделением времени для 36-битных машин PDP-10. До
широкого рапространения UNIX, TOPS-10 пользовалась большой популярностью в университетах и раннем
сообществе ARPANET.
Миникомпьютеры и развитие UNIX
Начальные версии операционной системы UNIX были разработаны в AT&T Bell Laboratories в конце 1960-х. Будучи
абсолютно бесплатной в первых версиях и легко модифицируемой, эта система завоевала большую популярность. Так
как UNIX была написана на языке высокого уровня Си, её можно легко было перенести на новую аппаратную
архитектуру. Эта переносимость позволила ей стать основной системой для второго поколения миникомпьютеров и
первого поколения рабочих станций.
В то же время Digital Equipment Corporation создала простую операционную систему RT-11 для серии 16-битных
машин PDP-11, и систему VMS для 32-битных компьютеровVAX.
Классификация операционных систем
В зависимости от алгоритмов управления процессором, операционные системы можно делить на:
Однозадачные и многозадачные
Однопользовательские и многопользовательские
Однопроцессорные и многопроцессорные системы
Локальные и сетевые.
Однозадачные и многозадачные операционные системы
Однозадачные операционные системы в отличие от многозадачных не позволяют выполнять несколько задач
параллельно, в качестве хорошего примера простой однозадачной ОС можно привести MS-DOS.
MS-DOS-- коммерческая операционная система фирмы Microsoft для IBM PC-совместимых персональных
компьютеров. MS-DOS -- самая известная ОС из семейства DOS, ранее устанавливавшаяся на большинство IBM PCсовместимых компьютеров. Со временем она была вытеснена ОС семейства Windows 9x и Windows NT.
MS-DOS была создана в 1981 году и в ходе её развития было выпущено восемь крупных версий (1.0, 2.0 и т. д.) и два
десятка промежуточных (3.1, 3.2 и т. п.), пока в 2000 году Microsoft не прекратила её разработку. Это был ключевой
продукт фирмы, дававший ей существенный доход и маркетинговый ресурс в ходе развития Microsoft от
разработчика языка программирования до крупной компании, производящей самое разнообразное программное
обеспечение.
Последней коробочной версией стала 6.22, однако MS-DOS продолжала служить загрузчиком для Windows 95 (версии
7.0 и 7.1), Windows 98 (версия 7.1) и Windows ME (версия 8.0).
Минимальный набор файлов MS-DOS:
Файлы ядра:
BOOT.MBR -- загрузчик, находящийся на нулевом секторе и передающий управление на IO.SYS
IO.SYS -- расширение BIOS
MSDOS.SYS -- обработка прерываний
Командный процессор:
COMMAND.COM -- командный процессор (поддержка интерфейса командной строки).
Строго говоря, для запуска MS-DOS наличие файла COMMAND.COM не является необходимым. Его можно заменить
другим командным процессором, способным выполнять нужные вам команды. Делается это добавлением в
CONFIG.SYS строки shell=c:\my\myprog.com. В своё время сторонними разработчиками было выпущено множество
командных процессоров. Наиболее распространённый командный процессор, выпущенный сторонней фирмой, был
NDOS.COM (лицензированный 4DOS) из пакета Norton Utilities фирмы Symantec. Новые версии командного
процессора 4DOS продолжают выпускаться до сих пор.
Многозадачные операционные системы управляют разделением совместно используемых ресурсов, таких как
процессор, оперативная память, файлы и внешние устройства.
Многозадачность -- свойство операционной системы или среды программирования обеспечивать возможность
параллельной (или псевдопараллельной) обработки нескольких процессов. Истинная многозадачность операционной
системы возможна только в распределённых вычислительных системах.
Существует 2 типа многозадачности[1]:
Процессная многозадачность (основанная на процессах -- одновременно выполняющихся программах). Здесь
программа -- наименьший элемент кода, которым может управлять планировщик операционной системы.
Поточная многозадачность (основанная на потоках). Наименьший элемент управляемого кода -- поток (одна
программа может выполнять 2 и более задачи одновременно).
Свойства многозадачной среды
Примитивные многозадачные среды обеспечивают чистое «разделение ресурсов», когда за каждой задачей
закрепляется определённый участок памяти, и задача активизируется в строго определённые интервалы времени.
Более развитые многозадачные системы проводят распределение ресурсов динамически, когда задача стартует в
памяти или покидает память в зависимости от её приоритета и от стратегии системы. Такая многозадачная среда
обладает следующими особенностями:
Каждая задача имеет свой приоритет, в соответствии с которым получает процессорное время и память
Система организует очереди задач так, чтобы все задачи получили ресурсы, в зависимости от приоритетов и стратегии
системы
Система организует обработку прерываний, по которым задачи могут активироваться, деактивироваться и удаляться
По окончании положенного кванта времени ядро временно переводит задачу из состояния выполнения в состояние
готовности, отдавая ресурсы другим задачам. При нехватке памяти страницы невыполняющихся задач могут быть
вытеснены на диск (своппинг), а потом через определённое системой время, восстанавливаться в памяти
Система обеспечивает защиту адресного пространства задачи от несанкционированного вмешательства других задач
Система обеспечивает защиту адресного пространства своего ядра от несанкционированного вмешательства задач
Система распознаёт сбои и зависания отдельных задач и прекращает их
Система решает конфликты доступа к ресурсам и устройствам, не допуская тупиковых ситуаций общего зависания от
ожидания заблокированных ресурсов
Система гарантирует каждой задаче, что рано или поздно она будет активирована
Система обрабатывает запросы реального времени
Система обеспечивает коммуникацию между процессами
Типы псевдопараллельной многозадачности:
Невытесняющая многозадачность
Тип многозадачности, при котором операционная система одновременно загружает в память два или более
приложений, но процессорное время предоставляется только основному приложению. Для выполнения фонового
приложения оно должно быть активизировано. Подобная многозадачность может быть реализована не только в
операционной системе, но и с помощью программ-переключателей задач. В этой категории известна программа
DESQview, работавшая под DOS и выпущенная первый раз в 1985 году.
Совместная или кооперативная многозадачность
Тип многозадачности, при котором следующая задача выполняется только после того, как текущая задача явно
объявит себя готовой отдать процессорное время другим задачам. Как частный случай, такое объявление
подразумевается при попытке захвата уже занятого объекта mutex (ядро Linux), а также при ожидании поступления
следующего сообщения от подсистемы пользовательского интерфейса (Windows версий до 3.x включительно, а также
16-битные приложения в Windows 9x).
Кооперативную многозадачность можно назвать многозадачностью «второй ступени» поскольку она использует
более передовые методы, чем простое переключение задач, реализованное многими известными программами
(например, DOS Shell из MS-DOS 5.0 при простом переключении активная программа получает все процессорное
время, а фоновые приложения полностью замораживаются. При кооперативной многозадачности приложение может
захватить фактически столько процессорного времени, сколько оно считает нужным. Все приложения делят
процессорное время, периодически передавая управление следующей задаче.
Преимущества кооперативной многозадачности: отсутствие необходимости защищать все разделяемые структуры
данных объектами типа критических секций и mutex'ов, что упрощает программирование, особенно перенос кода из
однозадачных сред в многозадачные.
Недостатки: неспособность всех приложений работать в случае ошибки в одном из них, приводящей к отсутствию
вызова операции «отдать процессорное время». Крайне затрудненная возможность реализации многозадачной
архитектуры ввода-вывода в ядре ОС, позволяющей процессору исполнять одну задачу в то время, как другая задача
инициировала операцию ввода-вывода и ждет её завершения.
Реализована в таких ОС, как:
В пользовательском режиме ОС Windows версий до 3.х включительно
Mac OS версий до Mac OS X внутри ядер многих UNIX-подобных ОС, таких, как FreeBSD
Linux в течение долгого времени.
Вытесняющая или приоритетная многозадачность (режим реального времени)
Вид многозадачности, в котором операционная система сама передает управление от одной выполняемой
программы другой в случае завершения операций ввода-вывода, возникновения событий в аппаратуре компьютера,
истечения таймеров и квантов времени, или же поступлений тех или иных сигналов от одной программы к другой. В
этом виде многозадачности процессор может быть переключен с исполнения одной программы на исполнение
другой без всякого пожелания первой программы и буквально между любыми двумя инструкциями в её коде.
Распределение процессорного времени осуществляется планировщиком процессов. К тому же каждой задаче может
быть назначен пользователем или самой операционной системой определенный приоритет, что обеспечивает гибкое
управление распределением процессорного времени между задачами (например, можно снизить приоритет
ресурсоёмкой программе, снизив тем самым скорость её работы, но повысив производительность фоновых
процессов). Этот вид многозадачности обеспечивает более быстрый отклик на действия пользователя.
Преимущества: возможность полной реализации многозадачного ввода-вывода в ядре ОС, когда ожидание
завершения ввода-вывода одной программой позволяет процессору тем временем исполнять другую программу.
Сильное повышение надежности системы в целом, в сочетании с использованием защиты памяти -- идеал в виде «ни
одна программа пользовательского режима не может нарушить работу ОС в целом» становится достижимым хотя бы
теоретически, вне вытесняющей многозадачности он не достижим даже в теории. Возможность полного
использования многопроцессорных и многоядерных систем.
Недостатки: необходимость особой дисциплины при написании кода, особые требования к его реентрантности, к
защите всех разделяемых и глобальных данных объектами типа критических секций и mutex'ов.
Реализована в таких ОС, как:
VMS
Linux
в пользовательском режиме (а часто и в режиме ядра) всех UNIX-подобных ОС, включая версии Mac OS X, iOS; Symbian
OS
в режиме ядра ОС Windows 3.x -- только при исполнении на процессоре 386 или старше, «задачами» являются только
все Windows-приложения вместе взятые и каждая отдельная виртуальная машина ДОС, между приложениями
Windows вытесняющая многозадачность не использовалась
Windows 95/98/ME -- без полноценной защиты памяти, что служило причиной крайне низкой, на одном уровне с MSDOS, Windows 3.x и Mac OS версий до X -- надежности этих ОС
Windows NT/2000/XP/Vista/7 и в режиме ядра, и в пользовательском режиме.
AmigaOS -- все версии, до версии 4.0 без полноценной защиты памяти, что на практике для системных программ
почти не сказывалось на надёжности из-за высокой стандартизированности, прозрачных API и SDK. Программы
ориентированные на «железо» Амиги, наоборот не отличались надёжностью.
Структура операционной системы
Защищенный режим работы процессора
Современные операционные системы работают преимущественно в защищенном режиме. Впервые защищенный
режим появился в микропроцессоре i80286 фирмы Intel. Именно этот режим позволяет полностью использовать все
возможности, предоставляемые микропроцессором.
Процессы и потоки
Основными элементами современной многозадачной ОС являются процессы и потоки. Основной задачей
операционной системы является работа с этими элементами.
Процесс -- выполнение пассивных инструкций компьютерной программы на процессоре ЭВМ. Стандарт ISO 9000:2000
Definitions определяет процесс как совокупность взаимосвязанных и взаимодействующих действий, преобразующих
входящие данные в исходящие.
Компьютерная программа сама по себе это только пассивная совокупность инструкций, в то время как процесс -- это
непосредственное выполнение этих инструкций.
Часто процессом называют выполняющуюся программу и все её элементы: адресное пространство, глобальные
переменные, регистры, стек, открытые файлы и т. д.
Процесс является «самой тяжёлой» единицей планирования ядра. Собственные ресурсы для процесса выделяются
операционной системой. Ресурсы включают память, дескрипторы файлов, разъёмы, дескрипторы устройств и окна.
Процессы используют адресное пространство и файлы ресурсов в режиме разделения времени только через явные
методы, такие как наследование дескрипторов файлов и сегментов разделяемой памяти. Процессы, как правило,
предварительно преобразованы к многозадачному способу выполнения.
Поток выполнения является наименьшей единицей обработки, исполнение которой может быть назначено
операционной системой. Реализация потоков выполнения и процессов в разных операционных системах отличается
друг от друга, но в большинстве случаев поток выполнения находится внутри процесса. Несколько потоков
выполнения могут существовать в рамках одного и того же процесса и совместно использовать ресурсы, такие как
память, тогда как процессы не разделяют этих ресурсов. В частности, потоки выполнения разделяют инструкции
процесса (его код) и его контекст (значения переменных, которые они имеют в любой момент времени). В качестве
аналогии потоки выполнения процесса можно уподобить нескольким вместе работающим поварам. Все они готовят
одно блюдо, читают одну и ту же кулинарную книгу с одним и тем же рецептом и следуют его указаниям, причём не
обязательно все они читают на одной и той же странице.
Потоки выполнения ядра относятся к «лёгким» единицам планирования ядра. Внутри каждого процесса существует
по крайней мере один поток выполнения ядра. Если в рамках процесса могут существовать несколько потоков
выполнения ядра, то они совместно используют общую память и файл ресурсов. Если процесс выполнения
планировщика операционной системы является приоритетным, то потоки выполнения ядра тоже являются
приоритетно многозадачными. Потоки выполнения ядра не имеют собственных ресурсов, за исключением стека
вызовов, копии регистров процессора, включая счётчик команд, и локальную память потока выполнения (если она
есть). Ядро может назначить по одному потоку выполнения для каждого логического ядра системы (поскольку
каждый процессор разделяет сам себя на несколько логических ядер, если он поддерживает многопоточность, либо
поддерживает только одно логическое ядро ??на каждое физическое ядро, если не поддерживает многопоточность),
а может выполнять свопинг заблокированных потоков выполнения. Однако потоки выполнения ядра требует гораздо
больше времени, чем требуется на свопинг пользовательских потоков выполнения.
Отличие потоков выполнения от процессов:
Потоки выполнения отличаются от традиционных процессов многозадачной операционной системы тем, что:
процессы, как правило, независимы, тогда как потоки выполнения существуют как составные элементы процессов
процессы несут значительно больше информации о состоянии, тогда как несколько потоков выполнения внутри
процесса совместно используют информацию о состоянии, а также память и другие вычислительные ресурсы
процессы имеют отдельные адресные пространства, тогда как потоки выполнения совместно используют их адресное
пространство
процессы взаимодействуют только через предоставляемые системой механизмы связей между процессами
переключение контекста между потоками выполнения в одном процессе, как правило, быстрее, чем переключение
контекста между процессами.
Управление памятью
Память является важнейшим ресурсом, требующим тщательного управления со стороны многозадачной
операционной системы. Функциями ОС по управлению памятью являются: отслеживание свободной и занятой
памяти, выделение памяти процессам и освобождение памяти при завершении процессов.
Функции ОС по управлению памятью
Под памятью (memory) здесь подразумевается оперативная память компьютера. В отличие от памяти жесткого диска,
которую называют внешней памятью (storage), оперативной памяти для сохранения информации требуется
постоянное электропитание.
Память является важнейшим ресурсом, требующим тщательного управления со стороны мультипрограммной
операционной системы. Особая роль памяти объясняется тем, что процессор может выполнять инструкции протравы
только в том случае, если они находятся в памяти. Память распределяется как между модулями прикладных
программ, так и между модулями самой операционной системы.
В ранних ОС управление памятью сводилось просто к загрузке программы и ее данных из некоторого внешнего
накопителя (перфоленты, магнитной ленты или магнитного диска) в память. С появлением мультипрограммирования
перед ОС были поставлены новые задачи, связанные с распределением имеющейся памяти между несколькими
одновременно выполняющимися программами.
Функциями ОС по управлению памятью в мультипрограммной системе являются:
отслеживание свободной и занятой памяти;
выделение памяти процессам и освобождение памяти по завершении процессов;
вытеснение кодов и данных процессов из оперативной памяти на диск (полное или частичное), когда размеры
основной памяти не достаточны для размещения в ней всех процессов, и возвращение их в оперативную память,
когда в ней освобождается место;
настройка адресов программы на конкретную область физической памяти.
Помимо первоначального выделения памяти процессам при их создании ОС должна также заниматься
динамическим распределением памяти, то есть выполнять запросы приложений на выделение им дополнительной
памяти во время выполнения. После того как приложение перестает нуждаться в дополнительной памяти, оно может
возвратить ее системе. Выделение памяти случайной длины в случайные моменты времени из общего пула памяти
приводит к фрагментации и, вследствие этого, к неэффективному ее использованию. Дефрагментация памяти тоже
является функцией операционной системы.
Во время работы операционной системы ей часто приходится создавать новые служебные информационные
структуры, такие как описатели процессов и потоков, различные таблицы распределения ресурсов, буферы,
используемые процессами для обмена данными, синхронизирующие объекты и т. п. Все эти системные объекты
требуют памяти»» В некоторых ОС заранее (во время установки) резервируется некоторый фиксированный объем
памяти для системных нужд. В других же ОС используется более гибкий подход, при котором память для системных
целей выделяется динамически. В таком случае разные подсистемы ОС при создании своих таблиц, объектов,
структур и т. п. обращаются к подсистеме управления памятью с запросами.
Защита памяти -- это еще одна важная задача операционной системы, которая состоит в том, чтобы не позволить
выполняемому процессу записывать или читать данные из памяти, назначенной другому процессу. Эта функция, как
правило, реализуется программными модулями ОС в тесном взаимодействии с аппаратными средствами.
Алгоритмы распределения памяти
Следует ли назначать каждому процессу одну непрерывную область физической памяти или можно выделять память
«кусками»? Должны ли сегменты программы, загруженные в память, находиться на одном месте в течение всего
периода выполнения процесса или можно ее время от времени сдвигать? Что делать, если сегменты программы не
помещаются в имеющуюся память? Разные ОС по-разному отвечают на эти и другие базовые вопросы управления
памятью. Далее будут рассмотрены наиболее общие подходы к распределению памяти, которые были характерны
для разных периодов развития операционных систем. Некоторые из них сохранили актуальность и широко
используются в современных ОС, другие же представляют в основном только познавательный интерес, хотя их и
сегодня можно встретить в специализированных системах.
Все алгоритмы распределения памяти разделены на два класса: алгоритмы, в которых используется перемещение
сегментов процессов между оперативной памятью и диском, и алгоритмы, в которых внешняя память не
привлекается.
Ввод и вывод информации
Подсистема ввода-вывода (Input-Output Subsystem) мультипрограммной ОС при обмене данными с внешними
устройствами компьютера должна решать ряд общих задач, из которых наиболее важными являются следующие:
организация параллельной работы устройств ввода-вывода и процессора;
согласование скоростей обмена и кэширование данных;
разделение устройств и данных между процессами;
обеспечение удобного логического интерфейса между устройствами и остальной частью системы;
поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера;
динамическая загрузка и выгрузка драйверов;
поддержка нескольких файловых систем;
поддержка синхронных и асинхронных операций ввода-вывода.
Рассмотрим некоторые задачи детально.
Организация параллельной работы устройств ввода-вывода и процессора
Каждое устройство ввода-вывода вычислительной системы -- диск, принтер, терминал и т. п. -- снабжено
специализированным блоком управления, называемым контроллером. Контроллер взаимодействует с драйвером -системным программным модулем, предназначенным для управления данным устройством. Контроллер
периодически принимает от драйвера выводимую на устройство информацию, а также команды управления,
которые говорят о том, что с этой информацией нужно сделать (например, вывести в виде текста в определенную
область терминала или записать в определенный сектор диска). Под управлением контроллера устройство может
некоторое время выполнять свои операции автономно, не требуя внимания со стороны центрального процессора. Это
время зависит от многих факторов -- объема выводимой информации, степени интеллектуальности управляющего
устройством контроллера, быстродействия устройства и т. п. Даже самый примитивный контроллер, выполняющий
простые функции, обычно тратит довольно много времени на самостоятельную реализацию подобной функции после
получения очередной команды от процессора. Это же справедливо и для сложных контроллеров, так как скорость
работы любого устройства ввода-вывода, даже самого скоростного, обычно существенно ниже скорости работы
процессора.
Процессы, происходящие в контроллерах, протекают в периоды между выдачами команд независимо от ОС. От
подсистемы ввода-вывода требуется спланировать в реальном масштабе времени (в котором работают внешние
устройства) запуск и приостановку большого количества разнообразных драйверов, обеспечив приемлемое время
реакции каждого драйвера на независимые события контроллера. С другой стороны, необходимо минимизировать
загрузку процессора задачами ввода-вывода, оставив как можно больше процессорного времени на выполнение
пользовательских потоков.
Данная задача является классической задачей планирования систем реального времени и обычно решается на основе
многоуровневой приоритетной схемы обслуживания по прерываниям. Для обеспечения приемлемого уровня
реакции все драйверы (или части драйверов) распределяются по нескольким приоритетным уровням в соответствии с
требованиями ко времени реакции и временем использования процессора. Для реализации приоритетной схемы
обычно задействуется общий диспетчер прерываний ОС.
Разделение устройств и данных между процессами
Устройства ввода-вывода могут предоставляться процессам как в монопольное, так и в совместное (разделяемое)
использование. При этом ОС должна обеспечивать контроль доступа теми же способами, что и при доступе процессов
к другим ресурсам вычислительной системы -- путем проверки прав пользователя или группы пользователей, от
имени которых действует процесс, на выполнение той или иной операции над устройством. Например, определенной
группе пользователей последовательный порт разрешено захватывать в монопольное владение, а другим
пользователям это запрещено.
Операционная система может контролировать доступ не только к устройству в целом, но -и к отдельным порциям
данных, хранимых или отображаемых этим устройством. Диск является типичным примером устройства, для которого
важно контролировать доступ не к устройству в целом, а к отдельным каталогам и файлам. При выводе информации
на графический дисплей отдельные окна экрана также представляют собой ресурсы, к которым необходимо
обеспечить тот или иной вид доступа для протекающих в системе процессов. При этом для каждой порции данных
или части устройства могут быть заданы свои права доступа, не связанные прямо с правами доступа к устройству в
целом. Так, в файловой системе обычно для каждого каталога и файла можно задать индивидуальные права доступа.
Очевидно, что для организации совместного доступа к частям устройства или частям данных, хранящихся на нем,
непременным условием является задание режима совместного использования устройства в целом.
Одно и то же устройство в разные периоды времени может использоваться как в разделяемом, так и в монопольном
режимах. Тем не менее существуют устройства, для которых обычно характерен один из этих режимов, например
последовательные порты и алфавитно-цифровые терминалы чаще используются в монопольном режиме, а диски -- в
режиме совместного доступа. Операционная система должна предоставлять эти устройства в обоих режимах,
осуществляя отслеживание процедур захвата и освобождения монопольно используемых устройств, а в случае
совместного использования оптимизируя последовательность операций ввода-вывода для различных процессов в
целях повышения общей производительности, если это возможно. Например, при обмене данными нескольких
процессов с диском можно так упорядочить последовательность операций, что непроизводительные затраты
времени на перемещение головок существенно уменьшаются (при этом для отдельных процессов возможно
некоторое замедление операции ввода-вывода).
При разделении устройства между процессами может возникнуть необходимость в разграничении порции данных
двух процессов друг от друга. Обычно такая потребность возникает при совместном использовании так называемых
последовательных устройств, данные в которых в отличие от устройств прямого доступа не адресуются. Типичным
представителем такого рода устройства является принтер, который не выделяется в монопольное владение
процессам, и в то же время каждый документ должен быть напечатан в виде последовательного набора страниц. Для
подобных устройств организуется очередь заданий на вывод, при этом каждое задание представляет собой порцию
данных, которую нельзя разрывать, например документ для печати. Для хранения очереди заданий используется
спул-файл, который одновременно согласует скорости работы принтера и оперативной памяти и позволяет
организовать разбиение данных на логические порции. Так как спул-файл находится на разделяемом устройстве
прямого доступа, то процессы могут одновременно выполнять вывод на принтер, помещая данные в свой раздел
спул-файла.
Обеспечение удобного логического интерфейса между устройствами и остальной частью системы
Разнообразие устройств ввода-вывода делают особенно актуальной функцию ОС по созданию экранирующего
логического интерфейса между периферийными устройствами и приложениями. Практически все современные
операционные системы поддерживают в качестве основы такого интерфейса файловую модель периферийных
устройств, когда любое устройство выглядит для прикладного программиста последовательным набором байт, с
которым можно работать с помощью унифицированных системных вызовов (например, read и write), задавая имя
файла-устройства и смещение от начала последовательности байт. Для поддержания такого интерфейса подсистема
ввода-вывода должна проделать немалую работу, учитывая разницу в организации операций обмена данными,
например, с жестким диском и графическим терминалом.
Привлекательность модели файла-устройства состоит в ее простоте и унифицированности для устройств любого типа,
однако во многих случаях для программирования операций ввода-вывода некоторого устройства она является
слишком бедной. Поэтому данная модель часто используется только в качестве базиса, над которым подсистема
ввода-вывода строит более содержательную модель устройств конкретного типа. Подсистема ввода-вывода
предоставляет, как правило, специфический интерфейс для вывода графической информации на дисплей или
принтер, для программирования операций сетевого обмена и т. п. При этом разработчик специфического интерфейса
всегда может опираться на имеющийся базовый интерфейс.
Динамическая загрузка и выгрузка драйверов
Кроме проблемы разработки новых драйверов существует также проблема включения драйвера в состав модулей
работающей ОС, то есть динамической загрузки-выгрузки драйвера. Так как набор потенциально поддерживаемых
данной ОС периферийных устройств всегда существенно шире набора устройств, которыми ОС должна управлять при
установке на конкретной машине, то ценным свойством ОС является возможность динамически загружать в
оперативную память требуемый драйвер (без останова ОС) и выгружать его после того, как потребность в поддержке
устройства миновала, что может существенно сэкономить системную область памяти.
Альтернативой динамической загрузке драйверов при изменении текущей конфигурации внешних устройств
компьютера является повторная компиляция кода ядра с требуемым набором драйверов, что создает между всеми
компонентами ядра статические связи вместо динамических. Например, таким образом решалась данная проблема в
ранних версиях операционной системы UNIX. При статических связях между ядром и драйверами структура ОС
упрощается, но этот подход требует наличия исходных кодов модулей операционной системы, доступность которых
скорее является исключением (для некоммерческих версий UNIX), а не правилом. Кроме того, в этом варианте
работающую предыдущую версию операционной системы необходимо остановить и заменить новой, а перерывы в
работе ОС в некоторых применениях могут и не допускаться.
Поддержка динамической загрузки драйверов является практически обязательным требованием для современных
универсальных операционных систем.
Поддержка нескольких файловых систем
Диски представляют особый род периферийных устройств, так как именно на них хранится большая часть как
пользовательских, так и системных данных. Данные на дисках организуются в файловые системы, и свойства
файловой системы во многом определяют свойства самой ОС -- ее отказоустойчивость, быстродействие,
максимальный объем хранимых данных. Популярность файловой системы часто приводит к ее миграции из «родной»
ОС в другие операционные системы -- например, файловая система FAT появилась первоначально в MS-DOS, но затем
была реализована в OS/2, семействе MS Windows и многих реализациях UNIX. Ввиду этого поддержка нескольких
популярных файловых систем для подсистемы ввода-вывода также важна, как и поддержка широкого спектра
периферийных устройств. Важно также, чтобы архитектура подсистемы ввода-вывода позволяла достаточно просто
включать в ее состав новые типы файловых систем, без необходимости переписывания кода. Обычно в операционной
системе имеется специальный слой программного обеспечения, отвечающий за решение данной задачи, например
слой VFS (Virtual File System) в версиях UNIX на основе кода System V Release 4.
Поддержка синхронных и асинхронных операций ввода-вывода
Операция ввода-вывода может выполняться по отношению к программному модулю, запросившему операцию, в
синхронном или асинхронном режимах. Смысл этих режимов тот же, что и для рассмотренных выше системных
вызовов, -- синхронный режим означает, что программный модуль приостанавливает свою работу до тех пор, пока
операция ввода-вывода не будет завершена, а при асинхронном режиме программный модуль продолжает
выполняться в мультипрограммном режиме одновременно с операцией ввода-вывода. Отличие же заключается в
том, что операция ввода-вывода может быть инициирована не только пользовательским процессом -- в этом случае
операция выполняется в рамках системного вызова, но и кодом ядра, например кодом подсистемы виртуальной
памяти для считывания отсутствующей в памяти страницы.
Подсистема ввода-вывода должна предоставлять своим клиентам (пользовательским процессам и кодам ядра)
возможность выполнять как синхронные, так и асинхронные операции ввода-вывода, в зависимости от потребностей
вызывающей стороны. Системные вызовы ввода-вывода чаще оформляются как синхронные процедуры в связи с
тем, что такие операции длятся долго и пользовательскому процессу или потоку все равно придется ждать получения
результатов операции для того, чтобы продолжить свою работу. Внутренние же вызовы операций ввода-вывода из
модулей ядра обычно выполняются в виде асинхронных процедур, так как кодам ядра нужна свобода в выборе
дальнейшего поведения после запроса операции ввода-вывода. Использование асинхронных процедур приводит к
более гибким решениям, так как на основе асинхронного вызова всегда можно построить синхронный, создав
дополнительную промежуточную процедуру, блокирующую выполнение вызвавшей процедуры до момента
завершения ввода-вывода. Иногда и прикладному процессу требуется выполнить асинхронную операцию вводавывода, например при микроядерной архитектуре, когда часть кода работает в пользовательском режиме как
прикладной процесс, но выполняет функции операционной системы, требующие полной свободы действий и после
вызова операции ввода-вывода.
Менеджер ввода-вывода
В подсистеме ввода-вывода наряду с модулями, отражающими специфику внешних устройств и образующими
вертикальные подсистемы, существуют модули универсального назначения. Эти модули организуют согласованную
работу всех остальных компонентов подсистемы ввода-вывода и взаимодействие с пользовательскими процессами и
другими подсистемами ОС. Так же как и функции управления устройствами, эти организующие функции
распределены по всем уровням, образуя оболочку. Эта оболочка иногда называется менеджером ввода-вывода.
Задачи такого менеджера довольно разнообразны.
Верхний слой менеджера составляют системные вызовы ввода-вывода, которые принимают от пользовательских
процессов запросы на ввод-вывод и переадресуют их отвечающим за определенный класс устройств модулям и
драйверам, а также возвращают процессам результаты операций ввода-вывода. Таким образом этот слой
поддерживает пользовательский интерфейс ввода-вывода, создавая для прикладных программистов максимум
удобств по манипулированию внешними устройствами и расположенными на них данными.
Нижний слой менеджера реализует непосредственное взаимодействие с контроллерами внешних устройств,
экранируя драйверы от особенностей аппаратной платформы компьютера -- шины ввода-вывода, системы
прерываний и т. п. Этот слой принимает от драйверов запросы на обмен данными с регистрами контроллеров в
некоторой обобщенной форме с использованием независимых от шины ввода-вывода адресации и формата, а затем
преобразует эти запросы в зависящий от аппаратной платформы формат. Диспетчер прерываний, рассмотренный
выше, может входить в состав менеджера ввода-вывода или же представлять собой отдельный модуль ядра. В
последнем случае менеджер ввода-вывода выполняет для диспетчера прерываний первичную обработку запросов
прерываний, передавая диспетчеру обобщенные сведения об источнике запроса.
Важной функцией менеджера ввода-вывода является создание некоторой среды для остальных компонентов
подсистемы, которая бы облегчала их взаимодействие друг с другом. Эта задача может быть решена за счет создания
некоторого стандартного внутреннего интерфейса взаимодействия модулей ввода-вывода между собой, который бы
дополнял внешние интерфейсы подсистемы с прикладными процессами, другими модулями ядра и аппаратурой.
Наличие такого интерфейса существенно облегчает включение новых драйверов и файловых систем в состав ОС.
Кроме того, разработчики драйверов и других программных компонентов освобождаются от написания общих
процедур, таких как буферизация данных и синхронизация нескольких модулей между собой при обмене данными.
Все эти функции берет на себя менеджер ввода-вывода.
Еще одной функцией менеджера ввода-вывода является организация взаимодействия модулей ввода-вывода с
модулями других подсистем ОС, таких как подсистема управления процессами, виртуальной памятью и другими.
Примерами подобного менеджера являются менеджер ввода-вывода ОС Windows NT, а также среда STREAMS,
существующая во многих версиях операционной системы UNIX. Менеджер ввода-вывода Windows NT организует
взаимодействие между модулями с помощью пакетов запросов ввода-вывода -- IRP (I/O Request Packet). Получив
запрос от процедуры системного вызова, менеджер формирует IRP и передает его нужному драйверу. Драйвер после
выполнения запрошенной операции возвращает ответ в виде другого IRP менеджеру, а тот, в свою очередь, может
при необходимости передать этот IRP другому драйверу. Менеджер позволяет драйверам задавать взаимосвязи
(bindings) между собой, и на основании информации о взаимосвязях и происходит передача пакетов IRP. Кроме того,
менеджер Windows NT поддерживает динамическую загрузку-выгрузку драйверов без останова системы.
Наличие стандартного внутреннего межмодульного интерфейса повышает устойчивость и улучшает расширяемость
подсистемы ввода-вывода, хотя может несколько замедлить ее работу, так как любое разделение на слои и части
приводит к дополнительным операциям при взаимодействии по сравнению с монолитной организацией с прямыми
передачами управления.
Безопасность
Угрозы безопасности
Знание возможных угроз, а также уязвимых мест защиты, которые эти угрозы обычно эксплуатируют, необходимо для
того, чтобы выбирать наиболее экономичные средства обеспечения безопасности.
Считается, что безопасная система должна обладать свойствами конфиденциальности, доступности и целостности.
Любое потенциальное действие, которое направлено на нарушение конфиденциальности, целостности и доступности
информации, называется угрозой. Реализованная угроза называется атакой.
Конфиденциальная (confidentiality) система обеспечивает уверенность в том, что секретные данные будут доступны
только тем пользователям, которым этот доступ разрешен (такие пользователи называются авторизованными). Под
доступностью (availability) понимают гарантию того, что авторизованным пользователям всегда будет доступна
информация, которая им необходима. И наконец, целостность (integrity) системы подразумевает, что
неавторизованные пользователи не могут каким-либо образом модифицировать данные.
Защита информации ориентирована на борьбу с так называемыми умышленными угрозами, то есть с теми, которые,
в отличие от случайных угроз (ошибок пользователя, сбоев оборудования и др.), преследуют цель нанести ущерб
пользователям ОС.
Умышленные угрозы подразделяются на активные и пассивные. Пассивная угроза - несанкционированный доступ к
информации без изменения состояния системы, активная - несанкционированное изменение системы. Пассивные
атаки труднее выявить, так как они не влекут за собой никаких изменений данных. Защита против пассивных атак
базируется на средствах их предотвращения.
Можно выделить несколько типов угроз. Наиболее распространенная угроза - попытка проникновения в систему под
видом легального пользователя, например попытки угадывания и подбора паролей. Более сложный вариант внедрение в систему программы, которая выводит на экран слово login. Многие легальные пользователи при этом
начинают пытаться входить в систему, и их попытки могут протоколироваться. Такие безобидные с виду программы,
выполняющие нежелательные функции, называются "троянскими конями". Иногда удается торпедировать работу
программы проверки пароля путем многократного нажатия клавиш del, break, cancel и т. д. Для защиты от подобных
атак ОС запускает процесс, называемый аутентификацией пользователя (см. лекцию 16, раздел "Идентификация и
аутентификация").
Угрозы другого рода связаны с нежелательными действиями легальных пользователей, которые могут, например,
предпринимать попытки чтения страниц памяти, дисков и лент, которые сохранили информацию, связанную с
предыдущим использованием. Защита в таких случаях базируется на надежной системе авторизации (см. лекцию 16,
раздел "Авторизация. Разграничение доступа к объектам ОС"). В эту категорию также попадают атаки типа отказ в
обслуживании, когда сервер затоплен мощным потоком запросов и становится фактически недоступным для
отдельных авторизованных пользователей.
Наконец, функционирование системы может быть нарушено с помощью программ-вирусов или программ-"червей",
которые специально предназначены для того, чтобы причинить вред или недолжным образом использовать ресурсы
компьютера. Общее название угроз такого рода - вредоносные программы (malicious software). Обычно они
распространяются сами по себе, переходя на другие компьютеры через зараженные файлы, дискеты или по
электронной почте. Наиболее эффективный способ борьбы с подобными программами - соблюдение правил
"компьютерной гигиены". Многопользовательские компьютеры меньше страдают от вирусов по сравнению с
персональными, поскольку там имеются системные средства защиты.
Таковы основные угрозы, на долю которых приходится львиная доля ущерба, наносимого информационным
системам.
Подход к обеспечению информационной безопасности
Проблема информационной безопасности оказалась настолько важной, что в ряде стран были выпущены
основополагающие документы, в которых регламентированы основные подходы к проблеме информационной
безопасности. В результате оказалось возможным ранжировать информационные системы по степени надежности.
Наиболее известна оранжевая (по цвету обложки) книга Министерства обороны США [DoD, 1993]. В этом документе
определяется четыре уровня безопасности - D, C, B и A. По мере перехода от уровня D до A к надежности систем
предъявляются все более жесткие требования. Уровни C и B подразделяются на классы (C1, C2, В1, В2, ВЗ). Чтобы
система в результате процедуры сертификации могла быть отнесена к некоторому классу, ее защита должна
удовлетворять оговоренным требованиям. В качестве примера рассмотрим требования класса C2, которому
удовлетворяют ОС Windows NT, отдельные реализации Unix и ряд других.
Каждый пользователь должен быть идентифицирован уникальным входным именем и паролем для входа в систему.
Доступ к компьютеру предоставляется лишь после аутентификации.
Система должна быть в состоянии использовать эти уникальные идентификаторы, чтобы следить за действиями
пользователя (управление избирательным доступом). Владелец ресурса (например, файла) должен иметь
возможность контролировать доступ к этому ресурсу.
Операционная система должна защищать объекты от повторного использования. Перед выделением новому
пользователю все объекты, включая память и файлы, должны инициализироваться.
Системный администратор должен иметь возможность вести учет всех событий, относящихся к безопасности.
Система должна защищать себя от внешнего влияния или навязывания, такого как модификация загруженной
системы или системных файлов, хранящихся на диске.
Сегодня на смену оранжевой книге пришел стандарт Common Criteria, а набор критериев Controlled Access Protection
Profile сменил критерии класса C2.
Основополагающие документы содержат определения многих ключевых понятий, связанных с информационной
безопасностью. Некоторые из них (аутентификация, авторизация, домен безопасности и др.) будут рассмотрены в
следующей лекции. В дальнейшем мы также будем оперировать понятиями "субъект" и "объект" безопасности.
Субъект безопасности - активная системная составляющая, к которой применяется политика безопасности, а объект пассивная. Примерами субъектов могут служить пользователи и группы пользователей, а объектов - файлы,
системные таблицы, принтер и т. п.
По существу, проектирование системы безопасности подразумевает ответы на следующие вопросы: какую
информацию защищать, какого рода атаки на безопасность системы могут быть предприняты, какие средства
использовать для защиты каждого вида информации? Поиск ответов на данные вопросы называется формированием
политики безопасности, которая помимо чисто технических аспектов включает также и решение организационных
проблем. На практике реализация политики безопасности состоит в присвоении субъектам и объектам
идентификаторов и фиксации набора правил, позволяющих определить, имеет ли данный субъект авторизацию,
достаточную для предоставления к данному объекту указанного типа доступа.
Формируя политику безопасности, необходимо учитывать несколько базовых принципов. Так, Зальтцер (Saltzer) и
Шредер (Schroeder) (1975) на основе своего опыта работы с MULTICS сформулировали следующие рекомендации для
проектирования системы безопасности ОС.
Проектирование системы должно быть открытым. Нарушитель и так все знает (криптографические алгоритмы
открыты).
Не должно быть доступа по умолчанию. Ошибки с отклонением легитимного доступа будут обнаружены скорее, чем
ошибки там, где разрешен неавторизованный доступ.
Нужно тщательно проверять текущее авторство. Так, многие системы проверяют привилегии доступа при открытии
файла и не делают этого после. В результате пользователь может открыть файл и держать его открытым в течение
недели и иметь к нему доступ, хотя владелец уже сменил защиту.
Давать каждому процессу минимум возможных привилегий.
Защитные механизмы должны быть просты, постоянны и встроены в нижний слой системы, это не аддитивные
добавки (известно много неудачных попыток "улучшения" защиты слабо приспособленной для этого ОС MS-DOS).
Важна физиологическая приемлемость. Если пользователь видит, что защита требует слишком больших усилий, он от
нее откажется. Ущерб от атаки и затраты на ее предотвращение должны быть сбалансированы.
Приведенные соображения показывают необходимость продумывания и встраивания защитных механизмов на
самых ранних стадиях проектирования системы.
Сравнительный анализ безопасности операционных систем
На Omninerd.com вышел довольно подробный обзор проблем с безопастостью в различных ОС. Тестировался целый
спектр операционных систем, в частности Windows XP, Windows Server 2003, Vista Ultimate, MacOS, FreeBSD, Solaris,
Fedora Core и Slackware.
Основные выводы: Windows и Apple OS X имеют существенные проблемы с безопастностью в плане удаленного
взлома системы. Windows вообще имеет в своей поставке (т.е. сразу после инсталляции) большое количество "дыр",
позволяющих хакерам не только получить административный доступ к системе, но и запускать на ней произвольный
код.
Тем не менее после установки патчей, регулярно выпускаемых разработчиками, продукты от Microsoft и Apple
становятся в основном защищенными, однако, если не скачивать обновления, операционные системы могут вновь
оказаться открытыми для хакеров, т.к. в этих ОС постоянно находят новые и иногда очень серьезные бреши в
безопасности.
В свою очередь UNIX-продукты и ОС на основе Linux имеют по умолчанию высокий уровень безопасности и пригодны
к работе в сети без каких-либо дальнейших действий в плане инсталляции патчей (тем не менее, патчи все равно
рекомендуется устанавливать).
Впрочем, причины того, что в Windows, самой распространенной в мире операционной системе, постоянно находят
дыры, проистекают не столько из-за принципиальной "дырявости" самой операционной системы, сколько от наплыва
желающих ее взломать. Если бы на месте Windows (по распространенности) оказалась какая-то другая операционная
система, то еще неизвестно, сколько в ней бы стали выявлять дыр. А раз система непопулярна, то смысл выискивать в
ней дыры теряется.
Файловые системы
Без файловой системы, нам пришлось бы беспокоиться о расположении данных приложения на внешнем носителе, о
сохранности чужих данных и многом другом. Файловая система предоставляет удобный интерфейс (API) для общения
с носителями и является одним из важнейших элементов операционной системы
Файловая система -- порядок, определяющий способ организации, хранения и именования данных на носителях
информации в компьютерах, а также в другом электронном оборудовании: цифровых фотоаппаратах, мобильных
телефонах и т. п. Файловая система определяет формат содержимого и физического хранения информации, которую
принято группировать в виде файлов. Конкретная файловая система определяет размер имени файла (папки),
максимальный возможный размер файла и раздела, набор атрибутов файла. Некоторые файловые системы
предоставляют сервисные возможности, например, разграничение доступа или шифрование файлов.
Файловая система связывает носитель информации с одной стороны и API для доступа к файлам -- с другой. Когда
прикладная программа обращается к файлу, она не имеет никакого представления о том, каким образом
расположена информация в конкретном файле, так же, как и на каком физическом типе носителя (CD, жёстком диске,
магнитной ленте, блоке флеш-памяти или другом) он записан. Всё, что знает программа -- это имя файла, его размер
и атрибуты. Эти данные она получает от драйвера файловой системы. Именно файловая система устанавливает, где и
как будет записан файл на физическом носителе (например, жёстком диске).
Цели и задачи файловой системы
Файл -- это именованная область внешней памяти, в которую можно записывать и из которой можно считывать
данные. Файлы хранятся в памяти, на зависящей от энергопитания, обычно -- на магнитных дисках. Однако нет
правил без исключения. Одним из таких исключений является так называемый электронный диск, когда в
оперативной памяти создается структура, имитирующая файловую систему.
Основные цели использования файла перечислены ниже.
Долговременное и надежное хранение информации. Долговременность достигается за счет использования
запоминающих устройств, не зависящих от питания, а высокая надежность определяется средствами защиты доступа
к файлам и общей организацией программного кода ОС, при которой сбои аппаратуры чаще всего не разрушают
информацию, хранящуюся в файлах.
Совместное использование информации. Файлы обеспечивают естественный и легкий способ разделения
информации между приложениями и пользователями за счет наличия понятного человеку символьного имени и
постоянства хранимой информации и расположения файла. Пользователь должен иметь удобные средства работы с
файлами, включая каталоги-справочники, объединяющие файлы в группы, средства поиска файлов по признакам,
набор команд для создания, модификации и удаления файлов. Файл может быть создан одним пользователем, а
затем использоваться совсем другим пользователем, при этом создатель файла или администратор могут определить
права доступа к нему других пользователей. Эти цели реализуются в ОС файловой системой.
Файловая система (ФС) -- это часть операционной системы, включающая:
совокупность всех файлов на диске;
наборы структур данных, используемых для управления файлами, такие, например, как каталоги файлов,
дескрипторы файлов, таблицы распределения свободного и занятого пространства на диске;
комплекс системных программных средств, реализующих различные операции над файлами, такие как создание,
уничтожение, чтение, запись, именование и поиск файлов.
Файловая система позволяет программам обходиться набором достаточно простых операций для выполнения
действий над некоторым абстрактным объектом, представляющим файл. При этом программистам не нужно иметь
дело с деталями действительного расположения данных на диске, буферизацией данных и другими
низкоуровневыми проблемами передачи данных с долговременного запоминающего устройства. Все эти функции
файловая система берет на себя. Файловая система распределяет дисковую память, поддерживает именование
файлов, отображает имена файлов в соответствующие адреса во внешней памяти, обеспечивает доступ к данным,
поддерживает разделение, защиту и восстановление файлов.
Таким образом, файловая система играет роль промежуточного слоя, экранирующего все сложности физической
организации долговременного хранилища данных, и создающего для программ более простую логическую модель
этого хранилища, а также предоставляя им набор удобных в использовании команд для манипулирования файлами.
Задачи, решаемые ФС, зависят от способа организации вычислительного процесса в целом. Самый простой тип -- это
ФС в однопользовательских и однопрограммных ОС, к числу которых относится, например, MS-DOS. Основные
функции в такой ФС нацелены на решение следующих задач:
именование файлов;
программный интерфейс для приложений;
отображения логической модели файловой системы на физическую организацию хранилища данных;
устойчивость файловой системы к сбоям питания, ошибкам аппаратных и программных средств.
Задачи ФС усложняются в операционных однопользовательских мультипрограммных ОС, которые, хотя и
предназначены для работы одного пользователя, но дают ему возможность запускать одновременно несколько
процессов. Одной из первых ОС этого типа стала OS/2. К перечисленным выше задачам добавляется новая задача
совместного доступа к файлу из нескольких процессов. Файл в этом случае является разделяемым ресурсом, а значит,
файловая система должна решать весь комплекс проблем, связанных с такими ресурсами. В частности, в ФС должны
быть предусмотрены средства блокировки файла и его частей, предотвращения гонок, исключение тупиков,
согласование копий и т. п.
В многопользовательских системах появляется еще одна задача: защита файлов одного пользователя от
несанкционированного доступа другого пользователя.
Еще более сложными становятся функции ФС, которая работает в составе сетевой ОС. Эта тема рассматривается в
последней главе книги, посвященной управлению сетевыми ресурсами.
Иерархическая структура файловой системы
Пользователи обращаются к файлам по символьным именам. Однако способности человеческой памяти
ограничивают количество имен объектов, к которым пользователь может обращаться по имени. Иерархическая
организация пространства имен позволяет значительно расширить эти границы. Именно поэтому большинство
файловых систем имеет иерархическую структуру, в которой уровни создаются за счет того, что каталог более низкого
уровня может входить в каталог более высокого уровня.
Граф, описывающий иерархию каталогов, может быть деревом или сетью. Каталоги образуют дерево, если файлу
разрешено входить только в один каталог и сеть -- если файл может входить сразу в несколько каталогов. Например, в
MS-DOS и Windows каталоги образуют древовидную структуру, а в UNIX -- сетевую. В древовидной структуре каждый
файл является листом. Каталог самого верхнего уровня называется корневым каталогом, или корнем (root).
При такой организации пользователь освобожден от запоминания имен всех файлов, ему достаточно примерно
представлять, к какой группе может быть отнесен тот или иной файл, чтобы путем последовательного просмотра
каталогов найти его. Иерархическая структура удобна для многопользовательской работы: каждый пользователь со
своими файлами локализуется в своем каталоге или поддереве каталогов, и вместе с тем все файлы в системе
логически связаны.
Частным случаем иерархической структуры является одноуровневая организация, когда все файлы входят в один
каталог.
Классификация файловых систем
По предназначению файловые системы можно классифицировать на нижеследующие категории.
Для носителей с произвольным доступом (например, жёсткий диск): FAT32, HPFS, ext2 и др. Поскольку доступ к
дискам в разы медленнее, чем доступ к оперативной памяти, для прироста производительности во многих файловых
системах применяется асинхронная запись изменений на диск. Для этого применяется либожурналирование,
например в ext3, ReiserFS, JFS, NTFS, XFS, либо механизм soft updates и др. Журналирование широко распространено в
Linux, применяется в NTFS. Soft updates -- в BSD системах.
Для носителей с последовательным доступом (например, магнитные ленты): QIC и др.
Для оптических носителей -- CD и DVD: ISO9660, HFS, UDF и др.
Виртуальные файловые системы: AEFS и др.
Сетевые файловые системы: NFS, CIFS, SSHFS, GmailFS и др.
Для флэш-памяти: YAFFS, ExtremeFFS, exFAT.
Немного выпадают из общей классификации специализированные файловые системы: ZFS (собственно файловой
системой является только часть ZFS), VMFS (т. н. кластерная файловая система, которая предназначена для хранения
других файловых систем) и др.
FAT 12/16/32
FAT -- классическая архитектура файловой системы, которая из-за своей простоты всё ещё широко используется для
флеш-дисков и карт памяти. В недавнем прошлом использовалась в дискетах, на жёстких дисках и других носителях
информации.
Разработана Биллом Гейтсом и Марком МакДональдом (англ.) в 1976--1977 годах.[1][2] Использовалась в качестве
основной файловой системы в операционных системах семейств DOS и Windows (до версии Windows 2000).
Существует три версии FAT -- FAT12, FAT16 и FAT32. Они отличаются разрядностью записей в дисковой структуре, т.е.
количеством бит, отведённых для хранения номера кластера. FAT12 применяется в основном для дискет, FAT16 -- для
дисков малого объёма. На основе FAT была разработана новая файловая система exFAT (extended FAT), используемая
преимущественно для флеш-накопителей.
Изначально FAT не поддерживала иерархическую систему каталогов. Все файлы располагались в корневом каталоге.
Это оказалось неудобно и к тому же малый размер корневого каталога ограничивал количество файлов на диске.
Каталоги были введены с выходом MS-DOS 2.0.
VFAT -- это расширение FAT, появившееся в Windows 95. В FAT имена файлов имеют формат 8.3 и состоят только из
символов кодировки ASCII. В VFAT была добавлена поддержка длинных (до 255 символов) имён файлов.
NTFS 1.2/3.0/3.1
NTFS (от англ. New Technology File System -- «файловая система новой технологии») -- стандартная файловая система
для семейства операционных систем Microsoft Windows NT.
NTFS заменила использовавшуюся в MS-DOS и Microsoft Windows файловую систему FAT. NTFS поддерживает систему
метаданных и использует специализированные структуры данных для хранения информации о файлах для улучшения
производительности, надёжности и эффективности использования дискового пространства. NTFS хранит информацию
о файлах в главной файловой таблице -- Master File Table (MFT).NTFS имеет встроенные возможности разграничивать
доступ к данным для различных пользователей и групп пользователей (списки контроля доступа -- Access Control Lists
(ACL)), а также назначать квоты (ограничения на максимальный объём дискового пространства, занимаемый теми или
иными пользователями). NTFS использует систему журналирования USN для повышения надёжности файловой
системы.
NTFS разработана на основе файловой системы HPFS (от англ. High Performance File System -- высокопроизводительная
файловая система), создававшейся Microsoft совместно с IBM для операционной системы OS/2. Но, получив такие
несомненно полезные новшества, как квотирование, журналируемость, разграничение доступа и аудит, в
значительной степени утратила присущую прародительнице (HPFS) весьма высокую производительность файловых
операций.
Различают несколько версий NTFS:
v1.2 используется в Windows NT 3.51 и Windows NT 4.0
v3.0 поставляется с Windows 2000
v3.1 -- с Windows XP, Windows Server 2003,Windows Server 2003 R2, Windows Vista, Windows 7 и Windows Server 2008,
Windows Server 2008 R2.
Спецификации файловой системы являются закрытыми. Это создаёт определённые трудности при реализации её
поддержки в сторонних продуктах, не принадлежащих Microsoft, -- в частности, разработчикам драйверов для
свободных операционных систем приходится заниматься обратной разработкой системы.
Unix File System (UFS)
Unix File System (UFS) -- файловая система, созданная для операционных систем семейства BSD и используемая в
переработанном и дополненном виде на данный момент как основная в операционных системах-потомках (FreeBSD,
OpenBSD, NetBSD).
Поддержка данной файловой системы имеется также в ядре Linux и операционной системе Solaris.
Физически UFS состоит из следующих частей:
? несколько блоков в начале раздела отводится под загрузочную область (которая должна инициализироваться
отдельно от файловой системы)
? суперблок, включающий магическое число, инициализирующее файловую систему, и некоторые другие важные
числа, описывающие геометрию и настройку некоторых параметров файловой системы
? описание групп цилиндров. Каждая группа включает следующие компоненты:
_ Резервную копию суперблока
_ Заголовок группы цилиндров, статистические данные и т. д., информацию аналогичную содержащейся в
суперблоке, но для конкретной группы
_ Цифра индексных дескрипторов, каждый из которых содержит атрибуты файлов
_ Цифра блоков данных
Каталог файлов содержит только список файлов в директории и индексный дескриптор, связанный с каждым файлом.
Все файлы метаданные хранятся в индексном дескрипторе.
Ext 1/2/3/4
Extended File System (расширенная файловая система), сокращённо ext или extfs -- первая файловая система,
разработанная специально для ОС на ядре Linux. Представлена в апреле 1992 г.для ядра Linux 0.96c.
Используемая структура метаданных была разработана Реми Кардом, на создание которой его вдохновила Unix File
System (UFS). Целью было преодолеть ограничения файловой системы Minix File System -- в новой файловой системе
наибольший возможный размер раздела и файла увеличен до 2 Гб, а максимальная длина имени файла -- до 255
символов.
ext является первой версией расширенной файловой системы. Впоследствии была заменена ext2 и xiafs. Со временем
ext2 вытеснила xiafs благодаря долгосрочной жизнеспособности.
Second Extended File System (дословно: «вторая расширенная файловая система»), сокращённо ext2 (иногда ext2fs) -файловая система ядра Linux. Была разработана Реми Кардом взамен ext. По скорости и производительности работы
она может служить эталоном в тестах производительности файловых систем. Файловая система ext2 обгоняет ext3, и
уступает лишь более современной ext4 в тесте на чтение.
Главный недостаток ext2 (и одна из причин демонстрации столь высокой производительности) заключается в том, что
она не является журналируемой файловой системой. Он был устранён в файловой системе ext3 -- следующей версии
Extended File System, полностью совместимой с ext2.
Файловая система ext2 по-прежнему используется на флеш-картах и твердотельных накопителях (SSD), так как
отсутствие журналирования является преимуществом при работе с накопителями, имеющими ограничение на
количество циклов записи.
Логическая структура ext2
Граф, описывающий иерархию каталогов файловой системы ext2, представляет собой сеть. Причиной такой
организации является то, что один файл может входить сразу в несколько каталогов.
Все типы файлов имеют символьные имена. В иерархически организованных файловых системах обычно
используются три типа имен: простые, составные и относительные. Не является исключением и ext2. Ограничения на
простое имя состоят в том что, его длина не должна превышать 255 символов, а также в имени не должны
присутствовать символ NULL и слеш. Ограничения на символ NULL связаны с представлением строк в языке Си, а на
символ слеш -- с тем, что он используются как разделительный символ между каталогами. Полное имя представляет
собой цепочку простых символьных имен всех каталогов, через которые проходит путь от корня до данного файла. В
файловой системе ext2 файл может входить в несколько каталогов, а значит, иметь несколько полных имен; здесь
справедливо соответствие «один файл -- много полных имен». В любом случае полное имя однозначно определяет
файл.
Атрибутами файловой системы ext2 являются:
? тип и права доступа к файлу,
? владелец, группа доступа,
? информация о разрешённых операциях,
? время создания, дата последнего доступа, дата последнего изменения и время последнего удаления,
? текущий размер файла,
? спецификация файла:
_ обычный файл,
_ каталог,
_ файл байт-ориентированного устройства,
_ файл блочно-ориентированного устройства,
_ именованный канал,
_ символическая ссылка,
_ число занимаемых блоков,
? ACL
? другие
Атрибуты файлов хранятся не в каталогах, как это сделано в ряде простых файловых систем, а в специальных
таблицах. В результате каталог имеет очень простую структуру, состоящую всего из двух частей: номера индексного
дескриптора и имени файла.
Third Extended File System (третья версия расширенной файловой системы), сокращённо ext3 или ext3fs -журналируемая файловая система, используемая в операционных системах на ядре Linux, является файловой
системой по умолчанию во многих дистрибутивах. Основана на ФС ext2, начало разработки которой положил Стивен
Твиди.
Основное отличие от ext2 состоит в том, что ext3 журналируема, то есть в ней предусмотрена запись некоторых
данных, позволяющих восстановить файловую систему при сбоях в работе компьютера.
Стандартом предусмотрено три режима журналирования:
writeback: в журнал записываются только метаданные файловой системы, то есть информация о её изменении. Не
может гарантировать целостности данных, но уже заметно сокращает время проверки по сравнению с ext2;
ordered: то же, что и writeback, но запись данных в файл производится гарантированно до записи информации об
изменении этого файла. Немного снижает производительность, также не может гарантировать целостности данных
(хотя и увеличивает вероятность их сохранности при дописывании в конец существующего файла);
journal: полное журналирование как метаданных ФС, так и пользовательских данных. Самый медленный, но и самый
безопасный режим; может гарантировать целостность данных при хранении журнала на отдельном разделе (а лучше
-- на отдельном жёстком диске).
Fourth Extended File System (четвёртая версия расширенной файловой системы), сокр. ext4, или ext4fs -журналируемая файловая система, используемая в ОС с ядром Linux. Основана на файловой системе ext3, которая
является файловой системой по умолчанию во многих дистрибутивах Linux.
Впервые экспериментальная поддержка ext4 была выпущена в виде патча для Linux версий 2.6.19-rc1-mm1 и 2.6.19rc1-git8 10 октября 2006 года программистом Эндрю Мортоном.
Основной особенностью стало увеличение максимального объёма одного раздела диска до 1 эксбибайта (260 байт)
при размере блока 4Kb, и увеличение размера одного файла до 16 тебибайт. Кроме того, в ext4 представлен
механизм пространственной (extent) записи файлов (новая информация добавляется в конец заранее выделенной по
соседству области файла), уменьшающий фрагментацию и повышающий производительность.
Операционная система Unix создавалась в несколько этапов. Все начиналось в 1965-69 гг. в Bell Labs концерна AT&T в
рамках проекта MULTICS (Multi-user Timesharing Interactive Computing System) для большой машины General Electric
GE-645. В то время AT&T могла разрабатывать, но не продавать компьютерные продукты, в результате действующих в
США антимонопольных законов. От Bell Labs в проекте принимали участие два сотрудника - Кен Томпсон и Деннис
Ритчи.
В 1969 г. Bell Labs решает выйти из проекта MULTICS, чтобы сосредоточить усилия на создание мобильной
операционной среды под условным UNIX.
Первоначально UNIX написана на ассемблере для DEC PDP-7. Затем к работе по этому проекту был привлечен Денис
Ритчи, который в то время уже разработал язык B. В 1973 г. он предложил переписать основную часть UNIX на B. В
процессе осуществления этой идеи, язык B настолько усовершенствовался, что преобразился в C. Таким образом,
было достигнуто невиданное тогда качество - мобильность. В отличии от всех предыдущих ОС, на 100 процентов
написанных на ассемблере для определенной машины, UNIX имела только 10 процентов (1000 строк) кода на
ассемблере. Для того чтобы работать на произвольной машине, новая ОС нуждалась в написании нескольких
страничек ассемблере и компиляторе языка C. Уже в 1976 г. в первый раз UNIX была перенесена на другую машину Interdata 8/32.
В 1971 г. торговая марка UNIX была запатентована Bell Labs для серии машин DEC PDP -11/20, наиболее
распостраненных в университетах. За несколько лет UNIX претерпела в Bell несколько изданий, из которых наиболее
популярны были шестое (1976 г.) и седьмое (1979 г.).
Нарастающая популярность UNIX заставила Калифорнийский университет в Беркли предложить свой вариант UNIX BSD (Berkeley Software Distribution), на базе которого по заказу DARPA (Агентство перспективных проектов военного
ведомства США) компания BBN реализовала в системе BSD 4.1 протоколы TCP/IP. Так возникла сеть Интернет.
Необходимо вспомнить и разработанную в Массачусетском технологическом институте систему X-Window (1984 г.).
Основанная на TCP/IP, она обеспечивает мобильный графический интерфейс, к которому прилагается концепция
"клиент - сервер", наиболее революционная для своего времени. Сегодня UNIX и X-Window почти неразделимы. В это
же время начались попытки стандартизации. Известный американский институт инженеров по электротехнике и
электронике (IEEE), создал рабочую группу 1003, которая разработала стандарт переносимой системы (Portable
Operating System). Имя этого стандарта - POSIX, который прежде всего относится к ОС UNIX.
В 1990 г. документ POSIX 1003.1 c редакционными изменениями был принят в качестве стандарта ISO. Другими
наиболее значительными стандартами POSIX, относящимися к UNIX, являются: POSIX 1003.2 - 1992 г., POSIX 1003.1b 1993 г., POSIX 1003.1c - 1995 г.
Другим опытом стандартизации UNIX является документ X/Open Portability Guide. Популярно третье издание - XPG3
(1989 г.), которое основано на POSIX 1003.1, но содержит и ряд новых элементов, рассматривающих не только ОС, но
и потребительский интерфейс, базы данных, коммуникаций.
Шагом к стандартизации UNIX является появление в 1989 г. ANSI - стандарта для языка C (16 лет спустя после его
рождения).
Долгим и тернистым был UNIX на рынок программных средств. Считается, что только с 1 января 1984 г. дочерняя
компания AT&T Bell Labs (позднее переименованная в USL - UNIX System Laboratories) вышла на рынок с UNIX в
качестве торгового продукта.
Под благовидным предлогом стандартизации UNIX AT&T ввел SVID (System V Interface Definition) и этим ходом вновь
отождествил UNIX со своей System V (1983 г.).
Другим важным событием стало соглашение AT&T с ведущими UNIX -производителями Sun и Microsoft в 1987 г. о так
называемой унификации UNIX. Проект предусматривал создание четвертого издания System V (SVR4), которая
объединяла характеристики Xenix Microsoft (другое название UNIX для микрокомпьютеров, основанной на седьмом
издании и испытавшей сильное влияние System V), sunOS (система UNIX фирмы Sun Microsystems, основанной на BSD)
и System V 3.2. В 1987 г. AT&T в первый раз лицензировала имя UNIX.
В мае следующего года несколько ведущих компаний, среди которых были Apollo, Bull, HP, IBM и Siemens, учредили
Фонд открытых систем OSF (Open Software Foundation) - организацию с целью разработки и распространения
открытых программных систем. Она финансировала разработки программного обеспечения в соответствии с
наиболее современными требованиями к открытым системам, специфицированными в соответствующих стандартах
для разработки: системный интерфейс OSF/AES, графический потребительский интерфейс OSF/Motif, распределенные
системы OSF/DCE и т.д.
Основой проекта является выбор UNIX - технологии. После внимательного изучения выбрали ядро Match,
разработанное в университете Карнеги-Меллон (100000 строк исходного кода; код первой UNIX, код первой UNIX был
на порядок скромнее), а все остальное (OSF -1 имеет в общем около 800000 строк кода) предлагалось взять из IBM AIX
третьей версии.
Выбор AIX не понравился AT&T. Концерну было предлoжено принять членство OSF, но он поставил неприемлемое
условие заменить AIX на SVR4. В результате AT&T, Sun, UNISYS, XEROX и др. создали в марте 1989 г. организацию UNIX
International (UI), которая дала широкую дорогу USL. Разработка и лецензирование програм оставались привилегией
USL, но общий контроль был сохранен за AT&T. Взаимные столкновения и несовместимость продуктов OSF и UI
явилась кульминационным пунктом в так называемых UNIX-войнах.
В 1993 г компания AT&T продала свою долю прав на UNIX фирме Novell. За это время фирма Novell выпустила
собственные версии UNIX на базе System V версии 4, получившие название UNIXWare. UNIXWare предназначена для
взаимодействия с системой NetWare разработки Novell.
В декабре 1995 г. компания Santa Crouze Operation купила у Novell патенты на все ее UNIX - продукты, включая OC
UNIXWare и исходный код UNIX System V.
В последнее время все большую популярность приобретает свободно распостраняемая версия UNIX под названием
Linux, разработанная исследователем университета Хельсинки Линусом Торвальдсом. Разработанная в 1991 г. для
процессора Intel i386, сегодня она перенесена на ряд других аппаратных платформ.
Краткое описание UNIX
Было создано большое количество различных UNIX-систем. Юридически лишь некоторые из них имеют полное право
называться «UNIX»; остальные же, хотя и используют сходные концепции и технологии, объединяются термином
«UNIX-подобные» (англ. Unix-like).
Некоторые отличительные признаки UNIX-систем включают в себя:
использование простых текстовых файлов для настройки и управления системой;
широкое применение утилит, запускаемых в командной строке;
взаимодействие с пользователем посредством виртуального устройства -- терминала;
представление физических и виртуальных устройств и некоторых средств межпроцессового взаимодействия как
файлов;
использование конвейеров из нескольких программ, каждая из которых выполняет одну задачу.
В настоящее время UNIX-системы используются в основном на серверах, а также как встроенные системы для
различного оборудования. На рынке ОС для рабочих станций и домашнего применения лидером является Microsoft
Windows, UNIX занимает только второе (Mac OS X), третье (GNU/Linux) и многие последующие места.
UNIX-системы имеют большую историческую важность, поскольку благодаря им распространились некоторые
популярные сегодня концепции и подходы в области ОС и программного обеспечения. Также, в ходе разработки Unixсистем был создан язык Си.
Особенности UNIX, отличающие данное семейство от других ОС приведены ниже.
Файловая система древовидная, чувствительная к регистру символов в именах, очень слабые ограничения на длину
имён и пути.
Нет поддержки структурированных файлов ядром ОС, на уровне системных вызовов файл есть поток байтов.
Командная строка находится в адресном пространстве запускаемого процесса, а не извлекается системным вызовом
из процесса интерпретатора команд (как это происходит, например, в RSX-11).
Понятие «переменных окружения».
Запуск процессов вызовом fork(), то есть возможность клонирования текущего процесса со всем состоянием.
Понятия stdin/stdout/stderr.
Ввод/вывод только через дескрипторы файлов.
Традиционно крайне слабая поддержка асинхронного ввода/вывода, по сравнению с VMS и Windows NT.
Интерпретатор команд есть обыкновенное приложение, общающееся с ядром обыкновенными системными
вызовами (в RSX-11 и VMS интерпретатор команд выполнялся как специальное приложение, специальным образом
размещенное в памяти, пользующееся специальными системными вызовами, поддерживались также системные
вызовы, дающие возможность приложению обращаться к своему родительскому интерпретатору команд).
Команда командной строки есть не более чем имя файла программы, не требуется специальная регистрация и
специальная разработка программ как команд (что являлось обычной практикой в RSX-11, RT-11).
Не принят подход с программой, задающей пользователю вопросы о режимах своей работы, вместо этого
используются параметры командной строки (в VMS, RSX-11, RT-11 программы работали также с командной строкой,
но при её отсутствии выдавали запрос на ввод параметров).
Пространство имён устройств на диске в каталоге /dev, поддающееся управлению администратором, в отличие от
подхода Windows, где это пространство имен размещается в памяти ядра, и администрирование этого пространства
(например, задание прав доступа) крайне затруднено из-за отсутствия его постоянного хранения на дисках (строится
каждый раз при загрузке).
Широкое использование текстовых файлов для хранения настроек, в отличие от двоичной базы данных настроек, как,
например, в Windows.
Широкое использование утилит обработки текста для выполнения повседневных задач под управлением скриптов.
«Раскрутка» ОС после загрузки ядра путём исполнения скриптов стандартным интерпретатором команд.
Широкое использование конвейеров (pipe).
Все процессы, кроме init, равны между собой, не бывает «специальных процессов».
Адресное пространство делится на глобальное для всех процессов ядро и на локальную для процесса части, нет
«групповой» части адресного пространства, как в VMS и Windows NT, как и возможности загрузки туда кода и его
исполнения там.
Использование двух уровней привилегий процессора вместо четырёх в VMS.
Отказ от использования оверлеев в пользу деления программы на несколько программ поменьше, общающихся
через конвейеры или временные файлы.
Отсутствие APC и аналогов, то есть произвольных (а не жестко перечисленных в стандартном множестве) сигналов, не
доставляемых до явного пожелания процесса их получить (Windows, VMS).
Концепция сигнала уникальна для UNIX, и крайне сложна в переносе на другие ОС, такие как Windows.
История GNU/Linux
операционная система информационный
GNU
К 1990 году в рамках проекта GNU, основанного Ричардом Столлманом, были разработаны и постоянно развивались
свободные программы, составляющие основной инструментарий для разработки программ на языке Си: текстовый
редактор Emacs, компилятор языка Си gcc, отладчик программ gdb, командная оболочка bash, библиотека важнейших
функций для программ на Си libc. Все эти программы были написаны для операционных систем, похожих на UNIX.
Поэтому в них использовались стандартные для UNIX системные вызовы -- POSIX. При помощи системных вызовов
программы получают доступ к оперативной памяти, файловой системе, устройствам ввода и вывода. Благодаря тому,
что системные вызовы выглядели более-менее стандартно во всех реализациях UNIX, программы GNU могли
работать (с минимальными изменениями или вообще без изменений) в любой UNIX-подобной операционной
системе.
С помощью имевшихся инструментов GNU можно было бы писать программы на Си, пользуясь только свободными
программными продуктами, однако свободного UNIX-совместимого ядра, на основе которого могли бы работать все
эти инструменты, не существовало. В такой ситуации разработчики GNU вынуждены были использовать одну из
патентованных реализаций UNIX, то есть вынуждены были следовать принятым в этих операционных системах
архитектурным решениям и технологиям и основывать на них свои собственные разработки. Мечта Столлмана о
научной разработке ПО, свободной от решений, движимых коммерческими целями, была неосуществима, пока в
основе свободной разработки лежало патентованное UNIX-совместимое ядро, исходные тексты которого оставались
тайной для разработчиков.
Linux -- ядро
В 1991 году Линус Торвальдс, финский студент, чрезвычайно увлёкся идеей написать совместимое с UNIX ядро
операционной системы для своего персонального компьютера с процессором ставшей очень широко
распространённой архитектуры Intel 80386. Прототипом для будущего ядра стала операционная система MINIX:
совместимая с UNIX операционная система для персональных компьютеров, которая загружалась с дискет и
умещалась в очень ограниченной в те времена памяти персонального компьютера. MINIX был создан Эндрю
Таненбаумом в качестве учебной операционной системы, демонстрирующей архитектуру и возможности UNIX, но
непригодной для полноценной работы с точки зрения программиста[источник не указан 916 дней]. Именно
полноценное ядро для своего ПК и хотел сделать Линус Торвальдс. Название своему ядру он дал freax, но позже оно
было изменено хозяином ftp сервера на Linux -- гибрид имени создателя и слова UNIX.
Совместимость с UNIX в этот момент означала, что операционная система должна поддерживать стандарт POSIX.
POSIX -- это функциональная модель совместимой с UNIX операционной системы, в которой описано, как должна
вести себя система в той или иной ситуации, но не приводится никаких указаний, как это следует реализовать
программными средствами. POSIX описывал те свойства UNIX-совместимых систем, которые были общими для
разных реализаций UNIX на момент создания этого стандарта. В частности, в POSIX описаны системные вызовы,
которые должна обрабатывать операционная система, совместимая с этим стандартом.
Важнейшую роль в развитии Linux сыграли глобальные компьютерные сети Usenet и Internet. На самых ранних
стадиях Линус Торвальдс обсуждал свою работу и возникающие трудности с другими разработчиками в
телеконференции comp.os.minix в сети Usenet, посвящённой операционной системе MINIX. Ключевым решением
Линуса стала публикация исходных текстов ещё малоработоспособной первой версии ядра под свободной лицензией
GNU GPL. Благодаря этому и получавшей всё большее распространение сети Internet очень многие получили
возможность самостоятельно компилировать и тестировать это ядро, участвовать в обсуждении и исправлении
ошибок, а также присылать исправления и дополнения к исходным текстам Линуса. Теперь над ядром работал уже не
один человек, разработка пошла быстрее и эффективнее.
В 1992 году версия ядра Linux достигла 0.95, а в 1994 году вышла версия 1.0, что свидетельствовало о том, что
разработчики наконец сочли, что ядро в целом закончено и все ошибки (теоретически) исправлены. В настоящее
время разработка ядра Linux -- дело уже гораздо большего сообщества, чем во времена до версии 1.0. Изменилась и
роль самого Линуса Торвальдса: теперь он не главный разработчик, а наиболее авторитетный член сообщества, по
традиции оценивающий качество исходных текстов, которые должны быть включены в ядро, и дающий своё добро на
их включение. Тем не менее, общая модель свободной разработки сообществом сохраняется.
GNU и Linux
Однако как нельзя сделать операционную систему без ядра, так и ядро будет бесполезно без утилит, которые
использовали бы его возможности. Благодаря проекту GNU Линус Торвальдс сразу получил возможность
использовать с Linux свободные утилиты: bash, компилятор gcc, tar, gzip и многие другие уже известные и широко
используемые приложения, которые могли работать с его UNIX-совместимым ядром. Так Linux сразу попал в хорошее
окружение и в сочетании с утилитами GNU представлял собой очень интересную среду для разработчиков
программного обеспечения даже на самой ранней стадии своего развития.
Принципиальным шагом вперёд было именно то, что из ядра Linux и утилит и приложений GNU впервые стало
возможно сделать полностью свободную операционную систему, то есть работать с компьютером и, более того,
разрабатывать новое программное обеспечение, пользуясь только свободным программным обеспечением. Идеал
полностью некоммерческой разработки, сформулированный Столлманом, теперь мог быть воплощён в жизнь.
Вскоре появлялись теоретические возможности воплощения идеала, но это не означало его немедленной
практической реализации. Совместимость Linux и утилит GNU была обусловлена тем, что и то, и другое писалось с
ориентацией на одни и те же стандарты и практику. Однако в рамках этой практики (то есть при наличии множества
различных UNIX-систем) оставался большой простор для несовместимости и различных решений. Поэтому на
начальном этапе разработки ядра каждое заработавшее на Linux приложение GNU было для Линуса очередным
достижением. Первыми стали bash и gcc. Таким образом, сочетание GNU и Linux давало возможность создать
свободную операционную систему, но само по себе ещё не составляло такой системы, потому что Linux и различные
утилиты GNU оставались разрозненными программными продуктами, написанными разными людьми, не всегда
принимавшими в расчёт то, что делали другие. Основным же свойством любой системы является согласованность её
компонентов.
MS-DOS -- коммерческая операционная система фирмы Microsoft для IBM PC-совместимых персональных
компьютеров. MS-DOS -- самая известная ОС из семейства DOS, ранее устанавливавшаяся на большинство IBM PCсовместимых компьютеров. Со временем она была вытеснена ОС семейства Windows 9x и Windows NT.
MS-DOS была создана в 1981 году и в ходе её развития было выпущено восемь крупных версий (1.0, 2.0 и т. д.) и два
десятка промежуточных (3.1, 3.2 и т. п.), пока в 2000 году Microsoft не прекратила её разработку. Это был ключевой
продукт фирмы, дававший ей существенный доход и маркетинговый ресурс в ходе развития Microsoft от
разработчика языка программирования до крупной компании, производящей самое разнообразное программное
обеспечение.
Последней коробочной версией стала 6.22, однако MS-DOS продолжала служить загрузчиком для Windows 95 (версии
7.0 и 7.1), Windows 98 (версия 7.1) и Windows ME (версия 8.0).
История создания MS-DOS
Трагедия Гари Килдалла. Эпоха CP/M
К концу 1970-х операционная система CP/M стала промышленным стандартом де-факто на рынке 8-разрядных
микрокомпьютеров, под нее разрабатывалась большая часть программного обеспечения. По некоторым данным,
общее число реализованных копий за все время существования CP/M составляет более 1,5 млн. Ее повсеместная
востребованность объяснялась в первую очередь наличием встроенной поддержки дисководов с гибкими
магнитными дисками. Использование же последних было оправдано удобством произвольного доступа к данным -- в
отличие от той же магнитной ленты. Между тем стабильная и прибыльная монополия CP/M была практически в
одночасье разрушена с рождением 12 августа 1981 г. IBM PC -- первого удачного персонального компьютера от IBM.
История CP/M началась с того, что Гари Килдалл (Gary Kildall) в 1972 г. по чистой случайности приобрел за 25 долл. 4разрядный микропроцессор Intel 4004. Создав ряд программ для навигационных расчетов, Килдалл пробует
заинтересовать Intel своими разработками. Руководство компании положительно оценивает способности Гари и
берет его на работу в качестве консультанта. К концу 1973 г. Килдалл придумывает язык программирования PL/M
(Programming Language for Microcomputers), объединяющий идеи PL/I, Алгола и XPL. Немного позже он начинает
создание версии PL/M для процессора 8080. Однако компьютер Intellec-8, на котором работает Гари по поручению
Intel, обладал довольно скромной конфигурацией (клавиатура, монитор, считыватель с перфоленты). И Килдалл
приходит к выводу о необходимости использования дисковода с гибкими магнитными дисками. Да, это было
действительно революционной идеей.
В сотрудничестве с Аланом Шугартом (Alan Shugart), изобретателем гибкого диска, и Джоном Тородом (John Torod),
своим однокурсником, Килдалл подключает к Intellec-8 дисковод, снабженный контроллером. После этого он
приступает к созданию операционной системы как набора сервисных программ для организации обмена данными с
памятью и дисками на уровне более высоком, чем прямое аппаратное программирование. Через два месяца ядро
операционной системы было готово. Свое детище Гари решил назвать CP/M -- Control Program/Monitor, это уже потом
аббревиатура стала расшифровываться как Control Program/Microcomputer.
В последующем Килдалл постоянно дорабатывает CP/M, снабжая ее дополнительными средствами и сервисными
утилитами. Со временем он создает варианты CP/M и для других процессоров. Самое удивительное, что руководство
Intel абсолютно не заинтересовалось появлением CP/M, хотя компания имела грандиозные планы в отношении PL/M.
В дальнейшем Килдалл организует собственную компанию Digital Research, отдавая большую часть времени работе
над CP/M. Между тем судьба уготовила Килдаллу сюрприз, причем довольно неприятный.
В 1980 г., исходя из текущей рыночной ситуации, корпорация IBM решает построить собственный 16-разрядный
персональный компьютер, подобный популярному Apple, с похожим программным обеспечением. И для этого,
разумеется, нужна была операционная система. Однако на тот момент версии CP/M были исключительно 8разрядными. Параллельно с этим корпорация IBM задумывается и о наборе ПО для проектируемого ПК. Зная об
успешных разработках Microsoft (несколько версий Бейсика, Кобола и Фортрана для различных компьютерных
систем), IBM встречается с Биллом Гейтсом, попросив того высказать свои соображения в отношении будущего ПК.
Гейтс, конечно же, предлагает голубому гиганту приобрести у него Бейсик. А на вопрос об операционной системе
советует обратиться к Гари Килдаллу -- автору CP/M. Но тот медлит, а Гейтс не упускает свой шанс: он отсылает в IBM
письмо, в котором убеждает компанию использовать в создаваемом компьютере 16-разрядный микропроцессор Intel
8088, а не 8-разрядный. В дальнейшем письмо позволит ему склонить чашу весов в выборе IBM на свою сторону, так
как это предполагает, что CP/M Гари Килдалла изначально выполнена для 8-разрядных машин, а ОС от Microsoft
«заточена» якобы под 16-разрядные компьютеры. Разумеется, Гейтс обещает поставить IBM нужную ей
операционную систему в должные сроки.
Тем временем Пол Аллен, соратник Гейтса, приобретает операционную систему QDOS Тима Патерсона (Tim Paterson),
никому не известного программиста из фирмы Seattle Computer Products. И вновь судьба-злодейка выставила всех
участников этой истории в странном, искаженном свете: QDOS оказывается невероятно похожей на СР/М Гари
Килдалла.
История Тима Патерсона. Период 86-DOS
Хотя доподлинно известно, что MS-DOS приобрела популярность благодаря успеху IBM PC, корни ее берут начало в
первых поколениях микрокомпьютеров. Так, первые, широко распространенные микрокомпьютеры были построены
на аппаратной части, использующей так называемую шину S-100. Начало этому было положено с появлением в 1976 г.
разработанного предприятием MITS (Microwave Instrumentation and Telemetry Systems) компьютера Altair 8800.
Конструктивной особенностью системной платы Altair было отсутствие на ней каких-либо жестко встроенных модулей
-- по сути, она имела только ряд 100-контактных разъемов (шин S-100), необходимых для подключения других плат. В
роли последних выступали как непосредственно основные элементы компьютера (процессор, память), так и
дополнительные (терминал, последовательные и параллельные интерфейсы, адаптеры клавиатуры, дисплея,
магнитофона). Фактически пользователь мог выбрать конфигурацию Altair по своему усмотрению: расширить память,
модернизировать процессор, добавить новые функции. Именно она, шина S-100, обеспечила поразительную
популярность Altair 8800, обусловленную гибкостью его конструкции. Только благодаря концепции S-100 появилось
множество фирм и предприятий, разрабатывающих платы для Altair.
В 1978 г. небольшая фирма Seattle Computer Products (SCP), располагающаяся в городе Туквила (Tukwila), шт.
Вашингтон, начала производство карт памяти для шины S-100. Часть своей продукции SCP реализовывала
посредством специализирующегося на компьютерах магазина в Сиэтле -- The Retail Computer Store. В этом магазине
работает техником Тим Патерсон, одновременно учащийся в Университете Вашингтона (University of Washington).
Примечательным для нашей истории оказался один факт биографии Тима: он очень хорошо разбирался в
компьютере Imsai 8080.
Однажды, когда владелец SCP Род Брок (Rod Brock) в очередной раз приехал в магазин забрать новые заказы от
покупателей, они разговорились. Брок пожаловался Патерсону на ряд проблем, возникающих при использовании
производимых SCP плат памяти. Тим высказал по этому поводу несколько толковых идей, Брок же взял парня на
заметку и после окончания университета предложил Патерсону работу в SCP, где тот, согласившись на зарплату в 50
долл. в день, и пытался найти решение задачи.
Персональный компьютер Altair 8800 (1975, 397 долл.): сколько же талантов он воспитал?
В июле 1978 г. появляется микропроцессор Intel 8086. Опытный Брок посылает Тима на интеловский семинар,
посвященный новому продукту. Заметим, что подавляющее большинство тогдашних компьютеров со схемой
S-100 базировалось либо на Intel 8080, либо на Zilog Z-80. Процессор 8086 был потенциально быстрее своих
предшественников, хотя и не мог выполнять существующие 8-разрядные программы.
Будучи достаточно прозорливым, Брок дает Патерсону задание разработать плату с процессором 8086 для шины S100. Первые удачные прототипы появились уже в мае 1979 г. Тогда же SCP обращается в Microsoft с просьбой
подумать о создании 16-разрядного ПО для нового компьютера компании. Так уж случилось, что в самой Microsoft
уже какое-то время велись разработки программ для 8086. В итоге прототипы SCP снабжаются 16-разрядной
автономной дисковой версией Бейсика от Microsoft.
В ноябре 1979 г. SCP начинает продажи своих компьютеров на базе Altair и процессора 8086 с установленным
интерпретатором Бейсика от Microsoft. Между тем Бейсик, являясь скорее игрушкой, чем полноценным языком
программирования, не предлагал каких-либо удачных средств для написания стороннего коммерческого ПО, поэтому
Брок принимает решение о создании операционной системы для своих компьютеров.
Не секрет, что в то время ОС CP/M производства Digital Research являлась чуть ли не единственной операционной
системой для 8-разрядных микрокомпьютеров, своего рода стандартом де-факто. Следуя за технологическим
прогрессом, Digital Research усиленно работает над новой, 16-разрядной версией своей ОС (CP/M-86),
предназначенной для использования в компьютерах на основе процессора 8086. Становится понятно, почему Digital
Research заинтересовалась разработкой SCP. Однако Брок сотрудничать отказывается. Между тем выход CP/M-86
намечен на конец 1979 г.
Но даже к апрелю 1980 г. CP/M-86 так и не выходит -- Брок сильно обеспокоен. И действительно, кто купит
компьютеры, пусть даже с новым 8086, но без набора программного обеспечения? Думается, только либо
разработчики, либо энтузиасты, желающие быть всегда на гребне технологической волны. Патерсон предлагает Броку
написать собственную операционную систему, не дожидаясь, пока Гари Килдалл закончит свою CP/M-86.
Итак, наш герой чувствует, что сможет проделать аналогичную работу и в отношении 8086, причем уверен, что его ОС
(далее по тексту DOS -- Disk Operating System, дисковая операционная система) окажется много лучше CP/M. План
Тима состоял из двух этапов. Первым делом Патерсон предполагает создание «быстрой и грязной» (quick and dirty)
DOS -- для того чтобы немедленно заполнить недостающее звено в цепи продаж компьютеров на базе 8086. Далее
планировалась тщательная отладка (так никогда, к сожалению, и не реализованная) готовой DOS, которая затем
должна была явиться в двух версиях: одно- и многопользовательской. Брок соглашается.
Патерсон выбрал верную стратегию для разработки DOS. В первую очередь была поставлена цель максимально
облегчить написание ПО сторонними программистами в окружении DOS, а также упростить процесс переноса на
другие платформы. Дело в том, что программы для 8-разрядной CP/M не могли непосредственно исполняться 16разрядным 8086, их следовало немного переработать с учетом схемы адресации данных, поддерживаемой новым
процессором. А поскольку CP/M лидировала в качестве операционной системы на микрокомпьютере, под нее были
написаны тысячи программ, которые и требовалось перенести в среду DOS. Для этого Тим решил добиться
совместимости с уже существующей 8-разрядной CP/M на уровне API-интерфейса. Это значительно облегчило
программирование в DOS: все выглядело так, будто вы пишете под старой доброй CP/M.
Во-вторых, желая наделить свою операционную систему максимальной эффективностью и быстродействием, он
пишет ее на чистом ассемблере.
В период с апреля по июль 1980 г. Патерсон тратит почти половину своего времени на создание QDOS. И уже в августе
QDOS 0.11 начала продаваться в комплекте с компьютерами производства SCP на основе Intel 8086. Брок вновь
связывается с Microsoft и предлагает ей заняться адаптированием существующего ПО под окружение QDOS. Гейтс
выражает готовность, но... только за деньги.
В декабре 1980 г. Патерсон выпускает новую версию QDOS под маркой 86-DOS 0.33. Именно ее исходные тексты
(порядка 4 тыс. ассемблерных строк) в последующем и приобретает Microsoft.
Гениальный Гейтс. Время MS-DOS
Некоторое время спустя Microsoft все же заключает с SCP сделку: Гейтс единоразово выплачивает Броку сумму в 10
тыс. долл. за право продажи 86-DOS и по 15 тыс. долл. за каждого OEM-партнера (Original Equipment Manufacturer,
изготовитель комплексного оборудования), согласившегося купить 86-DOS. При этом, разумеется, Билл не раскрывает
(это было условием сделки) того, что уже имеющимся партнером выступает сама IBM. В итоге удовлетворенные
стороны подписывают необходимые бумаги: Брок получает вожделенные 25 тыс. долл., Microsoft -- 86-DOS.
Между тем, зная, что IBM сильно заинтересована в скорейшем получении ОС для разрабатываемого ею
персонального компьютера IBM PC, а договориться с Килдаллом ей так и не удалось, Microsoft разрабатывает
гениальный план.
В апреле 1981 г. Тим Патерсон покидает Seattle Computer Products (успев выпустить, кстати, 86-DOS 1.0), а в мае по
приглашению Гейтса устраивается на работу в Microsoft. В этом Билл заинтересован, как никто другой: ведь
необходимо избежать возможных скандалов вокруг авторских прав на 86-DOS, а также облегчить труд Microsoft по
адаптации этой ОС под запросы IBM. До невозможности удивленный и даже рассерженный тем фактом, что
заказчиком операционной системы выступает IBM, Патерсон все же продолжает работу над 86-DOS под крылом
заботливого Гейтса.
В самом напряженном темпе, чрезвычайно эффективно используя отпущенное время, Патерсон перерабатывает 86DOS под требования IBM. Разумеется, сроки поджимают -- Тим не успевает до конца выполнить все поставленные
условия. В июле он передает то, что имелось на тот день, -- местами недоработанную MS-DOS 1.0. Голубой гигант
изменяет название операционной системы на PC-DOS 1.0 и начинает ее поставки вместе со своим IBM PC.
Напомним, что Гейтс приобрел исходные тексты 86-DOS 0.33, хотя в апреле 1981 г. Патерсон выпустил 86-DOS 1.0.
Понятно, что MS-DOS 1.0, полученная в результате переработки Патерсоном 86-DOS 0.3, уже не могла служить камнем
преткновения для выяснения, кому же принадлежат авторские права на DOS -- Броку (Seattle Computer Products) или
Гейтсу (Microsoft).
Когда Гари Килдалл увидел PC-DOS, то высказался примерно так: «Я был сильно поражен потрясающей схожестью
между PC-DOS и СР/М. Я был вне себя от злости на IBM и Microsoft. Все, кто хоть немного разбирался в компьютерах,
могли убедиться, что даже команды этих операционных систем были одинаковыми. Это было просто невероятно!»
Возмущенный Килдалл выразил свое недоумение по поводу того, что такой гигант, как IBM, умудрился сделать
подобное. Однако все-таки не решился предпринимать какие-либо судебные меры в отношении корпорации -- как
из-за своего склада характера, так и по причине поступившего от IBM предложения. Компания посулила в качестве
компенсации включить только что созданную Килдаллом 16-разрядную версию ОС (CP/M-86) в состав ПО,
поставляемого с IBM PC. Но все оказалось еще хуже, чем хотелось несчастному Килдаллу.
Одна из первых версий MS-DOS 1.0
Так, при приобретении IBM PC покупателю предлагалось выбрать из трех ОС: PC-DOS, CP/M-86 и P-System UCSD (ОС с
интегрированным языком Паскаль). Благодаря тому что PC-DOS оказалась самой дешевой, выбор потребителя пал
именно на нее -- наметилась тенденция комплектовать все последующие компьютеры IBM PC только PC-DOS.
Что касается коммерческого видения DOS, до определенных пор для Microsoft эта ОС представлялась исключительно
как вотчина IBM -- Гейтс уделял много времени рынку языков программирования. Однако уже в 1982 г. Microsoft
решает выйти на коммерческую арену операционных систем, заинтересовав ею и своих OEM-партнеров. Тогда же она
проводит политику перехода с CP/M-версий своих продуктов (тех же языков программирования) исключительно на их
DOS-реализации. Подобный шаг значительно ослабил лидирующие позиции Digital Research в монополии де-факто на
операционные системы для микрокомпьютеров.
Необходимо понимать, почему Microsoft удалось пойти собственным путем вразрез с планами IBM, начав
собственную кампанию по продаже MS-DOS. Во-первых, сразу после получения вожделенной MS-DOS 1.0 для своего
персонального компьютера IBM, конечно же, проводит ее ревизию и, обнаружив порядка 300 ошибок, переписывает
неверные участки, попутно переименовав в PC-DOS. По причине этой вынужденной модификации первоначальной
версии MS-DOS и IBM, и Microsoft обладают авторскими правами на данную операционную систему.
Во-вторых, Гейтсу, уверенному в будущем MS-DOS, удалось убедить IBM не заключать с ним исключительного
лицензионного соглашения по передаче всех прав на DOS, а также уговорить корпорацию продавать ПК отдельно от
операционной системы. По условиям контракта Microsoft получала некоторый процент с каждого проданного IBM PC.
Забавно, но нынешние менеджеры изучают детали этого договора в качестве примера катастрофической ошибки со
стороны IBM.
Правильная маркетинговая политика Microsoft вкупе с успехом IBM PC послужили созданию прочного 15-летнего
фундамента для DOS. В течение этого срока, вплоть до прихода на рынок Windows 95, DOS непрестанно развивалась,
совершенствовалась и впитывала лучшие разработки третьих фирм, оставаясь при этом, конечно же, доминирующей
ОС в нише персональных компьютеров. Учитывая плановую стратегию перехода из 16-разрядного мира DOS в сферу
32-разрядных Windows 95 и Windows NT, как относительно перспективных операционных сред, Microsoft постепенно
прекратила обновления и реализацию MS-DOS.
На сегодняшний день можно смело утверждать, что эпоха DOS завершилась. Путь DOS -- это путь любой мало-мальски
успешной разработки в золотом веке персональных компьютеров. Опыт ее распространения -- это опыт
своевременной и верной маркетинговой политики в отношении перспективных бизнес-решений. Итоги ее эпохи -- это
поколение программистов на IBM PC -- коммерчески наиболее удачной модели персонального компьютера.
Windows
Microsoft Windows -- семейство проприетарных операционных систем корпорации Майкрософт (Microsoft),
ориентированных на применение графического интерфейса при управлении. Изначально были всего лишь
графическими надстройками для MS-DOS.
В настоящее время под управлением операционных систем семейства Windows, по данным ресурса Netmarketshare
(Net Applications) на 2009 год, работает около 89 % персональных компьютеров.
Операционные системы Windows работают на платформах x86, x86-64, IA-64, ARM. Существовали также версии для
DEC Alpha, MIPS, PowerPC и SPARC.
История Windows
История Windows берет свое начало в 1986 году, когда появилась первая версия системы. Она представляла собой
набор программ, расширяющих возможности существующих операционных систем для большего удобства в работе.
Через несколько лет вышла вторая версия, но особой популярности система Windows не завоевала. Однако в 1990
году вышла новая версия - Windows 3.0, которая стала использоваться на многих персональных компьютерах.
Популярность новой версии Windows объяснялась несколькими причинами. Графический интерфейс позволяет
работать с объектами вашего компьютера не с помощью команд, а с помощью наглядных и понятных действий над
значками, обозначающими эти объекты. Возможность одновременной работы с несколькими программами
значительно повысила удобство и эффективность работы. Кроме того, удобство и легкость написания программ для
Windows привели к появлению все больше разнообразных программ, работающих под управлением Windows.
Наконец, лучше была организована работа с разнообразным компьютерным оборудованием, что также определило
популярность системы. Последующие версии Windows были направлены на повышение надежности, а также
поддержку средств мультимедиа (версия 3.1) и работу в компьютерных сетях (версия 3.11).
Параллельно с разработкой Windows компания Microsoft в 1988 году начала работу над новой операционной
системой, названной Windows NT. Перед новой системой были поставлены задачи существенного повышения
надежности и эффективной поддержки сетевой работы. При этом интерфейс системы не должен был отличаться от
интерфейса Windows 3.0. Интересно, что самой распространенной версией Windows NT также стала третья версия. В
1992 году появилась версия Windows NT 3.0, а в 1994 году - Windows NT 3.5.
Процесс развития операционных систем не стоит на месте, и в 1995 появилась система Windows 95, ставшая новым
этапом в истории Windows. По сравнению с Windows 3.1 значительно изменился интерфейс, выросла скорость работы
программ. Одной из новых возможностей Windows 95 была возможность автоматической настройки
дополнительного оборудования компьютера для работы без конфликтов друг с другом. Другой важной особенностью
системы стала возможность работы с Интернетом без использования дополнительных программ.
Интерфейс Windows 95 стал основным для всего семейства Windows, и в 1996 появляется переработанная версия
Windows NT 4.0, имеющая такой же интерфейс, как и Windows 95. Продолжением развития Windows 95 стала
операционная система, появившаяся в 1998 году. При сохранившемся интерфейсе внутренняя структура была
значительно переработана. Много внимания было уделено работе с Интернетом, а также поддержке современных
протоколов передачи информации - стандартов, обеспечивающих обмен информацией между различными
устройствами. Кроме того, особенностью Windows 98 является возможность работы с несколькими мониторами.
Следующим этапом в развитии Windows стало появление Windows 2000 и Windows Me (Millennium Edition - редакция
тысячелетия). Система Windows 2000 разработана на основе Windows NT и унаследовала от нее высокую надежность
и защищенность информации от постороннего вмешательства. Операционная система Windows Me стала
наследницей Windows 98, но приобрела многие новые возможности. Прежде всего, это улучшенная работа со
средствами мультимедиа, возможность записывать не только аудио, но и видеоинформацию, мощные средства
восстановления информации после сбоев и многое другое. Постепенно разница между разными системами Windows
стирается, и новая операционная система Windows XP предназначена для замены как Windows 2000, так и Windows
Me.
Управление памятью в Windows
Каждому процессу в Win32 доступно линейное 4-гигабайтное (2^32 = 4 294 967 296) виртуальное адресное
пространство. Обычно верхняя половина этого пространства резервируется за операционной системой, а вторая
половина доступна процессу.
Виртуальное адресное пространство процесса доступно всем потокам этого процесса. Иными словами, все потоки
одного процесса выполняются в едином адресном пространстве.
С другой стороны, механизм виртуальной памяти позволяет изолировать процессы друг от друга. Потоки одного
процесса не могут ссылаться на адресное пространство другого процесса.
Виртуальная память может вовсе не соответствовать структуре физической памяти. Диспетчер памяти транслирует
виртуальные адреса на физические, по которым реально хранятся данные. Поскольку далеко не всякий компьютер в
состоянии выделить по 4 Гбайт физической памяти на каждый процесс, используется механизм подкачки (swapping).
Когда оперативной памяти не хватает, операционная система перемещает часть содержимого памяти на диск, в файл
(swap file или page file), освобождая, таким образом, физическую память для других процессов. Когда поток
обращается к странице виртуальной памяти, записанной на диск, диспетчер виртуальной памяти загружает эту
информацию с диска обратно в память.
Планирование потоков
Чтобы все потоки работали, операционная система отводит каждому из них определенное процессорное время. Тем
самым создается иллюзия одновременного выполнения потоков (разумеется, для многопроцессорных компьютеров
возможен истинный параллелизм). В Windows реализована система вытесняющего планирования на основе
приоритетов, в которой всегда выполняется поток с наибольшим приоритетом, готовый к выполнению. Выбранный
для выполнения поток работает в течение некоторого периода, называемого квантом. Квант определяет, сколько
времени будет выполняться поток, пока операционная система не прервет его. По окончании кванта операционная
система проверяет, готов ли к выполнению другой поток с таким же (или большим) уровнем приоритета. Если таких
потоков не оказалось, текущему потоку выделяется еще один квант. Однако поток может не полностью использовать
свой квант. Как только другой поток с более высоким приоритетом готов к выполнению, текущий поток вытесняется,
даже если его квант еще не истек.
Квант не измеряется в каких бы то ни было единицах времени, а выражается целым числом. Для каждого потока
хранится текущее значение его кванта. Когда потоку выделяется квант процессорного времени, это значит, что его
квант устанавливается в начальное значение. Оно зависит от операционной системы. Например, для Win2000
Professional начальное значение кванта равно 6, а для Win2000 Server - 36.
Это значение можно изменить вызвав Control Panel - > System -> Advanced -> Performance options. Значение
"Applications" - как для Win2000 Professional; "Background Services" - как для Win2000 Server.
Или напрямую в ключе реестра HKLM Win32PrioritySeparation.
Всякий раз, когда возникает прерывание от таймера, из кванта потока вычитается 3, и так до тех пор, пока он не
достигнет нуля. Частота срабатывания таймера зависит от аппаратной платформы. Например, для большинства
однопроцессорных x86 систем он составляет 10мс, а на большинстве многопроцессорных x86 систем - 15мс.
В любом случае операционная система должна определить, какой поток выполнять следующим. Выбрав новый поток,
операционная система переключает контекст. Эта операция заключается в сохранении параметров выполняемого
потока (регистры процессора, указатели на стек ядра и пользовательский стек, указатель на адресное пространство, в
котором выполняется поток и др.), и загрузке аналогичных параметров для другого потока, после чего начинается
выполнение нового потока.
Планирование в Windows осуществляется на уровне потоков, а не процессов. Это кажется понятным, так как сами
процессы не выполняются, а лишь предоставляют ресурсы и контекст для выполнения потоков. Поэтому при
планировании потоков, система не обращает внимания на то, какому процессу они принадлежат. Например, если
процесс А имеет 10 готовых к выполнению потоков, а процесс Б - два, и все 12 потоков имеют одинаковый приоритет,
каждый из потоков получит 1/12 процессорного времени.
Приоритеты
В Windows существует 32 уровня приоритета, от 0 до 31. Они группируются так: 31 - 16 уровни реального времени; 15 1 динамические уровни; 0 - системный уровень, зарезервированный для потока обнуления страниц (zero-page thread).
При создании процесса, ему назначается один из шести классов приоритетов:
Real time class (значение 24),
High class (значение 13),
Above normal class (значение 10),
Normal class (значение 8),
Below normal class (значение 6),
и Idle class (значение 4).
В Windows NT/2000/XP можно посмотреть приоритет процесса в Task Manager.
Above normal и Below normal появились начиная с Win2000.
Приоритет каждого потока (базовый приоритет потока) складывается из приоритета его процесса и относительного
приоритета самого потока. Есть семь относительных приоритетов потоков:
Normal: такой же как и у процесса;
Above normal: +1 к приоритету процесса;
Below normal: -1;
Highest: +2;
Lowest: -2;
Time critical: устанавливает базовый приоритет потока для Real time класса в 31, для остальных классов в 15.
Idle: устанавливает базовый приоритет потока для Real time класса в 16, для остальных классов в 1
Привязка к процессорам
Если операционная система выполняется на машине, где установлено более одного процессора, то по умолчанию,
поток выполняется на любом доступном процессоре. Однако в некоторых случаях, набор процессоров, на которых
поток может работать, может быть ограничен. Это явление называется привязкой к процессорам (processor affinity).
Можно изменить привязку к процессорам программно, через Win32-функции планирования.
Создание процессов
Создание Win32 процесса осуществляется вызовом одной из таких функций, как CreateProcess, CreateProcessAsUser
(для Win NT/2000) и CreateProcessWithLogonW (начиная с Win2000) и происходит в несколько этапов:
- Открывается файл образа (EXE), который будет выполняться в процессе. Если исполняемый файл не является Win32
приложением, то ищется образ поддержки (support image) для запуска этой программы. Например, если исполняется
файл с расширением.bat, запускается cmd.exe и т.п.
В WinNT/2000 для отладки программ реализовано следующее. CreateProcess, найдя исполняемый Win32 файл, ищет в
SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Option раздел с именем и расширением
запускаемого файла, затем ищет в нем параметр Debugger, и если строка не пуста, запускает то, что в ней написано
вместо данной программы.
- Создается объект Win32 "процесс".
- Создается первичный поток (стек, контекст и объект "поток").
- Подсистема Win32 уведомляется о создании нового процесса и потока.
- Начинается выполнение первичного потока.
- В контексте нового процесса и потока инициализируется адресное пространство (например, загружаются требуемые
DLL) и начинается выполнение программы.
Пример создания процесса calc.exe:
#include <windows.h>
int main(int argc, char* argv[])
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if(!CreateProcess(NULL, "c:/windows/calc.exe", NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi))
return 0;
// Close process and thread handles.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
Завершение процессов
Процесс завершается если:
- Входная функция первичного потока возвратила управление.
- Один из потоков процесса вызвал функцию ExitProcess.
- Поток другого процесса вызвал функцию TerminateProcess.
Когда процесс завершается, все User- и GDI-объекты, созданные процессом, уничтожаются, объекты ядра
закрываются (если их не использует другой процесс), адресное пространство процесса уничтожается.
Создание потоков
Первичный поток создается автоматически при создании процесса. Остальные потоки создаются функциями
CreateThread и CreateRemoteThread (только в Win NT/2000/XP).
Завершение потоков
Поток завершается если
- Функция потока возвращает управление.
- Поток самоуничтожается, вызвав ExitThread.
- Другой поток данного или стороннего процесса вызывает TerminateThread.
- Завершается процесс, содержащий данный поток.
История Mac OS X
В IT индустрии далеко не последнюю роль здесь сыграла компания Apple.
История компании Apple началась тридцать лет назад, когда два друга Стив Джобс и Стив Возняк решили основать
собственную компанию по производству и выпуску компьютеров. Официально Apple была основана 1 апреля 1976
года, и именно тогда на рынке появился собранный вручную компьютер Apple Computer I - за десять месяцев было
собрано и продано 175 штук по цене 666,66 долларов. По сути дела, Apple I представлял собой материнскую плату без
корпуса, клавиатуры, звука и графики.
В феврале 1977 года президентом Apple становится Майкл Скотт. Существенным шагом вперед стал выпуск в апреле
этого же года Apple Computer II - первый персональный компьютер с цветной графикой. Здесь была поддержка
вывода на экран различных цветов, разработаны команды для работы со звуком и, следовательно, имелся
встроенный динамик и клавиатура, появилась возможность оперативной смены изображения на дисплее, был блок
питания и т.д. Вся эта «начинка» была упакована в специально разработанный литой пластиковый корпус, что очень
выгодно отличало новый Apple от других компьютеров, имевших вид неуклюжих ящиков из листового металла. Тогда
же появился известный теперь всему миру логотип - надкушенное разноцветное яблоко - созданный рекламным
агентством Regis McKenna.
В мае 1979 года сотрудник Apple Джеф Раскин начал работать над новым компьютером «все в одном», который был
ориентирован на рядового пользователя. Именно этот период и можно назвать началом рождения первого
Macintosh.
В 1983 году Apple выпустил Lisa - первый персональный компьютер с графическим пользовательским интерфейсом,
названный так в честь дочери Джобса. Но из-за довольно высокой цены и ограниченного набора приложений эта
модель не получила широкого распространения. Хотя с коммерческой точки зрения Lisa была полным провалом, тем
не менее, ее выпуск не прошел зря - использованная здесь операционная система Lisa 7/7 имела оконный интерфейс,
буфер, который позволял передавать данные между приложениями и многое другое.
Самый первый свой Macintosh компания Apple официально представила 22 января 1984 года рекламным роликом
«1984», основанным на сюжете книги Д. Оруэлла. Этот клип был назван рекламным клипом десятилетия, получил
гран-при в Каннах и по сей день считается в истории рекламы одним из самых оригинальных. Это событие стало
значимой вехой в истории персональных компьютеров. С появлением Macintosh в корне изменилось представление
людей о компьютерах, и были заложены те основы, которые в дальнейшем стали использовать все компьютерные
фирмы. В сентябре этого же года Apple начинает продавать компьютеры Macintosh 512K по цене 2495 долларов.
Шли годы и, естественно, что компьютерная отрасль тоже не стояла на месте. В течение всего времени
совершенствования компьютеров Macintosh развивалась и их операционная система Mac OS (System), то есть
расширялись новые возможности, менялись ее отдельные элементы и внедрялись новые технологии. Когда Mac OS
была впервые представлена в 1984 году, то для того времени она являла собой совершенство современного
программирования.
Система с самого начала разрабатывалась с расчетом на то, чтобы любой пользователь, не имея нужной
квалификации, впервые сев за компьютер, мог, сразу же через несколько минут начать работать на нем, не вникая в
технические параметры. Операционные системы для других платформ, которые появились несколько лет спустя,
предлагали такие вещи, как защищенная память и многозадачность, что в конечном итоге давало лучший
пользовательский опыт. Apple не встраивала этих вещей в Mac OS потому, что микропроцессоры, которые были
доступны во время разработки Mac OS, не были достаточно мощными. Но течением времени Mac OS обрастала
дополнительной функциональностью, и при этом оставалась наиболее легкой в изучении и использовании. Удобство
и простота работы в этой системе были одними из главных целей ее создателей, и внутренняя логика взаимодействия
отдельных частей операционной системы была в первую очередь подчинена этим требованиям.
Когда перед Apple встал вопрос о разработке операционной системы нового поколения, то, взвесив все «за» и
«против» компания в качестве основы для новой Mac OS решила воспользоваться разработками фирмы NeXT, которая
использовала операционные системы под общим назва¬нием UNIX. Именно система OpenStep (NeXTStep) стала
основой для построения новой Mac OS. Разработчикам новой Mac OS надо было обеспечить плавный переход от
старой системы к новой так, чтобы пользователи могли по-прежнему работать с большим количеством уже
имеющихся программ, пока не будут созданы более мощные и удобные. Так появилась новая система Mac OS X.
Структура Mac OS X
Наиболее удачным описанием общей концепции Mac OS X считается представление операционной системы в виде
некоторой многоуровневой структуры, в которой каждый уровень имеет свое назначение и свой круг решаемых
задач.
Mac OS X состоит из нескольких частей, вложенных одна в другую. На самом верху - новый пользовательский
интерфейс Aqua. Под ним - слой поддержки прикладных программ: окружения Classic, Carbon, Cocoa, Java. Еще
глубже - графика и мультимедиа: Quartz, OpenGL, QuickTime. И, наконец, в самой глубине - главный двигатель
системы, ядро Darwin.
Ядро Darwin
В основе операционной системы Mac OS X находится ядро Darwin. Чтобы ускорить ввод продукта и повысить его
качество компания Apple при разработке Darwin, открыла доступ к исходным кодам для всех желающих. Модули ядра
Darwin были полностью открыты и доступны для рограммистов-разработчиков, вплоть до исходных текстов. Таким
образом, над разработкой и реализацией Darwin трудилось огромное количество людей - свыше 100 тыс. человек.
Центральной частью Darwin является микроядро Mach 3, пришедшее в Mac OS из системы NextStep/OpenStep. Оно
отвечает за самые базовые особенности поведения операционных систем более высокого уровня. Преимущество
этой микроядерной архитектуры перед архитектурой с монолитным ядром состоит в том, что все базовые функции
ядра выполняются в виде небольшой компоненты, которая работает в привилегированном режиме, остальные
функции системы оформлены в виде подключаемых модулей и работают в обычном, пользовательском, режиме.
Таким образом, значительно повышается надежность, стало довольно легко модифицировать ключевые компоненты
ОС и т.д.
Забегая вперед, можно сказать, что в результате, в 2001 году после пяти лет выхода различных ядер (Rhapsody,
Darwin) и получилась Mac OS X 10.0 (Cheetah) - на базе микроядра Mach, позаимствованного из NeXT OS и BSD, с
системой эмуляции старых Mac OS Classic, рядом новых технологий, направленных на то, чтобы новая ОС от Apple
соответствовала требованиям времени. В 2001 году вышли Mac OS X 10.1 (Puma), в 2002 году - Mac OS X 10.2 (Jaguar), в
2003 - Mac OS X 10.3 (Panther), в 2005 - Mac OS X 10.4 (Tiger). Mac OS X 10.4
Итак, на самом нижнем уровне расположено открытое интегрированное ядро, которое называется
Darwin.Компьютерный термин «ядро» обычно означает небольшую, как правило, монолитную часть системы, в
обязанности которой входит выполнение минимальных базовых функций для поддержки всех основных сервисов
операционной системы. В Mac OS X понятие ядра существенно расширено. Под ядром в Маc OS X подразумеваются
все программные модули, исполняемые в адресном пространстве ядра. Darwin объединяет в себе несколько
технологий, основные из которых:
микроядро Mach 3.0;
сервисы операционной системы на базе BSD 4.4-Lite;
быстрые, основанные на сложившихся стандартах сетевые модули;
система ввода-вывода (I/O Kit);
поддержка различных файловых систем.
Микроядро Mach
Микроядро Mach(разработка Carnegie-Mellon University) является основой всего ядра Darwin, так как выполняет все
критически важные функции операционной системы. Оно управляет загрузкой процессора, создает расписания и
отслеживает их выполнение, распределяет память и обеспечивает ее защиту, формирует централизованную
инфраструктуру системных сообщений для других уровней операционной системы.
Защита памяти. Mach заботится о том, чтобы никакая программа не смогла записать какие-либо данные в адресное
пространство другой программы или системы. Поэтому сбои и нарушения в работе прикладной программы не
приводят к краху всей системы: достаточно отключить программу, вызвавшую сбой, и продолжить работу.
Вытесняющая многозадачность. В современных системах множество задач разделяют ресурсы процессора. Mach
контролирует загрузку процессора, составляет расписания, устанавливает приоритеты задач, чтобы обеспечить
максимальную эффективность работы процессора и предоставить всем задачам необходимое процессорное время.
Виртуальная память. Каждой задаче в Mac OS X выделяется свое виртуальное адресное пространство объемом до 4
Гбайт. Но реальное выполнение любой задачи возможно только в истинной физической памяти - оперативной памяти
компьютера. Mach осуществляет выделение задачам пространства физической памяти и преобразование
виртуальных адресов в адреса физической памяти. Обычно только один фрагмент программы или данных,
находящихся в виртуальном адресном пространстве задачи, загружен в физическую память. Если требуется другой
фрагмент, он загружается в память с носителя данных, обычно с магнитного диска, вытесняя предыдущий фрагмент.
Mach контролирует загрузку и освобождение памяти, обеспечивая эффективную работу многих задач одновременно.
Режим реального времени. Для процессов, требующих быстрой реакции, Mach обеспечивает доступ к ресурсам
процессора за минимальное время.
Система BSD
Тесно интегрированная с микроядром Mach, система BSD в Mac OS X является несколько видоизмененной версией
операционной системы BSD 4.4-Lite (Berkeley Software Distribution, разработка University of California at Berkeley).
Версия BSD ядра Darwin осуществляет в Mac OS X поддержку различных файловых систем и сетевых технологий.
Кроме того, BSD отвечает:
за систему безопасности, идентификацию и права пользователей,
преобразование вызовов из уровня программ на уровень системы,
BSD-модель процессов,
реализацию механизма BSD sockets,
реализацию так называемых нитей процессов (POSIX threads),
Application Program Interface (API) ядра.
Система ввода-вывода
Система ввода-вывода (I/O Kit) построена на объектно-ориентированной модели и соответствующих библиотеках.
Она поддерживает множество устройств различного типа, облегчает написание драйверов, является модульной и
расширяемой системой. Важнейшие ее черты:
истинный режим plug-and-play,
динамическое управление устройствами (горячее подключение),
динамическая загрузка драйверов по мере необходимости,
управление энергопотреблением как для портативных, так и для настольных компьютеров,
многопроцессорная обработка.
На уровне пользователя программной основой сетевых и коммуникационных средств Mac OS X является технология
OpenTransport.OpenTransport Mac OS X поддерживает большинство функций, имевшихся еще в Mac OS 8 и 9, хотя коечто пришлось изменить. Для работы в сети в Mac OS X имеется:
стек протоколов ТСРДР от BSD 4.4,
поддержка IP и AppleTalk,
поддержка нескольких IP-адресов при одном сетевом интерфейсе (multihoming),
маршрутизация (routing),
многоадресная передача одних и тех же данных нескольким адресатам -- multicast,
реализация AppleTalk на базе технологии socket,
поддержка Mac OS Classic,
набор модулей для работы с сетью (OpenTransport), переписанный для работы в окружении Carbon.
Mac OS X поддерживает следующие типы сетевых сред:
Ethernet-10/100Base-T;
Ethernet-1000Base-T;
Jumbo Frame;
Последовательная передача;
Беспроводная передача.
Mac OS X поддерживает следующие стандартные сетевые протоколы:
TCP/IP, UDP/IP;
PPP;
PAP;
HTTP;
FTR;
DNS;
SLP;
DHCP и BOOTP;
Для добавления новых сетевых технологий без необходимости перекомпиляции ядра предусмотрен механизм
сетевых расширений ядра -- Network Kernel Extensions. Этот механизм позволяет не только добавлять отдельные
сетевые модули, но и полный набор (стек) новых протоколов, которые динамически загружаются в ядро или
выгружаются из ядра по мере необходимости.
Используемая литература
Эндрю Стюарт Таненбаум, Modern Operating Systems, ISBN 0-13-031358-0
Эндрю Стюарт Таненбаум, Operating Systems: Design and Implementation, ISBN 0-13-638677-6
http://www.wikipedia.org/
http://education.aspu.ru
http://www.intuit.ru
Размещено на Allbest.ru
Документ
Категория
Компьютеры, Программирование
Просмотров
334
Размер файла
308 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа