유저 공간(User Space) vs 커널 공간(Kernel Space)

eunduk.log·약 17시간 전

백엔드

목록 보기
5/5

유저 공간과 커널 공간

  • 커널(Kernel)은 CPU 권한을 크게 2개의 공간으로 나눈다.
  • 권한의 수준에 따라 유저 공간과 커널 공간으로 나뉘게 된다.
    • 유저 공간: 권한 없거나 낮음
    • 커널 공간: 최고 권한, 커널 수준의 작업을 모두 수행 (cpu작업, disk와 ram의 i/o작업, 캐싱 등)
  • 참고
    • CPL (Current Privilege Level): 지금 CPU가 어느 권한 레벨로 코드를 실행 중인지(= 현재 링).
      • x86 기준으로 보통 유저 모드 = Ring 3 (CPL=3), 커널 모드 = Ring 0 (CPL=0)
    • 운영체제는 커널의 시스템 콜을 사용하여 다양한 기능을 제공 (유저 공간도 운영체제 위에서 돌아감)
      • 많이 쓰는 일반적인 도구들(bash, sh, ss 등) 뿐만 아니라 glibc 라이브러리 함수도 가지고 있음

유저 공간 (User Space)

  • 우리가 만든 프로그램/프로세스(예: Spring Framework, Tomcat, JVM, 크롬 등)가 실행되는 공간
  • 권한이 제한되어 있음 (하드웨어 제어, 프로세스/메모리 관리 등을 직접 수행할 수 없음)
    • 예시
      • 통신을 위한 소켓을 직접 생성하거나, 소켓으로 직접 데이터를 전송할 수 없음.
      • disk나 메모리의 파일을 열고, 읽고, 쓰는 것을 마음대로 할 수 없음.
      • 스레드를 직접 생성할 수 없음.

커널 공간 (Kernel Space)

  • 커널이 실제로 작업하는 공간이다. (window, 리눅스 커널 등)
  • 최고 권한을 가진다.
    • 하드웨어 제어, 네트워크 처리, 프로세스/메모리 관리 등
    • 하드웨어 입장에서 위험한 작업들을 담당

정리

  • Spring, JVM, JDK 등 모든 애플리케이션은 유저 모드에서 동작한다.
  • 커널 공간은 커널만 들어갈 수 있는 특별한 영역이다.

→ 그렇다면 유저 공간의 애플리케이션들은 커널 작업을 어떻게 수행할까?(소켓 생성, disk i/o 등)

시스템 콜(System call)

  • 유저 공간의 프로세스들은 “파일 읽기/쓰기, 네트워크 송수신, 소켓 생성” 같은 일을 하려면 커널의 도움을 받아야 한다.
    • (유저 공간의 프로세스들은 직접 하드웨어나 커널 구조를 건들일 수 없기 때문에..)
  • 시스템 콜을 통해 커널 모드가 되어, 커널 공간에 진입하여 실제 작업들을 수행할 수 있다.
    • (따라서 모든 프로그램들은 내부적으로 시스템 콜을 수행하고 있다.)
      • 시스템 콜이 아니면 컴퓨터의 자원에 접근조차 할 수 없기 때문에
  • 시스템 콜 예시
    • 파일: open, read, write
    • 네트워크: socket, bind, listen, accept, connect, send, recv
    • 프로세스/스레드: fork, execve, clone

0개의 댓글