If-Koubou

Какво е ядрото на Linux и какво прави?

Какво е ядрото на Linux и какво прави? (Как да)


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

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

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

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

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


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

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

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

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

Против

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

Монолитно ядро
Монолитните ядра са противоположни на микрокремулсите, тъй като те обхващат не само процесора, паметта и 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, където А.Б вероятно ще е 2.6, C ще бъде ваша версия, а D ще показва вашите корекции или корекции.

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

Архитектура на ядрото на 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