들어가기 전에
학교 수업 때 배운걸 다시 정리해서 쓴 글입니다.
오타 및 잘못된 부분 지적은 언제나 환영입니다!
프로세스의 3가지 상태
running : CPU 자원을 할당받아 실행중인 프로세스
ready: CPU 자원을 받는다면 바로 실행 가능한 프로세스
block : CPU 자원을 받아도 실행이 불가능한 상태 ex) I/O 작업 완료 대기
이 외에도 디스크에서 swap 대기와 swap 불가 상태가 있지만 크게 3가지로 본다.
프로세스의 문맥 교환 조건
Timer 인터럽트 발생
cpu에선 일정 주기마다 실행 중인 프로세스의 자원을 회수하고 ready 상태의 다른 프로세스에게 할당한다.
자원이 회수된 프로세스는 ready 상태가 된다.
I/O 인터럽트 발생
I/O 연산같이 느린 연산의 경우, 작업이 완료될 때 까지 실행을 대기해야 하는 상황이 있다.
이런 경우, cpu 자원을 잡고 있어봤자 I/O 연산이 끝나지 않으면 실행이 불가능한 상황이기 때문에
block 상태로 바꾼다.
그 외 인터럽트는?
시스템 콜이나 다른 인터럽트들의 경우, 커널에서 명령어 실행만 하고 끝내는 경우이기 때문에
커널 실행만 끝나면 언제든지 다시 실행할 수 있다.
커널 모드가 끝나면 다시 원래 프로세스가 자원을 할당받기 때문에 문맥 교환이 일어나지 않는다.
CPU 스케줄러
단기 스케줄러 : 준비상태인 프로세스들 중 어떤 프로세스를 실행 상태로 만들지 결정
Timer 인터럽트와 같이 실행된다.
중기 스케줄러 : 메모리에 적재된 프로세스를 관리. 만약 메모리가 부족하다면, blocking 상태의 프로세스를
디스크 swap 영역으로 내린다.
이번 글의 내용을 그림으로 요약하면 아래와 같다.
'학교 > os' 카테고리의 다른 글
스레드 (0) | 2022.07.10 |
---|---|
주소 변환 (0) | 2022.07.10 |
프로세스의 생성과 통신 (0) | 2022.06.26 |
프로세스 구조 (0) | 2022.06.26 |
DMA(Direct Memory Access) (0) | 2022.06.25 |