[운영체제] Process State

Profile-exe·2021년 9월 13일
0

Operating-System

목록 보기
4/5
post-thumbnail

이번 포스트에서는 프로세스의 상태에 대해 알아보도록 하자


📖 프로세스 추적 - Trace of Process

프로세스에 대해 실행되는 명령 순서

💡 Dispatcher

프로세서(CPU)를 한 프로세스에서 다른 프로세스로 전환하는 역할

💡 Scheduler (Kernel 내의 함수 이름)

실행 가능한 Process들(Ready state)들 중 우선순위가 가장 높은 프로세스 선택
해당 프로세스에게 프로세서(CPU)넘겨주는(dispatch) 역할

🚨 주의

프로세스 스위치 사이에 반드시 스케줄러 함수 호출


📖 프로세스 5상태 - A Five-State Model

각 프로세스는 실행 도중 항상 다음 상태들 중 하나의 상태로 존재

👶 New

프로그램의 실행을 준비하는 단계

  • PCB 생성
  • Load 과정으로 Ready 상태가 됨

✔️ Ready

프로세서만 주어지면 언제든 실행될 수 있는 상태
즉, 실행 가능한 준비 상태

🔄 Running

프로세서에 의해 현재 실행 중인 상태

🛑 Blocked

I/O 장치에서 대기(waiting)상태

  • 키보드, 파일, 네트워크 등에서 데이터 대기
  • 프로세서가 주어져도 실행할 수 없는 상태
  • 데이터가 도착하면 Ready 상태가 됨

Exit

프로그램 실행이 완료되어 폐기단계

  • 메모리에서 제거
  • PCB 소멸

📖 상태 변화 이벤트

💡 이벤트 대기 - Wait Event

Device driver에서 대기 -> Block State로 상태 변화

💡 이벤트 발생 - Event Occurs

Device driver 실행 -> Ready State로 상태 변화

📌 Keyboard, Mouse - Keyboard, Mouse interrupt

Wait Event

scanf(), GetMessage() 호출

Event Occurs

키보드 - Enter
마우스 - 움직임, Click

📌 Disk(File Read) - Disk(or USB) interrupt

Wait Event

read(), fread(), fscanf() 호출

Event Occurs

디스크가 파일을 읽어 메모리에 전달한 후

📌 Network - Network interrupt

Wait Event

receive() 호출

Event Occurs

네트워크 보드데이터가 도착했을 때

📌 Timer - Timer interrupt

Wait Event

Sleep(2000), sleep(2) 호출

Event Occurs

지정한 시간(2초) 지난 후
time quantum(0.1초) 초과 -> 시분할 시스템

📌 Semaphore - 다른 프로세스가 unlock(s) 호출 시에만

Interrupt와는 무관.

Wait Event

lock을 호출했지만 다른 프로세스가 이미 lock() 한 경우

Event Occurs

다른 프로세스가 unlock(s) 함수를 호출하여 lock을 풀어줄 때


📖 프로세스 상태 변화

🚨 주의

  • Clock interrupt - 시분할 time slice 초과 : 🔄 Running -> ✔️ Ready
  • I/O API 호출 : 🔄 Running -> 🛑 Blocked

📖 Running -> Blocked 상태로의 전환

실행중인 프로세스가 대기 상태로 전환되는 과정

📌 I/O 함수 호출 - scanf(), read(), receive()

  • 궁극적으로 API 함수 호출하고 kernel속으로 진입
  • 키보드, 디스크, 네트워크 device에 도착한 데이터가 없으면 데이터가 도착할 때까지 대기
  • Running 상태에서 Blocked 상태로 전환
  • Scheduler() 함수 호출 - processor를 다른 process에게 넘겨 줌
  • 데이터가 도착하면 깨어나 해당 데이터를 가지고 리턴

💡 Scheduler() 함수

  • Ready상태의 process들 중 우선순위가 가장 높은 프로세스를 선택
  • processor를 해당 process에게 넘겨 줌
  • 실행할 다른 프로세스가 없을 경우 processoridle상태
    • for(;;); 무한 loop 돌면서 대기
  • Blocked 상태의 process들은 스케줄링 대상에서 제외

📖 Blocked -> Ready 상태로의 전환

대기상태의 프로세스가 깨어나 Ready 상태로 전환되는 과정
각 디바이스는 데이터가 도착했다는 것을 processor에게 interrupt(전기적 신호)를 통해 통보

📌 Interrupt 발생 - Timer, Network, Disk 등에서 발생

  • processor현재 실행 중인 process의 실행 보류
  • 현재 실행 중인 process : Running -> Ready 상태로 전환
  • Interrupt 고유 업무 수행
    • 해당 디바이스의 대기큐에서 데이터를 기다리는 process를 찾아 데이터 전달
    • 해당 processBlocked상태에서 Ready상태로 변환 (깨우기)
  • Scheduler() 호출 : Interrupt의 마지막에 항상 scheduler 호출
    • 깨어난 프로세스가 최우선순위바로 실행
    • 그렇지 않으면 interrupt가 들어오기 전에 실행되었던 프로세스 계속 실행

profile
컴퓨터공학과 학부생

0개의 댓글