Linux Сетевая Архитектура

  1. Linux Сетевая Архитектура Pdf
  2. Linux Сетевая Архитектура

Решил еще сильнее углубить свои знания в области 'ядерного' программирования) выбор пал на эту книгу. Толком никакой. Конфигурация подключения виртуальных, сетевых и локальных файловых систем, включая swap, в GNU/Linux записывается в файл /etc/fstab, а записи о подключённых в данный момент - хранятся в динамически. Немогу найти в цифровом виде на халяву. Очевидно, потому что её ещё никто не оцифровал и не поделился. Помимо сетевой операционной системы необходимы сетевые прикладные программы, реализующие преимущества, предоставляемые сетью.

Contents. Обзор системы Ядро Linux бесполезно само по себе – оно является частью одной большой системы, которая целиком является работоспособной. Поэтому, имеет смысле обсудить ядро в контексте всей системы. На изображении ниже отображена схема работы и связи всей системы, в которой участвует ядро: Операционная система Linux (или – ) состоит из четырёх основных частей:.

User applications ( пользовательские приложения) – набор пользовательских приложений может быть разным в различных дистрибутивах Linux, но типичные примеры – это приложения обработки текста и веб-браузер;. O/S services (службы операционной системы) – службы, которые обычно считаются частью операционной системы, такие как оконный менеджер, командная строка и т.д. Так же, сюда входит программный интерфейс ядра (компилятор/ы и библиотеки);.

Ядро Linux – основная интересующая нас часть; ядро создаёт абстрактный слой и является “посредником” между первыми двумя частями и hardware-частью компьютера;. Hardware controllers ( контроллеры оборудования) – подсистема, охватывающая все возможные физические устройства, такие как CPU, устройства памяти, жёсткие диски, сетевые карты – все они являются частью этой подсистемы. Каждая подсистема может взаимодействовать только с двумя соседними, расположенными непосредственно “выше” и “ниже” её уровня.

Linux Сетевая Архитектура Pdf

Кроме того, зависимости между этими подсистемами направлены сверху – вниз: слои расположенные выше – зависят от частей ниже, но части, расположенные ниже – не зависят от частей выше их. Так как нас интересует само ядро Linux – мы не будем тут рассматривать слой уровня пользовательских приложений, а коснёмся только уровней Оборудования и Служб операционной системы, в тех границах, в которых они связаны с ядром. Роль ядра Ядро Linux представляет собой своего рода виртуальную машину для процессов. Процессы работают без всякой информации про оборудование компьютера – ядро абстрагирует весь уровень оборудования в единый совместимый виртуальный интерфейс. Кроме того, ядро реализует многозадачность прозрачно для всех процессов – каждый процесс “думает”, что он является единственным процессом в системе, и имеет полные и эксклюзивные права на память и другие ресурсы оборудования компьютера. Фактически же – ядро выполняет несколько процессов одновременно, и оно ответственно за распределение ресурсов оборудования таким образом, что бы каждый процесс получил достаточный доступ к этим ресурсам.

Обзор структуры и зависимостей подсистем ядра Ядро Linux состоит из пяти основных подсистем:. Process Scheduler ( SCHED) – планировщик процессов, отвечает за контроль над доступом процессов к CPU. Планировщик обеспечивает такое поведения ядра, при котором все процессы имеют справедливый доступ к центральному процессору. Memory Manager ( MM) – менеджер памяти, обеспечивает различным процессам безопасный доступ к основной памяти системы. Кроме того, MM обеспечивает работу, которая позволяет процессам использовать больше памяти, чем реально доступно в системе. Выделенная, но неиспользуемая память вытесняется на файловую систему, и при необходимости – возвращается из неё обратно в память ( swapping). Virtual File System( VFS) – виртуальная файловая система, создаёт абстрактный слой, скрывая детали оборудования, предоставляя общий файловый интерфейс для всех устройств.

Кроме того, VFS поддерживает несколько форматов файловых систем, которые совместимы с другими операционными системами. Network Interface ( NET) – сетевые интерфейсы, обеспечивает работу с различными сетевыми стандартами и сетевым оборудованием. Inter-Process Communication ( IPC) – межпроцессная подсистема, поддерживающая несколько механизмов для process-to-process связей в единой Linux-системе.

На рисунке ниже изображены связи всех этих подсистем, где линии исходят от зависимых подсистем к подсистемам, от которых они зависят. Общая структура и связи подсистем ядра Linux Тут явно видно, что основной подсистемой является планировщик процессов: все остальные системы зависят от него, так как всем им необходимо приостанавливать и возобновлять выполнение процессов. Как правило, процесс приостанавливается в ожидании каких-либо операций с оборудованием, и возобновляет выполнение, когда операция завершена. Например – когда процесс пытается отправить некое сообщение по сети, сетевой интерфейс может приостановить выполнение процесса, пока сетевое оборудование выполняет отправку сообщения. После того как сообщение отправлено (или – получено сообщение об ошибке) – сетевой интерфейс возобновляет работу процесса, передавая ему код возврата, который указывает на успешное завершение операции, или ошибку её при выполнении. Все остальные подсистемы ( memory manager, virtual file system и inter-process communication) так же зависят от планировщика процессов по схожим причинам.

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

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

В отсутствие операционной системы использовать всю большую и дорогую вычислительную машину в каждый конкретный момент времени могло только одно приложение (и один пользователь). Первые операционные системы были разработаны в 1950-е годы, чтобы облегчить жизнь разработчиков. В качестве примера можно назвать General Motors Operating System (GMOS), разработанную для IBM 701, и FORTRAN Monitor System (FMS), созданную North American Aviation для IBM 709. В 1960-е годы в Массачусетском Технологическом институте (MIT) и в ряде компаний была разработана экспериментальная операционная система Multics (Multiplexed Information and Computing Service) для машины GE-645. Один из разработчиков этой ОС, компания AT&T, отошла от Multics и в 1970 году разработала свою собственную систему Unics. Вместе с этой ОС поставлялся язык C. При этом C был разработан и написан так, чтобы обеспечить переносимость разработки операционной системы.

Linux Сетевая Архитектура

Двадцать лет спустя Эндрю Танненбаум (Andrew Tanenbaum) создал микроядерную версию UNIX® под названием MINIX (minimal UNIX), которая могла работать на небольших персональных компьютерах. Эта операционная система с открытым исходным кодом вдохновила Линуса Торвальдса (Linus Torvalds) на разработку первой версии Linux в начале 1990-х (см. Краткая история основных выпусков ядра Linux. Linux быстро превратился из инициативы энтузиаста-одиночки во всемирный проект, в котором участвуют тысячи разработчиков. Одним из важнейших решений в судьбе Linux стало принятие лицензии GNU General Public License (GPL). GPL защитила ядро Linux от коммерческой эксплуатации и одновременно открыла путь к использованию разработок сообщества пользователей проекта GNU, основанного Ричардом Столлменом (Richard Stallman), объемы кода которого значительно превосходят даже объем ядра Linux.

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

Это позволило использовать в Linux такие полезные приложения, как комплекс компиляторов GNU Compiler Collection (GCC) и различные командные оболочки. Введение в ядро Linux Перейдем к общему обзору архитектуры операционной системы GNU/Linux. Операционную систему можно условно разделить на два уровня, как показано на Рис.

Фундаментальная архитектура операционной системы GNU/Linux. На верхнем уровне находится пользовательское пространство (пространство приложений). Здесь исполняются приложения пользователя.

Под пользовательским пространством располагается пространство ядра. Здесь функционирует ядро Linux. Имеется также библиотека GNU C (glibc). Она предоставляет интерфейс системных вызовов, который обеспечивает связь с ядром и дает механизм для перехода от приложения, работающего в пространстве пользователя, к ядру. Это важно, поскольку ядро и пользовательское приложение располагаются в разных защищенных адресных пространствах.

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

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

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

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

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

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

Linux Сетевая Архитектура

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

Реализация SCI находится в./linux/kernel, а архитектурно-зависимая часть - в./linux/arch. Более подробные сведения об этом компоненте можно найти в разделе. Управление процессами Управление процессами сконцентрировано на исполнении процессов. В ядре эти процессы называются потоками (threads); они соответствуют отдельным виртуализованным объектам процессора (код потока, данные, стек, процессорные регистры). В пространстве пользователя обычно используется термин процесс, хотя в реализации Linux эти две концепции (процессы и потоки) не различают. Ядро предоставляет интерфейс программирования приложений (API) через SCI для создания нового процесса (порождения копии, запуска на исполнение, вызова функций Portable Operating System Interface POSIX), остановки процесса (kill, exit), взаимодействия и синхронизации между процессами (сигналы или механизмы POSIX). Еще одна задача управления процессами - совместное использование процессора активными потоками.

Один — серый, другой — белый, Гуси мои, гуси! Вот кричит бабуся: «Ой, пропали гуси! Песня веселые гуси ноты. Один — серый, другой — белый, Спрятались в канавке!

В ядре реализован новаторский алгоритм планировщика, время работы которого не зависит от числа потоков, претендующих на ресурсы процессора. Название этого планировщика - O(1) - подчеркивает, что на диспетчеризацию одного потока затрачивается столько же времени, как и на множество потоков. Планировщик O(1) также поддерживает симметричные многопроцессорные конфигурации (SMP). Исходные коды системы управления процессами находятся в./linux/kernel, а коды архитектурно-зависимой части - в./linux/arch). Более подробную информацию об этом алгоритме см.

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

Однако управление памятью - это значительно больше, чем просто управление буферами по 4 КБ. Презентация древний человек. Linux предоставляет абстракции над этими 4 КБ буферами, например, механизм распределения slab allocator.

Архитектура

Этот механизм управления базируется на 4 КБ буферах, но затем размещает структуры внутри них, следя за тем, какие страницы полны, какие частично заполнены и какие пусты. Это позволяет динамически расширять и сокращать схему в зависимости от потребностей вышележащей системы.

В условиях наличия большого числа пользователей памяти возможны ситуации, когда вся имеющаяся память будет исчерпана. В связи с этим страницы можно удалять из памяти и переносить на диск. Этот процесс обмена страниц между оперативной памятью и жестким диском называется подкачкой. Исходные коды управления памятью находятся в./linux/mm. Виртуальная файловая система Еще один интересный аспект ядра Linux - виртуальная файловая система (VFS), которая предоставляет общую абстракцию интерфейса к файловым системам. VFS предоставляет уровень коммутации между SCI и файловыми системами, поддерживаемыми ядром (см.

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

Исходные коды файловых систем находятся в./linux/fs. Ниже уровня файловой системы находится кэш буферов, предоставляющий общий набор функций к уровню файловой системы (независимый от конкретной файловой системы).

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

Вы помните, что протокол Internet Protocol (IP) - это базовый протокол сетевого уровня, располагающийся ниже транспортного протокола Transmission Control Protocol, TCP). Выше TCP находится уровень сокетов, вызываемый через SCI. Уровень сокетов представляет собой стандартный API к сетевой подсистеме. Он предоставляет пользовательский интерфейс к различным сетевым протоколам. Уровень сокетов реализует стандартизованный способ управления соединениями и передачи данных между конечными точками, от доступа к 'чистым' кадрам данных и блокам данных протокола IP (PDU) и до протоколов TCP и User Datagram Protocol (UDP). Исходные коды сетевой подсистемы ядра находятся в каталоге./linux/net.

Драйверы устройств Подавляющее большинство исходного кода ядра Linux приходится на драйверы устройств, обеспечивающие возможность работы с конкретными аппаратными устройствами. В дереве исходных кодов Linux имеется подкаталог драйверов, в котором, в свою очередь, имеются подкаталоги для различных типов поддерживаемых устройств, таких как Bluetooth, I2C, последовательные порты и т.д. Исходные коды драйверов устройств находятся в./linux/drivers. Архитектурно-зависимый код Хотя основная часть Linux независима от архитектуры, на которой работает операционная система, в некоторых элементах для обеспечения нормальной работы и повышения эффективности необходимо учитывать архитектуру. В подкаталоге./linux/arch находится архитектурно-зависимая часть исходного кода ядра, разделенная на ряд подкаталогов, соответствующих конкретным архитектурам. Все эти каталоги в совокупности образуют BSP. В случае обычного настольного ПК используется каталог i386.

Подкаталог для каждой архитектуры содержит ряд вложенных подкаталогов, относящихся к конкретным аспектам ядра, таким как загрузка, ядро, управление памятью и т.д. Исходные коды архитектурно-зависимой части находятся в./linux/arch. Интересные особенности ядра Linux Помимо переносимости и эффективности, ядро Linux обладает целым рядом других интересных функций, которые не были освещены в вышеприведенном рассмотрении. Linux, как широко используемая на практике операционная система с открытым исходным кодом, является отличной испытательной площадкой для новых протоколов и их усовершенствований. Linux поддерживает большое количество сетевых протоколов, включая традиционный TCP/IP и его высокоскоростные расширения (для сетей быстрее Gigabit Ethernet GbE и 10 GbE). Linux также поддерживает такие протоколы, как Stream Control Transmission Protocol (SCTP), реализующий множество дополнительных функций, отсутствующих в TCP (применяется в качестве альтернативного протокола транспортного уровня). Следует отметить, что ядро Linux является динамическим (поддерживает добавление и удаление программных компонентов без остановки системы).

Эти компоненты называются динамически загружаемыми модулями ядра. Их можно вводить в систему при необходимости, как во время загрузки (если найдено конкретное устройство, для которого требуется такой модуль), так и в любое время по желанию пользователя. Еще одно недавнее усовершенствование Linux - возможность ее использования в качестве операционной системы для других операционных систем (т.н. Недавно в ядро было внесено усовершенствование, получившее название Kernel-based Virtual Machine (KVM, виртуальная машина на базе ядра). В результате этой модификации в пространстве пользователя был реализован новый интерфейс, позволяющий исполнять поверх ядра с поддержкой KVM другие операционные системы. В таком режиме можно не только исполнять другие экземпляры Linux, но и виртуализовать Microsoft® Windows®.

Единственное ограничение состоит в том, что используемый процессор должен поддерживать новые инструкции виртуализации. Более подробную информацию см.

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

Обязательно ознакомьтесь с разделом в конце данной статьи, где имеются ссылки на более подробную информацию по многим обсуждаемым здесь темам. Похожие темы. Оригинал статьи. На описана лицензия GNU GPL, которая распространяется на ядро Linux и большинство поставляемых с ним полезных приложений.

Также описана менее ограничительная форма GPL, т.н. Lesser GPL (LGPL). Описания, и можно найти в энциклопедии Wikipedia. Там же имеется подробное генеалогическое древо операционных систем., она же glibc, представляет собой реализацию стандартной библиотеки C. Она используется в операционной системе GNU/Linux, а также в микроядерной операционной системе.

это портированная версия ядра Linux, способная работать на системах, не имеющих блока управления памятью (MMU). Это дает возможность исполнять ядро Linux на очень компактных встраиваемых платформах, например, на процессоре Motorola DragonBall, применяемом в карманных компьютерах PalmPilot. ' Статья посвящена важному уровню ядра Linux - интерфейсу системных вызовов, поддержку которого на уровне пространства пользователя обеспечивает библиотека glibc, позволяющая осуществлять вызовы функций между пространством пользователя и ядром. ' Новый планировщик O(1), появившийся в версии Linux 2.6, обладает высокой эффективностью, хорошо масштабируется для большого числа процессов (потоков) и поддерживает SMP-системы. ' В статье рассматривается файловая система /proc - виртуальная файловая система, предоставляющая приложениям в пространстве пользователя принципиально новый способ взаимодействия с ядром. Помимо /proc, в статье рассматриваются загружаемые модули ядра. ' В статье рассматривается уровень VFS, который позволяет Linux поддерживать множество разных файловых систем через общий интерфейс.

Этот же интерфейс используется и для других типов устройств, например, сокетов. ' В статье рассматривается процесс загрузки Linux, который следует одной и той же базовой схеме независимо от того, загружаетесь ли вы с жесткого диска, дискеты, USB-накопителя или через сеть. ' В статье рассматривается виртуальный стартовый диск - функция, которая позволяет отделить процесс загрузки от физического носителя, с которого происходит загрузка. ' Статья посвящена одному из самых интересных сетевых протоколов - Stream Control Transmission Protocol - который работает аналогично TCP, но имеет при этом ряд дополнительных полезных функций, например, обмен сообщениями, поддержка нескольких IP-адресов узла (multi-homing), передача фрагментов разных потоков данных (multi-streaming).

Linux, как и BSD - отличная операционная система, если вас интересует поддержка сетевых протоколов. ' Статья посвящена одному из самых интересных аспектов управления памятью в Linux - механизма slab allocator. Этот механизм впервые появился в SunOS, но прекрасно прижился и в ядре Linux.

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

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