본문 바로가기
OS

[OS] 프로세스 & 스레드

by 차가운개발 2024. 10. 22.

 

프로세스: 운영체제로부터 자원을 할당받은 작업의 단위

스레드: 프로세스가 할당받은 자원을 이용하는 실행흐름의 단위

 

 

ㅇ 프로그램이란

** 파일이 저장 장치에 저장되어 있지만, 메모리에는 올라가 있지 않은 정적인 상태

실행되기 전의 파일 즉 코드 덩어리라고 할 수 있다.

프로그램을 실행하는 순간 해당 파일이 컴퓨터의 메모리에 올라가게 되고, 이 상태를 동적인 상태라하며 

동적인 상태의 프로그램을 프로세스라고한다. 

 

 

ㅇ 프로세스와 스레드

과거에는 프로그램을 실행할 때 시작부터 끝까지 프로세스 하나만을 사용해서 진행했다고한다. 시간이 흐를수록 하나의 프로세스만을 사용하기에는 벅찼고, 이를 해결하기 위해 프로세스를 여러 개  실행하면 되지 않을까? 라는 생각을 하지만, 

 

운영체제는 안전성을 위해 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약을 두고 이를 벗어나는 정보에 접근하면 오류를 발생시킨다.

 

이러한 이유로 프로세스보다 더 작은 실행 단위의 개념이 필요하게 되었고, 이 개념이 바로 스레드다.

 

프로세스의 특성의 한계를 해결하기 위해 만들어진 개념이기 때문에, 스레드는 스레드 간 메모리를 공유하며 작동한다.

스레드끼리 프로세스의 자원을 공유하며 프로세스의 실행 흐름의 일부가 되는 것이다.

 

 

ㅇ 프로세스와 스레드의 동작 방식

프로세스

  • 프로세스는 메모리에 올라갈 때 운영체제로부터 시스템의 자원을 할당받는다.
  • 운영체제는 프로세스마다 각각 독립된 메모리 영역을 Code/Data/Stack/Heap의 형식으로 할당한다.
  • 독립된 메모리 영역이기 때문에 다른 프로세스의 변수나 자료에 접근할 수 없다.

 

스레드

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

 

 

*프로세스와 스레드의 차이

  • 하나의 프로세스를 실행하다 오류가 발생하여 프로세스가 강제로 종료됐을 때, 공유하고 있는 파일을 손상시키는 경우가 아니라면, 아무런 영향을 주지 않는다.
  • 스레드는 메모리 영역을 공유하고 있기 때문에, 하나의 스레드에서 오류가 발생하면 같은 프로세스 내의 다른 스레드도 모두 강제종료된다.

 

왜 스레드는 메모리를 공유할까?

스레드는 CPU 입장에서는 최소 작업 단위가 된다. 하지만 운영체제는 이렇게 작은 단위까지 직접 작업하지 않기 때문에 운영체제의 관점에서는 프로세스가 최소 작업단위다. 프로세스는 하나 이상의 스레드를 가진다. 운영체제 관점에서는 프로세스가 최소 작업 단위이기 때문에 같은 프로세스 소속의 스레드가 메모리를 공유하는 것이다.

 

 

ㅇ 멀티태스킹

멀티태스킹은 컴퓨터에서 여러 작업을 동시에 수행하는 능력을 의미한다. 이를 구현하는 방식에는 멀티프로세스와 멀티스레드 방식이 있다.

 

멀티 프로세스

 

장점

  • 안정성
    각 프로세스가 독립된 메모리 공간을 사용 다른 프로세스에 영향을 미치지 않는다.
  • 자원 격리
    메모리와 자원이 독립적이므로, 메모리 오염이나 자원 충돌 문제를 피할 수 있다.

단점

  • 높은 메모리 사용
    독립된 메모리 공간을 사용하여 많은 수의 프로세스를 동시에 실행할 경우 메모리 부족 문제가 발생할 수 있다.
  • 문맥 교환 비용
    프로세스간 문맥 교환(Context-Switching)은 스레드 간 교환보다 비용이 크다. 독립적인 메모리 공간을 갖기 때문
  • 프로세스 간 통신의 복잡성
    메모리를 공유하지 않기 때문에 데이터를 주고 받으려면 프로세스 간 통신(IPC)을 사용해아 하며 이 과정이 복잡할 수 있다.

 

멀티 스레드

 

장점

  • 메모리 효율성
    메모리 공간을 공유하기 때문에 메모리 사용이 효율적이다.
  • 빠른 문맥 교환
    메모리 공간을 공유하기 때문에 스레드 간 문맥 교환은 프로세스 간 교환보다 오버헤드가 적다. 
  • 데이터 공유 용이
    메모리 공간을 공유하기 때문에 데이터를 공유하거나 통신하는 것이 간단하고 빠르다.

단점

  • 안정성 문제
    하나의 스레드에서 오류가 발생하면 해당 스레드가 속한 프로세스 전체에 영향을 미칠 수 있다.
  • 동기화 문제
    여러 스레드가 동시에 같은 자원에 접근할 때 자원 경쟁이나 교착 상태같은 문제가 발생할 수 있다.
    이를 해결하기 위해 동기화 처리가 필요하다.

 

참고: https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

'OS' 카테고리의 다른 글

CS OS 세마포어와 뮤텍스  (0) 2024.10.22
CS OS Dead Lock(교착상태)  (0) 2024.10.22
CS OS IPC(Inter Process Communication)  (0) 2024.10.22
CS OS PCB & Context Switching  (2) 2024.10.22
CS OS 인터럽트  (0) 2024.10.22