프로세스 2
동기식 입출력 / 비동기식 입출력
- 프로세스가 입출력 요청 → 입출력 처리를 운영체제가 하니 사용자가 운체한테 요청.
- 동기식 입출력: I/O 요청 후 입출력 작업 완료된 후에 제어가 사용자 프로그램에게 넘어감.
- 구현 1
- I/O가 끝날 때까지 CPU 낭비
- 매시점 하나의 I/O만 일어날 수 있음.
- 구현 2
- I/O가 완료될 떄까지 해당 프로그램에게서 CPU 뺏음.
- I/O 처리 기다리는 줄에 그 프로그램을 줄세움
- ready 상태인 다른 프로그램(프로세스)에게 CPU를 준다 (이것도 동기식이라는 거 주의!)
- 현재 수업에서 얘기하고 있는 입출력 방식은 동기식 - 구현 2! (비동기식이 아님!)
- 비동기식 입출력: I/O 가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어감.
⇒ 두 경우 모두 I/O의 완료는 인터럽트로 알려준다.
인터럽트
[OS기초] 인터럽트 제대로 이해하기
- 인터럽트?
- CPU가 프로그램 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외 상황이 발생해 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 작업을 뜻함.
- 인터럽트는 하드웨어/소프트웨어 인터럽트로 분류
하드웨어 인터럽트
- 하드웨어가 발생시키는 인터럽트, CPU가 아닌 하드웨어 장치가 CPU에 어떤 사실을 알려주거나 CPU 서비스를 요청해야 할 경우 발생
소프트웨어 인터럽트
- 소프트웨어가 발생시키는 인터럽트. 사용자 프로세스가 스스로 인터럽트 라인을 세팅.
인터럽트 과정
Process A 실행 중에 디스크에서 어떤 데이터를 읽어오라는 명령을 받았다고 가정
- process A는 시스템 콜을 통해 인터럽트를 발생
- CPU는 현재까지 진행중이던 기계어 코드 완료
- 현재까지 수행 중이었던 상태를 해당 프로세스의 PCB에 저장(PCB는 커널 메모리 내 데이터 영역에 있음)
- 수행 중이던 메모리 주소, 레지스터 값, 하드웨어 상태 등
- PC에 다음 실행할 명령 주소 저장