Skip to content

2주차 월요일 그룹 4

CodingLuizy edited this page Jul 1, 2024 · 7 revisions

📣 프로세스, 스레드, 자바의 스레드 지원 등 관련 자료에 대해 그룹 구성원과 함께 자유롭게 학습해 주세요.

❓ 질문들

  1. 프로세스가 무엇인가요?
    • 커널 레벨에서 자원을 할당 받는 단위
  2. 스레드가 무엇인가요?
    • 프로세스 내에서 실행되는 독립적인 실행 단위
  3. 프로세스와 스레드의 차이점
    • 프로세는 커널에서 할당 받는 실행단위이고, 스레드는 프로세스 내에서의 실행되는 단위가 됩니다.
  4. 왜 프로세스는 스레드로 또 관리하나? 어떤 이점이 있길래?
    • 프로세스 내부에서 동작하기 때문에, 프로세스 내의 스레드는 메모리 공간을 공유하여 데이터 교환이 빠르고 효율적임 (컨텍스트 스위칭이 빠름)
  5. 스레드와 프로세스간 자원을 공유하려면 어떻게 할까요?
    • 스레드는 프로세스의 Code, Data, Heap, Stack 영역 중, Stack 영역을 제외한 나머지 영역을 공유하여 사용합니다.
    • 반면에 프로세스끼리의 자원을 공유하는 방법은 IPC 통신이 있습니다. (Inter-Process Communication)
  6. 자바에서는 스레드를 어떻게 다루나요?
    • java.lang.Thread를 통해서!
  7. 아파치 웹서버는 멀티프로세싱이고, 톰캣은 멀티스레드인데 왜 톰캣은 멀티스레드일까요? 어떤 이점이 있길래?
    • 아파치 웹 서버는 주로 정적 콘텐츠를 제공할때 최적화 되어 있음, 각 요청을 별도의 프로세스로 처리하는데 프로세스간 격리에는 유리하지만, 메모리 사용량이 많고, 컨텍스트 스위칭 오버헤드가 큽니다.
    • 동적 컨텐츠(서블릿, JSP 등)을 제공하는 데 최적화 되어 있습니다. 멀티스레딩 방식을 사용해 스레드간 데이터를 공유하여 빠른 응답이 필요한 동적 애플리케이션에 유리하다.
  8. 자바에서 유저스레드와 커널 스레드의 관계는?
  9. (할 수 있으면) 버츄얼 스레드는 왜 등장했고, 기존 유저스레드와 어떤 차이점이 있을까요?

🖥️ 프로세스

🔍 정의

  • 커널 레벨에서 자원을 할당 받는 단위
  • 포괄적인 개념: 컴퓨터에서 실행중인 프로그램
    • 자원을 소유하고 어떠한 기능을 수행하거나 스케줄링하는 객체

✍️ 구성 요소

  • Code Area: 불변 영역, 실행될 프로그램 코드가 적재되는 영역, 프로그램 실행 전 주 기억장치에 CPU가 해석할 수 있는 바이너리 코드 상태로 저장됨
  • Data Area: 불변 영역, 프로그램에서 고정적으로 만든 변수 공간, 전역 변수 및 정적 변수의 할당을 위해 존재함(BSS, GVAR)
  • Heap Area: 가변 영역, 프로세스의 실행 도중 동적 생성 영역
  • Stack Area: 가변 영역, 함수가 실행될 때 지역변수 및 함수, 함수 호출시 전달되는 인수 값
    • LIFO 방식으로 동작!
  • PCB: 프로세스를 관리하기 위한 데이터 구조
    • 프로세스 Context 정보가 모두 담겨 있음
    • 프로세스 생성시에 만들어지며, 모든 프로세스는 각기 고유의 PCB를 가짐
    • 완료된 프로세스에 대해서는 해당 PCB를 제거한다. → 프로세스가 자기 역할을 다 했는데 PCB가 살아있으면 Zombie Process라고 말함
    • PID, 프로세스 상태, 프로그램 카운터, 등등… 의 정보 저장
image

🛠️ 생성 방법

  • fork() 로 프로세스를 복제
  • exec() 로 새로운 프로세스로 오버레이

🛟 프로세스 생명 주기

👾 스레드

🔍 정의

  • 스레드는 프로세스 내에서 실행되는 독립적인 실행 단위이며 스케줄링 단위
  • 스레드는 프로세스의 일부분이기 때문에 프로세스의 자원들을 공유하지만, 스레드 각각 자신의 처리시간과 스택, 레지스터들이 할당됨

✍️ 구성요소

  • 스레드 컨텍스트
    • 스레드가 현재 실행중인 일체의 상황
    • CPU 레지스터 값들
  • 스레드 컨텍스트 정보
    • PC 레지스터
      • 실행 중인 코드 주소
    • SP 레지스터
      • 실행 중인 함수의 스택 주소
    • 상태 레지스터
      • 현재 CPU의 상태 정보
    • CPU에 기타 수십 개의 레지스터 있음
      • 데이터 레지스터 등
    • 컨텍스트 스위치 될 때 TCB에 저장

👍 장점

  • 프로세스의 PCB 컨텍스트 스위칭에 비해 TCB 컨텍스트 스위칭 비용이 훨씩 적기 때문에 새로운 스레드 생성 시간 / 비용이 절약되며, 프로세스 종료 시간보다 스레드 종료 시간이 짧다.
    • 한 프로세스 내의 스레드 간 교환 / 교체 시간이 짧다.
  • 동일 프로세스 내의 쓰레드는 메모리 및 파일 공유가 가능하다.
  • 프로그램의 구조를 단순화 할 수 있습니다.

🛟 스레드 생명 주기

커널 레벨 스레드

  • 스레드에 대한 정보(TCB)는 커널 공간에 생성되며 커널에 의해 소유됨
  • 응용프로그램이 시스템 호출을 통해 커널 레벨 스레드 생성
  • 커널이 만들고, 커널에 의해 스케줄
  • 스레드 주소 공간(스레드 코드와 데이터) : 사용자 공간에 존재
  • main 스레드는 커널 스레드
    • 응용프로그램을 적재하고 프로세스를 생성할 때 커널은 자동으로 main 스레드 생성
    • main 스레드의 TCB는 커널에 생성

사용자 레벨 스레드

  • 응용프로그램이 라이브러리 함수를 호출하여 사용자 레벨 스레드 생성
  • 스레드 라이브러리가 스레드 정보(U-TCB)를 사용자 공간에 생성하고 소유
    • 스레드 라이브러리는 사용자 공간에 존재
    • 커널은 사용자 레벨 스레드의 존재에 대해 알지 못함
  • 스레드 라이브러리에 의해 스케줄
  • 스레드 주소 공간(스레드 코드와 데이터) : 사용자 공간에 존재

☕️ 자바 스레드

자바 실행 시 기본적으로 생성되는 스레드들

  1. main 스레드
    • 자바 프로그램을 실행하면 main 메서드가 실행됩니다. 이 main 메서드는 자바 프로그램의 진입점이며, 이는 자바 런타임에 의해 자동으로 생성된 기본 스레드인 main 스레드에서 실행됩니다.
    • 모든 자바 애플리케이션은 기본적으로 하나의 main 스레드에서 시작합니다.
  2. 가비지 컬렉션 스레드
    • 자바의 자동 메모리 관리 시스템인 가비지 컬렉터(Garbage Collector)는 백그라운드에서 실행됩니다. 이 스레드는 자바 힙 메모리에서 더 이상 사용되지 않는 객체를 자동으로 정리하여 메모리 누수를 방지합니다.
    • 가비지 컬렉션은 독립적인 스레드로 실행되며, 주기적으로 실행되거나 필요에 따라 실행됩니다.
  3. JIT 컴파일러 스레드
    • 자바 런타임 환경에서는 Just-In-Time (JIT) 컴파일러가 사용되어 자바 바이트코드를 네이티브 머신 코드로 컴파일합니다. JIT 컴파일러는 자주 사용되는 메서드를 최적화하기 위해 백그라운드에서 실행됩니다.
    • JIT 컴파일러는 독립적인 스레드로 실행되어 애플리케이션의 성능을 최적화합니다.
  4. 기타 시스템 스레드
    • JVM 내부적으로 실행되는 여러 시스템 스레드가 있습니다. 예를 들어, JVM 신호 처리, 모니터링, 디버깅 등을 담당하는 스레드가 있습니다.

자료출처

명품 운영체제

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally