Jaki jest związek między wywołaniami systemowymi, przekazywaniem wiadomości i przerwaniami?


14

Czytam artykuł z Wikipedii dotyczący zarządzania procesami . Skupiam się na Linuksie. Nie mogę zrozumieć związku i różnic między wywołaniem systemowym, przekazywaniem i przerywaniem wiadomości w ich pojęciach i celach. Czy wszystkie służą do wysyłania zapytań do jądra o zasoby i usługi?

Niektóre cytaty z artykułu i inne:

  1. Istnieją dwa możliwe sposoby odzyskania kontroli nad procesorem przez system operacyjny podczas wykonywania programu, aby system operacyjny mógł dokonać alokacji lub alokacji:

    1. Proces generuje wywołanie systemowe (czasami nazywane przerwaniem oprogramowania); na przykład pojawia się żądanie we / wy z żądaniem dostępu do pliku na dysku twardym.
    2. Wystąpiło przerwanie sprzętowe; na przykład naciśnięto klawisz na klawiaturze lub skończył się czas (używany w wyprzedzającym wielozadaniowości).
  2. Istnieją dwie techniki, za pomocą których program działający w trybie użytkownika może zażądać usług jądra:

    * System call
    * Message passing
    
  3. przerwanie to sygnał asynchroniczny wskazujący na potrzebę uwagi lub synchroniczne zdarzenie w oprogramowaniu wskazujące na potrzebę zmiany wykonania.

    Przerwanie sprzętowe powoduje, że procesor zapisuje swój stan wykonania i rozpoczyna wykonywanie procedury obsługi przerwania. Przerwania programowe są zwykle implementowane jako instrukcje w zestawie instrukcji, co powoduje przełączenie kontekstu na procedurę obsługi przerwań podobną do przerwania sprzętowego.


2
Bardzo dobre pytanie!
Stéphane Gimenez

Odpowiedzi:


12
  1. Wszystkie nowoczesne systemy operacyjne obsługują wielozadaniowość. Oznacza to, że system może wykonywać wiele procesów jednocześnie; albo w pseudo-równoległych (gdy dostępny jest tylko jeden procesor) lub obecnie, gdy procesory wielordzeniowe są wspólne równolegle (jedno zadanie / rdzeń).

    Weźmy prostszy przypadek, w którym dostępny jest tylko jeden procesor. Oznacza to, że jeśli wykonasz jednocześnie dwa różne procesy (powiedzmy przeglądarkę internetową i odtwarzacz muzyki), system nie jest w stanie wykonać ich jednocześnie. Co się dzieje, procesor cały czas przechodzi z jednego procesu do drugiego; ale dzieje się to niezwykle szybko, dlatego nigdy tego nie zauważasz.

    Załóżmy teraz, że podczas wykonywania tych dwóch procesów naciskasz przycisk resetowania (zły chłopiec). Procesor natychmiast zatrzyma to, co robi i uruchomi ponownie system. Gratulacje: wygenerowałeś przerwanie.

    Sprawa jest podobna, gdy programujesz i chcesz poprosić o usługę od CPU. Różnica polega na tym, że w tym przypadku wykonuje się kod oprogramowania - zwykle procedury biblioteczne wykonujące wywołania systemowe (na przykład w fopencelu otwarcia pliku).

    Tak więc 1 opisuje dwa różne sposoby zwracania uwagi na procesor.

  2. Większość współczesnych systemów operacyjnych obsługuje dwa tryby wykonywania: tryb użytkownika i tryb jądra. Domyślnie system operacyjny działa w trybie użytkownika. Tryb użytkownika jest bardzo ograniczony. Na przykład wszystkie wejścia / wyjścia są zabronione; w związku z tym nie można otwierać pliku z dysku twardego. Oczywiście tak się nigdy nie dzieje, ponieważ po otwarciu pliku system operacyjny przełącza się z trybu użytkownika na tryb jądra w sposób przezroczysty. W trybie jądra masz całkowitą kontrolę nad sprzętem.

    Jeśli zastanawiasz się, dlaczego istnieją te dwa tryby, najprostszą odpowiedzią jest ochrona. Systemy operacyjne oparte na mikrojądrze (na przykład MINIX 3) mają większość swoich usług działających w trybie użytkownika, co czyni je mniej szkodliwymi. Jądra monolityczne (jak Linux) mają prawie wszystkie swoje usługi działające w trybie jądra. Tak więc sterownik, który ulega awarii w MINIX 3, raczej nie spowoduje awarii całego systemu, podczas gdy nie jest to rzadkie w Linuksie.

    Wywołania systemowe są prymitywnym narzędziem wykorzystywanym w jądrach monolitycznych (wspólny model danych) do przełączania z trybu użytkownika na tryb jądra. Przekazywanie wiadomości jest prymitywem stosowanym w mikrojądrach (model klient / serwer). Mówiąc ściślej, w przekazywanym komunikacie programiści systemu również używają wywołań systemowych, aby zwrócić uwagę procesora. Przekazywanie wiadomości jest widoczne tylko dla twórców systemów operacyjnych. Jądra monolityczne używające wywołań systemowych są szybsze, ale mniej niezawodne, podczas gdy mikrojądra wykorzystujące przekazywanie komunikatów są wolniejsze, ale mają lepszą izolację błędów.

    Zatem 2 wymienia dwa różne sposoby przełączania z trybu użytkownika na tryb jądra.

  3. Aby dokonać przeglądu, najczęstszym sposobem tworzenia przerwania programowego, zwanego również pułapką, jest wykonanie wywołania systemowego. Z drugiej strony przerwy są generowane wyłącznie przez sprzęt.

    Kiedy przerywamy procesor (programowo lub sprzętowo), musi on gdzieś zapisać swój obecny stan - proces, który wykonuje i w którym momencie zatrzymał się - w przeciwnym razie nie będzie mógł wznowić procesu po przełączeniu z powrotem . Nazywa się to przełączaniem kontekstu i ma sens: zanim wyłączysz komputer, aby zrobić coś innego, musisz najpierw upewnić się, że zapisałeś wszystkie programy / dokumenty itp., Aby móc wznowić od momentu zatrzymania następnym razem go włączysz :)

    Zatem 3 wyjaśnia, co należy zrobić po wykonaniu pułapki lub przerwania i jak podobne są te dwa przypadki.


1
Dzięki! (1) Czy w 1 chodzi o dwa sposoby na zwrócenie uwagi na procesory: przerwanie programowe (program z przykładem wywołania systemowego) i przerwanie sprzętowe (przykład klucza resetowania)? (2) Czy w 2 masz na myśli, że wywołania systemowe i przekazywanie wiadomości to dwa sposoby przerwania oprogramowania? (3) Czy to prawda, że ​​celem przerwania oprogramowania jest proces żądania usług i zasobów jądra, a celem przerwania sprzętowego nie jest ? Jeśli tak, jaki jest cel przerwania sprzętowego?
Tim

1
(1) Prawidłowo. (2) Cóż, wywołania systemowe i przekazywanie wiadomości to dwie różne techniki, których można użyć do osiągnięcia komunikacji międzyprocesowej. Ale prawdą jest, że oba są oparte na oprogramowaniu, dlatego aby zwrócić uwagę procesora, wykonujesz pułapkę (przerwanie oprogramowania). (3) W pewnym sensie tak. Przykładem zapytania o usługę jądra jest wykonanie procedury bibliotecznej (która zostanie przetłumaczona na 1 lub więcej wywołań systemowych), na przykład w creatcelu utworzenia nowego pliku. Przykładem przerwania jest drukarka wysyłająca do procesora sygnał informujący o zakończeniu drukowania.
sakisk

1
Dzięki! Jeśli chodzi o (3), czy masz na myśli w pewnym sensie nie? Jakie są ogólne cele przerwania sprzętowego i przerwania oprogramowania?
Tim

1
Resetowanie systemu nie jest przerwaniem; nie zapisuje stanu do wznowienia po.
psusi

1
Reset @faif i NMI (Non Maskable Interrupt) to dwa różne piny procesora. To ostatnie powoduje przerwanie, co oznacza zapisanie stanu i przejście do modułu obsługi. Pierwszy z nich inicjuje procesor (celowo odrzucając wszystkie stany), tak jak robi to przy włączaniu zasilania (reset jest automatycznie potwierdzany przy włączaniu). Ponieważ część definicji przerwania polega na tym, że zapisuje on stan, reset nie spełnia tej definicji.
psusi

9

Wywołania systemowe, przekazywanie komunikatów (jak opisano w artykule z Wikipedii) i przerwania to wszystko, co powoduje przełączenie kontekstu lub przejście z trybu użytkownika na tryb jądra. Jak zapewne wiesz:

  • tryb jądra: programy mają płaski lub rzeczywisty widok pamięci, a programy mogą swobodnie odczytywać / zapisywać bezpośrednio do całej pamięci i wszystkich urządzeń bez ograniczeń.

  • tryb użytkownika: programy mają zwirtualizowany widok pamięci, programy nie mogą odczytywać / zapisywać swobodnie do całej pamięci i nie mogą bezpośrednio odczytywać / zapisywać urządzeń. Aby uzyskać więcej pamięci lub uzyskać dostęp do urządzeń, program trybu użytkownika musi wywołać jądro. Wywoływanie systemowe i przekazywanie wiadomości to dwie metody.

Wywołania systemowe obejmują wykonanie określonej instrukcji procesora lub zestawu instrukcji, co powoduje, że procesor przeskakuje (pierwszy zapisujący adres zwrotny na stosie) na wcześniej zdefiniowany adres (nie można zapisać w trybie użytkownika) i przenosi procesor z trybu użytkownika do trybu jądra (pierścień 3, aby zadzwonić na 0 w architekturze Intel).

Przerwania sprzętowe robią dokładnie to samo, powodują, że procesor przeskakuje (pierwszy zapisujący adres zwrotny na stosie) na wcześniej zdefiniowany adres i przenosi procesor z trybu użytkownika do trybu jądra. Tak więc w wielu procesorach ten sam mechanizm może być wywoływany przez oprogramowanie (zwane „przerwaniem programowym”) i może być używany do wywoływania procesora.

Przekazywanie wiadomości sugeruje (przynajmniej dla mnie), że jądro jest „działającym procesem”, który odbierze strumień wiadomości i że istnieje funkcja dostępna w trybie użytkownika, która wysyła takie wiadomości. Może też być tak, że funkcja „send” po prostu przesuwa wartości na stosie i następnym razem, gdy jądro ma kontrolę (albo jeśli proces się blokuje, albo pojawia się przerwanie), wyrzuca wiadomości ze stosu i odpowiednio wysyła je do wewnętrznych procedur.

W architekturze mikrojądra, w której rzeczywiste „jądro” jest bardzo minimalne, a większość funkcji, które zapewnia jądro, jest przenoszona do procesów „serwerowych”, z których wszystkie mogą działać jednocześnie w systemie wieloprocesorowym, coś takiego może być bardziej użyteczne niż zwykłe stare podejście do wywoływania systemu. Interpretowanie i kierowanie „komunikatów” do odpowiedniego „serwera” jądra byłoby jednym z niewielu zadań mikrojądra.


3
Tryb jądra używa tych samych tabel stron i przedstawia ten sam widok pamięci wirtualnej co tryb użytkownika. Różnica polega na tym, że ma dostęp do stron oznaczonych jako ograniczone do trybu jądra.
psusi

5

Przekazywanie wiadomości to koncepcja wyższego poziomu, w której jeden proces wysyła wiadomość do innego. Jest on implementowany przez wywołanie systemowe (jądro), proszące jądro o przekazanie komunikatu do innego procesu. Wywołania systemowe proszą jądro o wykonanie różnych usług dla procesu. Są one implementowane przez przerwanie programowe / pułapkę systemową, co powoduje, że procesor zapisuje pewien stan na stosie, aby mógł wrócić później, a następnie przełączyć się do trybu jądra i przejść do modułu obsługi jądra.

Przerwania sprzętowe i programowe powodują, że procesor zapisuje stan, przełącza się w tryb jądra i przeskakuje do zdefiniowanej procedury obsługi tego przerwania. Różnica polega na tym, że przerwania sprzętowe są generowane przez sprzęt zewnętrzny, gdy wymagają one uwagi, na przykład klawiatury wskazującej naciśnięcie klawisza. Program obsługi klawiatury może następnie przeczytać port IO klawiatury, aby zobaczyć, który klawisz został naciśnięty, i podjąć odpowiednie działania, a następnie powrócić do przerwanego programu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.