관리 메뉴

나만을 위한 블로그

[혼공컴운] 10. 프로세스와 쓰레드 본문

책/혼자 공부하는 컴퓨터 구조 + 운영체제

[혼공컴운] 10. 프로세스와 쓰레드

참깨빵위에참깨빵 2023. 12. 27. 16:33
728x90
반응형
프로세스 개요

 

포그라운드 프로세스 : 유저가 보는 앞에서 실행되는 프로세스

백그라운드 프로세스 : 유저가 보지 못하는 뒤에서 실행되는 프로세스. 유저와 상호작용 가능한 프로세스도 있지만 상호작용 없이 작동하는 프로세스도 있음

상호작용 없이 작동하는 백그라운드 프로세스 : 유닉스에선 데몬, 윈도우에선 서비스라 부름

 

프로세스 제어 블록

 

모든 프로세스는 실행에 CPU가 필요하지만 CPU 자원은 한정돼 있다. 즉 모든 프로세스가 CPU를 동시에 사용할 순 없다

자기 차례가 되면 정해진 시간만큼 CPU를 쓰고, 끝남을 알리는 타이머 인터럽트가 발생하면 자기 차례를 양보하고 다음 차례가 올 때까지 기다림

OS는 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고 프로세스에 CPU 등 자원을 분배 -> 이걸 위해 프로세스 제어 블록(PCB)을 사용함

프로세스 제어 블록 : 프로세스 관련 정보를 저장하는 자료구조. 상품의 태그와 같음. 커널 영역에 생성되고 프로세스 생성 시 만들어지며 실행이 끝나면 폐기됨

 

프로세스 ID

 

프로세스 ID(PID) : 특정 프로세스 식별을 위해 부여하는 고유 번호. 같은 일을 수행하는 프로그램이라도 2번 실행하면 PID가 다른 두 프로세스가 생성됨

 

문맥 교환

 

문맥(context) : 프로세스 하나를 수행하기 위해 기억해야 할 정보

하나의 프로세스 문맥은 해당 프로세스의 PCB에 기록돼 있음 -> PCB에 쌓이는 정보들을 문맥이라 볼 수 있음

문맥 교환(context switching) : 기존 프로세스의 문맥을 PCB에 백업하고 새 프로세스 실행을 위해 문맥을 PCB로부터 복구해서 새 프로세스를 실행

 

프로세스의 메모리 영역

 

한 프로세스는 사용자 영역에 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나눠 저장됨

 

코드 영역

 

  • a.k.a 텍스트 영역
  • 기계어로 된 실행 가능한 명령어가 저장됨
  • CPU가 실행할 명령어가 담겨서 쓰기가 금지돼 있음 -> Read Only

 

데이터 영역

 

  • 프로그램이 실행되는 동안 유지할 데이터(전역 변수 등)가 저장되는 공간
  • 코드 영역, 데이터 영역은 크기가 변하지 않음 = 정적 할당 영역
  • 힙 영역, 스택 영역은 프로세스 실행 과정에서 크기가 변할 수 있음 = 동적 할당 영역

 

힙 영역

 

  • 개발자가 직접 할당 가능한 저장 공간
  • 힙 영역에 메모리 공간을 할당하면 언젠가는 해당 공간을 반환해야 함
  • 반환하지 않으면 메모리에 계속 남아서 메모리 낭비를 일으킴 = 메모리 누수

 

스택 영역

 

  • 데이터를 일시적으로 저장하는 공간. 잠깐 쓰고 말 값들이 저장됨
  • 함수 실행이 끝나면 사라지는 매개변수, 지역변수 등이 저장됨

 

프로세스 상태와 계층 구조

 

프로세스 상태

 

프로세스가 가질 수 있는 대표적 상태는 아래와 같음

 

생성 상태

 

  • 프로세스를 생성 중인 상태
  • 갓 메모리에 적재되서 PCB를 할당받은 상태

 

준비 상태

 

  • CPU를 할당받아 실행할 수 있지만 아직 자기 차례가 아니라 대기 중인 상태
  • 차례가 되면 CPU를 할당받아 실행 상태가 됨

 

실행 상태

 

  • CPU를 할당받아 실행 중인 상태
  • 할당된 일정 시간 동안에만 CPU 사용 가능
  • 시간을 모두 사용해서 타이머 인터럽트가 발생하면 준비 상태가 되고, 실행 도중 입출력장치를 써서 입출력장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 됨

 

대기 상태

 

  • 프로세스 실행 도중 입출력장치를 사용하는 경우, 입출력장치의 작업을 기다리는 상태
  • 입출력 작업이 끝나면 해당 프로세스는 다시 준비 상태로 변경

 

종료 상태

 

  • 프로세스가 종료된 상태
  • 프로세스가 종료되면 OS는 PCB, 프로세스가 사용한 메모리를 정리

 

프로세스 계층 구조

 

부모 프로세스 : 새 프로세스를 생성한 프로세스

자식 프로세스 : 부모 프로세스가 만든 프로세스

PPID : 부모 프로세스의 PID

 

자식 프로세스는 실행 과정에서 다른 자식 프로세스를 만들 수 있다. 여러 OS는 이렇게 프로세스가 프로세스를 만드는 계층적 구조로 프로세스들을 관리함. 이 과정을 도표로 그리면 트리 구조가 되는데 이를 프로세스 계층 구조라 함

 

프로세스 생성 기법

 

fork : 자신의 복사본을 자식 프로세스로 생성

exec : 만들어진 복사본이 자신의 메모리 공간을 다른 프로그램으로 교체

 

쓰레드

 

한 프로세스는 하나의 일만 수행함. 하나의 실행 흐름을 갖고 한 번에 한 부분만 실행되는 프로세스는 실행의 흐름 단위가 하나라는 점에서 단일 쓰레드 프로세스라고 볼 수 있음

여기서 쓰레드 개념이 도입되며 프로세스를 구성하는 여러 명령어를 동시 실행할 수 있게 됨

-> 쓰레드 : 프로세스를 구성하는 실행 단위

 

멀티 프로세스 : 여러 프로세스를 동시 실행하는 것

멀티 쓰레드 : 여러 쓰레드로 프로세스를 동시 실행하는 것

 

프로세스끼리는 기본적으로 자원을 공유하지 않지만 쓰레드는 같은 프로세스 내의 자원을 공유함

-> 멀티 프로세스 환경에선 한 프로세스에 문제가 생겨도 지장이 적거나 없지만 멀티 쓰레드 환경에선 한 쓰레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있음

반응형
Comments