Главная страница
Навигация по странице:

  • 3.1 Linux. История развития.

  • 3.2 Архитектура Linux, UNIX и Windows Архитектура UNIX

  • Задание на лабораторную работу

  • Рекомендации по оформлению отчета по лабораторной работе

  • МР по ПР. 09042ПКСОС5пара. Методические указания по выполнению лабораторной работы. Курс лекций. Теоретические сведения и методические указания по выполнению лабораторной работы


    Скачать 72.73 Kb.
    НазваниеМетодические указания по выполнению лабораторной работы. Курс лекций. Теоретические сведения и методические указания по выполнению лабораторной работы
    АнкорМР по ПР
    Дата29.03.2023
    Размер72.73 Kb.
    Формат файлаdocx
    Имя файла09042ПКСОС5пара.docx
    ТипМетодические указания
    #1022995





    ПРАКТИЧЕСКАЯ работа 8

    Изучение архитектуры ОС Linux

    1. Цель работы

      1. Ознакомится с историей создания ОС Linux.

      2. Провести сравнительную характеристику ОС Windows и Linux.

    2. Средства обучения

      1. Методические указания по выполнению лабораторной работы.

      2. Курс лекций.

    3. Теоретические сведения и методические указания по выполнению лабораторной работы

    3.1 Linux. История развития.

    Разработка ОС Linux началась в начале 90-х, когда молодой программист Линус Торвальдс из Хельсинского института компьютерных технологий решил создать операционную систему для своих нужд. В основе разрабатываемой системы лежат принципы построения ОС UNIX.

    История создания ОС UNIX началась в середине 60-х годов, когда сотрудники компании General Electrics, AT&T Bell Laboratories и Масачусетского института написали операционную систему Multics, в которой была впервые реализована, в частности, поддержка файловых систем, многозадачный и многопользовательский режим работы. Данный проект, из-за слабой развитости и отсутствия поддержки других разработчиков, был закрыт в конце 60-х годов, но разработка и выпуск операционной системы продолжились вплоть до 1992 года.

    После Multics был разработан UNIX, который, в отличие от предшественницы, поддерживал не только многозадачность, но и работал на разных платформах, включая предшественников современных ПК, которых тогда называли как мини-компьютеры. В основе, а вернее в первопричине создания операционной системы лежит игра Space Travel, которая была разработана программистом Кеном Томпсоном. Игра не смогла заработать на компьютере того времени Honeywell 635, и поэтому Кен Томпсон ожидал выхода более мощного компьютера. Игра все же заработала, но перед этим она прошла очень сложный путь модернизации, причем это касается не столько игры, сколько самого компьютера. Для того, чтобы игра заработала, для нее была создана операционная система. В ходе создания ОС пришлось усовершенствовать файловую систему для ускорения работоспособности системы, добавить функции управления системными устройствами, процессором, памятью и т.д. Управление всеми функциональными возможностями занимался мощный командный процессор Bourne Again Shell, в народе просто Bash. UNIX стал одной из первых POSIX-совместимых операционных систем. (Примечание: POSIX ‑ Portable Opereating System Interface for computer environments, интерфейс переносимой операционной системы.)

    За достаточно короткий срок данная система превратилась в мощную многозадачную и многопользовательскую ОС, которую Браян Керниган предложил назвать Unics, название походило от системы Multics, а уже позже Unics назвали короче ‑ UNIX, звучит так же, но лишнюю букву программистам писать было лень. Первой официальной версией системы является выпущенная в ноябре 1971 года система UNIX 1.0. Операционная система UNIX была написана на ассемблере. Деннис Ритчи предложил внести в исходный код операционной системы некоторые изменения, вплоть до того, что исходный код системы был позже написан с использованием языка программирования C. Официальной датой появления операционной системы UNIX считается 1 января 1970 года.

    Неофициально UNIX стал продаваться с 1972 года. Лицензию на владение системой покупали многие компании, включая IBM, Nowell и даже сама Microsoft. В 1975 году Калифорнийский университет в Беркли купил права на Unix и выпустил свою систему ‑ Berkeley Software Distribution, BSD. позже последовали различные выпуски Unix BSD, BSD 4 и так далее, из которых до сегодняшнего дня сохранилась только FreeBSD ‑ сетевая многозадачная и многопользовательская операционная система, ныне основной конкурент Linux.

    В 1980 году компания Microsoft купила Unix и создала на ее основе операционную систему Xenix.

    В конце 80-х годов UNIX был полноправным владельцем компьютерного рынка. К этому времени в системе уже был реализован графический интерфейс пользователя (GUI, Graphic User Interface), их в составе системы обычно было два, которые частично сохранились и до наших времен: Motiff и Open Look. Позже эти два стандарта были объеденены в один: CDE ‑ Common Desktop Environment, еще позже ‑ KDE.

    За время своего существования проект UNIX стал коммерческим. Клиентами UNIX стали сотни компаний по всему миру, в частности: Novell, Sun Microsystems, IBM, Apple, Microsoft.

    5 октября 1991 года Линус Торвальдс объявил о выходе официальной версии Linux 0.02, в которой был только командный процессор Bash и GNU C Compiler. Внимание все же уделялось ядру системы, которое было незаконченное. Линус выложил свои разработки в интернете, ожидая, что у него найдутся сторонники его необычайного творения. Линусу были предложены многочисленные нововведения от программистов со всего мира, которые проявили интерес к операционной системе Linux.

    В марте 1994 года вышла первая официальная рабочая версия Linux, которая полностью была готова к инсталляции и использованию. Построена она была на первой версии ядра. Windows 95 ‑ это грубая копия Linux с похожим графическим интерфейсом. Linux работал на любом 32-разрядном компьютере Intel 80386.

    В 1995 году Linux была очень устойчивой операционной системой. Для его полноценной работы достаточно было компьютера, на котором Windows 95 от Microsoft не работала. Linux построен на открытом исходном коде, то есть каждый пользователь может вносить в операционную систему свои изменения вплоть до полного и капитального изменения всей программной части и ядра операционной системы, однако при этом любой пользователь не должен забывать, что полностью присвоить систему себе он не может, может лишь создать на основе Linux какую-нибудь свою операционную систему, но таким образом, что все будут знать, что она основана на Linux. Это повлияло на то, что различные программисты переделывали Linux, как могли, и таким образом на сегодняшний день существует более 600 дистрибутивов операционной системы Linux. Каждый дистрибутив имеет свои определенные особенности, это как бы отдельные разновидности Linux. Многие дистрибутивы известны лишь в пределах какой-нибудь компании или страны.

    Последнее время растет популярность программ-эмуляторов для Linux, способных загружать в системе программы, написанные для других операционных систем, в частности, ОС DOS и Windows. Подобные программы проходили тестирование еще в 1999 году.

    Linux считается одной из самых устойчивых ОС. Многие системные администраторы, переходят на Linux из-за ее качества и широких возможностей.

    В отличии от Windows, Linux ‑ это POSIX-совместимая система, которая без проблем работает как на обычном PC, так и на спецефических веб-серверах и рабочих станциях.

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

    ОС Linux поддерживает самое аппаратное обеспечение. При этом пользователю нет необходимости устанавливать драйвера под конкретное оборудование. Все драйвера устанавливаются при установке дистрибутива.

    3.2 Архитектура Linux, UNIX и Windows

    Архитектура UNIX

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



    Структура ОС UNIX

    Заглянем глубже в ядро системы. Оно позволяет всем остальным программам общаться с периферийными устройствами, регулирует доступ к файлам, управляет память и процессами. Ядро ‑ это связной, к которому обращаются посредством системных вызовов (запрашивая какую-то услугу). Связь эта ‑ не односторонняя: ядро может и возвращать в случае необходимости какие-то данные. Основным достоинством ядра является строгая стандартизация системных API. За счет этого во многом достигается переносимость кода между разными версиями UNIX и абсолютно различным аппаратным обеспечением.



    Структура ядра UNIX

    Все обращения к ядру системы можно разделить на две категории: программа вызывает подсистему управления файлами или подсистему управления процессами. Первая отвечает за все, что связано с файлами: управление, размещение, доступ. Процессы же ‑ это, в общем случае, любые запущенные программы. Поэтому подсистема управления процессами служит для их жизнеспособности, синхронизации и управления. Важно так же и то, что файловая подсистема и подсистема управления процессов могут общаться друг с другом: любой процесс может вызывать системные API для работы с файлами. Достоинство UNIX состоит в том, что эти API универсальны (да и в Windows наблюдается та же картина). Вот самые главные из них: open, close, read, write, stat, chown, chmod (суть почти всех вызовов интуитивно понятна из названия, кроме, разве что, последних трех, поэтому поясню ‑ они служат для управления атрибутами файлов, информации о владельце и прав доступа) и др. Каждый из этих системных вызовов в программе на языке С является обычной функцией. Информацию по любому из них можно запросто найти в man.

    Подсистема управления файлами ‑ почти единственная из всех работает с драйверами, которые являются модулями ядра. «Почти», потому что есть еще и сетевая подсистема, которая работает, например, с драйвером сетевой карты и с драйверами различных современных сетевых устройств. Ее, однако, мы рассматривать не будем. Обмен данными с драйверами может проходить двумя способами: с помощью буфера или потока. Суть первого метода заключается в том, что для информации выделяется кэш (или сверхоперативная память, как его называли раньше), в который заносится необходимый блок данных. Далее информация из кэша передается к драйверу. Драйвер ‑ единственный элемент ядра, способный управлять периферийными устройствами. Но подсистема управления файлами может взаимодействовать с драйвером и через поток. Поток представляет собой посимвольную передачу данных драйверу. Следует отметить, что способ взаимодействия с драйвером определяется не пользователем и не приложением. Он является характеристикой того устройства, которым управляет драйвер. Очевидно, что потоковое общение позволяет взаимодействовать более оперативно, чем общение через буфер. Ведь на заполнение буфера тратится время и, следовательно, возрастает время отклика.

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

    Чуть выше мы перечисляли системные API для управления файлами. Теперь рассмотрим вызовы, служащие для работы с процессами: fork (создает новый процесса), exec (выполняет процесс), exit (завершает исполнение процесса), wait (один из способов синхронизации), brk (управляет памятью, выделенной процессу), signal (обработчики исключений) и др.

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

    Второй модуль ‑ планировщик. Его задача не менее важна. UNIX ‑ мультизадачная ОС, то есть одновременно может выполняться множество процессов. Мы, однако, знаем, что в фиксированный момент времени на одном процессоре может выполняться только одна команда. Именно поэтому нужен виртуальный рефери, который будет определять, какому процессу исполняться сейчас, а какому ‑ через секунду. На практике же планировщик переключает контекст, то есть перед тем, как остановить исполнение какого-то процесса, он запоминает состояние регистров, памяти и т.д., а уже после этого запускает другой процесс в его собственном адресном пространстве. И еще один тонкий момент: каждый запущенный процесс «думает», что он единственный. Дополнительно существует механизм приоритетов. Очевидно, чем выше приоритет, тем быстрее начнет исполняться процесс. Процессы могут также обмениваться между собой информацией. В случае их синхронного взаимодействия синхронизацию осуществляет модуль взаимодействия (например, функция wait).

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

    Windows 2000/XP построены на архитектуре микроядра (microkernel architecture). ОС Windows 95/98 используют монолитное (monolithic) ядро. Микроядра являются сравнительно небольшими и модульными. Благодаря последнему новые устройства зачастую добавляются как модули, которые можно загружать/выгружать на этапе исполнения без перекомпиляции ядра. На архитектуре микроядра построены также FreeBSD и Mac OS X. Монолитные же ядра используются в Linux. Они оптимизированы для более высокой производительности с минимальными контекстными переключениями. Такая архитектура упрощает поддержку кода ядра для разработчиков, но требует перекомпиляции ядра при добавлении новых устройств. Следует отметить, что описанные здесь различия являются «классическими», на практике монолитные ядра могут поддерживать модульность (что зачастую и происходит), а микроядра могут требовать перекомпиляции.

    Архитектура Windows

    Структура Windows 2000/XP не отличается оригинальностью: ядро системы (исполняется на максимально приоритетном уровне процессора) и пользовательские подсистемы (исполняются на минимально приоритетном уровне).

    Ядро системы является критичной частью кода, любые ошибки, происходящие в ядре, приводят к фатальному краху системы – «синему экрану». Фактически ‑ это ошибки типа «Нарушение общей защиты». Как только код ядра начинает обращаться в запрещенные для него области памяти (попытка прочитать или записать данные, исполнить неверную инструкцию, переход на запрещенную область), срабатывает система защиты памяти процессора, и управление передается системному обработчику исключений. Обработчик исключений не может восстановить корректное поведение кода. Все, что он делает ‑ это вывод дампа на синий экран с указанием типа ошибки и содержимого памяти в области, где сработала защита.

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

    Ядро UNIX/Linux имеет два вида исключений, которые обычно называют «oops» и «panic». Почти в каждой операционной системе паника происходит в тех случаях, когда ядро обнаруживает серьезную неисправность. Если система каким-либо образом повредила сама себя, ей требуется остановиться немедленно, пока она не произведет необратимых критических изменений (типа уничтожения файловой системы). Везде, где только возможно, UNIX/Linux пытается детектировать проблему и справиться с ней без остановки всей системы. Например, многие ситуации типа «oops» приводят к завершению процесса, который нормально запустился, но потом зациклил систему. Бывают, однако, ситуации, когда все настолько плохо, что полная паника является наилучшим выходом. Считается, что пользователи стабильных версий ядра не должны встречать ни «panic», ни «oops». Но в реальном мире они иногда происходят. В частности, исключение типа «panic» может произойти в случае, когда процессор пытается передать управление процессу, которого не существует. Это приводит к краху всей системы.

    Ядро Windows 2000/XP состоит из нескольких системных компонентов, каждый из которых отвечает за определенный набор задач. Основные компоненты ядра:

    • Микроядро (Microkernel) ‑ компактный код, можно сказать, сердце системы. В рамках микроядра работают ключевые службы: диспетчер памяти, диспетчер задач и другие.

    • Слой абстрагирования (Hardware Abstraction Layer, HAL). Полностью абстрагирует код системы от конкретного аппаратного оборудования. Использование HAL позволяет обеспечить переносимость 99% кода системы между различным оборудованием.

    • Диспетчер Ввода/Вывода (Input/Output Manager). Полностью контролирует потоки обмена между системой и устройствами. Драйверы устройств работают в контексте I/O Manager. Если драйвер написан с ошибками и может привести к сбою ‑ это вызовет фатальный крах ядра и всей системы. 70% случаев фатальных сбоев («синий экран») ‑ есть результат некорректного поведения драйверов устройств. Windows XP содержит встроенный механизм контроля драйверов: правильно написанный и тщательно протестированный драйвер поставляется с цифровой подписью (Driver Signing). Правильная настройка системы заключается в запрещении установки драйверов без корректной подписи.

    • Модуль управления объектами (Object Manager), управления виртуальной памятью (Virtual Memory Manager), управления процессами (Process Manager), управления безопасностью (Security Reference Monitor), управления локальными вызовами (Local Procedure Calls Facilities) ‑ важные компоненты ядра системы подробно рассматриваться не будут.

    • Наконец, особое по значению и важности место в ядре системы занимает модуль графического интерфейса ‑ Win32k.sys. Фактически ‑ это часть подсистемы Win32, отвечающая за прорисовку и управление графическим интерфейсом. Этот модуль расположен в ядре специально для того, чтобы существенно повысить производительность графических операций ввода/вывода. Однако размещение столь критической части в ядре накладывает чрезвычайно строгие требования к корректности его исполнения. Фактически, ошибка в коде Win32k.sys приведет к краху системы. Разработчики Windows уделяют огромное внимание этому модулю, и именно он наиболее тщательно протестирован. Опыт эксплуатации систем Windows показывает, что код Win32k.sys работает абсолютно корректно и не содержит фатальных ошибок. Однако некорректный драйвер видеосистемы может все испортить.

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

    Таким образом, ОС Unix и Windows достаточно сильно отличаются в реализации различных сервисов и служб. В частности, можно отметить следующие основные различия:

    1. В Unix/Linux графическая система существует отдельно от ядра и функционирует как обычное приложение. В операционных системах Windows графическая система интегрирована в ядро. В случае использования операционной системы на рабочей станции, особенно при запуске графикоемких приложений, возможно, лучше, когда графическая система входит в ядро ‑ в этом случае она может быстрее работать. А при работе на сервере предпочтительней отделение графической системы от ядра ОС, так как она загружает память и процессор. В случае Unix/Linux графическую систему можно просто отключить, к тому же, если системный администратор ее все-таки хочет использовать, в Linux есть несколько графических оболочек на выбор, некоторые из них (например, WindowMaker) достаточно слабо загружают машину. Эта же особенность Unix-образных операционных систем позволяет запускать эти ОС на машинах с весьма скромными объемами ОЗУ и т.п. В случае Windows же графическая система слишком тесно интегрирована в ОС, поэтому она должна запускаться даже на тех серверах, на которых она вовсе не нужна.

    2. Отметим также методику разделения прав доступа в Windows 2000 и Unix/Linux. В первом - разделение прав доступа основано на ACL (access control lists), то есть, к примеру, можно настроить систему таким образом, чтобы администратор не имел возможности управлять файлами пользователей. У Unix/Linux же всегда есть суперпользователь - root, который имеет доступ абсолютно ко всему. То есть теоретически модель безопасности в Windows лучше: чтобы полностью завладеть хорошо настроенной системой Windows, хакеру придется ломать больше, в Unix/Linux же достаточно взломать доступ к root. (В Unix/Linux используются более старые технологии, тем не менее, некоторые дистрибутивы Linux сейчас начинают поддерживать ACL, среди них - ASPLinux 7.3 Server Edition). Но теория несколько смазывается практикой с той стороны, что в Windows не так быстро, как в Linux, заделываются «дыры», что уже относится к плюсам открытой модели разработки. В результате оказывается, что в Windows по статистике больше дыр, через которые злоумышленник может пробраться в систему. Но, опять же, точно о количестве дыр в Linux и Windows можно будет сказать только тогда, когда количество пользователей обоих видов ОС будет примерно одинаковым.

    3. В Linux поддерживаются несколько файловых систем, наиболее продвинутые ‑ это Ext2, Ext3, XFS. ОС Windows завязана по большому счету на одну файловую систему - NTFS или FAT 32. Файловые системы Ext2, Ext3, XFS по оценкам работают быстрее. Принципиальное же отличие в том, что в UNIX/Linux вообще нет понятия диска, физического или логического. Вся работа с устройствами хранения данных организуется через специальные файлы устройств, которые отображают физический носитель (диск, лента и т.п.) или его части (разделы) в файловую систему.

    4. Важное отличие ‑ наличие в Windows технологии ActiveX, нечто подобное в Unix/Linux реализуется с помощью CORBA и Bonobo. Эта технология, с одной стороны, предоставляет пользователю множество удобств, с другой стороны - она же допускала в свое время такие вещи, как автоматический запуск Outlook'ом вируса, пришедшего по почте. Одно из важных отличий этих технологий в том, что элементы ActiveX могут внедряться в текст HTML, что имеет как ряд достоинств, так и недостатков.

    Можно перечислить еще ряд отличий Unix-подобных операционных систем от Windows, например, встроенную поддержку удаленного доступа в Unix и отсутствие оной в Windows по умолчанию (она реализуется в серверных версиях Windows, а также с помощью дополнительных средств, например, Citrix). В Unix/Linux и Windows сильно различаются сетевые подсистемы (IP-stack), по ряду оценок сетевая подсистема Unix/Linux эффективнее.

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

    1. Контрольные вопросы

      1. Когда вышла первая версия ОС UNIX?

      2. Что означает термин POSIX?

      3. Когда вышла первая рабочая версия ОС Linux?

      4. Перечислите основные составные части ОС UNIX.

      5. Перечислите основные подсистемы обработки обращений к ядру UNIX.

      6. Охарактеризуйте способы обмена данными с драйверами в ОС UNIX.

      7. Перечислите основные модули подсистемы управления процессами ОС UNIX.

      8. Перечислите операционные системы, использующие микроядерную структуру.

      9. Как называется обработчик ошибок в ОС Windows?

      10. Какие исключения используются в ядре ОС UNIX/Linux для обработки критических ситуаций?

      11. Перечислите системные компоненты ядра Windows 2000/XP.

    2. Задание на лабораторную работу

    Дайте письменный ответы на задание

      1. Проведите сравнительную характеристику ОС Windows и Linux.

    1. Ход выполнения работы

    В ходе выполнения лабораторной работы необходимо изучить материал по теме «Архитектура современных ОС».

    1. Рекомендации по оформлению отчета по лабораторной работе

    Лабораторная работа оформляется в соответствии с ГОСТ 2.105-95 и требованиями, принятыми в колледже. Отчет по лабораторной работе должен содержать:

    • вид работы;

    • название работы;

    • цель работы;

    • средства обучения;

    • номер контрольного вопроса и краткий ответ на поставленный вопрос;

    • результаты выполнения задания на лабораторную работу;

    • выводы по работе.

    Литература:

    1. Таннебаум Э. Современные операционные системы. 2 изд. – СПб: Питер, 2002 г.

    2. www.gadzzilla.org

    3. http://linuxbegin.ru/


    написать администратору сайта