[운영체제] 프로세스, 스레드

유네스코d·2023년 5월 17일

OS

목록 보기
1/2

🤔프로세스 vs 스레드?

프로세스 : 운영체제로부터 자원을 할당받는 작업의 단위
스레드 : 프로세스 내에서의 실행 흐름의 단위


📌프로세스 (Process)

위의 그림처럼 프로그램이 메모리에 올라가면 인스턴스화되어 프로세스가 된다.
이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행한다.

특징

  • 프로세스마다 Stack, Heap, Data, Code의 구조로 되어있는 독립된 메모리 영역을 할당받는다.
    (스택,힙 : 동적 영역 / 데이터,코드 : 정적 영역)
  • 최소 하나의 스레드를 가지고 있다.
  • 멀티프로세스 과정에서 Context Switching(컨텍스트 스위칭)을 통해 프로세스를 교체한다.
  • 각 프로세스는 별도의 주소 공간에서 실행되기 때문에, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, Inter-Process Communication)을 사용해야 한다.
    ex) 파이프, 파일, 소켓 등을 이용한 통신 방법

단점

  • 프로세스는 Context Switching 과정에서 독립된 메모리 영역 전체를 교체해야하기 때문에 오버헤드가 발생할 수 있다.
    → 효율적인 자원 사용을 위해 멀티 스레드를 사용

📌스레드 (Thread)

스레드는 프로세스 내에서의 실행 흐름의 단위이고 위 그림과 같이 프로세스는 여러 스레드를 가질 수 있다.
유튜브를 예로 들자면, 동영상을 재생하면서 다른 페이지들을 돌아다니며 데이터들을 받아올 수 있다. 이렇게 한 개의 프로세스(유튜브) 안에서도 여러 가지 일을 동시에 할 필요성이 있고 이를 위해 스레드가 존재하는 것이다.

특징

  • Code, Data, Heap, Stack을 각각 생성하는 프로세스와 달리,
    스레드는 프로세스 내에서 Stack 영역만 따로 할당받고 Code, Data, Heap 영역은 스레드끼리 공유한다.
  • 같은 프로세스 안에 있는 스레드들은 같은 Heap 공간을 공유한다. (프로세스는 다른 프로세스의 메모리에 접근할 수 없음)

장점

  • Code, Data, Heap 영역의 자원을 공유하기 때문에 멀티스레딩을 할 때 효율성이 높고 응답 시간이 단축된다.
  • 동시성에도 큰 장점을 가진다.
    (*동시성 : 서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것처럼 보여주는 것)

단점

  • 한 스레드에 문제가 생기면 다른 스레드에도 영향을 미친다.
  • 여러 스레드가 동시에 작업을 하면 공유된 영역의 데이터를 동시에 사용하다가 충돌이 날 가능성이 있으므로 주의해야 한다.
    (이러한 충돌을 막기 위해 세마포어, 뮤텍스를 사용한다)



📝면접 대비

Q. 프로세스와 스레드의 차이점이 무엇인가요?

A. 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 프로세스 내의 실행 흐름입니다. 스레드 덕분에 유튜브에서 동영상을 재생하며 다른 페이지들을 돌아다닐 수 있습니다.

둘의 가장 큰 차이점은 구조일 것 같습니다.
프로세스는 Code, Data, Heap, Stack의 구조를 독립적으로 할당받지만 스레드는 프로세스 내에서 Stack부분만 새로 할당받고 Code, Data, Heap 영역은 공유합니다.

멀티프로세스란 하나 이상의 일을 여러 프로세스에서 병렬로 처리하는 것을 말하는데, 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 Context Switching이 일어납니다. 프로세스는 각각 독립된 메모리 영역이기 때문에 4가지 영역 전체를 변경해야 하므로 Context Switching 과정에서 오버헤드가 발생할 수 있다는 단점이 있습니다.

이러한 단점을 해결하기 위해 멀티스레드를 사용합니다.
스레드는 프로세스 내에서 Stack 영역만 따로 할당받고 Code, Data, Heap 영역은 공유하기 때문에 멀티스레드를 할 때 효율성이 높고 응답 시간이 단축됩니다. 멀티프로세스의 단점인 오버헤드 또한 해결해줍니다.

이렇게 보면 멀티스레드이 좋아보이지만 한 스레드에 문제가 생기면 다른 스레드에도 영향을 미친다는 단점이 있습니다. 또한 여러 스레드가 동시에 작업을 하면 공유된 영역의 데이터를 동시에 사용하다가 충돌이 날 가능성이 있으므로 주의해야 합니다.
(이러한 충돌을 막기 위해 세마포어, 뮤텍스를 사용합니다)

profile
yune's coding

0개의 댓글