Odpowiedzi:
Tak naprawdę nie ma czegoś takiego jak „wywołanie biblioteczne”. Możesz wywołać funkcję połączoną z biblioteką współdzieloną. A to po prostu oznacza, że ścieżka biblioteki jest sprawdzana w czasie wykonywania, aby określić lokalizację funkcji do wywołania.
Wywołania systemowe są niskopoziomowymi wywołaniami jądra obsługiwanymi przez jądro.
Jeśli wpiszesz man man
swoją powłokę, zobaczysz listę podręczników
2 wywołania systemowe (funkcje dostarczane przez jądro)
3 wywołania biblioteczne (funkcje w bibliotekach programów)
Na przykład znajdziesz chmod
w rozdziale 2 instrukcji podczas pisania man chmod
. I fprintf
w sekcji 3.
Wywołania systemowe są obsługiwane bezpośrednio przez jądro.
Wywołania biblioteczne są obsługiwane przez bibliotekę dynamiczną (lub statycznie połączoną). Program wykonujący wywołanie biblioteki musi najpierw zaimportować tę bibliotekę, zanim wywołanie zadziała. Same wywołania biblioteki mogą korzystać z wywołań systemowych.
Czasami biblioteki są dostarczane jako „front-end” dla wywołań systemowych, aby zapewnić dodatkową funkcjonalność lub łatwość użycia, których nie zapewnia jądro.
Wywołania systemowe to funkcje, które system operacyjny udostępnia aplikacjom. Natomiast funkcje takie jak te w math.h, string.h itp. To te, które nie mają nic wspólnego z interfejsem z systemem operacyjnym.
Zasadniczo istnieją dwa tryby jądra Linuxa.
Każde jądro Linuksa przełącza się pomiędzy tymi dwoma trybami. Zasadniczo wywołania biblioteczne są wykonywane w trybie użytkownika, a wywołania systemowe są wykonywane w trybie jądra . Pod względem systemu operacyjnego tryb jądra ma charakter atomowy, a tryb nadzorczy. Prawie wszystkie wywołania biblioteki potrzebują pomocy jądra do wykonywania swoich zadań. Każde wywołanie biblioteki z kolei wywołuje wywołanie systemowe. Uczyńmy ten pomysł jaśniejszym na podstawie poniższego przykładu
Kiedykolwiek w programie c, używasz fopen () z pliku nagłówka. Środowisko programistyczne wywołuje wywołanie systemowe open () z jądra i wykonuje zadanie otwierania plików. Ponownie po wykonaniu kontrola przepływu powraca do trybu użytkownika.
Aby to zilustrować, wykonaj następujące czynności
man man
: tutaj znajdziesz sekcję instrukcji od 1 do 8, każda ma określony cel.man fopen
: zobaczysz respose jako FOPEN(3)
, tutaj 3 wskazuję ręczną sekcję 3 stron podręcznika, która jest sekcją wywołań biblioteki c.Zrób man open
: zobaczysz respose jako OPEN(2)
, tutaj 2 wskazuję ręczną sekcję 2 stron podręcznika, która jest sekcją wywołań systemowych.
Mam nadzieję, że zrozumiałeś tę koncepcję.
Po prostu dodając do różnic wymienionych tutaj w innych odpowiedziach.
Ponieważ wywołanie biblioteki jest po prostu wywołaniem funkcji, nie następuje przejście z przestrzeni użytkownika do przestrzeni jądra. Z drugiej strony wywołanie systemowe powoduje przejście z przestrzeni użytkownika do przestrzeni jądra, ponieważ wywołanie systemowe działa w trybie jądra.