2013-03-24 22 views
17

Po przeczytaniu this pytanie SO mam kilka wątpliwości. Proszę pomóż w zrozumieniu.Czy Linux planuje proces lub wątek?

Planowanie polega na decydowaniu, kiedy należy uruchomić proces i na jaką kwantość czasu.

  1. Czy jądro Linuxa planuje wątek lub proces? Jako że proces i wątek nie są różnicowane w jądrze, w jaki sposób program planujący je traktuje?

  2. W jaki sposób określa się kwant dla każdej nici? a. Jeśli kwant czasu (powiedzmy 100us) jest zdecydowany na proces, to czy jest on dzielony między wszystkie wątki procesu? lub b. Kwantum dla każdego wątku decyduje harmonogram?

Uwaga: Pytania 1 i 2 są powiązane i mogą wyglądać tak samo, ale chciały być jasne, jak działają, i opublikować je tutaj.

Odpowiedz

24

Harmonogram Linux (na ostatnich jądrach systemu Linux, na przykład co najmniej 3,0) jest szeregowanie zadańszeregowaniu zadań lub po prostu zadania.

Zadanie mogą być:

  • jednowątkowa procesu (na przykład utworzone przez fork bez biblioteki nici)
  • każdy gwint wewnętrzny wielowątkowych procesu (w tym jego głównym wątku), w szczególności wątków POSIX (pthreads)
  • zadania jądra, które są uruchamiane wewnętrznie w jądrze i pobyt w obszarze jądra (np kworker, nfsiod, kjournald, kauditd, kswapd etc etc ...)

Inaczej mówiąc, gwinty wewnętrzne procesów wielowątkowych zaplanowano jak niegwintowany -i.e. procesy z pojedynczym gwintem.

Niski poziom clone(2) syscall tworzy użytkownik-Land szeregowaniu zadań zadania (i może być stosowany zarówno do tworzenia fork -ED procesu lub dla realizacji biblioteki wątku, jak Pthread). Jeśli nie jesteś implementatorem biblioteki wątków niskiego poziomu, nie chcesz bezpośrednio używać clone.

AFAIK, procesów wielowątkowych jądro jest (prawie) nie harmonogramu procesu, ale każda osoba gwint wewnętrzny (w tym główne nici).

Faktycznie, istnieją pewne pojęcie grup wątek i affinity w harmonogramie, ale nie znam ich dobrze

Te dni, procesory mają na ogół więcej niż jeden rdzeń, a każdy rdzeń jest uruchomiona Zadanie (w danej chwili), więc masz kilka zadań działających jednocześnie.

razy kwantowe CPU są podane do zadań, nie przetwarza

+0

Ludzie mówią Linux harmonogramów procesu podczas gdy rozkład okien wątkach. Co to oznacza? Zgodnie z tą odpowiedzią wygląda to jak zadania harmonogramów Linuksa (mogą być uważane za wątki), a Windows robi to samo. Czy może czegoś brakuje? – prasannatsm

+1

@prasannatsm: Nie wiem o Linuksie, ale Windows z pewnością tylko planuje wątki. Podczas każdej operacji harmonogramu system Windows wybiera "następny wątek" z listy wszystkich uruchomionych wątków, które mają powinowactwo procesora, a kontekst przełącza się do niego. Poza wykonywaniem przełącznika CR3 program planujący nie analizuje procesów w celu wybrania następnego wątku do uruchomienia na rdzeniu. – SecurityMatt

2

Realizacja NPTL z POSIX specyfikacji wątku widzi wątek jako inny proces wewnątrz jądra, posiadające unikalny task_struct (a więc pid też) więc każdy wątek jest szeregowaniu zadań w jak wspomniano. Dlatego każda nić ma swój własny timelice i jest zaplanowana tak jak procesy, o których mowa powyżej.

Wystarczy dodać, Obecnie program planujący Linuksa może również planować nie tylko pojedyncze zadania (prosty proces), ale także grupy procesów, a nawet użytkowników (wszystkie procesy, należące do użytkownika) jako całość. Pozwala to na realizację planowania grupowego, w którym czas procesora jest najpierw dzielony pomiędzy grupy procesów, a następnie rozprowadzany w tych grupach do pojedynczych wątków.

Wątki Linux nie działają bezpośrednio na procesach lub wątkach, ale działają z planowanymi obiektami. Reprezentowany przez struct sched_entity. Można powiedzieć, że każdy proces/wątek to sched_entity, ale rozmowa może nie być prawdą.

Aby poznać szczegółowy harmonogram procesu, patrz here

Powiązane problemy