프로세스 생명주기
프로세스 상태
- 컴퓨터를 사용할때 프로세스들은 인간이 인지할 수 없을 만큼 빠르게 cpu를 할당 받아 번갈아 가면서 작업을 처리함 이때 작업을 실행할때 하나의 프로세스는 여러 상태를 가지게됨 운영체제는 프로세스의 상태를 PCB를 통해 인식하고 관리함
생성 상태
- 프로세스를 생성중인 상태(NEW). 프로세스가 실행되어 메모리에 적재된후 PCB를 할당 받은상태
- PCB (process control block) : cpu를 점유할 프로세스의 고유한 정보들을 저장하는 자료구조 ex) 상품에 달린 태그 pcb는 커널 영역에 생성됨 pcb로 특정 프로세스를 식별하고 해당 프로세스를 처리하는데 필요한 정보를 판단함
준비 상태
- 당장이라도 cpu를 할당받아 실행할 수 있지만 아직 차례가 아니어서 차례를 기다리는 상태 cpu의 할당을 기다림
- 변수 초기화, 기초 준비작업이 끝난 상태
- cpu 스케쥴러를 통해 준비상태에서 실행상태로 전환 되는것을 dispatch 라고함
실행 상태
- cpu를 할당 받아 실행중인 상태
- cpu를 할당받아 프로세스가 작업을 실행하던 도중 cpu점유 시간이 다 끝나면 타이머 인터럽트가 발생하고 다시 준비상태로 돌아감
- 입출력장치를 사용하여 입출력장치의 작업이 끝날때까지 기다려야하면 대기상태가됨
대기 상태
- 프로세스가 실행도중 입출력장치를 사용하는 경우 입출력 장치의 작업을 기다리는 상태
종료 상태
- 프로세스가 종료된 상태
- 프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리함
대기 큐 (wating queue)
job queue
- 보조기억저장장치 (ssd, hdd)에 저장된 프로그램들이 메모리에 올라갈때 메모리가 가득 찼거나 cpu가 다른 작업을 수행 중이라면 메모리에 올라오기전에 딜레이 발생 ( 렉 ) 이때 hdd 프로그램들이 잠시 기다리는 곳
ready queue
- 다른 프로그램들이 실행중이면 프로그램을 바로 실행할 수 없음
- 메모리에 프로세스들이 올라왔지만 바로 실행할 수 없어서 대기하는 곳
device queue
- I/O장치를 이용하기 위해 기존 작업이 끝나기를 기다렸다가 I/O장치를 사용할 수 있음
- 각자 장치마다 I/O를 위해 대기하는 곳
스케줄링
job scheduler
- job queue에 적재된 프로그램들을 어떤 순서로 올릴지 결정함
- 프로그램이 새로 시작될때, 메인 메모리가 가득 찼을때 발생함 ( long term scheduler )
cpu scheduler
- ready queue에 적재된 프로세스들을 어떤순서로 cpu를 사용하게 할지 정하는 스케줄러
- 제일 중요해 ( short term scheduler )
device scheduler
- device quere의 프로세스들을 어떤 순서로 I/O 장치를 이용하게 할것인지 정하는 스케줄러
swapping
- PCB에 등록된 CPU 사용시간을 확인해서 오랫동안 동작하지 않은 프로세스를 보조기억 장치로 내려놓는 과정 medium term scheuduler
- 사용하지 않는 프로세스를 임시로 보조기억 장치로 내려 메모리의 용량을 확보하여 효율적으로 활용함 swap out
- 프로세스가 다시 동작하면 보조기억 장치에서 메모리로 프로세스를 올려서 작업 진행 swap in
context switching
- 프로세스가 cpu를 점유하는 시간이 지나면 다른 프로세스가 cpu를 점유하도록 하는데 이때 프로세스가 전환되는 것을 context switching이라고함
scheduler
- cpu 스케줄러는 ready queue에 대기중인 프로세스를 어떤 순서로 실행시킬 것인지에 대한 스케줄러
- 스케줄러는 queue에 적재된 작업들을 어떤 순서로 실행시킬지 정하는 관리자
dispatcher
- cpu를 할당받아 작업을 수행하던 프로세스가 타임 인터럽트가 일어나 작업을 중단하고 다른 프로세스로 넘어갔을때 현재 하던 작업을 이어서 하기위해 프로세스가 가지고 있던 정보(pcb)를 저장하고 다시 프로세스의 작업차례가 왔을때 저장했던 정보를 불러와서 전에 하던 작업을 이어서 하도록 하는 프로그램을 dispatcher 라고함
프로세스 메모리
code 영역
- 실행할 프로그램의 코드가 저장되는 영역 cpu는 이 영역에서 명령어를 하나씩 가져와 처리
data 영역
- 전역변수와 정적변수가 저장됩니다.
- 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸됨
stack 영역
- 호출된 함수의 수행을 마치 복고 복귀할 주소 및 데이터 ( 지역변수 , 매개변수 , 리턴값)를 임시로 저장하는 공간
- 정적 데이터 영역
- 컴파일시 stack 영역의 크기가 결정되기 때문에 무한정 할당 할 수 없음 ( 데이터의 크기가 컴파일시부터 정해져 있음 )
- 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리를 초과할 정도로 너무 많이 가지고 있다면 stack overflow가 발생
heap 영역
- 동적 데이터 영역
- 메모리 주소 값에 의해서만 참조되고 사용되는 영역 프로그램 동작 시 (런타임)
- heap 영역은 런타임에 결정됨
커널 프로세스의 메모리
- 커널은 운영체제의 주요구성
code 영역
- 시스템 콜, 타임 인터럽트 처리코드
- cpu, 메모리 자원관리를 위한 코드
- 편리한 인터페이스 제공을 위한 코드
data 영역
- cpu, memory 등 하드웨어 자원을 관리하기 위한 자료구조 저장
- PCB 자료구조 저장
stack 영역
- 각 process의 커널 스택을 저장
- 커널은 heap메모리를 사용하지않음