Файл: Методические указания по выполнению лабораторной работы. Курс лекций. Теоретические сведения и методические указания по выполнению лабораторной работы.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 03.02.2024
Просмотров: 17
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ПРАКТИЧЕСКАЯ работа 8
Изучение архитектуры ОС Linux
-
Цель работы-
Ознакомится с историей создания ОС Linux. -
Провести сравнительную характеристику ОС Windows и Linux.
-
-
Средства обучения-
Методические указания по выполнению лабораторной работы. -
Курс лекций.
-
-
Теоретические сведения и методические указания по выполнению лабораторной работы
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 (обработчики исключений) и др.
Следующие два модуля являются очень важными в понимании всей подсистемы управления процессами. Первый - модуль распределения памяти, позволяет избежать нехватки оперативной памяти. Хотя механизм свопинга и файлов подкачки (технически правильно это, кстати, называется виртуальной памятью) уже ни для кого не секрет, в тени остается другой факт: операционная система (в лице описываемой подсистемы) может либо скидывать все данные, относящиеся к конкретному процессу, на диск, либо скидывать страницы памяти (страничное замещение). Таким образом, модуль распределения памяти выполняет очень важную функцию ‑ он определяет какому процессу сколько выделить памяти.