Въведение в основните принципи на работа на ядрото, Linux ядрото развитие на общността

Въведение в основните принципи на основната работа

Моят Оксфорд речник определя ядрото като "мек, обикновено ядивна част на гайката", но има и второ значение: ". В централната и най-важната част от нещо" Ако смътно си представим, че в действителност predstvlyayu от сърцевина, аз ще ви кажа в детайли.

Сърцевината се състои от софтуер част (слой), който осигурява комуникацията между хардуера и приложни програми, които работят на компютъра. Всъщност, строго погледнато, Linux се отнася само за ядрото, т.е. от страна на който е написан от Линус Торвалдс в началото на 90-те години.

Всички останали части, които можем да намерим в разпределението на GNU / Linux - Баш черупка, графична среда KDE, уеб-браузъри, X-сървър и за всички останали ... е само на отделни приложения, които работят на върха на yadra.Chtoby можете да си го представите, ще го направя например - SLE11SP1 отнема около 2.5GB дисково пространство (в зависимост разбира се от това, което сте избрали да инсталирате). От всичко това самото житно, включително всички негови модули, заема 47 MB. Е около 2%.

Система за повикване интерфейс ()

Ядрото осигурява връзка с хардуер ... готино. И така, какво точно прави той? Dosup ядрото осигурява приложни програми на хардуера чрез голяма колекция от входни точки, така наречената система за повикване (система на разговор).

Един от тези абстракции, предоставяни от ядрото, файловата система. Така например, в краткосрочен програма (написан на C), ние отворите файла и копирайте съдържанието му към стандартния изход:

Тук можете да видите примери 4 системни функции - отворени (), се чете (), пише (), както и в близост (). Не се притеснявайте за подробности синтаксис; това не е важно сега. Въпросът е следният: с помощта на тези системни функции (и някои други), ядрото на Линукс са на разположение, за да ни илюзия на "Файл" - поредица от данни (в байтове), името - и ни предпазва от данни проблемите, svyazynnyh се записват на диск. Какви проблеми? Фактът, че диска е сложна система от цилиндри, писти и сектори. Когато записвате данни на диска, ние използваме тази система, но ядрото ни позволява да не трябва да се притеснявате за това къде е да се записват данни, т.е. Кои са секторите, на които песните са чисти, т.е. подходящ за запис. Ние запишете размер на резбата на файла, да речем, на няколко гигабайта в диска, и според нас това е само част от информацията. Този файл може да бъде разбита на парчета и парчетата, написани на напълно различна част от твърдия диск е (да, по принцип, то винаги се случва), но не ни пука, и тези данни са скрити от нас.

Надявам се, сега е по-наясно с абстракциите, предоставяни от ядрото. Подобни примери се намират навсякъде в програмирането, но аз отделям ...

Както можете да видите на снимката по-горе, ядрото трябва да изпълни трудна работа, за да поддържа тази абстракция. Особено, ако това е необходимо за да се поддържа една единствена абстракция за различни файлови системи и файлови системи, от своя страна, трябва да се работи върху различен хардуер - zheskie Хард дискове, USB флаш карти, CD / DVD устройства, SCSI, както и отдалечени файлови системи достъпът до която се осигурява чрез мрежови протоколи като NFS или CIFS.

Само не забравяйте за подкрепа на логическите томове или RAID. Виртуалната слой в ядрото на файловата система ви позволява да изпратите тази система за съхранение на данни като набор от файлове в рамките на една файлова система, но не това, което е една файлова система се намира физически на различни устройства.

"Няма лъжица" (в) Матрицата

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

планировчика на ядрото заделя процесорно време за всеки от тях. Ако се вгледате в работните процеси, работещи в системата, а след това ще бъде една илюзия, че компютърът работи няколко програми едновременно. Не zabyvaye, че е просто една илюзия;)

Тук е още една малка програма, C

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

Модулната структура на ядрото

Сега имаме някаква представа за това, какво прави ядрото, нека накратко обсъди нейното физическа структура. Ранните версии на Linux ядрото бяха монолитна, т.е. всичко е в един доста голям изпълним файл.

Soveremennyy Linux ядрото са модулни: много от функционалността се съдържа в модули, които се зареждат в ядрото динамично. Това ви позволява да се запази малко ядро ​​размер, и ви позволява да качвате (или замяна) на модулите в ядрото без рестартиране на компютъра.

Основното ядро ​​е зареден в паметта по време на зареждане от файл в diriktorii / обувка, и по-нататък нещо като vmlinuz-KERNELVERSION, където KERNELVERSION - версията на ядрото (за да се провери версията на ядрото, стартирайте uname -r). Модули на ядрото са разположени в / ИЪ / модули / KERNELVERSION.

Управление на ядрото модул

В действителност, самата Linux се справя с натоварването и подмяна на модули, необходими, но това не означава, че не сме в състояние да се зареди всеки модул себе си, ако това е необходимо. Например, за да разберете кои модули са заредени в момента в ядрото, използвайте lsmod.


Заключение lsmod ни показва името на модула, неговия размер, колко пъти на употреба, както и списък на модули, които зависят от него. Броят пъти, че ядрото използва този модул, това е много важно. Не е необходимо да се разтоварят на модула, ако kolichesvo по-голяма от 0, т.е. ядро работи в момента (в момента) с този модул. Въпреки че по принцип, Linux, и няма да се разтоварят на модула, с част от код, с които той вече работи. Това е възможно само за тези единици, чиято стойност е равна на нула.

Можете ръчно натоварване и разтоварване на модули с помощта на modprobe. (Има два по-ниско ниво команда, наречена insmod и rmmod, които правят работата, но modprobe-лесно за използване, защото това автоматично дава възможност на модулни зависимости.) Например, на изхода на lsmod (заключение в моя пример) показва зареден модул isofs, които в момента не се използва, и който няма зависими модули. Този модул може да се изтегли:
# Modprobe -r isofs
След isofs модул не се появи на изхода на lsmod. Това означава, че ядрото използва, за да 36284 байта по-малко памет :) Ако поставите диска в DVD / CD-диск и да го podmontiruete (или, ако настроението, операционната система ще го направи avtomatichnski), ядрото също автоматично презареждане на isofs модул и "колко пъти употребата му "ще се увеличи до 1. Ако се опитате да премахнете модулите, които в момента е, Linux няма да ви позволи това ... и това е правилно :)


Ако lsmod ни показва списък на заредените модули, modprobe -l ще бъдат изброени всички налични модули. Изходът ще съдържа всички модули от / ИЪ / модули / KERNELVERSION. Big списък!

Ако решите да заредите модула ръчно с modprobe, а след това можете да подадете параметри за този модул по време на зареждане:
# Modprobe usbcore blinkenlights = 1
Не, не е изобретил, Blinkenlights - това е модул usbcore в реална възможност.

Като разбрах, че този модул има параметър? Много просто. Най-ефективният начин за получаване на информация за модула е да се използва modinfo. Ето, например информация за модул Snd-HDA-Intel:


Интересно за нас е информация PARM - показва параметрите, които можете да преминават модула. Тези описания са много кратки :( Въпреки това, ние имаме едни и същи и източниците на ядрото, което ще ни помогне да разберем. Има и много интересни неща в / ЮЕсАр / SRC / KERNELVERSION / документация.

Например, параметрите са описани в /usr/src/KERNELVERSION/Documentation/sound/alsa/ALSA-Configuration.txt файл, който може да бъде прехвърлен в много ALSA-модули. Много интересни неща има в /usr/src/KERNELVERSION/Documentation/kernel-parameters.txt файл

Важно е да се спомене възможността за автоматично зареждане на модули с конкретни параметри. За да направите това, добавете команда в /etc/modprobe.conf, който ще посочи името на модула и възможността, че ядрото трябва да го заредите:
опции SND - HDA - Intel probe_mask = 1

Изворът

В ядрото на Линукс също предоставя богата информация чрез файловата система / Proc. За да има смисъл от / Proc, ние трябва да разширим нашето разбиране за това какво е файл.

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

Файловете в / ргос - това е от и до центъра на въображението, а абстрактно и илюзорно. FS Това ни показва много от вътрешните структури от данни ядро.

Много механизми предупреждение за това какво се случва в ядрото, който върви точно през ПП. Например, котка / ргос / модули ни показва списък на модулите в момента, заредени в ядрото. Нещо подобно на изхода от lsmod.

Особено интересни са файловете в / ргос / SYS. Например, / ргос / сис / нето / ipv4 / ip_forward ни каже дали нашата врата машина. Аз нямам:


Никой не ни забранява да пише на тези файлове:
# Echo 1> / Proc / сис / нето / IPv4 / ip_forward
... по този начин ние включваме IP спедиция.

Между другото, можете да работите не само с котка и ехо, за да гледате нещо, или да промените някои настройки в / ргос / SYS, можете да използвате и Sysctl:


Т.е. вместо предишните два отбора


Можете просто да се направи


Имайте предвид, че на първо място, когато пишете начинът, по който ние използваме, когато се работи с Sysctl, ние използваме една точка, а не наклонена черта, и второ начина, по който пиша otnostitelno / ргос / сис.

Не забравяйте също, че настройките се отнасят само за текущата ядрото, т.е. които сега се зарежда. След рестартирането, всички променени настройки ще бъдат променени назад. За да запазите тези настройки, записва ги да /etc/sysctl.conf. По време на зареждане Sysctl автоматично ще възстанови всички параметри и настройки, които ще намерите в този файл. Формат на записа, както когато стартирате най-Sysctl:

нето. IPv4. ip_forward = 1

> За тези, които не го харесват, да използвате Assembler и говори с хардуера директно;)
Не е ясно как използването на асемблер, поради
Тя работи директно с хардуера. Ядрото е писано
главно в C (това се отнася за водача в първия
поставяйте), като в същото ASM аз съм добре
Мога да напиша обичай прог, които ще
използват същите системни повиквания. използването на
асемблер не ми помогне да достигнете
хардуер, заобикаляйки ядрото - това ще помогне съвсем друго,
а именно, ioperm () функция.

Мисля, че е трябвало да се използва набор инструкции / архитектура целевата платформа.
Фактът, че оборудването не ще бъде в състояние да говоря с работещи в не-привилегирован режим - е съвсем очевидно.