Process & Thread

프로세스와 스레드

Apr 05, 2024

프로세스(Process)

프로세스란?

‘실행중인 프로그램’으로 보조기억장치에 저장된 프로그램이 실행되면 그 프로그램은 메모리에 적재되므로서 프로그램은 프로세스가 됨.

프로세서 제어 블록(PCB: Process Control Block)

프로세서들은 차례대로 돌아가면서 정해진 시간만큼 CPU를 이용하는데 운영체제가 이러한 프로세서의 실행 순서를 관리를 위해 PCB를 이용함.

PCB는 프로세스와 관련된 정보를 저장하는 자료 구조로 메모리의 커널영역에 생성되고 프로세스 생성시에 만들어지고 실행이 끝나면 폐기됨.

PCB의 대표적인 구성요소

  • 프로세스 아이디(PID: Process ID)
  • 레지스터 값
  • 프로세스 상
  • CPU 스케줄링 정보
  • 메모리 관리 정보
  • 사용한 파일과 입출력장치 목록

문맥 교환(Context switching)

CPU 사용이 프로세스A에서 프로세스B로 바뀔 때, 이전까지 실행했던 내용을 이어 다시 재개 하기 위해 기억해야할 정보를 문맥(Context)라고 하며 이런 문맥은 프로세스의 PCB에 표현되어 있음.
실행중인 프로세스의 문맥을 PCB에 백업하고, 실행될 프로세스의 문맥을 PCB에서 가져와 실행하는 것을 ‘문맥 교환’이라고 함.

컨텍스트 스위칭

⚠️ 문맥교환이 자주 일어나면 프로세스가 빠르게 번갈아 가며 수행되기 때문에 동시에 실행되는 것처럼 보이지만 문맥교환을 너무 자주 하면 오버헤드가 발생할 수 있음.

프로세스의 메모리 영역 - 사용자 영역

사용자 영역

코드 영역(code segment = 테스트 영역 text segment)

기계어로 이루어진 명령어가 저장된 공간으로 읽기 전용임.

데이터 영역(data segment)

프로그램이 실행되는 동안 유지되고 프로그램 전체에서 접근할 수 있는 전역 변수(global variable)과 같은 데이터가 저장되는 공간.

ℹ️ 정적 할당 영역 코드 영역과 데이터 영역은 크기가 변하지 않아 정적 할당 영역이라고 부름

힙 영역(heap segment)

프로그래머가 할당할 수 있는 저장 공간. 프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했으면 사용하지 않을 때는 반환해야함. 그렇지 않을 경우 할당한 공간은 메모리 내에 남아 메모리를 낭비하여 메모리 누수(memory leak)가 발생됨

스택 영역(stack segment)

데이터를 일시적으로 저장하는 공간으로 함수의 실행이 끝나면 사라지는 매개 변수, 지역 변수와 같은 값이 저장됨.

ℹ️ 동적 할당 영역 힙 영역과 스택 영역은 실시간으로 그 크기가 변할 수 있기 때문에 동적 할당 영역이라고 부름 두 개의 영역에 데이터가 쌓여 새롭게 할당되는 주소가 겹치지 않도록, 힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당되고, 스택 영역은 높은 주소에서 낮은 주소로 할당됨.

프로세스 상태

프로세스 상태 다이어그램

생성 상태(new)

메모리에 적재되어 PCB를 할당 받은 상태

준비 상태(ready)

CPU를 할당받아 실행할 수 있지만 차례를 기다리는 상태

실행 상태(running)

CPU를 할당받아 실행 중인 상태. 실행 상태인 프로세스는 할당된 시간동안만 CPU를 사용할 수 있으며 할당된 시간이 다 되면 타이머 인터럽트가 발생하고 다시 준비 상태가 되고, 실행 도중 대기 상태가 필요한 경우 대기 상태가 됨

대기 상태(blocked)

특정 이벤트가 일어나길 기다릴 때 대기상태가 되는데 보통 입출력 작업의 요청이 많음. 입출력을 요청한 프로세스가 입출력 작업이 끝날때까지 기다리는 상태를 대기 상태

종료 상태(terminated)

프로세스가 종료된 상태로 PCB와 프로세스가 사용한 메모리를 OS가 정리함

스레드(Thread)

스레드란?

프로세스를 구성하는 실행의 흐름 단위

프로세스와 스레드

프로세스와 스레드

단일 프로세스

하나의 프로세스는 한 번에 하나의 일만 처리 (실행의 흐름 단위가 하나)

멀티 프로세스

프로세스끼리는 기본적으로 자원을 공유하지 않음

멀티 스레드

하나의 프로세스를 여러 개의 스레드로 동시에 실행(웹 브라우저 프로세스 - 화면출력/입력/검색 스레드)

프로세스의 자원을 공유하며 실행에 필요한 최소한의 정보를 유지

→ 장: 메모리를 효율적으로 사용

→ 단: 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있음

출처:
혼자 공부하는 컴퓨터 구조+운영체제

Go toor?