: 실행되고 있는 프로그램
프로그램을 메모리에 적재하고 실행하는 순간 프로그램은 프로세스가 된다.
모든 프로세스는 실행되려면 CPU가 필요합니다. 하지만 CPU 자원은 한정되어 있죠!
그렇기에 프로세스들은차례로 돌아가며한정된 시간만큼만CPU를 이용합니다.
😛 자신의 차례가 되면 정해진 시간만큼 CPU를 이용하고, 시간이 끝났음을 알려주는 인터럽트(타이머 인터럽트)가 발생하면 차례를 양보하고 다음 차례가 올 때까지 기다립니다.
✅ 타이머 인터럽트
: 클럭 신호를 발생시키는 장치에 의해 주기적으로 발생하는 하드웨어 인터럽트
: 프로세스와 관련된 정보를 저장하는 자료 구조
프로세스를 식별하기 위해 꼭 필요한 정보들이 저장된다. PCB는 커널 영역에 생성된다.
PCB는 프로세스가 생성되면 만들어지고, 실행이 끝나면 폐기된다.
🧐 그렇다면 PCB에는 어떤 정보가 담길까?
프로세스 ID(PID)
: 프로세스를 식별하기 위해 부여하는 고유한 번호. (학교의 학번, 회사의 사번)
같은 일을 하는 프로그램이더라도 두 번 실행하게 되면 PID가 다른 두개의 프로세스가 생성된다.
레지스터 값
: 프로세스가 실행할 때 사용했던 레지스터 값
프로세스의 차례가 돌아오면 이전까지 사용했던 레지스터의 값들이 있어야 해서 기록해 두어야 한다.
프로세스 상태
: 프로세스 상태에 대한 정보
CPU 스케줄링 정보
: 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
메모리 관리 정보
: 프로세스가 어느 주소에 저장되어 있는지에 대한 정보
프로세스마다 저장되어 있는 메모리 위치가 다르기 때문에 기록해 두어야 한다.
사용한 파일과 입출력장치 목록
: 프로세스가 실행할 때 입출력장치나 파일을 사용하면 해당 내용이 기록된다.
: 기존 프로세스 문맥을 PCB에 저장하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것
코드 영역(텍스트 영역)
: 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장된다.
CPU가 실행할 명령어가 담겨 있어서 쓰기가 금지되어 있다. 읽기 전용 공간
데이터 영역
: 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간
ex) 전역 변수
힙 영역
: 프로그래머가 직접 할당할 수 있는 저장 공간
프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면 언젠가는 반환해야 한다.
반환하지 않는다면 메모리 누수가 발생할 수 있어요 🥲
스택 영역
: 데이터를 일시적으로 저장하는 공간
ex) 매개 변수, 지역변수
코드 영역과 데이터 영역은 크기가 변하지 않아요! = 정적 할당 영역
힙 영역과 스택 영역은 프로세스 실행 과정에서 크기가 변할 수 있어요! = 동적 할당 영역힙 영역은 메모리의 낮은 주소 → 높은 주소로 할당
스택 영역은 메모리의 높은 주소 → 낮은 주소로 할당
생성 상태
: 프로세스를 생성 중인 상태
이제 막 메모리에 적재되어서 PCB를 할당 받은 상태이다. 생성 상태를 거쳐서 실행할 준비가 끝나면 바로 실행되지 않고, 준비 상태가 되어서 CPU 할당을 기다린다.
준비 상태
: 당장이라도 CPU 할당 받으면 실행할 수 있지만, 아직 차례가 되지 않아서 기다리고 있는 상태
🤩 준비 상태에서 실행 상태로 가는 것을
디스패치라고 해요
실행 상태
: CPU를 할당 받아서 실행 중인 상태
일정 시간 동안만 CPU를 사용할 수 있다. 타이머 인터럽트가 발생하면 다시 준비 상태가 된다.
만약, 입출력 작업이 끝날 때까지 기다려야 한다면 대기 상태가 된다.
대기 상태
: 입출력장치의 작업을 기다리는 상태
입출력 작업이 끝나면 다시 준비 상태로 가서 CPU 할당을 기다린다.
🤩 입출력 작업은 CPU에 비해 처리 속도가 느려요 🥲
종료 상태
: 프로세스가 종료된 상태
운영체제는 PCB와 프로세스가 사용한 메모리를 정리한다.