코드 훔쳐보는 변태 코더
춤 좋아하는 백엔드 개발자(였으면 좋겠다)
프로세스랑 스레드는 무슨관계?? ;ㅅ;

프로세스

프로그램 → 하드디스크 등의 저장매체에 저장되는 실행 파일의 형태를 갖고있는 것

프로세스 → 프로그램이 메모리에 적재되어있는 상태를 뜻한다.

  • 프로세스는 프로그램 실행에 필요한 모든 자원을 할당받는다.
  • 코드공간 / 힙공간 / 스택공간 / 데이터공간 을 갖고있다.

프로세스는 기본적으로 코드공간 힙공간 스택공간 데이터공간 을 가집니다. (코데힙스)

프로세스의 특징

  • 운영체제는 프로그램을 메모리에 적재하고 프로세스로 다루게 된다.
  • 메모리 할당 → 코드 , 데이터 적재
  • 프로세스들은 서로 독립적인 메모리 공간을 가지고 프로세스마다 고유한 번호 **(PID)**를 할당한다.
  • 프로세스의 모든 정보는 커널에 의해 관리된다.
  • 프로세스는 기본적으로 실행 - 대기 - 잠자기 - 대기 - 실행 - 종료 등의 생명주기를 가지고 커널에 의해 수행된다.

운용되는 동안에는 대기하고있는 프로세스 (기본적으로는 단순히 대기도 아닌 하드디스크에 저장되어있다.)

  • 그럼 프로세서는 ? → 하드웨어적인 부분으로 하드웨어 처리기라는 의미를 갖고있다.

프로세스는 프로그램의 단위라고 할 수 있으며 프로그램의 정보를 저장한 인스턴스라고도 볼 수 있습니다.

프로세스 관리

  • 커널 (운영체제의 핵심 부분을 의미합니다. 이 부분은 하드웨어와 소프트웨어 간의 인터페이스 역할을 하며, 프로세스 관리, 메모리 관리, 입출력 관리 등 시스템의 핵심적인 기능을 제공합니다. )
    • 커널에 의해 커널 영역에 프로세스 테이블을 만들고 프로세스 목록을 관리한다.
  • 그렇다면 한 프로그램을 여러번 실행할땐 ?
    • 프로그램 실행시마다 독립된 프로세스가 생성되고 다중 인스턴스라고 부른다.
      • 각 프로세스에 독립된 메모리 공간이 할당되며 별개의 프로세스로 취급한다.

프로세스 구성

  • 코드 영역
    • 프로그램의 코드가 적재되는 영역이다.
  • 데이터 영역
    • 프로그램의 변수 공간이라 볼 수 있다.
    • 프로세스 적재시 할당되며 종료시 소멸된다.
  • 힙 영역
    • 동적으로 사용할 수 있도록 할당된 공간이다.
  • 스택 영역
    • 함수가 실행될 때 사용될 데이터를 위해 할당된 공간이다.

프로세스는 기본적으로 자바 혹은 자바스크립트와 같은 언어들의 컨텍스트와 비슷한 영역을 갖고있습니다.

스레드

  • 스레드의 출현 목적
    • 멀티태스킹의 문제점
      • 커널에 많은 시간과 공간이 부담되며 시스템의 전체 속도를 저하시킨다.
    • 효율적인 새로운 실행 단위가 필요했기 때문에 스레드가 출현했다.
  • 스레드는 기본적으로 프로세스보다 크기가 작다.
  • 프로세스보다 생성 및 소멸이 빠르고 이로인해 컨텍스트 스위칭이 빠르다.

스레드의 개념

  • 스레드는 실행 단위이며 스케줄링 단위이다.
    • 하나의 작업의 개념을 갖고있다.
  • 운영체제에게는 실행단위이고 스케줄링 단위이다.
    • 스케줄링이란 ? → 시스템 내에서 실행될 작업들을 어떤 순서에 따라 할당하고 관리하는 것을 의미합니다.
  • 스레드 또한 코드 데이터 힙 스택을 가진 실체이며 프로세스와 마찬가지로 스레드마다 TCB (스레드 컨트롤 블럭) 이 존재한다.
    • 프로세스는 스레드들의 컨테이너라고 볼 수 있다.
      • 쉽게 생각하자면 리액트의 useState 가 클로저 개념을 사용해서 캐싱하고 변화를 눈치채는것처럼 프로세스는 스레드를 캐싱해두고 작업에 대한 정보를 얻어서 관리한다고 생각하시면 돼요!
    • 마찬가지로 프로세스는 회사 / 스레드는 직원에 비유할 수 있다.
      • 직원 → 회사의 목적을 위해 일을 하는 단위
      • 스레드 → 프로세스의 목적을 위해 동시에 실행될 작업 단위
    • 프로세스는 스레드들의 공유 공간을 제공한다.
      • 모든 스레드는 프로세스의 코드 데이터 힙을 공유하며 프로세스의 스택 공간을 나누어 사용한다. 따라서 스레드 사이의 통신이 용이하다. (멀티 프로세스와의 가장 큰 차이점)
    • 프로세스의 속한 모든 스레드가 종료되면 프로세스가 종료된다.
  Comments,     Trackbacks