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

  • Потом пришел Линус: введение в Linux

  • Обзор операционных систем и ядер

  • обеспечением.

  • Второе издание


    Скачать 3.09 Mb.
    НазваниеВторое издание
    Дата08.09.2019
    Размер3.09 Mb.
    Формат файлаpdf
    Имя файлаLav_Robert_Razrabotka_yadra_Linux_Litmir.net_264560_original_254.pdf
    ТипДокументы
    #86226
    страница3 из 53
    1   2   3   4   5   6   7   8   9   ...   53
    22

    Введение
    в ядро Linux
    Д
    аже после трех десятилетий использования операционная система (ОС)
    Unix все еще считается одной из самых мощных и элегантных среди всех существующих операционных систем. Со времени создания операционной систе- мы Unix в 1969 году, это детище Денниса Ритчи (Dennis Ritchie) и Кена Томпсона
    (Ken Thompson) стало легендарным творением, системой, принцип работы которой выдержал испытание временем и имя которой оказалось почти незапятнанным.
    Операционная система Unix выросла из Multics — многопользовательской опера- ционной системы, проект по созданию которой потерпел неудачу в корпорации Bell
    Laboratories. По прекращении проекта Multics, сотрудники центра Bell Laboratories
    Computer Sciences Research Center прекратили работу и так и не создали дееспособ- ной диалоговой операционной системы. Летом 1969 года программисты корпорации
    Bell Labs разработали проект файловой системы, которая в конце концов была вклю- чена в операционную систему Unix. Томпсон осуществил реализацию операционной системы для реально не используемой платформы PDP-7. В 1971 году операционная система Unix была перенесена на платформу PDP-11, а в 1973 году переписана с ис- пользованием языка программирования С, что было беспрецедентным шагом в то время, но этот шаг стал основой для будущей переносимости. Первая версия опера- ционной системы Unix, которая использовалась вне стен Bell Labs, называлась Unix
    System версии 6, ее обычно называют V6.
    Другие компании перенесли операционную систему Unix на новые типы машин.
    Версии, полученные в результате переноса, содержали улучшения, которые позже привели к появлению нескольких разновидностей этой операционной системы,
    В 1977 году корпорация Bell Labs выпустила комбинацию этих вариантов в виде одной операционной системы Unix System III, а в 1982 году корпорация AT&T пред- ставила версию System V
    1
    Простота устройства операционной системы Unix, а также тот факт, что эта система распространялась вместе со своим исходным кодом, привели к тому, что дальнейшие разработки начали проводиться в других организациях. Наиболее важ- ным среди таких разработчиков был Калифорнийский университет в городе Беркли
    (University of California at Berkeley).
    1
    Как насчет версии System IV? Ходят слухи, чтo это внутренняя экспериментальная версия.
    1

    Варианты операционной системы Unix из Беркли именовались Berkeley Software
    Distributions (BSD). Первая версия операционной системы Unix, разработанная в
    Беркли в 1981 году, называлась 3BSD. Следом за ней появились выпуски серии 4BSD:
    4.0BSD, 4.1BSD, 4.2BSD и 4.3BSD. В этих версиях операционной системы Unix была добавлена виртуальная память, замещение страниц по требованию (demand paging)
    и стек протоколов TCP/IP. Последней официальной версией ОС Unix из Беркли была 4.4BSD, выпущенная в 1993 году, которая содержала переписанную систему управления виртуальной памятью. Сейчас разработка линии BSD продолжается в операционных системах Darwin, Dragonfly BSD, FreeBSD, NetBSD и OpenBSD.
    В 1980-1990-х годах многие компании, разработчики рабочих станций и серве- ров, предложили свои коммерческие версии операционной системы Unix. Эти опе- рационные системы обычно базировались на реализациях AT&T или Беркли и под- держивали дополнительные профессиональные возможности, которые обеспечивала соответствующая аппаратная платформа. Среди таких систем были Tru64 компании
    Digital, HP-UX компании Hewlett Packard, AIX компании IBM, DYNIX/ptx компании
    Sequent, IRIX компании SGI, Solaris компании Sun.
    Первоначальное элегантное устройство операционной системы Unix в соедине- нии с многолетними нововведениями и улучшениями, которые за ними последо- вали, сделали систему Unix мощной, устойчивой и стабильной. Очень небольшое количество характеристик ОС Unix ответственны за ее устойчивость. Во-первых,
    операционная система Unix проста: в то время как в некоторых операционных си- стемах реалилованы тысячи системных вызовов и эти системы имеют недостаточно ясное назначение, Unix-подобные операционные системы обычно имеют только не- сколько сотен системных вызовов и достаточно четкий дизайн. Во-вторых, в опера- ционной системе Unix все представляется в виде файлов
    2
    . Такая особенность позволяет упростить работу с данными и устройствами, а также обеспечить это посредством простых системных вызовов: open (), read (), w r i t e ( ) , i o c t l () и c l o s e (). В-тре- тьи, ядро и системные утилиты Операционной системы Unix написаны на языке программирования С - это свойство делает Unix удивительно переносимой и до- ступной для широкого круга разработчиков операционной системой.
    Для ОС Unix характерно очень малое время создания нового процесса и уникаль- ный системный вызов f o r k ( ) . И наконец, операционная система Unix предоставля- ет простые и в то же время устойчивые средства межпроцессного взаимодействия,
    которые, в сочетании с быстрым созданием процессов, позволяют создавать про- стые утилиты, которые умеют выполнять всего одну функцию, но делают это хорошо, и могут быть связаны вместе для выполнения более сложных задач.
    Сегодня Unix — современная операционная система, которая поддерживает мно- гозадачность, многопоточность, виртуальную память, замещение страниц по требо- ванию, библиотеки совместного использования, загружаемые по требованию, и сеть
    TCP/IP. Многие варианты операционной системы Unix поддерживают масштабиро- вание до сотен процессоров, в то время как другие варианты ОС Unix работают на миниатюрных устройствах в качестве встраиваемых систем. Хотя разработка Unix больше не является исследовательским проектом, все же продолжаются разработки
    (с целью получить дополнительные преимущества) с использованием возможностей
    2
    Да, конечно, не все, но многое представлено в виде файла. В современных операционных систе- мах, таких как Plan9 (наследник Unix), практически все представляется в виде файлом.
    24 Глава 1
    операционной системы Unix, которая при этом остается практичной операционной системой общего назначения.
    Операционная система Unix обязана своим успехом простоте и элегантности по- строения. В основе ее сегодняшней мощности лежат давние идеи Денниса Ритчи,
    Кена Томпсона и других разработчиков, обеспечившие возможность операционной системе Unix бескомпромиссно развиваться.
    Потом пришел Линус: введение в Linux
    Операционная система Linux была разработана Линусом Торвальдсом (Linus
    Torvalds) в 1991 году как операционная система для компьютеров, работающих на новом в то время микропроцессоре Intel 80386. Тогда Линус Торвальдс был студен- том университета в Хельсинки и был крайне возмущен отсутствием мощной и в то же время свободно доступной Unix-подобной операционной системы. Операционная система DOS, продукт корпорации Microsoft, была для Торвальдса полезна только лишь, чтобы поиграть в игрушку "Принц Персии", и не для чего больше. Линус поль- зовался операционной системой Minix, недорогой Unix-подобной операционной си- стемой, которая была создана в качестве учебного пособия. В этой операционной системе ему не нравилось отсутствие возможности легко вносить и распространять изменения исходного кода (это запрещалось лицензией ОС Minix), а также техниче- ские решения, которые использовал автор ОС Minix.
    Поставленный перед такой проблемой, Линус решил написать свою операци- онную систему. Начал он с написания простого эмулятора терминала, который он подключал к большим Unix-системам в университете. Его эмулятор терминала по- степенно рос, развивался и улучшался. Постепенно у Линуса появилась еще не со- всем зрелая, но полноценная Unix-система. В 1991 голу он опубликовал в Интернет ее первую версию.
    По некоторым неясным причинам, использование операционной системы Linux и количество ее пользователей начали стремительно расти. Более важным для успе- ха Linux стало то, что эта операционная система привлекла многих разработчиков,
    которые начали изменять, исправлять и улучшать код. Благодаря соответствующему лицензионному соглашению, ОС Linux быстро стала совместным проектом, который разрабатывается многими людьми.
    Сейчас Linux — это развитая операционная система, работающая на аппаратных платформах AMD х86-64, ARM, Compaq Alpha, CRIS, DEC VAX, H8/300, Hitachi
    SuperH, HP PA-RISC, IBM S/390, Incel IA-64, MIPS, Motorola 68000, PowerPC, SPARC,
    UltraSPARC и v850. Она работает в различных системах, как размером с часы, так и на больших супер-компьютерных кластерах. Сегодня коммерческий интерес к опера- ционной системе Linux достаточно высок. Как новые корпорации, ориентирующиеся исключительно на Linux {Monta Vista или Red Hal), так и старые (IBM, Novell) пред- лагают решения на основе этой ОС для встраиваемых систем, десктопов и серверов.
    Операционная система Linux является клоном Unix, по ОС Linux— это не
    Unix. Хотя в ОС Linux позаимствовано много идей от Unix, в Linux реализован
    API ОС Unix (как это определено в стандарте POSIX и спецификации Single Unix
    Specification), все же система Linux не является производной от исходного кода
    Unix, как это имеет место для других Unix-систем, Там, где это желательно, были сделаны отклонения от пути, по которому шли другие разработчики, однако это не
    Введение в ядро Linux 25
    подрывает основные принципы построения операционной системы Unix и не нару- шает программные интерфейсы.
    Одна из наиболее интересных особенностей операционной системы Linux — то,
    что это не коммерческий продукт; наоборот, это совместный проект, который вы- полняется через всемирную сеть Интернет. Конечно, Линус остается создателем
    Linux и занимается поддержкой ядра, но работа продолжается группой мало связан- ных между собой разработчиков. Фактически кто угодно может внести свой вклад в операционную систему Linux. Ядро Linux, так же как и большая часть операционной системы, является свободно распространяемым программным обеспечением и имеет
    открытый исходный код
    3
    .
    В частности, ядро Linux выпускается под лицензией GNU General Public License
    (GPL) версии 2.0. В результате каждый имеет право загружать исходный код и вно- сить в него любые изменения. Единственная оговорка — любое распространение внесенных вами изменений должно производиться на тех же условиях, которыми пользовались вы при получении исходного кода, включая доступность самого исхо- дного программного кода
    4
    Операционная система Linux предоставляет много возможностей для многих людей. Основными частями системы являются ядро, библиотека функций языка
    С, компилятор, набор инструментов, основные системные утилиты, такие как про- грамма для входа в систему (login) и обработчик команд пользователя (shell). В опе- рационную систему Linux может быть включена современная реализация системы
    X Windows, включая полно-функциональную среду офисных приложений (desktop environment), такую как, например, GNOME. Для ОС Linux существуют тысячи сво- бодных и коммерческих программ. В этой книге под понятием Linux, в основном,
    имеется в виду ядро Linux. Там, где это может привести к неопределенностям, будет указано, что имеется в виду под понятием Linux — вся система или только ядро.
    Строго говоря, термин Linux относится только к ядру.
    Обзор операционных систем и ядер
    Из-за неуклонного роста возможностей и не очень качественного построения не- которых современных операционных систем, понятие операционной системы стало несколько неопределенным. Многие пользователи считают, что то, что они видят на экране, — и есть операционная система. Обычно, и в этой книге тоже, под операци-
    онной системой понимается часть компьютерной системы, которая отвечает за основ- ные функции использования и администрирования. Это включает в себя ядро и драй- веры устройств, системный загрузчик (boot loader), командный процессор и другие интерфейсы пользователя, а также базовую файловую систему и системные утилиты.
    В общем, только необходимые компоненты. Термин система обозначает операционную систему и все пользовательские программы, которые работают под ее управлением.
    Конечно, основной темой этой книги будет ядро операционной системы.
    Интерфейс пользователя — это внешняя часть операционной системы, а ядро — вну-
    3
    Для тех, кому интересно, дискуссии по поводу отличия свободного кода от открытого доступна в
    Интернет по адресам h t t p : / / w w w . f s f . o r g и h t t p : / / w w w . o p e n s o u r c e . o r g .
    4
    Вероятно, вам нужно прочесть лицензию GNU GPL, если вы еще не читали ее. В файле COPYING,
    в исходном коде ядра, есть копия этой лицензии. В Интернет лицензия доступна по адресу h t t p : / / w w w . f s f . o r g .
    26 Глава 1
    тренняя. В своей основе ядро — это программное обеспечение, которое предоставля- ет базовые функции для всех остальных частей операционной системы, занимается управлением аппаратурой и распределяет системные ресурсы. Ядро часто называют
    основной частью (core) или контроллером операционной системы. Типичные компо- ненты ядра — обработчики прерываний, которые обслуживают запросы на преры- вания, планировщик, который распределяет процессорное время между многими процессами, система управления памятью, которая управляет адресным простран- ством процессов, и системные службы, такие как сетевая подсистема и подсистема межпроцессного взаимодействия. В современных системах с устройствами управле- ния защищенной памятью ядро обычно занимает привилегированное положение по отношению к пользовательским программам. Это включает доступ ко всем областям защищенной памяти и полный доступ к аппаратному обеспечению. Состояние систе- мы, в котором находится ядро, и область памяти, в которой находится ядро, вместе называются пространством ядра (или режимом ядра, kernel-space). Соответственно,
    пользовательские программы выполняются в пространствах задач (пользовательский режим, режим задач, user-space). Пользовательским программам доступно лишь не- которое подмножество машинных ресурсов, они не могут выполнять некоторые системные функции, напрямую обращаться к аппаратуре и делать другие недозво- ленные вещи. При выполнении программного кода ядра система находится в про- странстве (режиме) ядра, в отличие от нормального выполнения пользовательских программ, которое происходит в режиме задачи.
    Прикладные программы, работающие в системе, взаимодействуют с ядром с по- мощью интерфейса системных вызовов (system call) (рис. 1.1). Прикладная программа обычно вызывает функции различных библиотек, например библиотеки функций язы- ка С, которые, в свою очередь, обращаются к интерфейсу системных вызовов для того, чтобы отдать приказ ядру выполнить определенные действия от их имени.
    Некоторые библиотечные вызовы предоставляют функции, для которых отсутствует системный вызов, и поэтому обращение к ядру — это только один этап в более слож- ной функции. Давайте рассмотрим всем известную функцию p r i n t f (). Эта функции обеспечивает форматирование и буферизацию данных и лишь после этого один раз обращается к системному вызову w r i t e () для вывода данных на консоль. Некоторые библиотечные функции соответствуют функциям ядра один к одному. Например, биб- лиотечная функция open () не делает ничего, кроме выполнения системного вызова open () . В то же время некоторые библиотечные функции, как, например, s t r c p y (),
    надо полагать, вообще не используют обращения к ядру. Когда прикладная программа выполняет системный вызов, то говорят, что ядро выполняет работу от имени приклад-
    ной программы. Более того, говорят, что прикладная программа выполняет системный
    вызов в пространстве ядра, а ядро выполняется в контексте процесса. Такой тип взаи- модействия, когда прикладная программа входит в ядро через интерфейс системных вызовов, является фундаментальным способом выполнения задач.
    В функции ядра входит также управление системным аппаратным обеспечением.
    Практически все платформы, включая те, на которых работает операционная си- стема Linux, используют прерывания (interrupt). Когда аппаратному устройству необ- ходимо как-то взаимодействовать с системой, оно генерирует прерывание, которое прерывает работу ядра в асинхронном режиме
    5 5
    Иными словами, заранее неизвестно, в какой момент времени это событие произойдет и в каком состоянии будет система в этот момент времени. - Прим*. перев.
    Введение в ядро Linux 27

    Рис. 1.1. Взаимодействие между прикладными программами, ядром и аппа-
    ратным обеспечением. .
    Обычно каждому типу прерываний соответствует номер. Ядро использует номер прерывания для выполнения специального обработчика прерывания (interrupt han- dler), который обрабатывает прерывание и отправляет на него ответ. Например, при вводе символа с клавиатуры, контроллер клавиатуры генерирует прерывание, чтобы дать знать системе, что в буфере клавиатуры есть новые данные. Ядро определяет номер прерывания, которое пришло в систему и выполняет соответствующий обра- ботчик прерывания. Обработчик прерывания обрабатывает данные, поступившие с клавиатуры, и даст знать контроллеру клавиатуры, что ядро готово для приема но- вых данных. Для обеспечения синхронизации выполнения ядро обычно может за- прещать прерывания: или все прерывания, или только прерывание с определенным номером. Во многих операционных системах обработчики прерываний не выполня- ются в контексте процессов. Они выполняются в специальном контексте прерывания
    (interrup context), который не связан ни с одним процессом. Этот специальный кон- текст существует то только для того, чтобы дать обработчику прерывания возможность быстро отреагировать на прерывание и закончить работу.
    Контексты выполнения заданий полностью определяют всю широту возможных действий ядра. Фактически, можно заключить, что в операционной системе Linux процессор в любой момент времени выполняет один из трех типов действий.
    • Работа от имени определенного процесса в режиме ядра в контексте процесса.
    28
    Глава 1
    Пространство задачи
    Пространство ядра
    Аппаратное обеспечение
    Прикладная программа 1
    Прикладная программа 2
    Прикладная программа 3
    Интерфейс системных вызовов
    Подсистемы ядра
    Драйверы устройств

    • Работа по обработке прерывания в режиме ядра в контексте прерывания, не связанном с процессами.
    • Выполнение кода пользовательской программы в режиме задачи.
    1   2   3   4   5   6   7   8   9   ...   53


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