본문 바로가기
운영체제

[운영체제] 프로세스와 스레드

by Rena B 2023. 3. 26.

 

1. 프로세스의 개념

 

개발자로서 일할 때 반드시 필요한게 뭘까? 바로 컴퓨터이다. 운영체제는 컴퓨터라는 하드웨어에 설치되어 각종 하드웨어 자원과 컴퓨터 사용자 간의 매개체 역할을 하는 소프트웨어다. CPU, 디스크, 키보드, 마우스 등과 소통하며 우리가 시킨 일(프로세스)들을 효율적으로 처리할 수 있도록 운영체제가 열심히 일을 해준다.

 

일반적으로 프로그램은 저장 매체에 저장되어 있고, 사용자가 프로그램을 실행시키면 운영체제는 프로그램을 메모리에 올려 놓는다. 메모리에 있는 프로그램은 CPU에 의해 실행되거나 실행 준비중에 있는데, 이러한 프로그램을 프로세스라고 한다.

 

Mac OS에서는 활성 상태 보기, 윈도우에서는 작업 관리자에서 손쉽게 해당 컴퓨터의 모든 프로세스를 볼 수 있다. (과거에 게임하다가 렉걸려서 (응답 없음) 상태가 됐을 때 작업 관리자에서 강제 종료를 누구나 한번쯤 해보지 않았는가? 그게 프로세스를 강제 종료한 것이었구나! )

 

글쓰는 도중 확인해 본 활성 상태 보기

내 컴퓨터에 존재하는 프로세스는 468개, 스레드는 무려 2042개가 있었다. 

나의 맥 일꾼은 8명이다

중앙 처리 장치(中央處理裝置) 또는 CPU(영어: central processing unit, central/main processor)는 컴퓨터 시스템을 통제하고 프로그램의 연산을 실행 · 처리하는 가장 핵심적인 컴퓨터의 제어 장치, 혹은 그 기능을 내장한 칩이다. (위키백과)

코어는 쉽게 말해서 '일꾼'이라고 보면 된다. 나는 가끔 음악을 들으면서 코딩을 하곤 하는데... 근데 이 일꾼은 멀티 태스킹이 안된다. 음악을 듣던지 코딩을 하던지 둘 중 하나만 할 수 있다. 즉, 하나의 코어는 하나의 프로세스만 실행할 수 있다. 

 

1칩 1코어는 싱글 코어라하고, 1칩 2코어는 듀얼 코어라하고, 1칩 n코어를 멀티코어라 한다. CPU가 처음 만들어졌을 때는 싱글 코어로 시작했으나, 최근에는 멀티코어 구조가 제법 흔해졌다.  

현재 내가 사용하고 있는 맥북의 CPU 코어는 단 8개인데, 어떻게 50배 이상의 프로세스, 250배가 넘는 스레드를 관리할 수 있는 걸까?

 

2. 프로세스의 상태

프로세스 스케줄러에 의해 프로세스의 상태가 바뀐다

하나의 코어에서는 단 하나만의 프로세스가 실행되고 있지만, 그 밖의 다른 프로세스들은 준비 완료 상태나 대기 상태로 있을 수 있다. 준비 완료 상태의 프로세스들과 대기 상태의 프로세스를을 위하여 각각 준비완료 리스트(큐)와 대기 리스트(큐)를 만들어 우선순위에 의해 준비 완료 리스트에 있는 첫번째 프로세스에 CPU를 할당하도록 한다. 어떤 프로세스를 먼저 실행시킬지 우선순위를 정하는 다양한 스케줄링 알고리즘이 있다.

 

 

 

  1. 프로세스가 시스템에 생성되면 : new
  2. 준비완료 상태로 대기하다가 : new -> ready
  3. 프로세스 스케줄러에 의해 CPU를 할당받아 실행 상태로 변환 : ready -> running
  4. 실행 도중 입출력이 발생할 경우 프로세스는 대기 상태로 전환 : running -> block
  5. 입출력 처리가 완료되면 대기 상태에서 준비 완료 상태로 전환 : block -> ready
  6. 할당시간이 만료되면 프로세스는 실행 상태에서 준비 완료 상태로 전환 : running -> ready

할당시간이란, 운영체제는 한 프로세스가 시스템을 독점하는 것을 방지하기 위해 지정된 시간 동안만 프로세스가 CPU를 점유하도록 하는데 이 시간을 할당시간이라 한다. 

 

프로세스는 완료되기 전까지 여러 상태 변환을 거친다. 이때 프로세스는 어떤 상태인지, 어느 부분까지 수행중인지, 우선순위는 어떤지 등 프로세스의 상세 정보는 PCB(Process Control Block)라고 하는 프로세스 제어 블록에 저장된다.

 

3. 스레드

스레드는 프로세스 내에서 실행되는 흐름의 단위로, 프로세스보다 작은 개념이다. 스레드는 CPU에 보내져 실행되는 단위이며, 각각의 스레드는 독립적으로 실행될 수 있다. 물리적으로 하나의 CPU 코어는 어떤 주어진 시간에 한 개 이상의 스레드가 수행될 수 없다.(1코어 1스레드) 하나의 코어가 2개 이상의 스레드를 수행해야 한다면, CPU는 한 스레드에서 다음 스레드로 매우 빠르게 교환되어 번갈아 가며 실행이 된다. 

 

하나의 프로세스는 한 개 이상의 스레드를 가진다. 프로세스 하나에 스레드가 여러 개일 경우, 각각의 스레드는 힙 영역, 데이터 영역, 코드 영역을 공유하지만, 자기 고유의 레지스터와 스택을 가진다. 각각의 프로세스는 독립된 메모리 공간을 할당받는 반면, 스레드들은 작업의 수행에 필요한 프로그램 코드, 데이터, 시스템 자원들을 공유하기 때문에 자원의 생성 및 관리가 중복되는 것을 최소화할 수 있다. 

 

 

참고서적

박규석 외. 『운영체제』. 파주: 생능출판사(2013), 48-91p