/ / Какво е Linux Kernel и какво прави?

Какво е Linux Kernel и какво прави?

образ

С над 13 милиона реда код, ядрото на Linux е един от най-големите проекти с отворен код в света, но какво е ядрото и за какво се използва?

И така, какво е ядрото?

Ядрото е най-ниското ниво на лесносменяем софтуер, който взаимодейства с хардуера на вашия компютър. Той е отговорен за свързването на всички ваши приложения, които работят в „потребителски режим“, до физическия хардуер и позволява на процесите, известни като сървъри, да получават информация един от друг, използвайки междупроцесова комуникация (IPC).

Различни видове ядки

Разбира се, има различни начини за изграждане наядро и архитектурни съображения при изграждането на един от нулата. По принцип повечето ядки попадат в един от трите вида: монолитни, микрокенерни и хибридни. Linux е монолитно ядро, докато OS X (XNU) и Windows 7 използват хибридни ядра. Нека направим кратка обиколка на трите категории, за да можем да разгледаме по-подробно по-късно.


Изображение от пуканки нагоре

микрокърнъла
Микрокернелът приема подхода само за управлениекакво трябва да има: процесор, памет и IPC. Почти всичко останало в компютъра може да се разглежда като аксесоар и може да се работи в потребителски режим. Микрокернелите имат предимство на преносимостта, тъй като не е нужно да се притесняват, ако промените видеокартата или дори операционната си система, докато операционната система все още се опитва да получи достъп до хардуера по същия начин. Микрокернелите също имат много малък отпечатък, както за паметта, така и за инсталиращото пространство и те са по-сигурни, тъй като само специфични процеси протичат в потребителски режим, който няма високите разрешения като режим на надзор.

Професионалисти

  • преносимост
  • Малка стъпка за инсталиране
  • Малък отпечатък от паметта
  • Сигурност

Против

  • Хардуерът е по-абстрахиран чрез драйвери
  • Хардуерът може да реагира по-бавно, защото драйверите са в потребителски режим
  • Процесите трябва да изчакат на опашка, за да получат информация
  • Процесите не могат да получат достъп до други процеси без да чакат

Монолитно ядро
Монолитните ядки са противоположни наmicrokernels, защото обхващат не само процесора, паметта и IPC, но включват и неща като драйвери на устройства, управление на файловата система и системни повиквания на сървъра. Монолитните ядра обикновено са по-добри при достъпа до хардуер и многозадачност, защото ако една програма трябва да получи информация от паметта или друг процес, който работи, тя има по-директна линия за достъп до нея и не е нужно да чака на опашка, за да свърши нещата. Това обаче може да създаде проблеми, тъй като колкото повече неща работят в режим на надзор, толкова повече неща могат да свалят системата ви, ако човек не се държи правилно.

Професионалисти

  • По-директен достъп до хардуер за програми
  • По-лесно процесите да общуват между други
  • Ако вашето устройство се поддържа, то трябва да работи без допълнителни инсталации
  • Процесите реагират по-бързо, защото няма опашка за времето на процесора

Против

  • Отпечатък с голям монтаж
  • Голям отпечатък на паметта
  • По-малко защитени, защото всичко работи в режим на надзор


Изображение чрез scischie на Flickr

Хибридно ядро
Хибридните ядра имат възможност за избор иизбират какво искат да работят в потребителски режим и какво искат да работят в режим на надзор. Често пъти неща като драйвери на устройства и входно-изходни файлове на файлова система ще се изпълняват в потребителски режим, докато IPC и повикванията от сървъра ще се поддържат в режим на надзор. Това дава най-доброто от двата свята, но често ще изисква повече работа на производителя на хардуер, защото цялата отговорност на водача зависи от тях. Той също може да има някои от проблемите със закъснението, които са присъщи на микроканелите.

Професионалисти

  • Програмистът може да избере какво работи в потребителски режим и какво работи в режим на надзор
  • По-малък монтаж на отпечатък от монолитно ядро
  • По-гъвкав от другите модели

Против

  • Може да страда от същото закъснение на процеса като microkernel
  • Драйверите на устройства трябва да се управляват от потребител (обикновено)

Къде са файловете на Linux Kernel?

образ

Файлът на ядрото в Ubuntu се съхранява във вашата / boot папка и се нарича vmlinuz-версия, Името vmlinuz идва от света на Unix, където преди 60-те години наричаха ядрата си просто „unix“, така че Linux започна да нарича ядрото си „Linux“, когато за първи път е разработено през 90-те.

Когато виртуалната памет е разработена за по-лесномногозадачни способности, „vm“ беше поставен в предната част на файла, за да покаже, че ядрото поддържа виртуална памет. За известно време Linux ядрото се нарича vmlinux, но ядрото стана прекалено голямо, за да се побере в наличната зареждаща памет, така че изображението на ядрото беше компресирано и завършващият x беше променен на z, за да се покаже, че е компресиран със zlib компресия. Същата компресия не винаги се използва, често се заменя с LZMA или BZIP2, а някои ядра просто се наричат ​​zImage.

Номерирането на версиите ще бъде във формат A.B.C.D, където A.B вероятно ще бъде 2.6, C ще бъде вашата версия, а D обозначава вашите кръпки или корекции.

В папката / boot ще има и други многоважни файлове, наречени initrd.img-версия, system.map-версия и config-версия. Файлът initrd се използва като малък RAM диск, който извлича и изпълнява действителния файл на ядрото. Файлът system.map се използва за управление на паметта преди пълното зареждане на ядрото и конфигурационният файл казва на ядрото какви опции и модули да се зареди в изображението на ядрото, когато се компилира.

Linux Kernel Architecture

Тъй като Linux ядрото е монолитно, то иманай-големият отпечатък и най-сложните в сравнение с останалите видове ядра. Това беше дизайнерска функция, която беше доста дискутирана в ранните дни на Linux и все още носи някои от същите недостатъци в дизайна, които монолитните ядра са присъщи.

Едно нещо, което направиха разработчиците на Linux ядротозаобикаляйте тези недостатъци беше да направите модули на ядрото, които да могат да се зареждат и разтоварват по време на изпълнение, което означава, че можете да добавяте или премахвате функции на вашето ядро ​​в движение. Това може да надхвърли само добавянето на хардуерна функционалност към ядрото, като включва модули, които изпълняват сървърни процеси, като виртуализация на ниско ниво, но също така може да позволи да се замени цялото ядро, без да е необходимо да рестартирате компютъра си в някои случаи.

Представете си, ако бихте могли да надстроите до сервизен пакет на Windows, без изобщо да се налага да рестартирате ...

Ядра модули

образ

Ами ако Windows имаше всеки драйвер на разположениевече инсталиран и просто трябваше да включите необходимите драйвери? Това е по същество това, което модулите на ядрото правят за Linux. Ядровите модули, известни също като зареждащ се модул на ядрото (LKM), са от съществено значение за поддържането на функционирането на ядрото с целия ви хардуер, без да се изразходва цялата ви налична памет.

Модулът обикновено добавя функционалност към основатаядро за неща като устройства, файлови системи и системни обаждания. LKM имат разширение на файла .ko и обикновено се съхраняват в директорията / lib / module. Поради техния модулен характер можете лесно да персонализирате ядрото си, като зададете модули да се зареждат или не зареждат по време на стартиране с командата menuconfig или чрез редактиране на вашия / boot / config файл, или можете да зареждате и разтоварвате модули в движение с modprobe команда.

Модулите на трети страни и затворени източници саналичен в някои дистрибуции като Ubuntu и може да не бъде инсталиран по подразбиране, тъй като изходният код за модулите не е наличен. Програмистът на софтуера (т.е. nVidia, ATI, между другото) не предоставят изходния код, а по-скоро изграждат свои собствени модули и компилират необходимите .ko файлове за разпространение. Въпреки че тези модули са безплатни, както в бирата, те не са безплатни, както в речта, и следователно не са включени в някои дистрибуции, защото поддържащите го смятат, че „опетнява“ ядрото, като предоставя не-свободен софтуер.

Ядрото не е магия, но е напълноот съществено значение за всеки компютър, работещ правилно. Ядрото на Linux е различно от OS X и Windows, тъй като включва драйвери на ниво ядро ​​и прави много поддържани неща „извън кутията“. Надяваме се, че ще знаете малко повече за това как вашият софтуер и хардуер работи заедно и какви файлове трябва да стартирате компютъра си.

Kernel.org
Изображение от ingridtaylar