Внутреннее устройство linux брайан уорд. «Внутреннее устройство Linux» Брайан Уорд. Введение в программное обеспечение для компиляции кода на языке C



Книга, которую вы держите в руках, уже стала бестселлером на Западе. Она описывает все тонкости работы с операционной системой Linux, системное администрирование, глубокие механизмы, обеспечивающие низкоуровневый функционал Linux. На страницах этой книги вы приобретете базовые знания о работе с ядром Linux и о принципах правильной эксплуатации компьютерных сетей. В книге также затрагиваются вопросы программирования сценариев оболочки и обращения с языком С, освещаются темы защиты информации, виртуализации и прочие незаменимые вещи.

Уровни и слои абстракции в операционной системе Linux

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

В операционной системе Linux три главных уровня. В основе расположены аппаратные средства. Они включают память, а также один или несколько центральных процессоров (CPU), выполняющих вычисления и запросы на чтение из памяти и запись в нее. Такие устройства, как жесткие диски и сетевые интерфейсы, также относятся к аппаратным средствам.

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

Процессы - запущенные программы, которыми управляет ядро, - в совокупности составляют верхний уровень системы, именующийся пространством пользователя. Более точным термином, чем «процесс», является термин «пользовательский процесс», вне зависимости от того, взаимодействует ли пользователь с этим процессом напрямую. Например, все вебсерверы работают как пользовательские процессы.

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

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

Теоретически неконтролируемый пользовательский процесс не способен причинить существенный вред системе. В действительности же все зависит от того, что именно вы считаете «существенным вредом», а также от особых привилегий данного процесса, поскольку некоторым процессам разрешено делать больше, чем другим. Например, может ли пользовательский процесс полностью уничтожить данные на жестком диске? Если должным образом настроить разрешения, то сможет, и для вас это окажется крайне опасным. Для предотвращения этого существуют защитные меры, и большинству процессов просто не будет позволено сеять смуту подобным образом.

Основные команды и структура каталогов

Эта глава является справочником по командам и утилитам операционной системы Unix. Вероятно, вы уже знаете большинство этих команд, но для подкрепления уверенности, в особенности в том, что касается структуры каталогов. Здесь представлен вводный материал, на который я буду ссылаться на протяжении всей книги.

Почему речь пойдет о командах Unix? Разве эта книга не о том, как работает Linux? Да, конечно же, об этом, но в самой сердцевине Linux заложена система Unix.

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

Как происходит загрузка ядра Linux

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

  1. Система BIOS или прошивка загрузки загружают и запускают загрузчик системы.
  2. Загрузчик системы отыскивает образ ядра на диске, загружает его в память и запускает.
  3. Ядро выполняет инициализацию устройств и их драйверов.
  4. Ядро монтирует корневую файловую систему.
  5. Ядро запускает команду init с идентификатором процесса 1. Эта точка является началом пространства пользователя.
  6. Команда init приводит в действие остальные системные процессы.
  7. В определенный момент команда init запускает процесс, позволяющий вам войти в систему. Обычно это происходит в конце или незадолго до окончания загрузки системы.

Здесь рассмотрены шаги с первого по четвертый, основное внимание уделено загрузчикам ядра и системы. В главе 6 продолжается рассказ о загрузке пространства пользователя.

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

Введение в программное обеспечение для компиляции кода на языке C

Большинство общедоступных пакетов сторонних разработчиков ПО для Unix поставляется в виде исходного кода, который можно скомпоновать и установить. Одной из причин для этого является наличие такого числа различных версий и архитектур Unix (и самой Linux), что было бы затруднительно создать двоичные пакеты для всех возможных комбинаций платформ. Еще одна важная причина состоит в том, что широкое распространение исходного кода в Unix ­сообществе воодушевляет пользователей на исправление ошибок в ПО и внесение новых функций, наполняя смыслом термин «открытый исходный код».

Практически все, что вы видите в системе Linux, можно получить как исходный код: начиная с ядра и библиотеки C и заканчивая браузерами. Возможно даже обновить и дополнить систему в целом, (пере)установив части системы из исходного кода. Однако вам, вероятно, не следует обновлять свой компьютер, устанавливая все из исходного кода, если только вы не получаете удовольствие от этого процесса или у вас нет какой-­либо другой причины.

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

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

Веб-серверы и приложения

Linux является популярной системой для веб-­серверов, а правящим монархом среди серверов приложений Linux является Apache HTTP Server (который обычно называют просто Apache). Другим веб-сервером, о котором вы часто будете слышать, является Tomcat (это также проект разработчиков Apache); он обеспечивает поддержку Java­приложений.

Сами по себе веб-­серверы выполняют немногое: они могут хранить файлы, и на этом все. Конечной целью большинства веб-­серверов, таких как Apache, является предоставление платформы для использования веб-­приложений. Например, проект Wikipedia построен на пакете MediaWiki, который вы можете использовать, чтобы организовать собственный wiki­проект. Системы управления контентом вроде WordPress и Drupal позволяют вам создавать собственные блоги и мультимедийные сайты. Все эти приложения основаны на языках программирования, которые особенно хорошо проявляют себя в Linux. Так, например, системы MediaWiki, WordPress и Drupal написаны на языке PHP.

Строительные блоки, из которых составлены веб-­приложения, являются в большой степени модульными, поэтому легко добавлять собственные расширения и создавать приложения с помощью таких фреймворков, как Django, Flask и Rails, которые предоставляют средства для распространенных веб-­инфрастуктур и функций, например, использование шаблонов, управление многими пользователями и поддержка баз данных.

Download from free file storage

Resolve the captcha to access the links!

Текущая страница: 1 (всего у книги 30 страниц) [доступный отрывок для чтения: 17 страниц]

Брайан Уорд

Внутреннее устройство Linux

Переводчик С. Черников

Технический редактор Н. Гринчик

Литературный редактор О. Андриевич

Художники А. Барцевич, В. Шимкевич

Корректоры Т. Курьянович, Е. Павлович

Верстка А. Барцевич

Брайан Уорд

Внутреннее устройство Linux. – СПб.: Питер, 2015.

ISBN 978-5-496-01952-1

© ООО Издательство "Питер", 2015

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

Предисловие

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

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

Интерес к устройству операционной системы Linux может быть вызван разными причинами. Профессионалы в сфере информационно-технологического обслуживания, а также разработчики программного обеспечения для Linux найдут в этой книге практически все, что необходимо знать, чтобы использовать операционную систему наилучшим образом. Исследователи и студенты, которым зачастую приходится подстраивать систему под себя, найдут здесь практичные объяснения того, почему все устроено именно так, а не иначе. Есть еще «затейники» – пользователи, которым нравится проводить время за компьютером ради развлечения, выгоды или и того и другого сразу.

Хотите узнать, почему некоторые вещи работают, а другие – нет? Вам интересно, что произойдет, если что-либо изменить? Тогда вы относитесь к числу «затейников».

Необходимые условия

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

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

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

Практический подход

Для работы вам понадобится компьютер с операционной системой Linux. Возможно, вы предпочтете виртуальную установку – для проверки большей части материала данной книги я пользовался приложением VirtualBox. Вы должны обладать правами доступа superuser (root), хотя в основную часть времени следует использовать учетную запись обычного пользователя. Вы будете работать главным образом в командной строке, окне терминала или в удаленном сеансе. Если вы нечасто работали в этой среде, ничего страшного, из главы 2 вы узнаете об этом подробнее.

Как правило, команды будут выглядеть следующим образом:

Вводите текст, который выделен жирным шрифтом; обычным шрифтом показан ответный текст, который выдаст машина. Символ $ является приглашением для пользователя с обычной учетной записью. Если вы увидите в качестве приглашения символ #, следует работать в учетной записи superuser (подробнее об этом – в главе 2).

Как устроена эта книга

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

В большинстве первых глав (кроме главы 2) активно задействовано ядро системы Linux, но по мере продвижения по книге вы будете работать и в своем пространстве пользователя. Если вы не понимаете, о чем я сейчас говорю, не беспокойтесь, объяснения будут даны в главе 1.

Материал излагается по возможности без привязки к какому-либо дистрибутиву системы. Было бы скучно описывать все варианты системы, поэтому я попытался рассказать о двух основных семействах дистрибутивов: Debian (включая Ubuntu) и RHEL/Fedora/CentOS. Упор сделан на серверные версии и версии для рабочих станций. Представлены также внедренные системы, например Android и OpenWRT, но изучение отличий этих платформ предоставляется вам.

Что нового во втором издании

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

Благодаря упорному труду разработчиков ПО и создателей дистрибутивов Linux ситуация изменилась. Я пересмотрел материал первого издания в поисках обновлений: особое внимание уделил процессу загрузки системы и тому, как она управляет оборудованием, а также удалил устаревший материал (например, подробное объяснение процесса печати), чтобы расширить рассмотрение роли ядра системы Linux в каждом дистрибутиве. Вы, вероятно, взаимодействуете с ядром гораздо чаще, чем сами об этом догадываетесь, и я специально отметил моменты, когда это бывает.

Я также изменил последовательность подачи материала в книге, чтобы он соответствовал интересам и потребностям современных читателей. Единственное, что не изменилось, – это объем книги.

Мне хотелось снабдить вас сведениями, которые понадобятся для быстрого начала работы. Их усвоение потребует некоторых усилий, однако я не намереваюсь делать из вас «тяжелоатлетов», чтобы вы смогли одолеть эту книгу. Когда вы будете понимать важнейшие моменты, изложенные здесь, для вас не составит труда отыскать подробности и разобраться в них.

Я изъял некоторые исторические детали, которые были в первом издании, главным образом чтобы сконцентрировать ваше внимание. Если вы интересуетесь системой Linux и ее отношением к истории системы Unix, обратитесь к книге Питера Салуса (Peter H. Salus) The Daemon, the Gnu, and the Penguin (Reed Media Services, 2008) – в ней рассказано о том, как развивалось используемое нами программное обеспечение.

Примечание о терминологии

В настоящее время ведутся споры о наименованиях некоторых элементов операционных систем. В них вовлечено даже само название системы Linux – как она должна называться: Linux или же GNU/Linux (чтобы отразить применение некоторых элементов проекта GNU)? В книге я старался использовать самые употребительные и по возможности наименее громоздкие названия.

Благодарности

Благодарю всех, кто помогал мне в работе над первым изданием. Это Джеймс Дункан (James Duncan), Дуглас Н. Арнольд (Douglas N. Arnold), Билл Феннер (Bill Fenner), Кен Хорнстайн (Ken Hornstein), Скотт Диксон (Scott Dickson), Дэн Эрлих (Dan Ehrlich), Феликс Ли (Felix Lee), Скотт Шварц (Scott Schwartz), Грегори П. Смит (Gregory P. Smith), Дэн Салли (Dan Sully), Кэрол Джурадо (Karol Jurado) и Джина Стил (Gina Steele). В этом издании я особо признателен Жорди Гутьеррес Хермозо (Jordi Gutierrez Hermoso) за превосходное техническое рецензирование; его предложения и уточнения неоценимы. Спасибо также Доминику Пулэну (Dominique Poulain) и Дональду Кэрону (Donald Karon) за быстрый отклик на ранних стадиях работы, а также Синьчжу Шей (Hsinju Hsieh), который терпеливо работал со мной над переделкой этой книги.

Я хотел бы также поблагодарить своего редактора по развитию Билла Поллока (Bill Pollock) и выпускающего редактора Лорел Чан (Laurel Chun). Серена Янг (Serena Yang), Элисон Ло (Alison Law) и все сотрудники издательства No Starch Press, как обычно, замечательно выполнили свою работу при подготовке нового издания книги.

От издательства

Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На сайте издательства http://www.piter.com вы найдете подробную информацию о наших книгах.

1. Общая картина

На первый взгляд современная операционная система, например Linux, является достаточно сложной и состоит из большого количества частей, которые одновременно функционируют и взаимодействуют друг с другом. Так, веб-сервер может обмениваться данными с сервером базы данных, который, в свою очередь, использует совместную библиотеку, применяемую многими другими программами. Как же все это работает?

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

Если же вы ведете машину, вам необходимо знать больше. Вам потребуется изучить элементы управления (например, рулевое колесо и педаль газа), а также усвоить, что следует делать в случае неисправности.

Предположим, автомобиль движется рывками. Можно разбить абстракцию «автомобиль, который едет по дороге» на три части: автомобиль, дорога и ваш стиль вождения. Это поможет установить причину. Если дорога ухабиста, вам не придется винить машину или себя. Вместо этого вы можете попытаться выяснить, почему дорога испортилась, или же, если дорога новая, почему ее строители так отвратительно выполнили работу.

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

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

1.1. Уровни и слои абстракции в операционной системе Linux

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

В операционной системе Linux три главных уровня. На рис. 1.1 показаны уровни, а также некоторые компоненты внутри каждого из них. В основе расположены аппаратные средства . Они включают память, а также один или несколько центральных процессоров (CPU), выполняющих вычисления и запросы на чтение из памяти и запись в нее. Такие устройства, как жесткие диски и сетевые интерфейсы, также относятся к аппаратным средствам.

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

Процессы – запущенные программы, которыми управляет ядро, – в совокупности составляют верхний уровень системы, именующийся пространством пользователя .

Примечание

Более точным термином, чем «процесс», является термин «пользовательский процесс», вне зависимости от того, взаимодействует ли пользователь с этим процессом напрямую. Например, все веб-серверы работают как пользовательские процессы.

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

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

Рис. 1.1. Общая структура операционной системы Linux

Теоретически неконтролируемый пользовательский процесс не способен причинить существенный вред системе. В действительности же все зависит от того, что именно вы считаете «существенным вредом», а также от особых привилегий данного процесса, поскольку некоторым процессам разрешено делать больше, чем другим. Например, может ли пользовательский процесс полностью уничтожить данные на жестком диске? Если должным образом настроить разрешения, то сможет, и для вас это окажется крайне опасным. Для предотвращения этого существуют защитные меры, и большинству процессов просто не будет позволено сеять смуту подобным образом.

1.2. Аппаратные средства: оперативная память

Из всех аппаратных средств компьютера оперативная память является, пожалуй, наиболее важным. В своей самой «сырой» форме оперативная память – это всего лишь огромное хранилище для последовательности нулей и единиц. Каждый ноль или единица называется битом . Именно здесь располагаются запущенное ядро и процессы – они являются лишь большими наборами битов. Все входные и выходные данные от периферийных устройств проходят через оперативную память также в виде наборов битов. Центральный процессор просто оперирует с памятью: он считывает из нее инструкции и данные, а затем записывает данные обратно в память.

Вам часто будет встречаться термин «состояние» , который будет относиться к памяти, процессам, ядру и другим частям компьютерной системы. Строго говоря, состояние – это какое-либо упорядоченное расположение битов. Например, если в памяти находятся четыре бита, то последовательности 0110, 0001 и 1011 представляют три различных состояния.

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

ПРИМЕЧАНИЕ

Поскольку при описании состояния обычно используются абстрактные понятия, а не реальные биты, для обозначения какого-либо физического размещения битов применяется термин «образ».

1.3. Ядро

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

Ядро отвечает за управление задачами в четырех основных областях системы.

Процессы. Ядро отвечает за то, каким процессам разрешен доступ к центральному процессору.

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

Драйверы устройств. Ядро выступает в качестве интерфейса между аппаратными средствами (например, жестким диском) и процессами. Как правило, управление аппаратными средствами выполняется ядром.

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

Теперь мы вкратце рассмотрим каждую из этих областей.

ПРИМЕЧАНИЕ

Подробности о работе ядра вы можете узнать из книг Operating System Concepts («Основные принципы операционных систем»), 9-е издание, авторы: Авраам Зильбершатц (Abraham Silberschatz), Питер Б. Гелвин (Peter B. Galvin) и Грег Гэнн (Greg Gagne) (Wiley, 2012) и Modern Operating Systems («Современные операционные системы»), 4-е издание, авторы: Эндрю С. Таненбаум (Andrew S. Tanenbaum) и Герберт Бос (Herbert Bos) (Prentice Hall, 2014).

1.3.1. Управление процессами

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

В любой современной операционной системе несколько процессов функционируют «одновременно». Например, в одно и то же время вы можете запустить на компьютере браузер и открыть электронную таблицу. Тем не менее на самом деле все обстоит не так, как выглядит: процессы, которые отвечают за эти приложения, как правило, не запускаются в точности в один момент времени.

Рассмотрим систему с одним центральным процессором. Его могут использовать несколько процессов, но в каждый конкретный момент времени только один процесс может в действительности применять процессор. На практике каждый процесс использует процессор в течение малой доли секунды, а затем приостанавливается; после этого другой процесс применяет процессор в течение малой доли секунды; далее наступает черед третьего процесса и т. д. Действие, при котором какой-либо процесс передает другому процессу управление процессором, называется переключением контекста .

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

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

1. Процессор (реальное аппаратное средство) прерывает текущий процесс, опираясь на внутренний таймер, переключается в режим ядра и возвращает ему управление.

2. Ядро записывает текущее состояние процессора и памяти, которые будут необходимы для возобновления только что прерванного процесса.

3. Ядро выполняет любые задачи, которые могли появиться в течение предыдущего кванта времени (например, сбор данных или операции ввода/вывода).

4. Теперь ядро готово к запуску другого процесса. Оно анализирует список процессов, готовых к запуску, и выбирает какой-либо из них.

5. Ядро готовит память для нового процесса, а затем подготавливает процессор.

6. Ядро сообщает процессору, сколько будет длиться квант времени для нового процесса.

7. Ядро переводит процессор в режим пользователя и передает процессору управление.

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

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

1.3.2. Управление памятью

Поскольку ядро должно управлять памятью во время переключения контекста, оно наделено этой сложной функцией. Работа ядра сложна, поскольку необходимо учитывать следующие условия:

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

Каждому пользовательскому процессу необходима своя область памяти;

Какой-либо пользовательский процесс не должен иметь доступ к области памяти, предназначенной для другого процесса;

Пользовательские процессы могут совместно использовать память;

Некоторые участки памяти для пользовательских процессов могут быть предназначены только для чтения;

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

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

Примечание

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

О том, как отслеживать производительность памяти, вы узнаете из главы 8.

1.3.3. Драйверы устройств и управление ими

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

1.3.4. Системные вызовы и поддержка

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

Два системных вызова – fork() и exec() – важны для понимания того, как происходит запуск процессов:

Fork(). Когда процесс осуществляет вызов fork(), ядро создает практически идентичную копию данного процесса;

Exec(). Когда процесс осуществляет вызов exec(program ), ядро запускает программу program , которая замещает текущий процесс.

За исключением процесса init (глава 6), все пользовательские процессы в системе Linux начинаются как результат вызова fork(), и в большинстве случаев осуществляется вызов exec(), чтобы запустить новую программу, а не копию существующего процесса. Простым примером является любая программа, которую вы запускаете из командной строки, например команда ls, показывающая содержимое каталога. Когда вы вводите команду ls в окне терминала, запущенная внутри окна терминала оболочка осуществляет вызов fork(), чтобы создать копию оболочки, а затем эта новая копия оболочки выполняет вызов exec(ls), чтобы запустить команду ls. На рис. 1.2 показана последовательность процессов и системных вызовов для запуска таких программ, как ls.

Рис. 1.2. Запуск нового процесса

ПРИМЕЧАНИЕ

Системные вызовы обычно обозначаются с помощью круглых скобок. В примере, показанном на рис. 1.2, процесс, который запрашивает ядро о создании другого процесса, должен осуществить системный вызов fork(). Такое обозначение происходит от способа написания вызовов в языке программирования C. Чтобы понять эту книгу, вам не обязательно знать язык C. Помните лишь о том, что системный вызов – это взаимодействие между процессом и ядром. Более того, в этой книге упрощены некоторые группы системных вызовов. Например, вызов exec() обозначает целое семейство системных вызовов, выполняющих сходную задачу, но отличающихся программной реализацией.

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

примечание

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

1.4. Пространство пользователя

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

Большинство реальных действий системы Linux происходит в пространстве пользователя. Несмотря на то что все процессы с точки зрения ядра являются одинаковыми, они выполняют различные задачи для пользователей. Системные компоненты, которые представляют пользовательские процессы, организованы в виде элементарной структуры – сервисного уровня (или слоя). На рис. 1.3 показан примерный набор компонентов, связанных между собой и взаимодействующих с системой Linux. Простые службы расположены на нижнем уровне (ближе всего к ядру), сервисные программы находятся в середине, а приложения, с которыми работает пользователь, расположены вверху. Рисунок 1.3 является крайне упрощенной схемой, поскольку показаны только шесть компонентов, но вы можете заметить, что верхние компоненты находятся ближе всего к пользователю (пользовательский интерфейс и браузер); компоненты среднего уровня располагают почтовым сервером, который использует браузер; в нижней части присутствует несколько малых компонентов.

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

Рисунок 1.3 только приблизительно отображает устройство пространства пользователя. В действительности в пространстве пользователя нет правил. Например, большинство приложений и служб записывают диагностические сообщения, которые называются журналами . Большинство программ использует стандартную службу syslog для записи сообщений в журнал, но некоторые предпочитают вести журнал самостоятельно.

Рис. 1.3. Типы процессов и взаимодействий

Кроме того, некоторые компоненты пространства пользователя бывает трудно отнести к какой-либо категории. Серверные компоненты, например веб-сервер или сервер базы данных, можно рассматривать как приложения очень высокого уровня, поскольку они выполняют довольно сложные задачи. Такие приложения можно поместить в верхней части рис. 1.3. В то же время пользовательские приложения могут зависеть от серверных, когда необходимо выполнять задачи, с которыми они не могут справиться самостоятельно. В таком случае серверные компоненты следовало бы поместить на средний уровень.

1.5. Пользователи

Ядро системы Linux поддерживает традиционную концепцию пользователя системы Unix. Пользователь – это сущность, которая может запускать процессы и обладать файлами. С пользователем связано имя пользователя . Например, в системе может быть пользователь billyjoe. Однако ядро не работает с именами пользователей, вместо этого оно идентифицирует пользователя с помощью простого числового идентификатора пользователя (в главе 7 рассказывается о том, как идентификаторы сопоставляются с именами пользователей).

Книга Брайна Уорда, которая уже стала бестселлером на Западе. Она описывает все тонкости работы с ОС Линукс, системное администрирование, глубокие механизмы, обеспечивающие низкоуровневый функционал Linux. На страницах руководства вы приобретете основные знания о работе с ядром Linux и о принципах правильной эксплуатации компьютерных сетей не только на основе Open-source решений. В книге также затрагиваются вопросы программирования сценариев и обращения с языком С, освещаются темы защиты информации, виртуализации и прочие незаменимые вещи.
Кому следует читать книгу:
Интерес к устройству операционной системы Linux может быть вызван разными причинами. Профессионалы в сфере информационно-технологического обслуживания, а также разработчики программного обеспечения для Linux найдут в этой книге практически все, что необходимо знать, чтобы использовать операционную систему наилучшим образом. Исследователи и студенты, которым зачастую приходится подстраивать систему под себя, найдут здесь практичные объяснения того, почему все устроено именно так, а не иначе. Есть еще «затейники» - пользователи, которым нравится проводить время за компьютером ради развлечения, выгоды или и того и другого сразу. Хотите узнать, почему некоторые вещи работают, а другие - нет? Вам интересно, что произойдет, если что-либо изменить? Тогда вы относитесь к числу «затейников».
Необходимые условия:
Не нужно быть программистом, чтобы читать эту книгу. Необходимы лишь основные навыки пользователя ПК: вы должны ориентироваться в графическом интерфейсе (при установке и настройке интерфейса системы), а также иметь представление о файлах и каталогах (папках). Следует также быть готовыми к поиску дополнительной документации в Интернет. Основным является ваша готовность и желание исследовать свой компьютер.

Название: Внутреннее устройство Linux
Автор: Брайан Уорд
Издательство: Питер
Год: 2016
Формат: PDF, FB2, EPUB
Язык: русский
Страниц: 384
Размер: 12,9 Мб

Внутреннее устройство Linux / Брайан Уорд / 2016. Скачать бесплатно без регистрации

2016-07-24T17:16:55+00:00 admin Администрирование Литература Руководства Linux,Администрирование,Безопасность,Брайн Уорд,Книги,Литература,Руководства,Системное Администрирование,скрипты,Справочники команд

Книга Брайна Уорда, которая уже стала бестселлером на Западе. Она описывает все тонкости работы с ОС Линукс, системное администрирование, глубокие механизмы, обеспечивающие низкоуровневый функционал Linux. На страницах руководства вы приобретете основные знания о работе с ядром Linux и о принципах правильной эксплуатации компьютерных сетей не только на основе Open-source решений. В...

[email protected] Administrator Самоучитель LINUX

Внутреннее устройство Linux Брайан Уорд

(Пока оценок нет)

Название: Внутреннее устройство Linux

О книге «Внутреннее устройство Linux» Брайан Уорд

Операционная система Linux — это достойная альтернатива Windows, некоторые версии которой не совсем удобны и слишком “тяжелы” для ресурсов компьютера. Брайан Уорд написал потрясающую книгу-самоучитель, которая подойдет всем желающим познакомиться с этой системой и ее богатыми возможностями практически с нуля. Читать книгу “Внутреннее устройство Linux” рекомендуется тем, кто хочет вникнуть во все механизмы ядра Linux, понять его внутреннее устройство и философию. Для поверхностного изучения принципов работы и переноса шаблонных схем с одной операционной системы на другую этот труд не подойдет.

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

Компьютерный труд “Внутреннее устройство Linux” очень детализирован и разбит на 17 глав. В первых четырех разделах автор рассказывает об общих понятиях этой системы и о принципе ее работы: об устройстве ядра и оболочки, основных командах и структуре каталогов, о функциональности файловых и дисковых систем. Далее идет более информация по началу работы с этой системой: как происходит загрузка ядра Linux и запуск пространства пользователя. В последующих главах более углубленно рассматриваются рабочие процессы Linux и использование его ресурсов. Кроме того, Брайан Уорд затронул вопросы программирования сценариев оболочки и работы с языком C. От общего материала автор постепенно углубляется в детали, которые представляют интерес для разработчиков программного обеспечения.

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

Брайан Уорд преподнес материал доступным языком с множеством примеров и пояснений. Книга отлично структурирована и может использоваться как справочник. Автор дает подтверждения, что оболочка Linux — это удобно и функционально, раскрывает возможности, как можно подстроить ее под свои запросы. Для тех, кому интересно устройство тех или иных программ, эта книга будет отличной находкой, ведь она раскрывает механизмы компьютерных процессов, демонстрирует причинно-следственные связи между ними.

На нашем сайте о книгах сайт вы можете скачать бесплатно без регистрации или читать онлайн книгу «Внутреннее устройство Linux» Брайан Уорд в форматах epub, fb2, txt, rtf, pdf для iPad, iPhone, Android и Kindle. Книга подарит вам массу приятных моментов и истинное удовольствие от чтения. Купить полную версию вы можете у нашего партнера. Также, у нас вы найдете последние новости из литературного мира, узнаете биографию любимых авторов. Для начинающих писателей имеется отдельный раздел с полезными советами и рекомендациями, интересными статьями, благодаря которым вы сами сможете попробовать свои силы в литературном мастерстве.

Скачать бесплатно книгу «Внутреннее устройство Linux» Брайан Уорд

В формате fb2 : Скачать
В формате rtf : Скачать
В формате epub : Скачать
В формате txt :

Набираем релиз группу для нашего трекера .
Оплата договорная.
Заявки принимаются на почту сайт@yandex.ru , можно через обратную связь
Просьба кратко рассказать о себе, сколько времени сможете посветить нашему сайту и ожидаемый заработок.

Bandicam позволяет записать определенную область на экране ПК, или в программе, которая использует графические технологии DirectX/OpenGL. Bandicam поможет вам выполнить видеозапись с высокой степенью сжатия....


Описание:Wondershare Filmora - удобный видеоредактор, содержащий все необходимые инструменты для редактирования видео.Вы сможете создавать высококачественные фильмы с титрами, ...


EmEditor Professional - профессиональная версия мощного текстового редактора для программистов, веб-разработчиков и простых пользователей с подсветой синтаксиса и поддержкой юникода. Редактор обладает....

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


Skype - бесплатная программа для текстового, голосового и видеообщения с друзьями по всему миру. Сеть Skype использует P2P-технологию для соединения с другими пользователями и отличается высоким качеством....


Bandizip - это быстрая и надежная программа, которая поддерживает работу с форматами WinZip, 7-Zip, и WinRAR, и другими аналогичными архивами. Она использует очень быстрый алгоритм для сжатия и распаковки....

Opera - это новый Chromium-браузер от компании Opera Software. Opera отказалась от своего классического браузера и теперь разрабатывает новый браузер на основе проекта Chromium компании Google....

Описание:Программа для работы с PDF-документами, которая предоставляет коллекцию инструментов и утилит для модификации и оптимизации PDF-файлов и их содержимого. Благодаря...


Snappy Driver Installer (SDI) - портативная программа для установки и обновления драйверов, не требующая подключения к интернету. Является переработкой оригинальной программы SDIO от Glenn Delahoy....

Mirillis Action! - программа позволяет в режиме реального времени записывать изображения с экрана в видеофайлы различных форматов. Вы можете записывать видео с веб-плеера, игровой процесс, вставлять живые аудио-комментарии....

error: Content is protected !!