커널 스레드, 유저 스레드, 그리고 자바 스레드

Kim Dong Kyun·2024년 4월 30일
1

자바는 싱글 프로세스 멀티 스레드로 동작한다. 그리고 자바는 유저 스레드를 사용한다.

0. 커널이란

설명 출처 : RedHat

커널이 하는 자세한 일은 아래와 같다.

  • 메모리 관리: 커널은 메모리를 추적하고 관리하며, 어느 프로세스가 얼마나 많은 메모리를 사용하고 있는지, 어떤 메모리 영역이 이미 사용 중이며 어떤 것이 사용 가능한지를 알고 있다. 이를 통해 커널은 메모리를 효과적으로 분배하고 관리할 수 있다.

  • 프로세스 관리: 커널은 프로세스 스케줄링을 통해 어느 프로세스가 어떤 순서로 CPU의 시간을 사용할지 결정한다. 여기에는 프로세스의 생성, 삭제, 중단, 재개 등 다양한 작업이 포함된다.

  • 장치 드라이버: 커널 내의 장치 드라이버는 특정 하드웨어 장치를 제어하는 코드이다. 이를 통해 커널은 하드웨어와 소프트웨어 사이에서 중재 역할을 수행하며, 응용 프로그램이 하드웨어에 직접 접근하지 못하도록 한다.

  • 시스템 호출 및 보안: 시스템 호출은 응용 프로그램이 커널의 서비스를 요청하는 방법을 제공한다. 예를 들어, 파일 열기, 읽기, 쓰기 등의 작업은 시스템 호출을 통해 수행된다. 커널은 또한 시스템 보안을 유지하기 위해 중요한 역할을 수행하며, 사용자 권한 확인, 프로세스 간 참조 확인 등의 작업을 수행한다.

세줄요약.
1. 커널은 컴퓨터 자원 (하드웨어) 와 프로세스를 이어주는 중간 작업자이다.
2. 커널은 프로세스에 필요한 자원을 각 프로세스에 분배하는 작업을 수행한다.
3. 위 작업이 가능한 이유는 커널이 컴퓨터 자원 (하드웨어) 에 대한 모든 접근 권한을 가지며, 하드웨어가 일하도록 명령하는 전달자 역할을 하기 때문이다.
3-1. (위를 위해) 커널은 메모리에 상주하며 하드웨어에 명령을 내린다.

1. 커널 스레드

커널이 직접 관리하는 스레드. 위 설명에서 커널은 컴퓨터 자원(하드웨어)를 직접 관리하고 프로세스에 할당한다고 했으므로, OS에서 관리하는 커널 스레드의 명령이 곧 하드웨어에 명령을 전달한다고 볼 수 있다.

2. 유저 스레드

프로세스 내에서 사용되는 스레드이며, OS의 직접적 관리를 받지 않는다. 즉, 커널은 유저 스레드의 존재를 알 수 없다. 즉 프로세스가 이 스레드를 관리한다.

자바의 java.lang.Thread 가 대표적인 유저 스레드.

3. 커널 스레드가 유저 스레드로 맵핑되는 방식

위와 같은 방식들이 존재한다. 더불어 Java 는 One-To-One 방식을 사용한다.

우아한 형제들 테크블로그에, 이 맵핑을 좀 더 잘 설명하는 그림이 존재한다.

4. 맵핑되는 방식

... Java의 스레드 모델은 Native Thread로, Java의 유저 스레드를 만들면 Java Native Interface(JNI)를 통해 커널 영역을 호출하여 OS가 커널 스레드를 생성하고 매핑하여 작업을 수행하는 형태 ...

0개의 댓글