전통적인 컴퓨터 운영 체제는 일반적으로 가상 메모리커널 공간사용자 공간으로 분리시킨다. 커널 공간은 커널, 커널 확장 기능, 대부분의 장치 드라이버를 실행하기 위한 예비 공간이다. 반면 사용자 공간은 모든 사용자 모드 응용 프로그램들이 동작하는 메모리 영역으로, 이 메모리는 필요할 때 페이징 처리될 수 있다.

개요

편집

이와 비슷한 용어로 유저랜드(userland)가 있는데 이는 사용자 공간에서 실행하는 모든 응용 소프트웨어를 가리킨다.[1] 유저랜드는 일반적으로 운영 체제가 커널과 상호 작용하기 위해 사용하는 다양한 프로그램과 라이브러리를 가리킨다. 여기에는 입출력을 수행하고 파일 시스템 오브젝트를 처리하는 소프트웨어를 아우른다.

개별 사용자 공간 프로세스는 일반적으로 저만의 가상 메모리 공간에서 실행되며, 분명히 요청되지 않을 경우 다른 프로세스의 메모리에 접근할 수 없다. 이는 오늘날의 주류 운영 체제에서 제공되는 메모리 보호 기능의 토대이자 권한 분리를 위한 구성 요소이다. 권한에 따라 프로세스들은 디버거와 같이 커널에 다른 프로세스의 메모리 공간의 일부를 커널 자체에 매핑하도록 요청할 수 있다. 프로그램들은 다른 프로세스와의 공유 메모리 공간을 요청할 수도 있다.

실험적인 운영 체제에서 제공되는 또 다른 접근 방식으로는 모든 소프트웨어 대해 단일 주소 공간을 소유하는 것으로, 프로그래밍 언어의 기계어에 의지함으로써 메모리가 독단적으로 접근하지 못하게 미연에 방지한다. 이는 응용 프로그램들이 단순히 접근이 허가되지 않은 오브젝트에 대한 어떠한 참조를 회득할 수 없게 한다.[2] 이러한 접근 방식은 JXOS, Unununium, 마이크로소프트의 싱귤래리티 연구 프로젝트에 추가되어 있다.

유저랜드커널 공간 간 리눅스의 다양한 계층
사용자 모드 사용자 애플리케이션 예: bash, 리브레오피스, 김프, 블렌더, 0 A.D., 모질라 파이어폭스 등.
저수준 시스템 구성 요소: 시스템 데몬:
systemd, runit, logind, networkd, PulseAudio, ...
윈도 시스템:
X11, Wayland, SurfaceFlinger (안드로이드)
기타 라이브러리:
GTK+, Qt, EFL, SDL, SFML, FLTK, 그누스텝 등.
그래픽스:
메사, AMD 카탈리스트, ...
C 표준 라이브러리 open(), exec(), sbrk(), socket(), fopen(), calloc(), ... (최대 2000개 함수)
glibcPOSIX/SUS 호환을 목적으로 함, uClibc는 임베디드 시스템을 대상으로 함, bionic안드로이드용으로 개발됨 등.
커널 모드 리눅스 커널 stat, splice, dup, read, open, Ioctl, write, mmap, close, exit 등. (약 380개 시스템 호출)
리눅스 커널 시스템 호출 인터페이스(System Call Interface, SCI는 POSIX/SUS 호환을 목표로 함)
프로세스 스케줄링
하위 시스템
IPC
하위 시스템
메모리 관리
하위 시스템
가상 파일
하위 시스템
네트워크
하위 시스템
기타 구성 요소: ALSA, DRI, evdev, LVM, 장치 매퍼, 리눅스 네트워크 스케줄러, 넷필터
리눅스 보안 모듈: SELinux, TOMOYO, 앱아머, 스맥
하드웨어 (CPU, 주 메모리, 데이터 기억 장치 등)

같이 보기

편집

각주

편집
  1. “userland, n.”. 《The Jargon File》. Eric S. Raymond. 2010년 4월 30일에 확인함. 
  2. “What kind of kernel does Unununium have?”. 2019년 10월 30일에 원본 문서에서 보존된 문서. 2012년 10월 14일에 확인함.