[CS스터디]프로세스 & 스레드

지영·2023년 5월 16일
0

CS

목록 보기
8/77

오늘은 한 번쯤 다들 들어보셨을 프로세스와 스레드에 대해 포스팅하겠습니다 !

1. 먼저 프로세스와 스레드란 무엇일까?

1) 프로세스란?

 A Program in execution
  • 메모리 상에서 프로그램 실행 시 운영체제에서 active하게 될 때의 실행 단위
  • 따라서 운영체제로 부터 시스템 자원을 할당 받는 작업 단위로도 볼 수 있음
  • 독립된 메모리 영역을 할당 받음 -> 해당 메모리 = Text(code) + Data + Stack + Heap
  • 프로세스 마다 PCB를 가지며 그 안에는 ID, Register, PC등이 있음

2) 스레드란?

  • 프로세스 내에서 실행되는 단위
  • 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
  • 스레드끼리는 프로세스 내 Text(code), Data, Heap을 공유
  • Stack의 경우 : 스레드 마다 Test(code), Data, Heap을 별도로 할당받음(공유X), 그 이유는 각 스레드마다 실행하는 흐름이 다 다르고 종료 후에 돌아갈 위치, 입력되는 파라미터, 지역 변수를 저장할 공간이 각각 존재해야 하기 때문임.

+) 📑 Text, Data, Stack, Heap의 용도

  • Text : 코드 자체를 구성하는 메모리 영역
  • Data : 전역변수, 정적변수, 배열 저장
  • Heap : 동적 할당 시 (malloc(), new()) 사용
  • Stack : 지역변수, 매개변수 등 임시 메모리 영역

2. 프로세스와 스레드의 차이점

1) 프로세스

  • 각 프로세스 마다 독립된 메모리 영역을 할당 받기 때문에, 다른 프로세스가 오류로 인해 종료되어도 다른 프로세스가 영향을 받지 않음. 프로세스 간의 통신과 다른 프로세스의 자원을 사용하고자 한다면 IPC를 통해 이루어짐.

2) 스레드

  • Text(code), Data, Heap을 공유하기 때문에 한 프로세스 내의 스레드 하나가 오류로 인해 종료되면 다른 스레드도 영향을 받아 종료됨.

⚒️ 각각 쓰이는 곳도 달라요!

  • 멀티 스레드 : 한번에 수많은 비슷한 작업을 처리할 때 사용. 스레드간의 영향이 있음
  • 프로세스 : 한 번에 수많은 작업을 처리할 때 사용. 프로세스간 영향이 적음 ex) 윈도우에서 여러 프로그램 사용, 구글 크롬 탭

3. 멀티 프로세스, 멀티 스레드

1) 멀티 프로세스

  • 하나의 프로그램을 여러개의 프로세스로 구성, 각 프로세스가 병렬적으로 작업을 수행
  • 장점 : 안전성 (메모리 침범 문제가 낮음)
  • 단점 : 각각의 독립된 메모리를 가지고 있기 때문에, 작업량이 많을 시에는 오버헤드가 발생함. 프로세스 교체가 일어날 때 Context Switching으로 인한 성능 저하도 가능
  • 어디서 쓰일 수 있는가 ? : 속도는 느려도 안정성이 보장되어야 하는 곳 ex) 은행, 금융 서버

Context Switching

동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하던 다음 순번의 프로세스가 프로세스가 동작하면서 이전에 보관하던 프로세스 상태를 복구하는 과정, 즉 프로세스 상태 정보를 저장하고 복원하는 일련의 과정

2) 멀티 스레드

  • 하나의 프로그램을 여러 개의 스레드로 구성, 각 스레드로 하나의 작업을 처리하는 것
  • 장점: 같은 프로세스에서 스택을 제외한 모든 메모리를 공유하기 때문에 Context Switching 부담이 적음, fork 등을 통한 자식 프로세스 생성이 없어서 시스템 콜이 감소하고 자원관리가 효율적임.
  • 단점 : 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받음, 자원 공유의 문제도 발생, 안정성 문제가 있음 (Mutex을 통해 Critical Section을 해결할 수 있음 -> 하나의 스레드가 공유 데이터 값을 변경할 때 다른 스레드가 그 값을 읽지 않도록 !)
  • 어디서 쓰일 수 있는가 ? : 반응 속도가 빨라야 하는 서버의 경우 ex) 게임 서버

+) ✔️ 동시성, 병렬성

  • 동시성 : 동시에 실행되는 것 같이 보이는 것, 싱글코어에서 동작시키는 방식
  • 병렬성 : 실제로도 동시에 여러 작업이 처리되는 것, 멀티코어에서 동작시키는 방식

3. 프로세스의 주소공간🏡

이제 CPU에 의해 프로세스가 실행됨을 알고 있습니다! 즉, 프로세스가 생성되고 메모리에 프로세스 주소 공간이 할당됩니다

프로세스 주소 공간 = (코드 + 데이터 + 스택)으로 나눈 이유?

최대한 데이터를 공유해서 메모리 사용량을 줄이기 위함입니다.
Code는 같은 프로그램 자체에서는 모두 같은 내용이므로 따로 관리하여 공유합니다.
단, Stack과 Data는 스택의 구조와 전역변수의 활용성을 위해 나눈 것입니다.
프로그램의 함수와 지역 변수는 LIFO특성을 가진 스택에서 실행됩니다. 따라서 전역변수는 Data영역에서 따로 관리하면 메모리를 아낄 수 있다는 장점이 있습니다.

profile
꾸준함의 힘을 아는 개발자📍

0개의 댓글