본문 바로가기

CS

[CS] 프로세스와 스레드

프로그램(program)

윈도우의 *.exe 파일이나 Mac의 *.dmg 파일과 같은 컴퓨터에서 실행 할 수 있는 파일

 

프로세스(process)

컴퓨터에서 실행되고 있는 프로그램

운영체제로부터 자원을 할당받은 작업의 단위

 

스레드(thread)

프로세스 내 작업의 흐름

프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

 

면접을 위한 CS 전공지식 노트, 그림 3-16

 

프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 일어나고, 이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행한다.

프로세스 상태

 

생성 상태(create)

프로세스가 생성되고 아직 준비가 되지 않은 상태로 이때 PCB가 할당된다.

 

대기 상태(ready)

메모리 공간이 충분하면 메모리를 할당받고, 아니면 아닌 상태로 대기하고 있으며, CPU 스케줄러로부터 CPU 소유권이 넘어오기를 기다리는 상태

 

대기 중단 상태(ready suspended)

메모리 부족으로 일시 중단된 상태

 

실행 상태(running)

CPU 소유권과 메모리를 할당받고 실행되는 상태

 

중단 상태(blocked)

어떤 이벤트(I/O 디바이스에 의한 인터럽트 등)가 발생한 후 기다리며 프로세스가 차단된 상태

 

일시 중단 상태(blocked suspended)

대기 중단과 유사하며, 중단된 상태에서 프로세스가 실행되려고 했지만 메모리 부족으로 일시 중단된 상태

 

종료 상태(terminated)

메모리와 CPU 소유권을 모두 놓고 가는 상태로 더 이상 실행될 수 없으며 메모리에서 제거된다.

프로세스 메모리 구조

프로세스가 만들어지면 4가지 메모리 영역으로 구성되어 할당 받게 된다.

 

 

스택(stack)

지역 변수, 매개변수와 같은 호출한 함수가 종료되면 되돌아올 임시적인 자료를 저장하는 독립적인 공간

Stack은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다. 만일 stack 영역을 초과하면 stack overflow 에러가 발생한다.

 

힙(heap)

생성자, 인스턴스와 같은 동적으로 할당되는 데이터들을 위해 존재하는 공간

사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.

 

데이터 영역(data)

코드가 실행되면서 사용하는 전역변수나 데이터들이 모여있는 공간

BSS segment, Data segment로 나뉘어 저장된다.

 

  • BSS segment : 전역 변수 또는 static, const로 선언되어 있고 0으로 초기화 또는 초기값이 없는 변수들이 저장된다.
  • Data segment : 전역 변수 또는 static, const로 선언되어 있고 0이 아닌 값으로 초기화된 변수들이 저장된다.

코드 영역(code/text)

프로그래머가 작성한 프로그램의 코드가 저장되는 공간

CPU가 해석 가능한 기계어 형태로 저장되어 있다.

 

데이터 영역코드 영역은 선언할 때 크기가 결정되는 정적 영역이고,
스택은 프로세스가 실행되는 동안 크기가 늘어났다 줄었다 하는 동적 영역이다.

PCB(Process Control Block)

PCB는 운영체제에서 프로세스에 대한 메타데이터를 저장한 데이터를 말한다.

* 메타데이터 : 데이터에 관한 구조화된 데이터이자 데이터를 설명하는 작은 데이터

 

프로세스를 컨텍스트 스위칭 할때 기존 프로세스의 상태를 어딘가에 저장해 둬야 다음에 똑같은 작업을 이어서 할 수 있을 것이고, 새로 해야 할 작업의 상태 또한 알아야 어디서부터 다시 작업을 시작할지 결정할 수 있을 것이다. 즉, PCB는 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보 저장하는 임시 저장소이다.

PCB의 구조

프로세스 스케줄링 상태 준비, 일시중단 등 프로세스가 CPU 소유권을 얻은 이후의 상태
프로세스 ID 프로세스 ID, 해당 프로세스의 자식 프로세스 ID
프로세스 권한 컴퓨터 자원 또는 I/O 디바이스에 대한 권한 정보
프로그램 카운터 프로세스에서 실행해야 할 다음 명령어의 주소에 대한 포인터
CPU 레지스터 프로세스를 실행시키기 위해 저장해야 할 레지스터에 대한 정보
CPU 스케줄링 정보 CPU 스케줄러에 의해 중단된 시간 등에 대한 정보
계정 정보 프로세스 실행에 사용된 CPU 사용량, 실행한 유저의 정보
I/O 상태 정보 프로세스에 할당된 I/O 디바이스 목록

컨텍스트 스위칭(Context Switching)

한 프로세스에서 다른 프로세스로 전환할 때 발생하는 일련의 과정

동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

컨텍스트 스위칭이 일어날 때 다음번 프로세스는 스케줄러가 결정한다.

 

 

컨텍스트 스위칭이 일어날 때 CPU가 Idle 상태가 되는 유휴 시간이 발생하고, 캐시 미스가 발생하는 등 비용이 든다.

 

 

참고

면접을 위한 CS 전공지식 노트

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4