프로세스와 스레드

hoo00nn·2020년 12월 22일
0
post-thumbnail

프로세스란?

  • 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
  • 여러 프로세스가 병렬적으로 수행되는 것처럼 보이지만 실제로는 CPU가 다수의 프로세스 사이를 전환하고 있다. (이렇게 프로그램 사이를 빠르게 전환하는 것을 다중프로그래밍이라 부른다)
  • 다수의 프로세스들 간의 전환은 스케줄링 알고리즘에 의해 언제 프로세스의 작업을 멈추고 다른 프로세스를 서비스 해야 할 지를 결정한다.

프로세스의 특징

  • 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
  • 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다. (Ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용)

PCB

운영체제는 각 프로세스마다 프로세스 제어 블록(Process Control Block)을 갖는다.

PCB 란 Process Control Block의 약자로, 프로세스 제어 블록이다. 프로세스에 대한 중요한 정보를 저장하고 있다. 운영체제가 프로세스를 표현한 것이라고도 한다. 프로세스 생성시 만들어지며, 주기억장치에 유지된다. 문맥전환 등 다른 프로세스를 처리해야 할 때, PCB에 현재 상태를 저장함으로써 나중에 그 작업 상태를 불러와 작업 재개가 가능해진다. PID, 상태, 다음 명령어 주소 등의 정보가 저장된다.

PC

PC 란 Program Counter의 줄임말로, 다음에 실행될 명령어의 주소가 들어있는 레지스터이다. 명령어가 인출되면, 자동으로 다음 명령어를 가리키도록 주소값이 증가된다.

캐시메모리

캐시메모리 란 CPU의 레지스터와 메모리 사이에서, 캐싱을 통해 병목 현상을 완화하는 것을 말한다.

프로세스 상태

new : 프로세스 생성 중

  • 프로세스가 생성되었지만 아직 OS에게 승인 받지 못한 상태

ready : 실행 가능하지만 다른 프로세스가 실행할 수 있도록 일시적으로 정지

  • 보조기억장치에 있는 프로그램을 실행시켜 메모리에 로드된 상태
  • 이 상태에선 여러 개의 프로세스 존재가능 → CPU 할당받기를 기다리는 상태

running : CPU를 할당받아 실제로 CPU를 사용하고 있음

  • 단일 처리기에서 단 하나의 프로세스만 이 상태를 갖음

waiting : 프로세스가 입출력과 같은 이벤트가 발생하여 CPU를 반납하고 기다리는 입출력이 완료되기를 기다리는 상태

terminated : 프로세스 실행 종료

  • 프로세스의 실행이 완료되고 할당된 CPU를 반납

스레드란?

스레드란 프로세스 내에서 실행되는 여러 흐름의 단위로 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.

스레드의 특징

  • 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
  • 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
  • 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다. 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
  • 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
  • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.

스레드 풀

1) 개념

  • 스레드를 제한된 개수만큼 만들어놓고 작업 큐에 들어오는 작업들을 스레드가 하나씩 맡아서 처리
  • 작업을 실행할 때마다 스레드를 생성/제거하는 것이 아닌 제한된 수의 스레드를 미리 만들어 사용/반환하는 기법

2) 장점

  • 스레드 생성/제거에 드는 비용을 줄임으로써 성능 저하를 방지
  • 다수의 사용자 요청 처리
  • 스레드 풀 내의 스레드 수를 조절 가능

3) 단점

  • 스레드 또한 메모리를 차지
  • 작업량에 비해 너무 많은 스레드를 생성했을 시에 노는 스레드가 발생
profile
😀 신기술에 관심이 많고, 함께 성장하고 함께 개발하고 싶은 개발자가 되고 싶습니다. 😀

0개의 댓글