"Linux Internals" от Брайън Уорд. Вътрешни елементи на Linux Вътрешни елементи на Linux от Брайън Уорд



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

Нива и слоеве на абстракция в операционната система Linux

Използването на абстракции за разбиване на компютърни системи на компоненти ги прави по-лесни за разбиране, но е безполезно, ако няма структура. Ще подредим компонентите под формата на слоеве или нива. Слоят или слой е начин за класифициране (или групиране) на компоненти според местоположението им между потребителя и хардуера. На най-горния слой са разположени браузъри, игри и т.н.; на долния слой виждаме паметта на компютъра: нули и единици. Операционната система заема най-голям брой слоеве между тези две.

Има три основни нива в операционната система Linux. В основата са хардуерът. Те включват памет, както и един или повече централни процесори (CPU), които извършват изчисления и заявки за четене и запис в паметта. Устройства като твърди дискове и мрежови интерфейси също се считат за хардуер.

Нивото по-горе е ядрото, което е ядрото на операционната система. Ядрото е програма, която се намира в паметта на компютъра и дава инструкции на централния процесор. Ядрото управлява хардуера и действа предимно като интерфейс между хардуера и всяка работеща програма.

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

Има важна разлика между начина, по който стартират процесите на ядрото и потребителските процеси: ядрото стартира в режим на ядрото, докато потребителските процеси започват в потребителски режим. Кодът, работещ в режим на ядрото, има неограничен достъп до процесора и RAM. Това е силно предимство, но може да бъде опасно, защото позволява на процесите на ядрото лесно да разрушат цялата система. Областта, която е достъпна само за ядрото, се нарича пространство на ядрото.

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

Теоретично един неконтролиран потребителски процес не е в състояние да причини значителна вреда на системата. Наистина зависи от това какво смятате за "съществена вреда", както и от специалните привилегии на процеса, тъй като на някои процеси е позволено да правят повече от други. Например, може ли потребителски процес да унищожи напълно данни на твърдия диск? Ако са правилно конфигурирани разрешения, това може и за вас ще бъде изключително опасно. Съществуват предпазни мерки за предотвратяване на това и на повечето процеси просто няма да бъде позволено да сеят объркване по този начин.

Основни команди и структура на директории

Тази глава е препратка към командите и помощните програми на операционната система Unix. Вероятно вече знаете повечето от тези команди, но само за да сте сигурни, особено когато става въпрос за структура на директории. Това е уводният материал, на който ще се позовавам в цялата книга.

Защо да говорим за Unix команди? Тази книга не е ли за това как работи Linux? Да, разбира се, за това, но в самото ядро ​​на Linux лежи системата Unix.

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

Как се зарежда ядрото на Linux

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

  1. Системният BIOS или фърмуерът за стартиране се зареждат и стартират системата за зареждане.
  2. Системният зареждане намира изображението на ядрото на диска, зарежда го в паметта и го изпълнява.
  3. Ядрото инициализира устройствата и техните драйвери.
  4. Ядрото монтира главната файлова система.
  5. Ядрото изпълнява командата init с идентификатор на процес 1. Тази точка е началото на потребителското пространство.
  6. Командата init стартира останалите системни процеси.
  7. В даден момент командата init стартира процес, който ви позволява да влезете. Това обикновено се случва в края или малко преди края на зареждането на системата.

Това обхваща стъпки от едно до четвърто, като се фокусира върху зареждачите на ядрото и системата. Глава 6 продължава обсъждането на зареждането на потребителско пространство.

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

Въведение в компилирането на софтуер за C код

Повечето публично достъпни Unix софтуерни пакети на трети страни идват като изходен код, който можете да свържете и инсталирате. Една от причините за това е, че има толкова много различни версии и архитектури на Unix (и самия Linux), че би било трудно да се създават двоични пакети за всяка възможна комбинация от платформи. Друга важна причина е, че широкото използване на изходния код в общността на Unix насърчава потребителите да коригират софтуерни грешки и да добавят нови функции, което прави термина "отворен код" смислен.

Почти всичко, което виждате в Linux система, може да бъде получено като изходен код, от ядрото и C библиотеката до браузърите. Възможно е дори да се актуализира и допълни системата като цяло чрез (пре)инсталиране на части от системата от изходния код. Въпреки това, вероятно не трябва да актуализирате компютъра си, като инсталирате всичко от източник, освен ако не ви харесва процеса или по някаква друга причина.

Linux обикновено предоставя лесни начини за актуализиране на критични части на системата, като команди в директорията /bin, а едно изключително важно свойство на системите е, че те обикновено решават проблеми със сигурността много бързо. Не очаквайте обаче вашата версия да ви предостави всичко необходимо без ваше участие. Ето няколко причини, поради които може да искате сами да инсталирате определени пакети:

  • за управление на опциите за конфигурация;
  • за да инсталирате софтуера там, където ви е необходим. Можете дори да инсталирате няколко различни версии на един и същи пакет;
  • за да контролирате версията, която инсталирате. Системните дистрибуции не винаги включват най-новата версия на всички пакети, особено тези, свързани с допълнителен софтуер (като библиотеки на Python);
  • за да разберете по-добре как работи пакетът.

Уеб сървъри и приложения

Linux е популярна система за уеб сървъри, а управляващият монарх на сървърите за приложения на Linux е Apache HTTP сървър (обикновено наричан просто Apache). Друг уеб сървър, за който често ще чувате, е Tomcat (който също е проект за разработка на Apache); той осигурява поддръжка за Java приложения.

Сами по себе си уеб сървърите правят малко: могат да съхраняват файлове и това е всичко. Крайната цел на повечето уеб сървъри, като Apache, е да осигурят платформа за използване на уеб приложения. Например проектът Wikipedia е изграден върху пакета MediaWiki, който можете да използвате, за да настроите свой собствен уики проект. Системите за управление на съдържанието като WordPress и Drupal ви позволяват да създавате свои собствени блогове и мултимедийни сайтове. Всички тези приложения са базирани на езици за програмиране, които се представят особено добре на Linux. Например, MediaWiki, WordPress и Drupal са написани на PHP.

Строителните блокове, които съставляват уеб приложенията, са силно модулни, така че е лесно да добавяте свои собствени разширения и да създавате приложения с рамки като Django, Flask и Rails, които предоставят средствата за общи уеб рамки и функции, като използване на шаблони, мулти- управление на потребители и поддръжка на база данни.

Изтеглете от безплатно хранилище за файлове

Разрешете captcha за достъп до връзките!

Текуща страница: 1 (общо книгата има 30 страници) [достъпен откъс за четене: 17 страници]

Брайън Уорд

Вътрешни елементи на Linux

Преводач С. Черников

Технически редактор Н. Гринчик

Литературен редактор О. Андриевич

Художници А. Барцевич, В. Шимкевич

Коректори Т. Курянович, Е. Павлович

Оформление А. Барцевич

Брайън Уорд

Вътрешни елементи на Linux. – Санкт Петербург: Петър, 2015.

ISBN 978-5-496-01952-1

© LLC Издателска къща "Питер", 2015 г

Всички права запазени. Никоя част от тази книга не може да бъде възпроизвеждана под каквато и да е форма без писменото разрешение на притежателите на авторските права.

Предговор

Написах тази книга с вярата, че за да бъдете успешни, трябва да разберете как работи и работи вашият компютърен софтуер.

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

Интересът към устройството на операционната система Linux може да бъде причинен от различни причини. Специалистите по информационни технологии и разработчиците на софтуер за Linux ще намерят в тази книга почти всичко, което трябва да знаят, за да извлекат максимума от операционната система. Изследователи и студенти, които често трябва да променят системата за себе си, ще намерят тук практически обяснения защо нещата са подредени така, както са, а не по друг начин. Има и „забавници“ – потребители, които обичат да прекарват времето си пред компютъра за забавление, печалба или и двете едновременно.

Искате ли да знаете защо някои неща работят, а други не? Чудите ли се какво ще стане, ако промените нещо? Тогава вие сте сред "забавляващите".

Необходимите условия

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

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

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

Практически подход

За да работите, ще ви е необходим компютър с операционна система Linux. Може да предпочетете виртуална инсталация – използвах приложението VirtualBox, за да тествам по-голямата част от материала в тази книга. Трябва да имате суперпотребител (root) достъп, въпреки че трябва да използвате обикновен потребителски акаунт през повечето време. Ще работите предимно от командния ред, терминален прозорец или отдалечена сесия. Ако не сте работили често в тази среда, не се притеснявайте, Глава 2 ще ви разкаже повече за това.

Обикновено командите ще изглеждат така:

Въведете текста, който е удебелен; нормален шрифт показва текста на отговора, който машината ще издаде. Символът $ е подкана за потребител с обикновен акаунт. Ако видите символа # като подкана, трябва да работите под акаунта на суперпотребител (повече за това в Глава 2).

Как е организирана тази книга

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

Повечето от ранните глави (с изключение на глава 2) използват силно ядрото на Linux, но докато напредвате в книгата, вие ще работите и във вашето потребителско пространство. Ако не разбирате за какво говоря сега, не се притеснявайте, обясненията ще бъдат дадени в Глава 1.

Материалът е представен, ако е възможно, без препратка към който и да е дистрибуторски комплект на системата. Би било скучно да описвам всички варианти на системата, затова се опитах да обхвана двете основни семейства дистрибуции: Debian (включително Ubuntu) и RHEL/Fedora/CentOS. Акцентът е върху сървърните версии и версиите за работни станции. Вградени системи като Android и OpenWRT също са включени, но от вас зависи да научите разликите между тези платформи.

Какво е новото във второто издание

Първото издание на тази книга се занимаваше предимно с потребителската страна на системата Linux. Основното внимание беше обърнато на подреждането на частите му и как да ги накара да функционират. По това време много елементи на системата бяха трудни за инсталиране и правилно конфигуриране.

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

Промених и реда на материала в книгата, за да отговаря на интересите и нуждите на днешните читатели. Единственото нещо, което не се е променило, е обемът на книгата.

Исках да ви предоставя информацията, която ви е необходима, за да започнете бързо. Ще са необходими известни усилия, за да ги овладеете, но нямам намерение да ви правя „щангисти“, за да можете да преодолеете тази книга. След като разберете основните точки, описани тук, няма да ви е трудно да намерите подробностите и да ги разберете.

Пропуснах някои от историческите подробности, които бяха в първото издание, главно за да фокусирам вниманието ви. Ако се интересувате от системата Linux и нейната връзка с историята на Unix системата, моля, вижте книгата на Peter H. Salus Демонът, Гну и Пингвинът(Reed Media Services, 2008) – описва как се е развил софтуерът, който използваме.

Бележка за терминологията

В момента има спорове за имената на някои елементи на операционните системи. Замесено е дори самото име на системата Linux – трябва ли да се нарича Linux или GNU/Linux (за да отразява използването на някои елементи от проекта GNU)? В книгата съм се опитал да използвам най-често срещаните и по възможност най-малко тромави имена.

Благодаря

Благодаря на всички, които ми помогнаха с първото издание. Това са Джеймс Дънкан, Дъглас Н. Арнолд, Бил Фенър, Кен Хорнщайн, Скот Диксън, Дан Ерлих, Феликс Лий (Феликс Лий), Скот Шварц, Грегъри П. Смит, Дан Съли, Карол Джурадо и Джина Стийл. За това издание съм особено задължен на Жорди Гутиерес Ермосо за отличния технически преглед; неговите предложения и разяснения са безценни. Благодаря също на Доминик Пулен и Доналд Карон за бързия отговор в началото, както и на Синджу Хсие, който търпеливо работи с мен, за да пренапиша тази книга.

Бих искал също да благодаря на моя редактор по разработка Бил Полок и редактора на продукцията Лоръл Чън. Серина Янг, Алисън Лоу и целият персонал на No Starch Press, както обикновено, свършиха отлична работа при подготовката на новото издание на книгата.

От издателството

Изпращайте вашите коментари, предложения и въпроси на имейл адреса [защитен с имейл](изд. Петър, компютърно издание).

Ще се радваме да чуем от вас!

На уебсайта на издателството http://www.piter.com ще намерите подробна информация за нашите книги.

1. Голяма картина

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

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

Ако карате кола, трябва да знаете повече. Ще трябва да научите контролите (като волана и газта) и да научите какво да правите в случай на неизправност.

Да кажем, че колата е трескава. Можете да разделите абстракцията на „кола, която кара по пътя“ на три части: колата, пътя и вашия стил на шофиране. Това ще помогне да се определи причината. Ако пътят е неравен, не е нужно да обвинявате колата или себе си. Вместо това можете да опитате да разберете защо пътят се е влошил или, ако пътят е нов, защо строителите му са свършили толкова ужасна работа.

Разработчиците на софтуер използват абстракцията като инструмент за създаване на операционни системи и приложения. Има много термини за абстрактни раздели на компютърния софтуер, вкл подсистема, модулИ пакет. В тази глава обаче ще използваме термина съставна частзащото е просто. Когато създават софтуерен компонент, като правило, разработчиците не се интересуват много от вътрешната структура на другите компоненти, но все пак трябва да помислят кои компоненти и как могат да се използват.

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

1.1. Нива и слоеве на абстракция в операционната система Linux

Използването на абстракции за разбиване на компютърни системи на компоненти ги прави по-лесни за разбиране, но е безполезно, ако няма структура. Ще подредим компонентите под формата на слоеве или нива. Слой,или ниво,е начин за класифициране (или групиране) на компоненти според местоположението им между потребителя и хардуера. На най-горния слой са разположени браузъри, игри и т.н.; на долния слой виждаме паметта на компютъра: нули и единици. Операционната система заема най-голям брой слоеве между тези две.

Операционната система Linux има три основни нива. На фиг. 1.1 показва нивата, както и някои от компонентите във всяко от тях. В основата са хардуер. Те включват памет, както и един или повече централни процесори (CPU), които извършват изчисления и заявки за четене и запис в паметта. Устройства като твърди дискове и мрежови интерфейси също се считат за хардуер.

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

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

Забележка

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

Има важна разлика между начина, по който се стартират процесите на ядрото и потребителските процеси: ядрото се стартира в режим на ядротои потребителски процеси в потребителски режим. Кодът, работещ в режим на ядрото, има неограничен достъп до процесора и RAM. Това е силно предимство, но може да бъде опасно, защото позволява на процесите на ядрото лесно да разрушат цялата система. Областта, която е достъпна само за ядрото, се нарича пространство на ядрото.

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

Ориз. 1.1.Обща структура на операционната система Linux

Теоретично един неконтролиран потребителски процес не е в състояние да причини значителна вреда на системата. Наистина зависи от това какво точно смятате за "съществена вреда", както и от специалните привилегии на този процес, тъй като на някои процеси е позволено да правят повече от други. Например, може ли потребителски процес да унищожи напълно данни на твърдия диск? Ако са правилно конфигурирани разрешения, това може и за вас ще бъде изключително опасно. Съществуват предпазни мерки за предотвратяване на това и на повечето процеси просто няма да бъде позволено да сеят объркване по този начин.

1.2. Хардуер: RAM

От целия компютърен хардуер RAMе може би най-важното. В най-суровия си вид RAM е просто огромно хранилище за поредица от 0 и 1. Всяка нула или единица се извиква малко. Това е мястото, където се намира работещото ядро ​​и процесите - те са просто големи колекции от битове. Всички входни и изходни данни от периферни устройства преминават през RAM също под формата на битови набори. Процесорът просто работи с паметта: чете инструкции и данни от нея и след това записва данните обратно в паметта.

Често ще виждате термина "условие", което би се отнасяло до паметта, процесите, ядрото и други части на компютърна система. Строго погледнато, състоянието е всяко подредено подреждане на битове. Например, ако има четири бита в паметта, тогава последователностите 0110, 0001 и 1011 представляват три различни състояния.

Като се има предвид, че процесът може лесно да бъде от милиони битове в паметта, често е по-лесно да се използват абстрактни термини, когато говорим за състояния. Вместо да описвате състоянието с помощта на битове, вие говорите за това, което се е случило или се случва в момента. Например, може да кажете „този процес чака въвеждане“ или „процесът изпълнява втората стъпка от процедурата за стартиране“.

ЗАБЕЛЕЖКА

Тъй като описанието на състоянието обикновено използва абстрактни понятия, а не реални битове, терминът "модел" се използва за обозначаване на всяко физическо подреждане на битове.

1.3. Ядро

Почти всичко, което ядрото прави, е свързано с RAM. Една от задачите на ядрото е да разпредели паметта на няколко подсекции, след което ядрото трябва постоянно да поддържа в ред информация за състоянието на тези подсекции. Всеки процес използва своята разпределена област на паметта и ядрото трябва да гарантира, че процесите се придържат към техните области.

Ядрото е отговорно за управлението на задачи в четири основни области на системата.

процеси.Ядрото е отговорно за това кои процеси имат разрешен достъп до процесора.

Памет.Ядрото трябва да следи състоянието на цялата памет: колко в момента е разпределено на определени процеси, какво може да бъде разпределено за споделяне между процеси и колко е свободно.

Драйвери на устройства.Ядрото действа като интерфейс между хардуер (като твърд диск) и процеси. Обикновено хардуерното управление се управлява от ядрото.

Системни повикванияИподдържа.Обикновено процесите използват системни извиквания за взаимодействие с ядрото.

Сега ще разгледаме накратко всяка една от тези области.

ЗАБЕЛЕЖКА

Можете да научите повече за това как работи ядрото в Концепции за операционна система, 9-то издание, от Абрахам Силбершац, Питър Б. Галвин и Грег Ган Гагне (Wiley, 2012) и Съвременни операционни системи, 4-то издание от Андрю С. Таненбаум и Хърбърт Бос (Prentice Hall, 2014).

1.3.1. Управление на процесите

Управление на процеситеописва стартиране, спиране, възобновяване и прекратяване на процеси. Концепциите зад процесите на стартиране и прекратяване на процеси са доста прости. Малко по-трудно е да се опише как процесът използва процесора по време на нормална работа.

Във всяка съвременна операционна система няколко процеса функционират "едновременно". Например, можете да стартирате браузър на вашия компютър и едновременно с това да отворите електронна таблица. Нещата обаче всъщност не са такива, каквито изглеждат: процесите, които са отговорни за тези приложения, обикновено не се стартират. вточноств един момент от време.

Помислете за система с един процесор. Множество процеси могат да го използват, но само един процес може действително да използва процесора във всеки даден момент. На практика всеки процес използва процесора за малка част от секундата и след това спира; след това друг процес използва процесора за малка част от секундата; след това идва ред на третия процес и т. н. Действието, при което процесът прехвърля контрола върху процесора на друг процес, се нарича превключване на контекста.

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

Ядрото е отговорно за превключването на контекста. За да разберете как работи това, помислете за ситуация, в която процесът се изпълнява в потребителски режим, но неговият отрязък от време изтича. Ето какво се случва.

1. Процесорът (реалният хардуер) прекъсва текущия процес, разчитайки на вътрешен таймер, превключва в режим на ядрото и му връща контрола.

2. Ядрото записва текущото състояние на процесора и паметта, които ще са необходими за възобновяване на току-що прекъснатия процес.

3. Ядрото изпълнява всички задачи, които може да са се появили по време на предишния отрязък от време (например събиране на данни или I/O операции).

4. Ядрото вече е готово да стартира друг процес. Той анализира списъка с процеси, които са готови за изпълнение, и избира един от тях.

5. Ядрото подготвя паметта за новия процес и след това подготвя процесора.

6. Ядрото казва на процесора колко време ще бъде квантът на времето за новия процес.

7. Ядрото поставя процесора в потребителски режим и прехвърля управлението на процесора.

Превключването на контекста отговаря на важен въпрос: когаработи ли ядрото? Отговорът е: ядрото работи междувремеви интервали, разпределени за процеси, когато се случи превключване на контекста.

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

1.3.2. Управление на паметта

Тъй като ядрото трябва да управлява паметта по време на превключване на контекста, то е надарено с тази сложна функция. Работата на ядрото е сложна, тъй като трябва да се вземат предвид следните условия:

Ядрото трябва да има своя собствена област на паметта, която не може да бъде достъпна от потребителски процеси;

Всеки потребителски процес се нуждае от собствена област на паметта;

Всеки потребителски процес не трябва да има достъп до област на паметта, предназначена за друг процес;

Потребителските процеси могат да споделят памет;

Някои области на паметта за потребителски процеси може да са само за четене;

Системата може да използва повече памет, отколкото е налична, като използва дисково пространство като вторично устройство.

Ядрото има помощник. Съвременните процесори съдържат модул за управление на паметта(MMU), който активира схема за достъп до памет, наречена "виртуална памет". С виртуалната памет процесът няма директен достъп до паметта чрез физическото й местоположение в хардуера. Вместо това ядрото настройва всеки процес така, сякаш разполага с цялата машина. Когато процес получи достъп до паметта, MMU прихваща заявката и прилага карта на адресите на паметта, за да преведе полученото от процеса местоположение на паметта във физическо място в паметта на компютъра. Въпреки това, ядрото трябва да инициализира, поддържа и променя тази адресна карта през цялото време. Например, по време на превключване на контекста, ядрото трябва да промени картата след изходния процес и да я подготви за входящия.

Забележка

Изпълнението на карта на адресите на паметта се нарича таблица на страници.

Ще научите как да наблюдавате производителността на паметта в глава 8.

1.3.3. Драйвери и управление на устройства

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

1.3.4. Системни обаждания и поддръжка

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

Две системни извиквания, fork() и exec(), са важни за разбирането как се стартират процесите:

вилица (). Когато процес извика fork(), ядрото създава почти идентично копие на този процес;

Exec(). Когато процес извика exec( програма), ядрото изпълнява програмата програма A, който замества текущия процес.

С изключение на процеса init (глава 6), всичкопотребителските процеси в Linux система стартират в резултат на повикване fork() и в повечето случаи се прави повикване exec() за стартиране на нова програма, а не копие на съществуващ процес. Прост пример е всяка програма, която стартирате от командния ред, като команда ls, която показва съдържанието на директория. Когато въведете команда ls в терминален прозорец, обвивката, която се изпълнява вътре в прозореца на терминала, прави извикване на fork(), за да създаде копие на обвивката, а след това това ново копие на обвивката извиква exec(ls), за да изпълни командата ls. На фиг. Фигура 1.2 показва последователността на процесите и системните извиквания за работещи програми като ls.

Ориз. 1.2.Стартиране на нов процес

ЗАБЕЛЕЖКА

Системните повиквания обикновено се означават със скоби. В примера, показан на фиг. 1.2, процес, който изисква от ядрото да създаде друг процес, трябва да издаде системното извикване fork(). Тази нотация идва от начина, по който извикванията се записват на езика за програмиране C. Не е нужно да знаете C, за да разберете тази книга. Само не забравяйте, че системното извикване е взаимодействие между процес и ядрото. Освен това някои групи системни повиквания са опростени в тази книга. Например, повикването exec() се отнася до цяла фамилия от системни повиквания, които изпълняват подобна задача, но се различават в софтуерната реализация.

Ядрото също така поддържа потребителски процеси, които функционират различно от традиционните системни извиквания. Най-известните от тях са псевдо устройства. От гледна точка на потребителските процеси, псевдоустройствата изглеждат като обикновени устройства, но се реализират изключително в софтуер. Всъщност формално те не трябва да са в ядрото, но все пак присъстват в него по практически причини. Например, устройство, което генерира произволни числа (/dev/random), би било трудно да се приложи сигурно с потребителски процес.

Забележка

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

1.4. Потребителско пространство

Областта на RAM, която ядрото разпределя за потребителски процеси, се нарича потребителско пространство. Тъй като процесът е само състояние (или изображение) в паметта, потребителското пространство също търси паметта за цялата колекция от работещи процеси. Може също да видите термина "userland" (userland), който се използва вместо потребителско пространство.

Повечето от реалното действие на Linux система се извършва в потребителското пространство. Въпреки че всички процеси са еднакви от гледна точка на ядрото, те изпълняват различни задачи за потребителите. Системните компоненти, които представляват потребителски процеси, са организирани под формата на елементарна структура - слой на услугата (или слой). На фиг. Фигура 1.3 показва примерен набор от компоненти, които са свързани и взаимодействат с Linux система. Простите услуги са в долната част (най-близо до ядрото), помощните програми са в средата, а приложенията, с които работи потребителят, са отгоре. Фигура 1.3 е силно опростена диаграма, тъй като са показани само шест компонента, но можете да видите, че горните компоненти са най-близо до потребителя (UI и браузър); компонентите от средно ниво имат пощенски сървър, който използва браузър; в долната част има няколко малки компонента.

Долното ниво се състои по правило от малки компоненти, които изпълняват прости задачи. Средното ниво съдържа по-големи компоненти като пощенска услуга, сървър за печат и база данни. Компонентите от най-високо ниво изпълняват сложни задачи, които често се контролират директно от потребителя. Ако един компонент иска да се възползва от друг, тогава този втори компонент е или на същия сервизен слой, или по-нисък.

Фигура 1.3 само приближава устройството за потребителско пространство. В действителност в потребителското пространство няма правила. Например повечето приложения и услуги пишат диагностични съобщения, наречени списания. Повечето програми използват стандартната услуга syslog за регистриране на съобщения, но някои предпочитат да регистрират свои собствени.

Ориз. 1.3.Видове процеси и взаимодействия

Освен това някои компоненти на потребителското пространство могат да бъдат трудни за категоризиране. Компонентите на сървъра, като уеб сървър или сървър на база данни, могат да се считат за приложения от много високо ниво, тъй като изпълняват доста сложни задачи. Такива приложения могат да бъдат поставени в горната част на фиг. 1.3. В същото време потребителските приложения могат да зависят от сървърните приложения за изпълнение на задачи, с които не могат да се справят сами. В този случай сървърните компоненти трябва да бъдат поставени в средното ниво.

1.5. Потребители

Ядрото на Linux поддържа традиционната концепция за потребител на Unix система. потребителе обект, който може да изпълнява процеси и да притежава файлове. Свързан с потребителя Потребителско име. Например, в системата може да има потребител, наречен billyjoe. Въпреки това, ядрото не работи с потребителски имена, вместо това идентифицира потребителя с просто число потребителски идентификатор(Глава 7 говори за това как идентификаторите се съпоставят с потребителски имена).

Вътрешни елементи на LinuxБрайън Уорд

(все още няма оценки)

Заглавие: Linux вътрешни

За вътрешността на Linux от Брайън Уорд

Операционната система Linux е достойна алтернатива на Windows, някои версии на която не са много удобни и твърде „тежки“ за компютърните ресурси. Брайън Уорд е написал невероятна книга за самопомощ за всеки, който иска да опознае системата и нейните богати функции от нулата. Четенето на книгата „Linux Internals“ се препоръчва за тези, които искат да се задълбочат във всички механизми на ядрото на Linux, да разберат неговата вътрешна структура и философия. За повърхностно изучаване на принципите на работа и прехвърляне на шаблонни схеми от една операционна система в друга, тази работа не е подходяща.

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

Компютърната работа "The Internals of Linux" е много подробна и е разделена на 17 глави. В първите четири раздела авторът говори за общите концепции на тази система и принципа на нейното действие: за структурата на ядрото и обвивката, основните команди и структурата на директории, за функционалността на файловите и дискови системи. Следва повече информация за започване на работа с тази система: как да заредите ядрото на Linux и да стартирате потребителско пространство. По-късните глави разглеждат по-задълбочено работните процеси на Linux и използването на неговите ресурси. Освен това Брайън Уорд засегна въпросите за шел скриптовете и работата с езика C. От общия материал авторът постепенно навлиза в детайли, които представляват интерес за разработчиците на софтуер.

Книгата е не само преглед на системата Linux, но съдържа и практически задачи, които ще позволят на читателя да създаде свое собствено потребителско пространство и да придобие умения и опит в тази обвивка.

Брайън Уорд представи материала на достъпен език с много примери и обяснения. Книгата е добре структурирана и може да се използва като справка. Авторът потвърждава, че обвивката на Linux е удобна и функционална, разкрива възможностите как можете да я персонализирате според вашите нужди. За тези, които се интересуват от структурата на определени програми, тази книга ще бъде отлична находка, защото разкрива механизмите на компютърните процеси, демонстрира причинно-следствените връзки между тях.

На нашия сайт за книги можете да изтеглите сайта безплатно без регистрация или да прочетете онлайн книгата „Вътрешните елементи на Linux“ от Брайън Уорд във формати epub, fb2, txt, rtf, pdf за iPad, iPhone, Android и Kindle. Книгата ще ви донесе много приятни моменти и истинско удоволствие за четене. Можете да закупите пълната версия от нашия партньор. Също така тук ще намерите най-новите новини от литературния свят, ще научите биографията на любимите си автори. За начинаещи писатели има отделен раздел с полезни съвети и трикове, интересни статии, благодарение на които можете да опитате ръката си в писането.

Безплатно изтегляне на книгата "The Internals of Linux" от Брайън Уорд

Във формата fb2: Изтегли
Във формата rtf: Изтегли
Във формата epub: Изтегли
Във формата текст:

Набиране на група за освобождаване за нашия тракер .
Плащането е по договаряне.
Заявления се приемат по пощата. [email protected], това е възможно чрез обратна връзка
Моля, кажете ни накратко за себе си, колко време можете да прекарате в нашия сайт и очакваните приходи.

bandicamви позволява да записвате конкретна област на екрана на компютъра или в програма, която използва DirectX / OpenGL графични технологии. Bandicam ще ви помогне да запишете видео с висока компресия...


Описание:Wondershare Filmora е удобен видео редактор, който съдържа всички необходими инструменти за редактиране на видео.Можете да създавате висококачествени филми със заглавия, ...


EmEditor Professional- професионална версия на мощен текстов редактор за програмисти, уеб разработчици и обикновени потребители с подчертаване на синтаксиса и поддръжка на Unicode. Редакторът има...

Driver Reviverе приложение, което ще сканира вашата система за остарели драйвери и ще предложи да ги актуализира. Сканирането се извършва на една от най-големите бази данни с драйвери, което гарантира....


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


Bandizipе бърза и надеждна програма, която поддържа WinZip, 7-Zip и WinRAR и други подобни архивни формати. Той използва много бърз алгоритъм за компресия и декомпресия....

Операе нов браузър Chromium от Opera Software. Opera изостави класическия си браузър и сега разработва нов браузър, базиран на проекта на Google Chromium...

Описание: Програма за управление на PDF документи, която предоставя колекция от инструменти и помощни програми за модифициране и оптимизиране на PDF файлове и тяхното съдържание. Благодарение на...


Snappy Driver Installer (SDI) е преносим софтуер за инсталиране и актуализиране на драйвери, който не изисква интернет връзка. Това е преработка на оригиналната програма SDIO от Глен Делахой.

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