사용자 공간 및 커널 공간

User space and kernel space

최신 컴퓨터 운영체제는 보통 가상 메모리를 사용자 공간과 커널 [a]공간으로 분리합니다.이 분리는 주로 메모리 보호와 하드웨어 보호를 위해 악의적이거나 잘못된 소프트웨어 동작으로부터 기능합니다.

커널 공간은 특권 운영 체제 커널, 커널 확장 및 대부분의 디바이스 드라이버를 실행하기 위해 엄격하게 예약되어 있습니다.반면, 사용자 공간은 애플리케이션 소프트웨어 및 일부 드라이버가 실행되는 메모리 영역입니다.

개요

user space(또는 userland)라는 용어는 운영 체제의 [1]커널 외부에서 실행되는 모든 코드를 의미합니다.사용자 공간은 보통 운영 체제가 커널과 상호 작용하기 위해 사용하는 다양한 프로그램 및 라이브러리를 말합니다. 입출력, 파일 시스템 객체, 응용 프로그램 소프트웨어 등을 조작하는 소프트웨어입니다.

각 사용자 공간 프로세스는 일반적으로 자체 가상 메모리 공간에서 실행되며 명시적으로 허용되지 않는 한 다른 프로세스의 메모리에 액세스할 수 없습니다.이는 오늘날의 주류 운영 체제에서 메모리 보호를 위한 기초이자 권한 분리를 위한 구성 요소입니다.다른 사용자 모드를 사용하여 효율적인 가상 머신을 구축할 수도 있습니다(PopekGoldberg 가상화 요건 참조).충분한 권한이 있으면 디버거의 경우와 마찬가지로 프로세스는 커널에 다른 프로세스의 메모리 공간의 일부를 자신의 메모리 공간에 매핑하도록 요구할 수 있습니다.프로그램은 다른 프로세스와의 공유 메모리 영역도 요구할 수 있지만 프로세스 간 통신을 가능하게 하는 다른 기술도 사용할 수 있습니다.

Linux 내의 다양한 레이어.사용자 랜드와 커널 공간의 차이도 표시
사용자 모드 사용자 응용 프로그램 bash, LibreOffice, GIMP, Blender, A.D 0, Mozilla Firefox, ...
시스템 컴포넌트 init 데몬:
RC 열기, 실행, systemd...
시스템 데몬:
polkitd, smbd, sshd, udevd...
관리자:
X11, Wayland, SurfaceFlinger(Android)
그래픽스:
Mesa, AMD Catalyst...
기타 라이브러리:
GTK, Qt, EFL, SDL, SFML, FLTK, GNU 스텝...
C 표준 라이브러리 fopen,execv,malloc,memcpy,localtime,pthread_create...(최대 2000개의 서브루틴)
glibc는 고속, musl은 경량, uClibc는 임베디드 시스템을, 바이오닉은 Android용으로 작성되었습니다.모두 POSIX/SUS 호환을 목표로 하고 있습니다.
커널 모드 Linux 커널 stat,splice,dup,read,open,ioctl,write,mmap,close,exit, 등(약 380개의 시스템콜)
Linux 커널 시스템콜 인터페이스(SCI)는 POSIX/SUS 호환성을 목표로 하고 있습니다.
프로세스 스케줄링
서브시스템
IPC
서브시스템
메모리 관리
서브시스템
가상 파일
서브시스템
네트워크
서브시스템
기타 컴포넌트: ALSA, DRI, evdev, klibc, LVM, 디바이스 매퍼, Linux Network Scheduler, Netfilter
Linux 보안 모듈: SELinux, TOMOYO, AppArmor, Smack
하드웨어(CPU, 메인 메모리, 데이터 스토리지 디바이스 등)

실행

커널 모드와 다른 사용자 모드를 구현하는 가장 일반적인 방법은 운영 체제 보호 링입니다.다음으로 보호 링은 CPU 모드를 사용하여 구현됩니다.일반적으로 커널 공간 프로그램은 슈퍼바이저 모드라고도 불리는 커널 모드로 실행됩니다.사용자 공간 내의 일반 응용 프로그램은 사용자 모드로 실행됩니다.

대부분의 운영 체제는 단일 주소 공간 운영 체제이며, 모든 사용자 모드 코드에 대해 단일 주소 공간이 있습니다.(커널 모드코드는 같은 주소 공간에 있을 수도 있고 두 번째 주소 공간에 있을 수도 있습니다).다른 많은 운영 체제에는 프로세스별 주소 공간, 즉 사용자 모드 프로세스별로 별도의 주소 공간이 있습니다.

실험 운영 체제에서 채택된 또 다른 접근법은 모든 소프트웨어에 대해 단일 주소 공간을 확보하고 임의 메모리에 액세스할 수 없도록 프로그래밍 언어의 의미론에 의존하는 것입니다. 즉,[3][4] 애플리케이션은 액세스가 허용되지 않는 개체에 대한 참조를 얻을 수 없습니다.이 접근방식은 JXOS, Ununium 및 마이크로소프트의 Singularity 연구 프로젝트에서 구현되었습니다.

「 」를 참조해 주세요.

메모들

  1. ^ DOS 나 Windows 3.1x같은 오래된 운영 체제에서는 이 아키텍처를 사용하지 않습니다.

레퍼런스

  1. ^ "userland, n." The Jargon File. Eric S. Raymond. Retrieved 2016-08-14.
  2. ^ "Admin Guide README". git.kernel.org.
  3. ^ "Unununium System Introduction". Archived from the original on 2001-12-15. Retrieved 2016-08-14.
  4. ^ "uuu/docs/system_introduction/uuu_intro.tex". UUU System Introduction Guide. 2001-06-01. Retrieved 2016-08-14.

외부 링크