맨위로가기

사용자 공간

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

사용자 공간은 운영 체제의 커널 외부에서 실행되는 모든 코드를 지칭하며, 운영 체제가 커널과 상호 작용하는 데 사용되는 프로그램 및 라이브러리를 의미한다. 각 사용자 공간 프로세스는 자체 가상 메모리 공간에서 실행되며, 다른 프로세스의 메모리에 접근하는 것이 제한되어 메모리 보호와 권한 분리의 기반이 된다. 사용자 모드와 커널 모드는 운영 체제의 중요한 구성 요소로, 사용자 응용 프로그램은 제한된 권한을 가지며, 커널 코드는 시스템의 모든 자원에 접근할 수 있다. 리눅스와 같은 운영 체제에서 사용자 공간은 다양한 시스템 구성 요소, 라이브러리, C 표준 라이브러리 등으로 구성되며, 커널 모드와 분리되어 작동한다. 사용자 모드와 커널 모드를 분리하는 일반적인 방법은 운영체제 보호 링을 사용하며, 단일 주소 공간 운영 체제와 같은 다양한 구현 방식이 존재한다.

더 읽어볼만한 페이지

  • 장치 드라이버 - 윈도우 디스플레이 드라이버 모델
    윈도우 비스타부터 도입된 윈도우 디스플레이 드라이버 모델(WDDM)은 성능 향상, 안정성, 새로운 기술 지원을 목표로 개발된 디스플레이 드라이버 아키텍처로, 가상화된 비디오 메모리, GPU 스케줄링, 프로세스 간 Direct3D 표면 공유, 향상된 오류 허용성 등의 특징을 가지며 데스크톱 윈도우 관리자(DWM)를 통한 합성 데스크톱 환경 구현에 필수적이다.
  • 장치 드라이버 - HPLIP
    HPLIP는 HP에서 제공하는 리눅스용 프린터 및 스캐너 드라이버이자 툴 모음으로, GUI 환경 설정 및 명령줄 유틸리티를 통해 장치 구성, 인쇄, 스캔, 팩스 등의 작업을 지원하며, 자동 설치 프로그램과 hpiod 프로세스와 연동되어 작동한다.
  • 운영체제 기술 - 프로세스
    프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스로, 운영 체제가 시스템 자원을 효율적으로 관리하며 멀티태스킹 환경에서 독립적인 실행 흐름을 유지한다.
  • 운영체제 기술 - 커널 (컴퓨팅)
    커널은 운영 체제의 핵심으로, 하드웨어와 소프트웨어 간 상호 작용을 관리하며 시스템 보안, 자원 관리, 하드웨어 추상화, 프로세스 스케줄링, 프로세스 간 통신, 다중 작업 환경 지원 등의 기능을 제공하고, 모놀리식, 마이크로, 혼합형 커널 등으로 구현되며 가상화 및 클라우드 컴퓨팅 환경에서 중요성이 커지고 있다.
사용자 공간
기본 정보
정의컴퓨터 운영 체제의 핵심인 커널과 응용 프로그램이 실행되는 공간을 분리하는 방식
목적시스템 안정성 확보
보안 강화
자원 관리 효율성 향상
사용자 공간 (User space)
설명일반 응용 프로그램이 실행되는 영역
커널에 직접 접근 불가
시스템 호출을 통해 커널 기능 이용
특징메모리 보호: 다른 프로세스의 메모리 공간 침범 방지
접근 제한: 하드웨어 자원에 직접 접근 불가
유연성: 응용 프로그램의 추가 및 제거 용이
장점시스템 충돌 방지
보안 위협 격리
응용 프로그램 개발 및 배포 용이
커널 공간 (Kernel space)
설명운영 체제 커널이 실행되는 영역
하드웨어 자원에 직접 접근 가능
시스템 전체를 제어
특징높은 권한: 모든 시스템 자원에 접근 가능
제한된 접근: 사용자 프로그램의 직접적인 접근 제한
안정성 요구: 시스템 전체의 안정성에 필수적
장점하드웨어 제어 용이
시스템 자원 효율적 관리
높은 성능 요구 작업에 적합
작동 방식
시스템 호출 (System call)사용자 공간의 프로그램이 커널 공간의 기능을 사용하기 위한 인터페이스
인터럽트 (Interrupt)하드웨어 또는 소프트웨어에서 발생하는 이벤트로, 커널 공간에서 처리
문맥 교환 (Context switch)커널이 실행 중인 프로세스를 변경하는 과정으로, 사용자 공간과 커널 공간 간 전환 발생
메모리 관리
가상 메모리 (Virtual memory)각 프로세스에 독립적인 메모리 공간 제공
페이지 테이블 (Page table)가상 주소를 실제 물리 주소로 변환하는 데 사용
메모리 보호 (Memory protection)프로세스가 다른 프로세스의 메모리 공간에 접근하는 것을 방지
장단점
장점안정성 향상: 사용자 프로그램 오류가 시스템 전체에 미치는 영향 최소화
보안 강화: 악성 프로그램의 커널 접근 차단
자원 관리 효율성: 커널이 시스템 자원을 중앙 집중적으로 관리
단점성능 오버헤드: 사용자 공간과 커널 공간 간 잦은 전환으로 인한 성능 저하 가능성
복잡성 증가: 시스템 설계 및 구현의 복잡성 증가
예시
사용자 공간웹 브라우저, 워드 프로세서, 게임 등
커널 공간장치 드라이버, 파일 시스템, 네트워크 스택 등

2. 사용자 공간과 커널 공간

사용자 공간(또는 유저랜드)은 운영 체제의 커널 외부에서 실행되는 모든 코드를 지칭한다.[2] 사용자 공간은 일반적으로 운영 체제가 커널과 상호 작용하는 데 사용하는 다양한 프로그램 및 라이브러리를 의미하며, 입출력을 수행하고, 파일 시스템 객체를 조작하고, 응용 소프트웨어 등을 수행하는 소프트웨어이다.

각 사용자 공간 프로세스는 일반적으로 자체 가상 메모리 공간에서 실행되며, 명시적으로 허용되지 않는 한 다른 프로세스의 메모리에 접근할 수 없다. 이는 오늘날 주류 운영 체제에서 메모리 보호의 기반이며, 권한 분리를 위한 구성 요소이다. 별도의 사용자 모드는 효율적인 가상 머신을 구축하는 데에도 사용할 수 있다.

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

리눅스 내의 다양한 계층, 사용자 공간과 커널 공간 사이의 분리
scope="rowgroup" rowspan="3"사용자 모드사용자 응용 프로그램bash, LibreOffice, GIMP, Blender, 0 A.D., Mozilla Firefox, ...
시스템 구성 요소init 데몬:
OpenRC, runit, systemd...
시스템 데몬:
polkitd, smbd, sshd, udevd...
윈도우 매니저:
X11, Wayland, SurfaceFlinger (Android)
그래픽 :
Mesa, AMD Catalyst, ...
기타 라이브러리:
GTK, Qt, EFL, SDL, SFML, FLTK, GNUstep, ...
C 표준 라이브러리fopen, execv, malloc, memcpy, localtime, pthread_create... (최대 2000개의 서브루틴)
glibc는 빠름을 목표로 하고, musl은 경량화를 목표로 하며, uClibc는 임베디드 시스템을 대상으로 하고, bionic은 안드로이드용으로 작성되었으며, 등. 모두 POSIX/SUS 호환을 목표로 한다.
scope="rowgroup" rowspan="3"커널 모드리눅스 커널stat, splice, dup, read, open, ioctl, write, mmap, close, exit, 등 (약 380개의 시스템 호출)
리눅스 커널 시스템 콜 인터페이스 (SCI)는 POSIX/SUS 호환을 목표로 한다.[3]
프로세스 스케줄링 서브시스템IPC 서브시스템메모리 관리 서브시스템가상 파일 서브시스템네트워킹 서브시스템
기타 구성 요소: ALSA, DRI, evdev, klibc, LVM, 장치 매퍼, Linux Network Scheduler, Netfilter
Linux Security Modules: SELinux, TOMOYO, AppArmor, Smack
하드웨어 (CPU, 주 메모리, 데이터 저장 장치, 등)


2. 1. 사용자 모드와 커널 모드

커널 모드(또는 관리자 모드)와 사용자 모드는 운영 체제의 보호 링을 구현하는 핵심적인 방법이다. 대부분의 운영 체제는 커널 공간에서 실행되는 코드가 커널 모드로 작동하여 시스템의 모든 자원에 접근할 수 있도록 한다. 반면, 사용자 공간에서 실행되는 응용 소프트웨어는 사용자 모드로 작동하며 제한된 권한만을 가진다.[2]

일반적으로 사용자 공간 프로세스는 자신만의 가상 메모리 공간에서 실행되며, 명시적으로 요청하지 않으면 다른 프로세스의 메모리에 접근할 수 없다. 이는 메모리 보호 기능의 기반이자 권한 분리를 위한 구성 요소이다. 권한을 가진 프로세스는 디버거처럼 커널에 다른 프로세스의 메모리 공간 일부를 매핑하도록 요청할 수 있으며, 공유 메모리 공간을 요청할 수도 있다.[4][5]

몇몇 실험적인 운영 체제는 모든 소프트웨어에 대해 단일 주소 공간을 사용하는 방식을 채택하기도 한다. 이 방식에서는 프로그래밍 언어의 기계어에 의존하여 메모리 접근을 제어한다. JXOS, Unununium, 마이크로소프트의 싱귤래리티 연구 프로젝트에서 이러한 접근 방식을 사용한다.[7]

사용자 공간과 커널 공간 간 리눅스의 다양한 계층
사용자 모드사용자 애플리케이션예: 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, 주 메모리, 데이터 기억 장치 등)


2. 2. 메모리 보호

개별 사용자 공간 프로세스는 일반적으로 자체 가상 메모리 공간에서 실행되며, 명시적으로 허용되지 않는 한 다른 프로세스의 메모리에 접근할 수 없다.[6] 이는 오늘날 주류 운영 체제에서 제공되는 메모리 보호의 기반이며, 권한 분리를 위한 구성 요소이다. 충분한 권한을 가진 프로세스는 디버거와 같이 다른 프로세스의 메모리 공간 일부를 자체 메모리 공간에 매핑하도록 커널에 요청할 수 있다. 프로그램은 또한 공유 메모리 영역을 다른 프로세스와 요청할 수도 있다.[7]

실험적인 운영 체제에서 사용되는 또 다른 접근 방식은 모든 소프트웨어에 대해 단일 주소 공간을 갖고, 프로그래밍 언어의 기계어에 의존하여 임의의 메모리에 접근할 수 없도록 하는 것이다. 이는 응용 프로그램들이 접근이 허가되지 않은 오브젝트에 대한 어떠한 참조도 획득할 수 없게 한다.[7] 이러한 접근 방식은 JXOS, Unununium, 마이크로소프트의 Singularity 연구 프로젝트에 추가되어 있다.

2. 3. 권한 분리

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

3. 리눅스에서의 사용자 공간과 커널 공간

'''사용자 공간'''(user space, 유저 스페이스) 또는 '''유저랜드'''(userland)는 운영 체제에서 커널 외부에서 실행되는 모든 코드를 지칭한다.[2] 사용자 공간은 입출력을 수행하고, 파일 시스템 객체를 조작하고, 응용 소프트웨어를 실행하는 등 운영 체제가 커널과 상호 작용하는 데 사용하는 다양한 프로그램 및 라이브러리를 의미한다.

각 사용자 공간 프로세스는 일반적으로 자체 가상 메모리 공간에서 실행되며, 명시적으로 허용되지 않는 한 다른 프로세스의 메모리에 접근할 수 없다. 이는 오늘날 주류 운영 체제에서 메모리 보호의 기반이며, 권한 분리를 위한 구성 요소이다. 별도의 사용자 모드는 Popek and Goldberg 가상화 요구 사항에서 언급된 것처럼 효율적인 가상 머신을 구축하는 데에도 사용될 수 있다. 충분한 권한을 가진 프로세스는 디버거와 같이 다른 프로세스의 메모리 공간 일부를 자체 메모리 공간에 매핑하도록 커널에 요청할 수 있다. 프로그램은 공유 메모리 영역을 다른 프로세스와 요청할 수도 있지만, 프로세스 간 통신을 허용하기 위해 다른 기술도 사용할 수 있다.

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

3. 1. 구성 요소

사용자 공간에는 bash, 리브레오피스, 김프, 모질라 파이어폭스 등과 같은 일반적인 응용 프로그램뿐만 아니라, systemd, runit 같은 시스템 데몬X11, Wayland, 메사 등과 같은 시스템 라이브러리도 포함된다.

유저랜드와 커널 공간 간 리눅스의 다양한 계층
사용자 모드사용자 애플리케이션예: 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, 주 메모리, 데이터 기억 장치 등)


3. 2. 시스템 호출 인터페이스 (SCI)

사용자 공간 프로그램은 시스템 호출 인터페이스(SCI)를 통해 커널의 기능을 사용할 수 있다. 리눅스 커널 SCI는 POSIX/SUS 표준 호환을 목표로 한다.[3] 리눅스 커널 시스템 호출 인터페이스는 약 380개의 시스템 호출로 구성되어 있으며, `stat`, `splice`, `dup`, `read`, `open`, `ioctl`, `write`, `mmap`, `close`, `exit` 등이 있다.

4. 구현 방식

사용자 모드를 커널 모드와 분리하여 구현하는 가장 일반적인 방법은 운영체제 보호 링을 사용하는 것이다. 보호 링은 CPU 모드를 사용하여 구현된다. 일반적으로 커널 공간 프로그램은 커널 모드(감독자 모드)에서 실행되고, 일반 애플리케이션은 사용자 모드에서 실행된다.

운영 체제는 크게 단일 주소 공간 운영 체제와 프로세스별 주소 공간 운영 체제로 나눌 수 있다. 단일 주소 공간 운영 체제는 모든 사용자 모드 코드에 대해 단일 주소 공간을 갖는 반면, 프로세스별 주소 공간 운영 체제는 각 사용자 모드 프로세스에 대해 별도의 주소 공간을 갖는다.

4. 1. 단일 주소 공간 운영 체제

일부 운영 체제는 모든 사용자 모드 코드에 대해 단일 주소 공간을 사용하는 방식을 채택한다. 이러한 운영 체제에서는 프로그래밍 언어의 특징을 활용하여 메모리 접근을 제어한다. 즉, 응용 프로그램이 접근 권한이 없는 객체에 대한 참조를 얻을 수 없도록 한다.[4][5] 이러한 접근 방식은 JXOS, Unununium, 마이크로소프트의 Singularity 연구 프로젝트에서 구현되었다.

참조

[1] 웹사이트 Address space https://linux-kernel[...]
[2] 웹사이트 userland, n. http://www.catb.org/[...] [[Eric S. Raymond]] 2016-08-14
[3] 웹사이트 Admin Guide README https://git.kernel.o[...]
[4] 웹사이트 Unununium System Introduction http://uuu.sourcefor[...] 2016-08-14
[5] 웹사이트 uuu/docs/system_introduction/uuu_intro.tex http://uuu.cvs.sourc[...] 2001-06-01
[6] 웹인용 userland, n. http://www.catb.org/[...] [[Eric S. Raymond]] 2010-04-30
[7] 웹인용 What kind of kernel does Unununium have? http://unununium.org[...] 2012-10-14



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com