프로세스(Process)와 스레드(Thread)

이호인·2022년 4월 6일
0

CS

목록 보기
1/2

📌 프로그램(Program)

  • 프로그램은 어떤 작업을 하기 위해 해야할 일을 순서대로 나열한 것.
  • 어떤 작업을 위해 실행할 수 있는 '정적인 상태'의 파일 (ex. exe파일)
  • 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행절차를 표현해 놓은 명령어들의 집합 / 보조 기억 장치에 저장되어있다.

👉 실행시키기 전에는 코드가 구현되어있는 파일일 뿐. 사용하려면 보조 기억장치에서 프로세스가 필요로 하는 재료들이 메모리에 올라가야한다.

📌 프로세스(Process)

  • 프로그램이 실행되어 돌아가고 있는 상태.
  • 컴퓨터에서 연속적으로 실행되고 있는 '동적인 상태'의 컴퓨터 프로그램이다.


👉 (ctrl + alt + delete)의 작업관리창에 표시되어있는 것들 !

컴퓨터에게 프로세스는

  • 프로세스는 운영체제가 메모리 등의 필요한 자원을 할당해준 ' 실행중인 프로그램' 이다.
  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위이다.
  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스를 말한다.
프로그램을 실행하면 -> 운영체제로부터 실행에 필요한 자원을 할당 받음 -> 프로세스

프로세스의 특징

  • 독립된 메모리 영역을 할당 받는다.

1) Code : 코드 자체를 구성하는 메모리 영역 (프로그램 명령)
2) Data : 전역 변수, 정적 변수, 배열 등 (초기화 된 데이터)
3) stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)
4) Heap : 동적 할당 시 사용 (new(), mallock() 등)

  • 해당 프로세스에 대한 정보를 담고 있는 PCB 블럭이 프로세스 생성 시 함께 만들어진다.

  • 각 프로세스는 별도의 주소 공간에서 실행되고 서로 독자적인 메모리 공간을 갖기 때문에 서로 메모리 공간을 공유할 수 없다. 즉, 다른 프로세스의 변수나 자료 구조에 접근할 수 없다.

  • 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야한다.

  • 프로세스는 최소 하나 이상의 스레드를 포함한다.

📌 프로세서의 프로세싱

🔍 프로세서 : 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛. 이는 중앙 처리 장치(CPU)를 뜻하며 명령어를 해석하는 컴퓨터의 한 부분

예전엔 컴퓨터가 한번에 하나의 동작만을 수행했다. 다중 작업을 가능하게하는 '멀티태스킹' 기능이 나오면서 컴퓨터가 프로세스 여러 개를 함께 돌리는 것이 가능해졌다.

여러 프로세스를 한꺼번에 돌리는 작업은 동시적, 병령적 또는 이 둘의 혼합으로 이루어진다.

🔍 Context Switching : 프로세서는 원래 한번에 하나의 프로세스만 실행시킬 수 있다.
A 프로세스가 올라갔다가 내려와야 B 프로세스가 올라갈 수 있고 다시 A 프로세스가 올라가기 위해서는 B 프로세스가 내려오는 작업이 필요하다. ( 반복이 많아지게 되면 CPU의 부담이 늘어나고, 중복된 자원들이 비효율적으로 관리된다.)

프로세스의 동시성 & 병렬성

1) 동시성(Concurrency)

동시성은 프로세서 하나가 프로그램 1,2,3,4 여러 작업을 돌아가며 일부분씩 수행하는 방식이다. 이 과정이 매우 빠른 속도로 돌아가게 되면서 사람들에게는 이 프로세스들이 동시에 진행되는 것처럼 보인다.

2) 병렬성(Parallelism)

병렬성은 프로세서 하나에 코어 여러 개가 달려서 각각 동시에 작업을 하는 방식이다. 듀얼코어, 쿼드코어, 옥타코어와 같은 명칭의 프로세서가 달린 컴퓨터에서 할 수 있는 방식이다. 코어를 여러 개를 달아 작업을 분담하게 만든 것이다.


한 프로세스 안에서도 여러 가지 작업이 동시에 진행되는 경우가 있다.
브라우저가 실행 중일 때
1) 파일을 다운받고
2) 웹 서핑도 하고
3) 노래도 듣는 등의 작업 등을 진행하는 경우가 생긴다.

이런 여러 가지 작업으로 생기는 갈래들을 스레드(Thread)라고 한다.

📌 스레드(Thread)

  • 스레드(Thread)는
    - 프로세스가 할당 받은 자원을 이용하는 실행 단위
    - 프로세스의 특정한 수행 경로
    - 프로세스 내에서 실행되는 여러 흐름의 단위

스레드(Thread)의 특징

  • 각 스레드는 독자적인 스택(Stack) 메모리를 갖는다.
  • 스레드는 프로세스 내에서 각각 스택만 할당 받고 Code, Data, Heap 영역은 공유한다.
  • 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에서 스레드끼리 공유하며 실행된다.
  • 각각의 스레드는 별도의 레지스터와 스택을 가지고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
  • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.
  • 스레드는 메모리를 공유하기 때문에 동기화, 데드락 등의 문제가 발생할 수 있다.
  • 스레드는 대부분의 현대 운영체제가 지원하고 있고, 이와 관련된 주요 라이브러리로는 POSIX Pthreads, Windows threads, Java threads 가 있다.
🔍 다른 자원은 공유하지만 굳이 스택만 분리해서 사용하는 이유!
 - LIFO (Last In First Out) 후입 선출이라는 스택의 특성과 연관이 있다.
 - 코드와 데이터 힙 영역을 공유하는 것에는 큰 문제가 없음
 - 그러나 스택 영역은 스택이 쌓이면 위에서부터 프로세스가 섞인 채로 순서대로 나오게 되므로
 더 복잡해지기 때문에 원할한 실행 흐름을 위해 스택은 따로 독립적으로 존재하게 된다.

📌 프로세스(Process) 와 스레드 (Thread) !

프로세스와 스레드의 관계

  • 프로세스는 스레드의 컨테이너이다. 스레드의 정보를 담고있다.

프로세스와 스레드의 차이

프로세스는 각 작업마다 운영체제로부터 자원을 할당받기 위해 시스템 콜을 하는 부담이 생기지만 멀티 스레드를 사용한다면 시스템 콜을 한번만 해도 되기 때문에 효율적이다. 또한 IPC 방식보다는 스레드 간 통신이 덜 복잡하고 시스템 자원 사용이 더 적으므로 통신의 부담도 줄일 수 있다.

Reference!

https://velog.io/@gparkkii/ProgramProcessThread
https://devuna.tistory.com/21
https://www.youtube.com/watch?v=1grtWKqTn50
https://www.youtube.com/watch?v=iks_Xb9DtTM

profile
공부 기록

0개의 댓글