ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로세스와 스레드
    개발(ETC) 2024. 7. 17. 20:03

     

    1. 프로세스

    - 프로그램은 실제 실행하기 전까지는 단순한 파일에 불과

    - 프로그램을 실행하면 프로세스가 만들어지고 프로그램이 실행됨

    - 이렇게 운영체제 안에서 실행중인 프로그램을 프로세스라 함

    - 프로세스는 실행 중인 프로그램의 인스턴스

    - 자바 언어로 비유하자면 클래스는 프로그램이고, 인스턴스는 프로세스이다. 

     

    프로세스는 실행 중인 프로그램의 인스턴스이다. 각 프로세스는 독립적인 메모리 공간을 갖고 있으며, 운영체제에서 별도의 작업 단위로 분리해서 관리된다. 각 프로세스는 별도의 메모리 공간을 갖고 있기 때문에 서로 간섭하지 않는다. 

     

    프로세스가 서로의 메모리에 직접 접근할 수 없다. 프로세스는 이렇듯 서로 격리되어 관리되기 때문에, 하나의 프로세스가 충돌해도 다른 프로세스에는 영향을 미치지 않는다. 

     

    쉽게 이야기해서 특정 프로세스(프로그램)에 심각한 문제가 발생하면 해당 프로세스만 종료되고, 다른 프로세스에 영향을 주지 않는다.

     

     

    프로세스 메모리 구성

    코드 섹션

    - 실행할 프로그램의 코드가 저장되는 부분

    데이터 섹션

    - 전역 변수 및 정적 변수가 저장되는 부분

    힙 (Heap)

    - 동적으로 할당되는 메모리 영역

    스택 (Stack)

    - 메서드(함수) 호출 시 생성되는 지역 변수와 반환 주소가 저장되는 영역 (스레드에 포함)

     

     

    2. 스레드

    - 프로세스는 하나 이상의 스레드를 반드시 포함.

     

    스레드는 프로세스 내 실행되는 작업 단위. 프로세스 내에서 여러 스레드 존재할 수 있으며, 이들은 프로세스가 제공하는 동일한 메모리 공간을 공유한다. 스레드는 프로세스보다 단순하므로 생성 및 관리가 단순하며 가볍다.

     

    메모리 구성

    공유 메모리

    - 같은 프로세스의 코드 섹션, 데이터 섹션, 힙(메모리)은 프로세스 안의 모든 스레드가 공유한다.

    개별 스택

    - 각 스레드는 자신의 스택을 갖고 있다. 

     

    프로그램이 실행된다는것은 어떤 의미일까?

    - 프로그램을 실행하면 운영체제는 디스크에 있는 파일 덩어리 프로그램을 메모리로 불러오면서 프로세스를 만든다.

     

    그럼 만들어진 프로세스를 어떻게 실행할까?

    - 프로그램이 실행된다는 것은 프로세스 안에 있는 코드가 한 줄씩 실행되는 것이다. 보통 main()부터 시작해서 하나씩 순서대로 내려가면서 실행된다.

     

    이 때 코드를 순서대로 하나씩 읽어 실행하는 것이 스레드이다. 

    (스레드를 번역하면 '실', '실을 꽤다')

     

    스레드는 프로세스 내에서 실행되는 작업 단위이다. 프로세스 내에 하나 혹은 여러개의 스레드가 존재할 수 있다. 그리고 스레드는 프로세스가 제공하는 동일한 메모리 공간을 공유한다. 

     

    단일 스레드: 한 프로세스 내에 하나의 스레드만 존재

    멀티 스레드: 한 프로세스 내에 여러 스레드가 존재

     

    하나의 프로세스 안에는 최소 하나의 스레드가 존재해야 프로그램이 실행될 수 있다.

     

    멀티스레드가 필요한 이유

    - 하나의 프로그램도 그 안에서 동시에 여러 작업이 필요하다.

    (ex. 유튜브 영상을 보는 동안 댓글도 달 수 있다.)

     

    운영체제 관점에서 본다면

    워드 프로그램 - 프로세스 A

    - 스레드1: 문서 편집

    - 스레드2: 자동 저장

    - 스레드3: 맞춤법 검사

     

    유튜브 프로세스 - 프로세스 B

    - 스레드1: 영상 재생

    - 스레드2: 댓글

     

     

    ...

     

     

    정리

     

    1. 프로세스

    - 프로그램을 실행하면 프로세스가 만들어지고 프로그램이 실행.

    - 운영체제 안에서 실행중인 프로그램을 프로세스라 함.

    - 독립적인 메모리 공간을 가짐.

    - 운영체제에서 별도의 작업 단위로 분리해서 관리됨.

    - 각 프로세스는 서로 격리되어 관리됨.

    - 즉 하나의 프로세스가 충돌해도 다른 프로세스에 영향을 미치지 않음.

     

    2. 프로세스 메모리 구성

    - 코드 섹션: 프로그램의 코드가 저장

    - 데이터 섹션: 전역 및 정적 변수 저장

    - 힙: 동적으로 할당되는 메모리 영역

    - 스택: 메서드 호출 시 생성되는 지역 변수, 반환주소가 저장 (스레드에 포함)

     

    3. 스레드

    - 프로세스 내 실행되는 작업 단위

    - 프로세스는 하나 이상의 스레드를 반드시 가짐

    - 여러 스레드도 존재 가능

    - 프로세스가 제공하는 동일한 메모리 공간을 공유

    - 프로세스보다 생성 및 관리가 단순하고 가볍다.

    - 멀티 스레드는 하나의 프로그램 안에서 여러 작업이 필요할 때 사용된다.

     

    4. 스레드 메모리 구성

    - 프로세스 공유 메모리 (코드 섹션, 데이터 섹션, 힙)를 모든 스레드가 공유

    - 각 스레드는 자신의 스택을 가짐.

     

     

    ...

     

     

    (참고)

    김영한의 실전 자바 - 고급 1편

Designed by Tistory.