Różnica między wywołaniami systemowymi a funkcjami biblioteki


Odpowiedzi:


19

Koncepcyjnie funkcja biblioteki jest częścią twojego procesu.

W czasie wykonywania kod wykonywalny i kod dowolnych bibliotek (takich jak libc.so), od których zależy, zostają połączone w jeden proces. Kiedy więc wywołujesz funkcję w takiej bibliotece, wykonuje się ją jako część twojego procesu, z tymi samymi zasobami i uprawnieniami. Jest to ten sam pomysł, jak wywoływanie funkcji, którą sam napisałeś (z możliwymi wyjątkami, takimi jak PLT i / lub funkcje trampoliny, które możesz sprawdzić, jeśli ci zależy).

Koncepcyjnie, wywołanie systemowe jest specjalnym interfejsem służącym do wywoływania twojego kodu (który jest ogólnie nieuprzywilejowany) do jądra (który ma prawo do eskalacji uprawnień w razie potrzeby).


Na przykład zobacz Linux man brk . Gdy program C wywołuje mallocfunkcję alokacji pamięci, wywołuje funkcję biblioteki w glibc.

Jeśli w procesie jest już wystarczająca ilość miejsca do alokacji , może on wykonać niezbędne zarządzanie stertą i zwrócić pamięć dzwoniącemu.

Jeśli nie, glibc musi zażądać więcej pamięci z jądra: (prawdopodobnie) wywołuje funkcję brkglibc, która z kolei wywołuje brksyscall. Dopiero po przejściu kontroli do jądra za pośrednictwem syscall można zmodyfikować stan globalnej pamięci wirtualnej, aby zarezerwować więcej pamięci i odwzorować ją w przestrzeni adresowej procesu.


11

Dodanie do bezużytecznej odpowiedzi:
funkcje biblioteki są szybsze niż wywołania systemowe i zwykle nie zawierają uwag dotyczących uprawnień / bezpieczeństwa, ponieważ działają z uprawnieniami procesu i jego pamięcią.

Z drugiej strony, Syscalls, ponieważ działają w jądrze, mają dostęp do wszystkiego w systemie, więc muszą kontrolować, co może wywołać proces wywoływania, gdy je wywołuje (sprawdź, czy ma uprawnienia do otwierania pliku, ponieważ przykład), ponadto, ponieważ syscalls znajdują się w jądrze, ich wywołanie wymaga przełącznika kontekstu w CPU, co jest bardzo ciężkim procesem w stosunku do zwykłego wywołania wywołania biblioteki.

Syscalls zwykle odzwierciedlają użycie procesora przez system w programach monitorujących.


0
  1. lib fun jest obsługiwany przez kompilator, a syscall jest obsługiwany przez system operacyjny
  2. Libcall jest specyficzny, podczas gdy syscall jest ogólny, podobnie jak getc lib fun może uzyskiwać dostęp tylko do jednego znaku na raz, nie ciąg znaków lub słowo po słowie, ale open syscall może służyć do otwierania pliku tekstowego, pliku binarnego i wielu innych typów plików.

0

wywołanie biblioteki - wywołuje podprogram połączony z aplikacją (poprzez dołączenie lub dodanie biblioteki).

wywołanie systemowe - przekazuje kontrolę do systemu operacyjnego (użytkownik-> proces systemowy> system operacyjny) i przełącza procesor w tryb uprzywilejowany

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.