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 .
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ń systemowychją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
- Definicja przestrzeni jądra Linuksa
- Wejście w tryb użytkownika w Wayback Machine (zarchiwizowane 26 marca 2016 r.)