Chciałbym wiedzieć, jaka jest różnica między wywołaniem bibliotecznym a wywołaniem systemowym w systemie Linux. Wszelkie wskazówki dla dobrego zrozumienia pojęć obu będą bardzo mile widziane.
13
Chciałbym wiedzieć, jaka jest różnica między wywołaniem bibliotecznym a wywołaniem systemowym w systemie Linux. Wszelkie wskazówki dla dobrego zrozumienia pojęć obu będą bardzo mile widziane.
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ówNa przykład znajdziesz
chmod
w rozdziale 2 instrukcji podczas pisaniaman chmod
. Ifprintf
w sekcji 3.źródło
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.
źródło
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.
źródło
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 jakoFOPEN(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 jakoOPEN(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ę.
źródło
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.
źródło