프로세스 & 스레드

숭이·2021년 4월 7일
0

OS

목록 보기
1/11

프로그램 VS 프로세스 VS 스레드

  • 프로그램 : 보조기억장치에 존재하는 실행파일
  • 프로세스 : 메모리에 로드되어 실행중인 작업
  • 스레드 : 프로세스 안에서 실행되는 작업 흐름 단위

    * 기본적으로 프로세스마다 최소 1개의 스레드를 보유하고 있다.

프로세스 메모리

  • 메모리는 Code, Data, Heap, Stack 영역으로 구분되어 있다.

    - Code : 코드 자체를 구성하는 메모리 영역. 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역
    - Data : 전역변수, 정적변수, 배열, 구조체 등이 저장. 프로그램이 실행될 때 생성되고 프로그램이 종료되면 시스템에 반환된다. 이때 초기화 된 데이터는 Data 영역에 저장되고 초기화 되지 않은 데이터는 BSS(Block Stated Symbol)영역에 저장된다.
        -> 초기화되지 않은 데이터는 RAM에 저장하여 메모리 저장 효율을 높인다.
    - Heap : 메모리를 동적할당 할 때 사용. 데이터를 저장하기 위해 malloc() 함수를 사용. 메모리 공간이 많다는 것이 장점이지만 포인터로 메모리영역을 접근해야 하기 때문에 읽고 쓰는것이 느리다는 단점이 있음.
    - Stack : 지역변수, 매개변수, 리턴 값, 돌아올 주소 등이 저장(잠시 사용되었다가 사라지는 데이터). 함수호출 시 생성되고 함수 종료시 시스템에 반환된다. 메커니즘은 LIFO(Last in First out)의 규칙을 따른다.

    - Code, Data,BSS 영역은 컴파일 시 크기가 결정되고 Heap, Stack 영역은 런타임시 크기가 결정된다.
    - Stack의 데이터들은 쉽게 저장되고 삭제되므로 데이터 용량이 불확실함. 따라서 stack은 밑에서부터 저장(메모리의 높은 주소에서 낮은 주소방향으로 할당), Heap은 위에서부터 저장하며(메모리의 낮은 주소에서 높은 주소방향으로 할당) 구분되어 저장된다.

프로세스 & 스레드

  • 스레드 : 하나의 프로세스 내에서 실행되는 독립적인 일의 단위.

    - 프로세스는 각각 독립된 메모리 영역을 할당받는다.(프로세스끼리 메모리 공유 X)
    - 스레드는 프로세스 내에서 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.(Stack을 제외한 Code, Data, Heap 영역 메모리 공유 O)
          -> 장점 : 스레드 간 데이터를 주고받는 것이 간단해지고 시스템 자원소모가 줄어들게 된다.
          -> 단점 : 자원공유의 문제가 발생할 수 있다.

멀티 프로세스

  • 멀티 프로세스 : 하나의 응용프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 방법.
    - 장점 : 여러개의 프로세스 중 하나에 문제가 발생하여도 다른 프로세스에 영향을 주지 않는다.
    - 단점 : 프로세스 사이의 통신이 불편함(각각의 프로세스는 독립된 영역을 할당받기 때문)
              Context Switching 과정에서 오버헤드가 발생한다.(캐쉬에 있는 모든 데이터를 모두 리셋하고 다시 캐쉬정보를 불러와야 한다.)
     Context Switching : CPU에서 여러 프로세스를 돌아가면서 작업을 처리할 때 프로세스의 상태정보를 저장하고 복원하는 일련의 과정

멀티 스레드

  • 멀티 스레드 : 하나의 응용프로그램을 여러개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 방법.
    - 장점 : 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
              스레드간 데이터를 주고받는 것이 간단해지고 시스템 자원소모가 줄어들어 시스템 처리량이 증가한다.
              Stack을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어 프로그램 응답시간을 단축시킨다.
    - 단점 : 자원 공유의 문제가 발생한다.(동기화 문제)
              하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다(하나의 스레드가 데이터공간을 망가트리면 모든 스레드가 오류남)
              주의 깊은 설계가 필요하고 디버깅이 까다롭다.

1개의 댓글

comment-user-thumbnail
2021년 4월 17일

좋아요 ^^

답글 달기