사용자 공간
전통적인 컴퓨터 운영 체제는 일반적으로 가상 메모리를 커널 공간과 사용자 공간으로 분리시킨다. 커널 공간은 커널, 커널 확장 기능, 대부분의 장치 드라이버를 실행하기 위한 예비 공간이다. 반면 사용자 공간은 모든 사용자 모드 응용 프로그램들이 동작하는 메모리 영역으로, 이 메모리는 필요할 때 페이징 처리될 수 있다.
개요
[편집]이와 비슷한 용어로 유저랜드(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개 함수)glibc는 POSIX/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, 주 메모리, 데이터 기억 장치 등) |
같이 보기
[편집]각주
[편집]- ↑ “userland, n.”. 《The Jargon File》. Eric S. Raymond. 2010년 4월 30일에 확인함.
- ↑ “What kind of kernel does Unununium have?”. 2019년 10월 30일에 원본 문서에서 보존된 문서. 2012년 10월 14일에 확인함.
이 글은 컴퓨터 과학에 관한 토막글입니다. 여러분의 지식으로 알차게 문서를 완성해 갑시다. |