인프런 커뮤니티 질문&답변

감바스님의 프로필 이미지
감바스

작성한 질문수

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

스레드 생성 - Runnable

자바 스레드와 커널 스레드에 대해 질문 있습니다.

작성

·

101

1

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

  1. 앞서 얘기 해주신 Thread를 상속해서 만든 스레드와 Runnalbe을 사용해서 만든 스레드가 Java의 유저 스레드인지 궁금합니다.

  2. Thread thread1 = new Thread(runnable) 이런식으로 스레드를 생성 했을때 메모리의 힙 영역에 thread1이 저장되고 thread1을 위한 스택 영역이 생성된다고 보면 될까요?

  3. OS가 생성한 커널 스레드는 메모리 어디에 저장 되는지 궁금합니다.

  4. JVM은 JNI라는 기술을 사용해 자바의 유저 스레드와 커널 스레드를 매핑 해주는 작업만 해주고 이후에 스레드 관리는 OS가 하는건지 궁금합니다.

  5. 스레드를 생성할때마다 해당 스레드를 위한 스택 영역이 생성된다고 하셨는데 이때 커널 스레드를 위한 스택도 만들어지는 건지 아니면 커널 스레드가 유저 스레드의 스택 영역을 가져다 쓰는건지 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 감바스님.

자바 스레드와 커널 스레드의 관계 및 메모리 관리에 대한 질문을 주셨네요. 관련한 유사한 질문과 그에 대한 답변을 몇 가지 찾아드렸습니다:

  1. 자바 메모리 구조와 CPU에 대해 질문이 있습니다.” - 여기에서는 JVM에서의 메모리 구조와 CPU와의 관계, 그리고 스레드 생성 시의 메모리 배치에 대한 자세한 설명이 있습니다.

  2. 스레드와 메모리영역 질문” - 스레드 객체의 생성 및 메모리 할당, 그리고 스레드가 수행되는 동안 메모리 관리에 대한 논의를 찾아볼 수 있습니다.

  3. 자바 메모리 구조에 대해 질문드립니다.” - 자바의 메모리 영역, 특히 힙과 스택, 그리고 스레드 관점에서의 메모리 관리에 대해 다룹니다.

질문에 대한 간단한 요약도 함께 제공하겠습니다:

  1. 자바의 ThreadRunnable은 기본적으로 자바의 유저 스레드입니다. 유저 스레드는 운영체제가 제공하는 커널 스레드를 통해서 실행됩니다.

  2. Thread thread1 = new Thread(runnable); 와 같은 방식으로 스레드를 생성하면, thread1 객체는 힙 영역에 저장되고, 해당 스레드를 위한 스택 영역이 생성됩니다.

  3. 커널 스레드는 운영체제에 의해 관리되며, 그것이 저장되는 위치는 일반적으로 운영체제의 커널 메모리 공간입니다.

  4. JVM은 JNI를 통해 자바 유저 스레드와 운영체제의 커널 스레드를 매핑하고, 이후 스레드 관리는 운영체제가 담당하게 됩니다.

  5. 각 스레드를 생성할 때마다 해당 스레드를 위한 독립적인 스택 영역이 생성됩니다. 유저 스레드와 커널 스레드 모두 각각의 스택 공간을 가지게 됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

감바스님의 프로필 이미지
감바스
질문자

  1. 운영체제의 커널 메모리 공간에 대해 좀 더 자세히 얘기 해주실 수 있을까요

  2. 5번 질문에서 유저 스레드와 커널 스레드 모두 각각의 스택 공간을 가지게 된다고 얘기해주셨는데 각각의 스택 공간은 독립적인 공간인가요(데이터를 담는 내용이 아에 다른건지 궁금합니다.) 아니면 서로 연관되어 있는 공간인가요?

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 감바스님

  1. 운영체제의 커널 메모리에 대한 부분은 강의 내용과 무관한 내용이어서, 이 부분은 운영체제 관련해서 별도로 학습하시는 것을 권장드립니다.

  2. 유저 스레드와 커널 스레드의 스택 공간은 독립적인 공간이며, 담고 있는 데이터도 서로 다릅니다.
    예) 유저 스택의 데이터: 애플리케이션 레벨에서의 함수 호출 정보, 로컬 변수, 반환 주소 등이 저장됩니다.


    커널 스택의 데이터: 커널 함수 호출 정보, 커널 레벨의 로컬 변수, 시스템 콜 처리 상태 등이 저장됩니다.

     

    감사합니다.

감바스님의 프로필 이미지
감바스

작성한 질문수

질문하기