40

Niedawno zacząłem się uczyć, jak działa procesor i system operacyjny i jestem nieco zdezorientowany, jeśli chodzi o działanie maszyny z jednym procesorem i systemem operacyjnym, który zapewnia wielozadaniowość.W jaki sposób program szeregujący OS odzyskuje kontrolę nad procesorem?

Jako takie, zakładając, że moja maszyna ma jeden procesor, oznaczałoby to, że w danym momencie może być uruchomiony tylko jeden proces.

Teraz mogę tylko założyć, że harmonogram używany przez system operacyjny do kontrolowania dostępu do cennego czasu procesora jest również procesem.

W ten sposób proces użytkownika lub proces systemu planowania są uruchomione w dowolnym momencie, ale nie w obu.

Więc oto pytanie:

Gdy scheduler oddaje kontrolę nad CPU do innego procesu, jak można go odzyskać czasu procesora, aby uruchomić się ponownie, aby zrobić swoją pracę planowania? Chodzi mi o to, że jeśli jakiś aktualnie uruchomiony proces nie zwalnia (daje) procesora, to jak sam planista może kiedykolwiek działać ponownie i zapewnić poprawne wykonywanie wielozadaniowości?

Do tej pory myślałem, cóż, jeśli proces użytkownika żąda operacji we/wy za pośrednictwem wywołania systemowego, to w wywołaniu systemowym możemy zapewnić, że programowi przydzielono ponownie trochę czasu procesora. Ale nie jestem nawet pewien, czy to działa w ten sposób.

Z drugiej strony, jeśli rozpatrywany proces użytkownika byłby z natury związany z procesorem, z tego punktu widzenia mógłby działać wiecznie, nigdy nie pozwalając innym procesom, nawet harmonogramowi, uruchamiać się ponownie.

Przypuszczam, że planowanie czasu, w plasterkach, nie mam pojęcia, w jaki sposób harmonogram może pokroić czas na wykonanie innego procesu, gdy nawet nie działa?

Byłbym wdzięczny za wszelkie opinie i referencje, które możesz podać w tym zakresie.

+3

I żałuję, że nie mogłem wystarczająco uporać się z tym pytaniem. Zacząłem uczyć się tych samych pojęć jak ty i stawiałem czoła tym samym pytaniom. Te rzeczy powinny być zgodne z podstawami projektowania procesorów i osnów w naszych książkach i artykułach. Dziękujemy za opublikowanie tego! –

Odpowiedz

36

System operacyjny ustawia czasomierz sprzętowy (Programmable interval timer lub PIT), który generuje przerwanie co N milisekund. To przerwanie jest dostarczane do jądra, a kod użytkownika jest przerywany.

Działa jak każde inne przerwanie sprzętowe. Na przykład twój dysk wymusi przełączenie na jądro po zakończeniu operacji we/wy.

+8

To jest odpowiednia odpowiedź. Ale na przykład, podczas programowania systemu Windows 98 w starszych systemach programiści musieli jawnie wywoływać komendę 'yield()'. W przeciwnym razie żaden inny proces nie mógłby odzyskać kontroli nad procesorem, co ostatecznie doprowadziłoby do awarii systemu. – MatijaSh

+0

Gdybyś najpierw wspomniał o najważniejszych przerwań IO, dodałbym jeszcze jeden punkt. –

+3

@MatijaSh Windows 98 z pewnością tego nie wymagał. – jalf

4

celu uzupełnienia odpowiedź @ usr jest, cytując z Understanding the Linux Kernel:

Harmonogram() Funkcja

terminarza() realizuje program planujący. Jego celem jest znalezienie procesu na liście runqueue, a następnie przypisanie do niego procesora. Jest to wywoływane, bezpośrednio lub w leniwy sposób, przez kilka rutyn jądra. [...]

Lazy inwokacja

Harmonogram może być również wywołana w leniwe sposób ustawiając need_resched pole prądu [procesu] 1.Ponieważ sprawdzanie wartości tego pola jest zawsze wykonywane przed wznowieniem wykonywania procesu trybu użytkownika ( ) (patrz sekcja "Powrót z przerw i wyjątków" w Rozdział 4), harmonogram() z pewnością zostanie wywołany przy zamknięciu czas przyszły.

+1

+1 Dla najlepszego odniesienia. Właśnie znalazłem wyjaśnienie, które podał [usr] (http://stackoverflow.com/users/122718/usr) w innej odpowiedzi, w cytowanej książce: "Oczywiście pojedynczy procesor może uruchomić tylko jeden proces w dowolnej chwili [..] Podział czasu opiera się na przerwaniach timera i jest w ten sposób niewidoczny dla procesu, nie ma potrzeby wprowadzania dodatkowego kodu do programów, aby zapewnić współdzielenie czasu procesora " –

8

Google "przerywa". Przerwania są w centrum wielowątkowości, prewencyjne jądra takie jak Linux/Windows. Bez przerwań system operacyjny nigdy nie zrobi niczego.

Podczas badania/uczenia się, spróbuj zignorować wszelkie wyjaśnienia, które wspominają o "przerywaniu zegarowym", "okrągłym robinkiem" i "time-slice", "quantum" w pierwszym akapicie - są niebezpiecznie mylące, jeśli nie są w rzeczywistości błędne .

Przerwania w zakresie systemu operacyjnego, dostępne są w dwóch smakach:

przerwań sprzętowych - te inicjowane przez rzeczywistego sygnału sprzęt z urządzeniem peryferyjnym. Mogą one wystąpić w (prawie) dowolnym momencie i przełączać wykonywanie z dowolnego wątku, który może być uruchomiony w celu kodowania w sterowniku.

Przerwania w oprogramowaniu - inicjowane przez wywołania systemu operacyjnego z aktualnie uruchomionych wątków.

Każde przerwanie może zażądać od programu planującego tworzenia wątków, które czekają na gotowe lub uruchomione lub spowodować, że wątki oczekujące/uruchomione zostaną wyprzedzone.

NAJWAŻNIEJSZE ZMNIEJSZENIA SĄ ODCHYŁAMI SPRZĘTU OD PERYFERYJNYCH, - tych, które przygotowują wątki gotowe, które czekały na IO z dysków, kart NIC, myszy, klawiatury, USB itp. Nadrzędny powód używania prewencyjnych ziaren, oraz wszystkie problemy związane z blokowaniem, synchronizacją, sygnalizacją itp. są takie, że takie systemy mają BARDZO DOBRE WYNIKI IO, PONIEWAŻ SPRZĘT PERYFERYJNY MOŻE SZYBKO URUCHOMIĆ GWINTY, GDY OTRZYMUJĄ DANE Z TEGO SPRZĘTU, BEZ ŻADNYCH LATENCJI WYNIKAJĄCYCH Z GWINTÓW, KTÓRE NIE WYKONUJĄ OCZEKUJEMY NA OSIĄGNIĘCIE OKRESU CZASOWEGO.

Przerwanie licznika czasu sprzętowego, które powoduje okresowe wykonywanie harmonogramów, jest ważne, ponieważ wiele wywołań systemowych ma limity czasu w przypadku, powiedzmy, odpowiedź z urządzenia peryferyjnego trwa dłużej niż powinna.

W systemach wielordzeniowych system operacyjny ma sterownik międzyprocesorowy, który może powodować przerwanie sprzętowe innych rdzeni, co pozwala systemowi przerwać/zaplanować/wysłać wątki na wiele rdzeni.

W przypadku poważnie przeciążonych skrzynek lub aplikacji wymagających dużej mocy obliczeniowej (niewielka mniejszość), system operacyjny może korzystać z przerwań okresowego zegara, a więc i wynikających z niego harmonogramów, do przełączania się między zestawami gotowych wątków, które są większe niż liczba dostępnych rdzeni, dzięki czemu każdy może udostępniać dostępne zasoby procesora. W większości systemów dzieje się to rzadko i ma niewielkie znaczenie.

Przepraszam krzycząc, ale za każdym razem widzę „quantum”, „zrezygnować z pozostałej części swojego czasu plaster”, „round-robin” i podobne, tylko lizać ..

Powiązane problemy