W informatyce A wywołanie systemowe to programowy sposób, w jaki program komputerowy żąda usługi od jądra systemu operacyjnego, na którym jest wykonywany. Wywołanie systemowe to sposób, w jaki programy mogą to zrobić współdziałać z systemem operacyjnym . Program komputerowy wywołuje wywołanie systemowe, gdy wysyła żądanie do jądra systemu operacyjnego. Wywołanie systemowe zapewnia usługi systemu operacyjnego dla programów użytkownika za pośrednictwem interfejsu programu aplikacji (API). Zapewnia interfejs pomiędzy procesem a systemem operacyjnym, umożliwiając procesom na poziomie użytkownika żądanie usług systemu operacyjnego. Wywołania systemowe są jedynymi punktami wejścia do pliku jądro system. Wszystkie programy wymagające zasobów muszą korzystać z wywołań systemowych.
Program użytkownika może wchodzić w interakcję z systemem operacyjnym za pomocą wywołania systemowego. Program żąda szeregu usług, a system operacyjny odpowiada, uruchamiając szereg wywołań systemowych w celu spełnienia żądania. Wywołanie systemowe można napisać w językach wysokiego poziomu, takich jak C lub Pascal, lub w języku asemblera. Jeśli używany jest język wysokiego poziomu, system operacyjny może bezpośrednio wywoływać wywołania systemowe, które są predefiniowanymi funkcjami.
Wywołanie systemowe to mechanizm używany przez programy do żądania usług od system operacyjny (OS). Mówiąc prościej, jest to sposób interakcji programu z systemem bazowym, taki jak dostęp do zasobów sprzętowych lub wykonywanie uprzywilejowanych operacji.
Wywołanie systemowe jest inicjowane przez program wykonujący określoną instrukcję, co powoduje przejście do jądro tryb, umożliwiający programowi żądanie usługi z systemu operacyjnego. Następnie system operacyjny obsługuje żądanie, wykonuje niezbędne operacje i zwraca wynik z powrotem do programu.
Wywołania systemowe są niezbędne do prawidłowego funkcjonowania systemu operacyjnego, ponieważ zapewniają programom ustandaryzowany sposób dostępu do zasobów systemowych. Bez wywołań systemowych każdy program musiałby implementować własne metody dostępu do sprzętu i usług systemowych, co prowadziłoby do niespójnego i podatnego na błędy zachowania.
Usługi świadczone przez wywołania systemowe
- Tworzenie i zarządzanie procesami
- Zarządzanie pamięcią główną
- Zarządzanie dostępem do plików, katalogami i systemem plików
- Obsługa urządzeń (we/wy)
- Ochrona
- Sieć itp.
- Kontrola procesu: kończ, przerywaj, twórz, kończ, przydzielaj i zwalniaj pamięć.
- Zarządzanie plikami: tworzyć, otwierać, zamykać, usuwać, czytać pliki itp.
- Zarządzanie urządzeniami
- Konserwacja informacji
- Komunikacja
Funkcje wywołań systemowych
- Interfejs: Wywołania systemowe zapewniają dobrze zdefiniowany interfejs pomiędzy programami użytkownika a systemem operacyjnym. Programy wysyłają żądania, wywołując określone funkcje, a system operacyjny odpowiada, wykonując żądaną usługę i zwracając wynik.
- Ochrona: Wywołania systemowe służą do uzyskiwania dostępu do uprzywilejowanych operacji, które nie są dostępne dla zwykłych programów użytkownika. System operacyjny korzysta z tego uprawnienia, aby chronić system przed złośliwym lub nieautoryzowanym dostępem.
- Tryb jądra: Po wykonaniu wywołania systemowego program zostaje tymczasowo przełączony z trybu użytkownika do trybu jądra. W trybie jądra program ma dostęp do wszystkich zasobów systemowych, w tym sprzętu, pamięci i innych procesów.
- Przełączanie kontekstu: Wywołanie systemowe wymaga przełączenia kontekstu, co polega na zapisaniu stanu bieżącego procesu i przejściu do trybu jądra w celu wykonania żądanej usługi. Może to spowodować obciążenie, które może mieć wpływ na wydajność systemu.
- Obsługa błędów: Wywołania systemowe mogą zwracać kody błędów wskazujące problemy z żądaną usługą. Programy muszą sprawdzać te błędy i odpowiednio je obsługiwać.
- Synchronizacja: Wywołania systemowe mogą służyć do synchronizowania dostępu do współdzielonych zasobów, takich jak pliki lub połączenia sieciowe. System operacyjny zapewnia mechanizmy synchronizacji, takie jak blokady lub semafory, aby zapewnić wielu programom bezpieczny dostęp do tych zasobów.
Zalety wywołań systemowych
- Dostęp do zasobów sprzętowych: Wywołania systemowe umożliwiają programom dostęp do zasobów sprzętowych, takich jak dyski, drukarki i urządzenia sieciowe.
- Zarządzanie pamięcią: Wywołania systemowe umożliwiają programom alokację i zwalnianie pamięci, a także dostęp do urządzeń sprzętowych mapowanych na pamięć.
- Zarządzanie procesem: Wywołania systemowe umożliwiają programom tworzenie i kończenie procesów, a także zarządzanie komunikacją między procesami.
- Bezpieczeństwo: Wywołania systemowe umożliwiają programom dostęp do uprzywilejowanych zasobów, na przykład możliwość modyfikowania ustawień systemowych lub wykonywania operacji wymagających uprawnień administracyjnych.
- Normalizacja: Wywołania systemowe zapewniają ustandaryzowany interfejs interakcji programów z systemem operacyjnym, zapewniając spójność i kompatybilność na różnych platformach sprzętowych i wersjach systemów operacyjnych.
Jak działa wywołanie systemowe?
Oto szczegółowe wyjaśnienie krok po kroku działania wywołań systemowych:
- Użytkownik potrzebuje specjalnych zasobów: Czasami programy muszą wykonywać pewne specjalne czynności, których nie można wykonać bez zgody systemu operacyjnego, takie jak odczytywanie z pliku, zapisywanie do pliku, pobieranie jakichkolwiek informacji ze sprzętu lub żądanie miejsca w pamięci.
- Program wysyła żądanie wywołania systemowego: Istnieją specjalne, predefiniowane instrukcje umożliwiające wysłanie żądania do systemu operacyjnego. Instrukcje te to nic innego jak wywołanie systemowe. Program używa tych wywołań systemowych w swoim kodzie, jeśli zajdzie taka potrzeba.
- System operacyjny widzi wywołanie systemowe: Kiedy system operacyjny widzi wywołanie systemowe, rozpoznaje, że program potrzebuje w tym momencie pomocy, więc tymczasowo zatrzymuje wykonywanie programu i przekazuje całą kontrolę specjalnej części siebie zwanej „jądrem”. Teraz „Jądro” rozwiązuje potrzebę programu.
- System operacyjny wykonuje operacje: Teraz system operacyjny wykonuje operację żądaną przez program. Przykład: czytanie zawartości z pliku itp.
- System operacyjny przywraca kontrolę programowi: Po wykonaniu operacji specjalnej system operacyjny przekazuje kontrolę programowi w celu dalszego wykonywania programu.
Przykłady wywołań systemowych w Windows i Unix
Wywołania systemowe w systemach Windows i Unix mają wiele różnych form. Są one wymienione w poniższej tabeli w następujący sposób:
Proces | Okna | Uniksa |
---|---|---|
Kontrola procesu | Proces tworzenia() Zakończ proces() WaitForSingleObject() | Widelec() Wyjście() Czekać() |
Manipulacja plikami | Utwórz plik() Przeczytaj plik() Zapisz plik() | Otwarty() Czytać() Pisać() Zamknąć() |
Zarządzanie urządzeniami | Ustaw tryb konsoli() Czytaj konsolę() WriteConsole() | Ioctl() Czytać() Pisać() |
Konserwacja informacji | GetCurrentProcessID() Ustaw minutnik() Madhubala Spać() | Getpid() Alarm() Spać() |
Komunikacja | Utwórz rurę() Utwórz mapowanie pliku() MapViewOfFile() | Rura() Szmget() Mmap() |
Ochrona | UstawPlikZabezpieczenia() ZainicjujDescriptorSecurity() SetSecurityDescriptorgroup() | Chmod() zdemaskować() Chown() |
otwarty(): Dostęp do pliku w systemie plików jest możliwy za pomocą wywołania systemowego open(). Zapewnia potrzebne zasoby plikowe i uchwyt, z którego może korzystać proces. Plik może zostać otwarty przez wiele procesów jednocześnie lub tylko przez jeden proces. Wszystko opiera się na strukturze i systemie plików.
Czytać(): Za jego pomocą pobierane są dane z pliku w systemie plików. Ogólnie przyjmuje trzy argumenty:
- Opis pliku.
- Bufor do przechowywania danych odczytu.
- Ile bajtów należy odczytać z pliku
Przed odczytem plik do odczytu można zidentyfikować na podstawie jego deskryptora pliku i otworzyć za pomocą funkcji open().
Czekać(): W niektórych systemach przed kontynuowaniem może być konieczne wstrzymanie procesu do czasu zakończenia działania innego procesu. Kiedy proces nadrzędny tworzy proces potomny, wykonywanie procesu nadrzędnego jest wstrzymywane do czasu zakończenia procesu potomnego. Proces nadrzędny zostaje zatrzymany za pomocą wywołania systemowego Wait(). Proces nadrzędny odzyskuje kontrolę po zakończeniu działania procesu potomnego.
pisać(): Dane z bufora użytkownika są za jego pomocą zapisywane na urządzeniu takim jak plik. Używając tego, program może generować dane w jeden sposób wywołanie systemowe . ogólnie rzecz biorąc, istnieją trzy argumenty:
- Opis pliku.
- Odniesienie do bufora, w którym przechowywane są dane.
- Ilość danych, które zostaną zapisane z bufora w bajtach.
widelec(): Wywołanie systemowe fork() jest używane przez procesy do tworzenia własnych kopii. Jest to jedna z najczęściej stosowanych w systemach operacyjnych metod tworzenia procesów. Kiedy proces nadrzędny tworzy proces potomny, wykonywanie procesu nadrzędnego zostaje zawieszone do czasu zakończenia procesu potomnego. Proces nadrzędny odzyskuje kontrolę po zakończeniu działania procesu potomnego.
Wyjście(): Do zakończenia programu używane jest wywołanie systemowe o nazwie exit(). W środowiskach z wieloma wątkami to wywołanie wskazuje, że wykonywanie wątku zostało zakończone. Po użyciu funkcji systemowej exit() system operacyjny odzyskuje zasoby wykorzystane przez proces.
reaguj w stylu inline
Metody przekazywania parametrów do systemu operacyjnego
Jeśli nastąpi wywołanie systemowe, musimy przekazać parametr do części Kernal systemu operacyjnego.
Na przykład spójrz na dane otwarty() wywołanie systemowe:
C
//function call example> #include> int> open(> const> char> *pathname,> int> flags, mode_t mode);> |
>
>
Tutaj nazwa ścieżki , flagi I tryb_t są parametry.
Należy zatem zauważyć, że:
- Nie możemy przekazać parametrów bezpośrednio jak w zwykłym wywołaniu funkcji.
- W trybie Kernal istnieje inny sposób wykonywania wywołań funkcji.
Nie możemy więc uruchomić go w normalnej przestrzeni adresowej, którą proces już utworzył, a zatem nie możemy umieścić parametrów na górze stosu, ponieważ nie są one dostępne do przetwarzania dla jądra systemu operacyjnego. dlatego musimy zastosować inne metody przekazywania parametrów do jądra systemu operacyjnego.
Możemy to zrobić poprzez
- Przekazywanie parametrów w rejestrach
- Adres bloku przekazywany jest jako parametr do rejestru.
- Parametry są umieszczane na stosie.
Omówmy szczegółowo każdy punkt:
1. Przekazywanie parametrów w rejestrach.
- Jest to najprostsza metoda spośród trzech
- Tutaj bezpośrednio przekazujemy parametry do rejestrów.
- Ale będzie to ograniczone, gdy liczba parametrów będzie większa niż liczba rejestrów.
- Oto kod programu w C:
C
// Passing parameters in registers.> #include> #include> int> main()> {> > const> char> * pathname => 'example.txt'> ;> > int> flags = O_RDONLY;> > mode_t mode = 0644;> > int> fd = open(pathname, flags, mode);> > // in function call open(), we passed the parameters pathanme,flags,mode to the kernal directly> > if> (fd == -1) {> > perror> (> 'Error opening file'> );> > return> 1;> > }> > // File operations here...> > close(fd);> > return> 0;> }> |
>
>
2.Adres bloku przekazywany jest jako parametry
- Można ją zastosować, gdy liczba parametrów jest większa niż liczba rejestrów.
- Parametry przechowywane są w blokach lub tabeli.
- Adres bloku przekazywany jest do rejestru jako parametr.
- Najczęściej używany w systemach Linux i Solaris.
- Oto kod programu w C:
C
//Address of the block is passed as parameters> #include> #include> int> main() {> > const> char> *pathname => 'example.txt'> ;> > int> flags = O_RDONLY;> > mode_t mode = 0644;> > int> params[3];> > // Block of data(parameters) in array> > params[0] = (> int> )pathname;> > params[1] = flags;> > params[2] = mode;> > int> fd = syscall(SYS_open, params);> > // system call> > if> (fd == -1) {> > perror> (> 'Error opening file'> );> > return> 1;> > }> > // File operations here...> > close(fd);> > return> 0;> }> |
>
>
3. Parametry są umieszczane na stosie
- W tej metodzie parametry można wprowadzać za pomocą programu i usuwać za pomocą systemu operacyjnego
- Dzięki temu Kernal może łatwo uzyskać dostęp do danych, pobierając informacje ze szczytu stosu.
- Oto kod programu w języku C
C
//parameters are pushed into the stack> #include> #include> #include> int> main() {> > const> char> *pathname => 'example.txt'> ;> > int> flags = O_RDONLY;> > mode_t mode = 0644;> > int> fd;> > asm> volatile> (> > 'mov %1, %%rdi
'> > 'mov %2, %%rsi
'> > 'mov %3, %%rdx
'> > 'mov , %%rax
'> > 'syscall'> > :> '=a'> (fd)> > :> 'r'> (pathname),> 'r'> (flags),> 'r'> (mode)> > :> '%rdi'> ,> '%rsi'> ,> '%rdx'> > );> > if> (fd == -1) {> > perror> (> 'Error opening file'> );> > return> 1;> > }> > // File operations here...> > close(fd);> > return> 0;> }> |
Jasmine Davis jako dziecko
>
>
Często zadawane pytanie
P.1: Jak działa wywołanie systemowe?
Odpowiedź:
Kiedy program wykonuje wywołanie systemowe, przechodzi z trybu użytkownika do trybu jądra, który jest trybem o wyższym uprzywilejowaniu. Przejście jest zwykle inicjowane przez wywołanie określonej funkcji lub przerwanie instrukcji dostarczonej przez język programowania lub system operacyjny.
Po przejściu do trybu jądra wywołanie systemowe jest obsługiwane przez system operacyjny. Jądro wykonuje żądaną operację w imieniu programu i zwraca wynik. Następnie kontrola wraca do programu na poziomie użytkownika, który kontynuuje jego wykonywanie.
P.2: Dlaczego potrzebne są wywołania systemowe?
Odpowiedź:
Wywołania systemowe są konieczne z kilku powodów:
Dostęp do operacji uprzywilejowanych: Wiele operacji, takich jak zarządzanie urządzeniami sprzętowymi lub modyfikowanie konfiguracji systemu, wymaga wyższych uprawnień, do których można uzyskać dostęp jedynie poprzez wywołania systemowe.
Zarządzanie zasobami: Wywołania systemowe zapewniają ustandaryzowany interfejs do przydzielania i zarządzania zasobami systemowymi, takimi jak pamięć, pliki i urządzenia, zapewniając sprawiedliwy i kontrolowany dostęp dla różnych procesów.
Abstrakcja: Wywołania systemowe streszczają podstawową złożoność systemu operacyjnego, umożliwiając twórcom aplikacji interakcję z systemem na wyższym poziomie, niezależnym od platformy.
Bezpieczeństwo i ochrona: Wywołania systemowe wymuszają kontrolę dostępu i zasady bezpieczeństwa, zapobiegając nieautoryzowanemu dostępowi do wrażliwych zasobów i chroniąc integralność systemu.