GNU/Linux >> Znalost Linux >  >> Linux

Jak si Linux zachovává kontrolu nad CPU na jednojádrovém stroji?

Jádro získává kontrolu poměrně často při běžných operacích:kdykoli proces zavolá systémové volání a kdykoli dojde k přerušení. K přerušení dochází, když hardware vyžaduje pozornost CPU nebo když CPU vyžaduje pozornost jádra, a jeden konkrétní kus hardwaru lze naprogramovat tak, aby pravidelně vyžadoval pozornost (časovač). Jádro tedy může zajistit, že pokud se systém nezablokuje tak silně, že již nebudou generována přerušení, bude periodicky voláno.

V důsledku toho

pokud tento proces provádí extrémně dlouhý výpočet bez výnosu

není problém:Linux je preemptivní multitaskingový operační systém, tj. multitasking bez nutnosti spolupráce spuštěných programů.

Pokud jde o procesy zabíjení, stejně je do toho zapojeno jádro. Pokud chce proces zabít jiný proces, musí zavolat jádro, aby tak učinilo, takže jádro má kontrolu. Pokud se jádro rozhodne zabít proces (např. OOM zabiják, nebo protože se proces pokusil udělat něco, co nemá povoleno, jako je přístup k nemapované paměti), je také pod kontrolou.

Všimněte si, že jádro lze nakonfigurovat tak, aby ne ovládat podmnožinu systémových CPU samotných (pomocí zastaralého isolcpus parametr jádra), nebo neplánovat úlohy na určitých CPU samotných (pomocí cpusets bez vyvažování zátěže, které jsou plně integrovány v cgroup v1 a cgroup v2); ale alespoň jeden CPU v systému musí být vždy plně spravován jádrem. Může být také nakonfigurován tak, aby se snížil počet generovaných přerušení časovače v závislosti na tom, k čemu se daný CPU používá.

Také není příliš velký rozdíl mezi systémy s jedním CPU (jednojádrovým atd.) a systémy s více CPU, stejné obavy se týkají obou, pokud jde o řízení jádra:každý CPU musí pravidelně volat do jádra, pokud ano. k použití pro multitasking pod kontrolou jádra.


Linux a většina moderních operačních systémů používají preemptivní multitasking, což znamená, že jádro má úplnou kontrolu nad dobou, po kterou může každý proces běžet, a pokud proces běží příliš dlouho, bude proces předcházet, na rozdíl od kooperativního multitaskingu, kde proces předá řízení, kdykoli se mu zlíbí P>

V zásadě v preemptivním multitaskingu bude jádro pravidelně spouštěno z časovače, a kdykoli je jádro pod kontrolou (když dojde k přerušení časovače nebo je vyvoláno systémové volání), jádro uloží kontext aktuálního procesu a poté přepne na další proces. ' kontextu. Tomu se říká kontextový přepínač, kde se celý stav procesu včetně všech informací o vláknech, hodnot registrů... uloží a obnoví, aby proces pokračoval v běhu přesně od bodu, ve kterém byl preemptován, aniž bychom věděli, že neběží nepřetržitě. Proto se objeví spousta procesů běžet současně v jednom jádru CPU, i když ve skutečnosti je v každém okamžiku spuštěn pouze 1 proces. Jádro je také jen speciální proces, který provádí všechny procesy a prostředky. Nespouští se ze samostatného jádra jen kvůli sledování jiných procesů

Viz také Co to znamená říct „linuxové jádro je preemptivní“?


Linux
  1. Linux – Jak se Oom Killer rozhodne, který proces zabije jako první?

  2. Jak vypočítat využití CPU procesu pomocí PID v Linuxu z C?

  3. Jak interně funguje copy_from_user z jádra Linuxu?

  1. Jaký je aktuální zdrojový kód jádra Linuxu?

  2. Jak jádro připojí kořenový oddíl?

  3. Jak CPU ví, která fyzická adresa je mapována na kterou virtuální adresu?

  1. Jak omezit využití CPU procesu v Linuxu

  2. Linux – Jak linuxové jádro zná hlavní a vedlejší čísla zařízení?

  3. Linux – Jak lze zkontrolovat informace o struktuře adresářů souboru Unix/linux?