Какво е ядрото на Linux и какво прави?
С над 13 милиона реда код, ядрото на Linux е един от най-големите проекти с отворен код в света, но какво е ядрото и за какво се използва?
И така, какво е ядрото?
Ядрото е най-ниското ниво на лесно заменяем софтуер, който взаимодейства с хардуера във вашия компютър. Той отговаря за взаимодействието на всички ваши приложения, които се изпълняват в „потребителски режим“, до физическия хардуер, и позволява на процесите, известни като сървъри, да получават информация един от друг, използвайки комуникация между процесите (IPC).
Различни видове ядра
Разбира се, съществуват различни начини за изграждане на ядро и архитектурни съображения при изграждането на едно от нулата. По принцип повечето ядки попадат в един от трите вида: монолитни, микроядрени и хибридни. Linux е монолитно ядро, докато OS X (XNU) и Windows 7 използват хибридни ядра. Нека да направим бърза обиколка на трите категории, за да можем да разгледаме по-подробно по-късно.
Изображение от пуканки
микрокърнъла
Микроядрите се подчиняват само на управлението на това, което трябва да имат: CPU, памет и IPC. Доста всичко друго в компютъра може да се разглежда като аксесоар и може да се обработва в потребителски режим. Микроядрите имат предимството на преносимостта, тъй като не се налага да се притеснявате, ако сменяте видеокартата или дори вашата операционна система, докато операционната система все още се опитва да получи достъп до хардуера по същия начин. Микроядрите също имат много малък отпечатък, както за памет, така и за място за инсталиране, и са склонни да бъдат по-сигурни, тъй като в потребителски режим се изпълняват само специфични процеси, които нямат високите разрешения като режим на надзор..
Професионалисти
- преносимост
- Малък монтаж
- Малък отпечатък от паметта
- Сигурност
Против
- Хардуерът е по-абстрахиран чрез драйвери
- Хардуерът може да реагира по-бавно, защото драйверите са в потребителски режим
- Процесите трябва да чакат в опашка, за да получат информация
- Процесите не могат да получат достъп до други процеси, без да чакат
Монолитно ядро
Монолитни ядра са противоположни на микроядрата, тъй като обхващат не само процесора, паметта и IPC, но включват и неща като драйвери на устройства, управление на файловата система и системни сървъри. Монолитни ядра са по-добри в достъпа до хардуер и мултитаскинг, защото ако една програма трябва да получи информация от паметта или друг процес, тя има по-пряка линия за достъп до нея и не трябва да чака в опашка, за да направи нещата извършени. Това обаче може да доведе до проблеми, защото колкото повече неща се изпълняват в режим на супервайзер, толкова повече неща могат да намалят вашата система, ако не се държите правилно.
Професионалисти
- По-директен достъп до хардуер за програми
- По-лесно за процесите да комуникират между тях
- Ако устройството ви се поддържа, то трябва да работи без допълнителни инсталации
- Процесите реагират по-бързо, защото няма опашка за процесорното време
Против
- Голям размер на инсталацията
- Голям отпечатък от паметта
- По-малко сигурно, защото всичко работи в режим на надзор
Изображение чрез schoschie на Flickr
Хибридно ядро
Хибридните ядра имат възможност да избират и да избират това, което искат да работят в потребителски режим, и това, което искат да работят в режим на супервайзер. Често пъти в потребителски режим се изпълняват неща като драйвери на устройства и I / O на файловата система, докато IPC и сървърните повиквания ще се държат в режим на супервайзер. Това дава най-доброто от двата свята, но често ще изисква повече работа на производителя на хардуера, тъй като цялата отговорност на водача зависи от тях. Той също така може да има някои от проблемите на латентността, които са присъщи на микроядрите.
Професионалисти
- Разработчикът може да избере това, което работи в потребителски режим и какво работи в режим на супервайзер
- По-малка инсталация отпечатък от монолитно ядро
- По-гъвкави от другите модели
Против
- Може да страда от същото забавяне на процеса като микроядрото
- Драйверите на устройства трябва да се управляват от потребител (обикновено)
Къде са Linux ядрените файлове?
Файлът на ядрото в Ubuntu се съхранява в папката / boot и се нарича vmlinuz-версия. Името vmlinuz идва от Unix света, където те наричат ядрите си просто „unix“ още през 60-те години, така че 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-version, system.map-version и config-version. Файлът initrd се използва като малък RAM диск, който извлича и изпълнява действителния файл на ядрото. Файлът system.map се използва за управление на паметта, преди ядрото да се зареди напълно, а конфигурационният файл казва на ядрото какви опции и модули да се зареждат в ядрото, когато се компилира..
Архитектура на ядрото на Linux
Тъй като ядрото на Linux е монолитно, то има най-големия отпечатък и най-сложността в сравнение с другите видове ядра. Това беше елемент от дизайна, който беше в доста дебат в ранните дни на Linux и все още носи някои от същите недостатъци в дизайна, че монолитните ядра са присъщи на.
Едно нещо, което разработчиците на ядрото на Linux направиха, за да заобиколят тези недостатъци, е да създадат модули на ядрото, които могат да бъдат заредени и разтоварени по време на изпълнение, което означава, че можете да добавяте или премахвате функции на ядрото си в движение. Това може да надхвърли просто добавянето на хардуерна функционалност към ядрото, като се включат модули, които изпълняват сървърни процеси, като виртуализацията на ниско ниво, но също така може да позволи на цялото ядро да бъде заменено, без да се налага да рестартира компютъра ви в някои случаи.
Представете си, че можете да надстроите до Windows сервизен пакет, без да се налага да рестартирате ...
Модули на ядрото
Какво ще стане, ако Windows разполага с вече инсталиран драйвер и трябва само да включите необходимите драйвери? Това е по същество това, което модулите на ядрото правят за Linux. Модулите на ядрото, също известни като зареждаем модул на ядрото (LKM), са от съществено значение за поддържането на функционирането на ядрото с целия ви хардуер, без да изразходвате цялата налична памет.
Модулът обикновено добавя функционалност към базовото ядро за неща като устройства, файлови системи и системни повиквания. LKM имат файлово разширение .ko и обикновено се съхраняват в директорията / lib / modules. Поради тяхната модулна природа можете лесно да персонализирате ядрото, като настроите модулите да зареждат или да не се зареждат по време на стартиране с командата menuconfig или чрез редактиране на вашия / boot / config файл, или можете да зареждате и разтоварвате модули в движение с modprobe команда.
Модулите на трети страни и затворени източници са налични в някои дистрибуции, като Ubuntu, и може да не бъдат инсталирани по подразбиране, защото изходният код на модулите не е достъпен. Разработчикът на софтуера (напр. NVidia, ATI, наред с другото) не предоставя изходния код, а изграждат собствени модули и компилират необходимите .ko файлове за разпространение. Докато тези модули са безплатни, както в бирата, те не са свободни, както в речта и по този начин не са включени в някои дистрибуции, защото поддръжниците смятат, че „уврежда” ядрото чрез предоставяне на не-свободен софтуер..
Ядрото не е магия, но е абсолютно необходимо за всеки компютър, работещ правилно. Ядрото на Linux е различно от OS X и Windows, защото включва драйвери на ниво ядро и прави много неща поддържани “извън кутията”. Надяваме се, че ще знаете малко повече за това, как вашият софтуер и хардуер работят заедно и какви файлове трябва да стартирате.
Kernel.org
Изображение от ingridtaylar