Які взаємозв'язки між процесами, потоками ядра, легкими процесами та потоками користувачів у Unix? [зачинено]


12

У Unix Internal від Vahalia є фігури, що показують зв'язки між процесами, нитками ядра, легкими процесами та потоками користувачів. Ця книга приділяє найбільшу увагу SVR4.2, а також детально досліджує 4.4BSD, Solaris 2.x, Mach та Digital UNIX. Зауважте, що я не запитую про Linux.

  1. Чи завжди для кожного процесу є один або кілька легких процесів, що лежать в основі процесу? Малюнок 3.4 здається так.

    Чому на рисунку 3.5 (а) відображаються процеси безпосередньо поверх центральних процесорів, без легких процесів між ними?

  2. Чи завжди для кожного легкого процесу лежить рівно одна нитка ядра, що лежить в основі легкого процесу? Малюнок 3.4 здається так.

    Чому на рисунку 3.5 (b) відображаються легкі процеси безпосередньо поверх процесів, без жодної нитки ядра між ними?

  3. Чи можуть бути заплановані потоки ядра?

  4. Чи заплановані легкі процеси лише опосередковано шляхом планування базових потоків ядра?

  5. Плануються процеси лише опосередковано шляхом планування основних легких процесів?

Малюнок 3-4.  Легкі процеси

Малюнок 3-5.  Реалізація потоку користувача


Оновлення:

Я задав подібне запитання для Linux Чи легкий процес додається до потоку ядра в Linux? Я здогадувався, що це може бути тому, що книга "Концепції операційної системи" представляє поняття неявно за допомогою Unix, і Unix та Linux можуть відрізнятися, тому я читав про ядро ​​Unix.

Я вдячний за поточну відповідь, але сподіваюся знову відкрити публікацію, щоб я міг прийняти інші відповіді.


Чому таке питання буде позначене як занадто дошка. Це насправді гарне запитання про концепцію Linux. Документи зазвичай недостатньо деталізовані, пояснення будуть чудовою відповіддю
炸鱼 薯条 德里克

Повторний модератор: Важлива не чиста кількість запитань, а природа. Я запитую відносини між кількома тісно пов'язаними та заплутаними поняттями. Я думаю, що люди, не розуміючи це, можуть подумати, що важливий перелік питань.
Тім

Відповіді:


12

Див .: Розуміння ядра Linux , 3-е видання Даніеля П. Бовет, Марко Чесаті

  • Видавець: О'Рейлі
  • Дата публікації: листопад 2005 року
  • ISBN: 0-596-00565-2
  • Сторінки: 942

У своєму вступі Даніель П. Бовет та Марко Чезаті сказали:

Технічно кажучи, Linux - це справжнє ядро ​​Unix, хоча воно не є повноцінною операційною системою Unix, оскільки воно не включає всі додатки, такі як утиліти файлової системи, системи вікон та графічні настільні комп’ютери, команди системного адміністратора, текстові редактори, компілятори тощо на. Отже, те, що ви читаєте в цій книзі та бачите в ядрі Linux, може допомогти вам зрозуміти й інші варіанти Unix.

У наступних параграфах я спробую розглянути ваші точки зору, виходячи з мого розуміння, до фактів, викладених у "Розуміння ядра Linux", що значною мірою схожі на ті, що в Unix.

Що означає процес? :

Процеси схожі на людей, вони породжуються, вони мають більш-менш істотне життя, вони необов'язково породжують один або кілька дочірніх процесів, і зрештою вони гинуть. Процес має п'ять основних частин: код ("текст"), дані (VM), стек, введення / виведення файлів і таблиці сигналів

Мета процесу в ядрі - діяти як сутність, якій виділяються системні ресурси (час процесора, пам'ять тощо). Коли процес створюється, він майже ідентичний своєму батьківському. Він отримує (логічну) копію адресного простору батьків та виконує той самий код, що і батьківський, починаючи з наступної інструкції після виклику системи створення процесу. Хоча батько та дитина можуть спільно використовувати сторінки, що містять програмний код (текст), вони мають окремі копії даних (стек та купа), так що зміни дитини на місце пам'яті не бачать батьків (і навпаки) .

Як працюють процеси?

Програмі, що виконує, потрібно більше, ніж просто двійковий код, який повідомляє комп'ютеру, що робити. Для запуску програми потрібна пам'ять та різні ресурси операційної системи. "Процес" - це те, що ми називаємо програмою, завантаженою в пам'ять разом з усіма ресурсами, необхідними для роботи. Потік - це одиниця виконання в процесі. Процес може мати від одного потоку до багатьох потоків. Коли процес починається, йому присвоюється пам'ять та ресурси. Кожна нитка процесу поділяє цю пам'ять та ресурси. У однопотокових процесах процес містить одну нитку. Процес і нитка - одне і те саме, і відбувається лише одне. У багатопотокових процесах процес містить більше одного потоку, і процес виконує одночасно декілька речей.

Механіка багатопроцесорної системи включає легкі та важкі процеси:

У важкій вазі багато паралельних процесів працюють разом паралельно. Кожен процес у важкій вазі паралельно має власний адресний простір пам'яті. Міжпроцесовий зв’язок повільний, оскільки процеси мають різні адреси пам'яті. Контекстна комутація між процесами дорожча. Процеси не діляться пам'яттю з іншими процесами. Комунікація між цими процесами передбачає додаткові механізми зв'язку, такі як розетки або труби.

У легкому процесі, який також називають нитками. Нитки використовуються для обміну та розподілу навантаження. Нитки використовують пам’ять про процес, до якого вони належать. Комунікація між потоками може бути швидшою, ніж міжпроцесорна комунікація, оскільки потоки одного процесу обмінюються пам'яттю з процесом, до якого вони належать. в результаті зв’язок між потоками дуже простий та ефективний. Контекстна комутація між потоками одного процесу є менш дорогою. Нитки діляться пам’яттю з іншими потоками того ж процесу

Існує два типи потоків: потоки на рівні користувача та потоки на рівні ядра. Нитки на рівні користувача уникають ядра та керують роботою самостійно. Нитки на рівні користувача мають проблему з тим, що один потік може монополізувати часовий фрагмент, таким чином голодуючи за іншими потоками в рамках завдання. Нитки на рівні користувача зазвичай підтримуються над ядром в просторі користувача і управляються без підтримки ядра. Ядро нічого не знає про потоки на рівні користувача та керує ними так, ніби вони були однопотоковими процесами. Таким чином, потоки на рівні користувача дуже швидкі, він працює на 100 разів швидше, ніж потоки ядра.

Нитки рівня ядра часто реалізуються в ядрі за допомогою декількох завдань. У цьому випадку ядро ​​планує кожен потік у часовому відрізку кожного процесу. Тут, оскільки галочка годинника визначатиме час перемикання, завдання є меншою ймовірністю приєднати часовий фрагмент з інших потоків у межах завдання. Нитки рівня ядра підтримуються та керуються безпосередньо операційною системою. Зв'язок між потоками рівня користувача та потоками рівня ядра не є повністю незалежним, адже між цими двома рівнями існує взаємодія. Загалом, потоки на рівні користувача можуть бути реалізовані за допомогою однієї з чотирьох моделей: багато-на-одну, один-на-один, багато-на-багато і дворівневі моделі. Усі ці моделі відображають потоки рівня користувача на потоки рівня ядра та викликають взаємодію в різних ступенях між обома рівнями.

введіть тут опис зображення

Нитки проти процесів

  1. Програма починається як текстовий файл коду програмування,
  2. Програма складається або інтерпретується у двійкову форму,
  3. Програма завантажується в пам'ять,
  4. Програма стає одним або декількома запущеними процесами.
  5. Процеси, як правило, не залежать один від одного,
  6. Хоча нитки існують як підмножина процесу.
  7. Нитки можуть спілкуватися між собою легше, ніж процеси,
  8. Але нитки вразливіші до проблем, викликаних іншими потоками в тому ж процесі

Список літератури:

Розуміння ядра Linux, 3-е видання

Більше 1 2 3 4 5

...............................................

Тепер давайте спростимо всі ці терміни ( цей параграф - з моєї точки зору ). Kernel - це інтерфейс між програмним та апаратним забезпеченням. Іншими словами, ядро ​​діє як мозок. Він маніпулює взаємозв'язком між генетичним матеріалом (тобто кодами та програмним забезпеченням його похідних) та системами тіла (тобто апаратними засобами або м'язами).

Цей мозок (тобто ядро) передає сигнали процесам, які діють відповідно. Деякі з цих процесів схожі на м'язи (тобто нитки), кожен м'яз має свою функцію та завдання, але всі вони працюють разом, щоб закінчити навантаження. Зв'язок між цими нитками (тобто м'язами) дуже ефективний та простий, тому вони досягають своєї роботи плавно, швидко та ефективно. Деякі нитки (тобто м'язи) знаходяться під контролем користувача (як м'язи в наших руках і ногах). Інші знаходяться під контролем мозку (як м'язи нашого шлунка, ока, серця, якими ми не керуємо).

Нитки в просторі користувача уникають ядра та керують самими завданнями. Часто це називається "кооперативним багатозадачністю", і насправді це як наші верхні і нижні кінцівки, він знаходиться під нашим контролем, і він працює разом для досягнення роботи (тобто вправ або ...) і не потребує прямих доручень від мозок. З іншого боку, потоки Kernel-Space повністю контролюються ядром та його планувальником.

...............................................

У відповідь на ваші запитання:

  1. Чи завжди процес реалізується на основі одного або декількох легких процесів? Малюнок 3.4 здається так. Чому на рисунку 3.5 (а) відображаються процеси безпосередньо поверх центральних процесорів?

    Так, є легкі процеси, які називаються нитками, і важкі.

    Важкий процес (можна назвати це процес передачі сигналу) вимагає від самого процесора зробити більше роботи, щоб замовити його виконання, ось чому на рисунку 3.5 (а) показані процеси безпосередньо поверх центральних процесорів.

  2. Чи завжди впроваджується легкий процес на основі нитки ядра? Малюнок 3.4 здається так. Чому на рисунку 3.5 (b) відображаються легкі вагові процеси безпосередньо поверх процесів?

    Ні, процеси легкої ваги поділяються на дві категорії: процеси на рівні користувача та на рівні ядра, як згадувалося вище. Процес на рівні користувача для обробки своїх завдань покладається на власну бібліотеку. Саме ядро ​​планує процес на рівні ядра. Нитки рівня користувача можуть бути реалізовані за допомогою одного з чотирьох модельованих: багато-до-одного, один-до-одного, багато-багато-багато і дворівневий. Усі ці карти відображають потоки на рівні користувача на потоки рівня ядра.

  3. Чи можуть бути заплановані потоки ядра?

    Ні, потоки на рівні ядра створюються самим ядром. Вони відрізняються від потоків рівня користувача тим, що потоки рівня ядра не мають обмеженого адресного простору. Вони живуть виключно в просторі ядра, ніколи не переходячи на царину земля користувача. Однак вони є повністю запланованими та прихильними об'єктами, як і звичайні процеси (зауважте: можна відключити майже всі переривання для важливих дій з ядром). Призначення власних потоків ядра полягає головним чином у виконанні обов'язків з обслуговування системи. Тільки ядро ​​може запускати або зупиняти потік ядра. З іншого боку, процес на рівні користувача може планувати сам, заснований на його власній бібліотеці, і в той же час його може планувати ядро ​​на основі дворівневої та багато-багато-багато моделей (згаданих вище),

  4. Чи заплановані процеси легкої ваги лише опосередковано шляхом планування базових потоків ядра?

    Нитками ядра керує сам планувальник ядра. Підтримка потоків на рівні користувача означає, що існує бібліотека рівня користувача, яка пов'язана з додатком, і ця бібліотека (а не процесор) забезпечує все управління в потоці підтримки для потоків. Він буде підтримувати структури даних, необхідні для реалізації абстрагування потоків, та забезпечувати всі синхронізації планування та інші механізми, необхідні для прийняття рішення щодо управління ресурсами для цих потоків. Тепер деякі процеси потоків на рівні користувача можуть бути перенесені в основні потоки рівня ядра, і це включає відображення "один на один", "один на багато" та "багато на багато".

  5. Плануються процеси лише опосередковано шляхом планування основних легких процесів?

    Це залежить від того, чи це важкий або легкий процес. Важкі - це процеси, заплановані самим ядром. легким процесом можна керувати на рівні ядра та на рівні користувача.


Дякую. (1) unix.stackexchange.com/questions/472354/… (2) Я спеціально запитав про Unix замість LInux, хоча ціную вашу відповідь, особливо дуже корисну для Linux, і сподіваюся, що ви можете залишити її такою, якою вона є.
Тім

1
"Призначення власних потоків ядра полягає в основному у виконанні обов'язків по технічному обслуговуванню системи" - ви можете розробити або надати посилання, Goro
iruvar

@iruva Я вважаю, що "обов'язки з обслуговування" не є точним терміном, наприклад, управління енергією контролюється потоками ядра і не має нічого спільного з обов'язками з обслуговування. Насправді, посилання, надані разом із цим повідомленням, мають багату інформацію про потоки ядра. Якщо ви хочете, щоб я детально розробив, будь ласка, опублікуйте нове запитання щодо ниток ядра та їх функцій / типів / як вони створюються ... тощо, і я рада пояснити. Ця відповідь досить довга і не може прийняти додаткову інформацію!

@Tim: Про яку версію Unix ви питали? Зокрема стародавні системи, про які ви згадали, як обговорювалося в книзі? Чи включені сучасні BSD? Чи включений Solaris 11? Чи включений MacOS X Leopard (сертифікований UNIX)?
користувач1686

@grawity Я запитав про книгу, так що б вона не використовувала. Якщо ви знаєте інші версії, це також добре знати.
Тім
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.