프로세스와 스레드

성찬홍·2024년 8월 10일
0

Computer Science

목록 보기
1/6

프로그램 , 프로세스, 스레드란?

프로그램

  • 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태
    - 메모리가 올라가 있지 않은 : 아직 운영체제가 프로그램에서 독립적인 메모리 공간을 할당해주지 않았다는 뚯으로, 모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 실행해 줘야 실행될 수 있다.
    - 정적인 상태: 단어 그대로 , 움직이지 않는 상태

=> 프로그램이라는 단어는 실행되지 않은 파일 그 자체를 말한다.

프로세스

  • 운영체제로부터 자원을 할당받은 작업의 단위를 말한다.
  • 프로그램을 실행하는 순간 해당하는 파일은 컴퓨터 메모리 상에 올라가게 되고, 이 상태를 동적인 상태라 하며, 이 상태에의 프로그램을 프로세스라고 한다.
  • 스케쥴링 단계에서의 '작업'과 같은 단어라고 봐도 무방하다.

프로세스의 모습

  • 프로세스가 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당받는데, 위 사진과 같이 각각 독립된 영역으로 Code/Data/Stack/Heap의 형식으로 할당받는다.

스레드

  • 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
  • 스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동한다.
  • 스레드끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 된다.
  • 스레드는 프로새스의 코드에 정의된 정차에 따라 실행되는 특정한 수행 경로이다.

=> 프로그램은 코드 덩어리 파일이다.
=> 이 프로그램을 실행한 것이 프로세스이다.
=> 스레드는 프로세스의 코드에 정의된 절차에 따라 실행되는 특정한 수행 결로이다.

스레드의 모습

  • 스레드는 메모리를 서로 공유할 수 있다.
  • 스레드는 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 따로 할당받는다.
  • 나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공유한다.
  • 각각의 스레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다.

프로세스와 스레드의 중요한 차이가 될 것 같은 부분

  • 만약 한 프로세스가 실행하다가 오류가 나서 프로세스가 강제 종료된다면, 다른 프로세스가 영향이 있을까?
    - 공유하고 있는 파일을 손상시키는 경우가 아니라면, 아무런 영향을 주지 않는다.
  • 그러나 , 스레드는 Code/Data/Heap 메모리 영역의 내용을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다.

어떤 방식으로 메모리를 공유하는 이유는?

  • 스레드가 흐름의 단위이기 때문에, CPU 입장에서 최소 작업단위이다.
  • CPU는 작업을 처리할 때 스레드를 최소 단위로 삼고 작업을 하게 되고, 반면 운영체제 관점에서 프로세스가 최소 작업단위가 된다.
  • 하나의 프로세스는 하나 이상의 스레드를 가진다.
    - 따라서 ,운영체제 관점에서는 프로세스가 최소 작업 단위인데, 이 때문에 같은 프로세스 소속의 스레드끼리 메모리를 공유하지 않을 수가 없다

멀티태스킹, 멀티 스레드

  • 멀티태스킹 : 하나의 운영체제 안에서 여러 프로세스가 실행되는 것
  • 멀티스레드 : 하나의 프로세스가 여러 작업을 여러 스레드를 사용하여 동시에 처리하는 것

=> 장점
: Context-Switching 할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
: 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 떄문에 통신의 부담이 적어서 응답시간이 빠르다.

=> 단점
: 스레드 하나가 프로세스 내 차원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
: 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수 밖에 없다.

정리

  • 운영체제가 프로세스에게 Code/Data/Stack/Heap 메모리 영역을 할당해 주고 최소 작업 단위로 삼는 반면, 스레드는 프로세스 내에서 Stack 메모리 영역을 제외한 다른 메모리 영역을 같은 프로세스 내 다른 스레드와 공유한다.
  • 프로세스는 다른 프로세스와 정보를 공유하려면 IPC를 사용하는 등의 번거로운 과정을거쳐야 하지만, 스레드는 기본 구조 자체가 메모리를 공유하는 구조이기 때문에 다른 스레드와 정보 공유가 쉽다.
    그래서, 멀티 태스킹보다 멀티스레드가 자원을 아낄 수 있게 된다.
  • 스레드의 스케쥴링은 운영체제가 처리하지 않기 때문에 프러그래머가 직접 동기화 문제에 대응할 수 있어야 한다.
profile
꾸준한 개발자

0개의 댓글