Przestrzeń użytkownika - User space

Nowoczesny komputerowy system operacyjny zwykle dzieli pamięć wirtualną na przestrzeń jądra i przestrzeń użytkownika . Przede wszystkim ta separacja służy do zapewnienia ochrony pamięci i ochrony sprzętu przed złośliwym lub błędnym zachowaniem oprogramowania.

Przestrzeń jądra jest zarezerwowana wyłącznie do uruchamiania uprzywilejowanego jądra systemu operacyjnego , rozszerzeń jądra i większości sterowników urządzeń . Natomiast przestrzeń użytkownika to obszar pamięci, w którym uruchamiane jest oprogramowanie aplikacji i niektóre sterowniki.

Przegląd

Termin przestrzeń użytkownika (lub przestrzeń użytkownika) odnosi się do całego kodu działającego poza jądrem systemu operacyjnego. Userland zwykle odnosi się do różnych programów i bibliotek , których system operacyjny używa do interakcji z jądrem: oprogramowanie, które wykonuje operacje wejścia/wyjścia , manipuluje obiektami systemu plików , oprogramowanie aplikacji itp.

Każdy proces w przestrzeni użytkownika normalnie działa we własnej przestrzeni pamięci wirtualnej i, o ile nie jest to wyraźnie dozwolone, nie może uzyskać dostępu do pamięci innych procesów. Jest to podstawa ochrony pamięci w dzisiejszych popularnych systemach operacyjnych i element konstrukcyjny separacji uprawnień . Osobny tryb użytkownika może być również wykorzystany do budowy wydajnych maszyn wirtualnych – patrz wymagania dotyczące wirtualizacji Popka i Goldberga . Przy wystarczających uprawnieniach procesy mogą zażądać od jądra odwzorowania części przestrzeni pamięci innego procesu na własną, tak jak ma to miejsce w przypadku debugerów . Programy mogą również żądać regionów pamięci współdzielonej z innymi procesami, chociaż dostępne są również inne techniki umożliwiające komunikację między procesami .

Różne warstwy w systemie Linux, pokazujące również separację między przestrzenią użytkownika a przestrzenią jądra
Tryb użytkownika Aplikacje użytkownika bash , LibreOffice , GIMP , Blender , 0 AD , Mozilla Firefox , ...
Komponenty systemu Demony :
systemd , runit , udevd , polkitd , sshd , smbd ...
Menedżer okien :
X11 , Wayland , SurfaceFlinger (Android)
Grafika :
Mesa , AMD Catalyst , ...
Inne biblioteki:
GTK , Qt , EFL , SDL , SFML , FLTK , GNUstep , ...
Biblioteka standardowa C fopen, execv, malloc, memcpy, localtime, pthread_create... (do 2000 podprogramy )
glibc ma być szybka, MUSL i uClibc systemy docelowe wbudowane, bionic napisane dla Androida , itp Wszystkie mają na celu być POSIX / SUS -Kompatybilny.
Tryb jądra Jądro Linuksa stat, splice, dup, read, open, ioctl, write, mmap, close, exit, itp. (około 380 wywołań systemowych) Interfejs wywołań systemowych
jądra Linux (SCI, ma być zgodny z POSIX / SUS )

Podsystem planowania procesów

Podsystem IPC

Podsystem zarządzania pamięcią

Podsystem plików wirtualnych

Podsystem sieci
Inne komponenty: ALSA , DRI , evdev , LVM , device mapper , Linux Network Scheduler , Netfilter
Linux Security Modules : SELinux , TOMOYO , AppArmor , Smack
Sprzęt ( procesor , pamięć główna , urządzenia do przechowywania danych itp.)

Realizacja

Najpopularniejszy sposób implementacji trybu użytkownika oddzielnego od trybu jądra obejmuje pierścienie ochrony systemu operacyjnego . Z kolei pierścienie ochronne są realizowane za pomocą trybów procesora . Zazwyczaj programy działające w przestrzeni jądra działają w trybie jądra , zwanym również trybem nadzorcy ; normalne aplikacje w przestrzeni użytkownika działają w trybie użytkownika.

Wiele systemów operacyjnych to systemy operacyjne z pojedynczą przestrzenią adresową — mają one pojedynczą przestrzeń adresową dla całego kodu trybu użytkownika. (Kod trybu jądra może znajdować się w tej samej przestrzeni adresowej lub może znajdować się w drugiej przestrzeni adresowej). Wiele innych systemów operacyjnych ma przestrzeń adresową na proces, oddzielną przestrzeń adresową dla każdego procesu w trybie użytkownika.

Innym podejściem stosowanym w eksperymentalnych systemach operacyjnych jest posiadanie jednej przestrzeni adresowej dla całego oprogramowania i poleganie na semantyce języka programowania, aby upewnić się, że nie można uzyskać dostępu do dowolnej pamięci – aplikacje po prostu nie mogą uzyskać żadnych odwołań do obiektów, do których nie mają dostępu. dostęp. To podejście zostało wdrożone w JXOS , Unununium, a także w projekcie badawczym Singularity firmy Microsoft .

Zobacz też

Uwagi

Bibliografia

Zewnętrzne linki