본문 바로가기
  • 시 쓰는 개발자
CS 개념/운영체제

운영체제 수업 (8) 03/28

by poetDeveloper 2024. 4. 3.

학교 수업을 정리한 내용입니다. 참고만 해주세요.

 

0328 목요일

 

Input Output 구분하기

  • CPU, MM(내부) → HDD(외부) : Output (write)
  • HDD(외부) → CPU, MM(내부) : Input (read)

I/O 시나리오 선요약

  1. CPU가 직접 I/O 실행
  2. I/O를 위한 컨트롤러가 있지만, Controller가 일을 끝날 때 까지 기다림 (Busy Waiting)
  3. 컨트롤러에게 I/O를 시키고, CPU는 다른 프로세스를 실행 (최적의 방법)

I/O 시나리오 (1) - Memory Mapped I/O

CPU가 직접 I/O를 실행하는 방식이다. 사용되지 않는 비효율적인 방법이지만 아두이노처럼 OS를 쓰지 않는 곳에서는 사용될 수도 있다.

위 코드는 키보드 I/O를 실행하는 과정인데, Branch if Sign = 0 에서 인터럽트를 확인하고, 다시 위로 올라가는 방식이다.

 

I/O 시나리오 (2) - Synchronous I/O

Controller에게 일을 시키기는 하지만, 컨트롤러가 돌아올 때까지 CPU가 기다린다. 이를 Loop: jmp Loop 여기서 확인할 수 있다. 루프를 계속 돌면서 기다리는 코드인데, 컨트롤러가 I/O를 마쳤는지 계속 확인하는 것이다. 이렇게 컨트롤러가 I/O수행 후 인터럽트를 걸어줄 때까지 기다리는 것을 Busy Waiting 이라고 한다.

참고로, 단순히 컴퓨터가 아무것도 하지 않는 것은 Sleeping 이라고 한다.

 

I/O 시나리오 (3) - Asynchronous I/O

Device Controller를 사용하는 가장 최적의 방법이다. I/O 될 때까지 CPU가 기다리는 것을 방지하기 위해 I/O를 실행하는 대리인을(Controller) 내세우는 것이다. 컨트롤러가 I/O를 수행하는 동안 CPU는 신경끄고 다른 프로세스를 처리하게 된다. 이때 I/O를 위해 3가지가 필요하다.

  1. IO Logic : CPU로부터 order 받기. 즉 읽을지 쓸지 결정하기. ex) 0보내면 Read , 1보내면 Write
  2. Buffer & DR : IO 실행하기. Read 할땐 데이터가 오고, Write 할땐 데이터가 가야함.
  3. Status Register : 상태 유지하기. 일을 끝내면 Status를 1로 만들어 Interrupt를 걸어야한다.

Asynchronous IO

Device Controller

컨트롤러가 하는 일을 다시 정리해보자.

  1. OS가 컨트롤러에게 CPU를 위해 I/O를 하라고 일을 준다.
  2. Controller가 I/O를 수행한다. (Read or Write ... etc)
  3. I/O를 마치면 Status Register를 1로 만들어서 I/O를 마쳤다고 알려줘야하고, 이를 Interrupt라고 한다.

I/O 시나리오 정리

  • 유저가 I/O를 요청했다 = Fetch Decode 했더니 I/O 하라고 나왔다는 것
  • Simultaneous (Parallel) Execution : I/O 걸린 프로세스는 컨트롤러가 하고 있고, 그때 CPU는 다른 프로세스를 실행한다.
  • 디바이스 컨트롤러는 I/O 작업 수행, Status Register의 값을 통해 I/O가 끝났음을 알리는 Interrupt를 걸어준다.

Interrupt

아주 크게 2종류로 나눈다.

  • Hardware 인터럽트 : 노트북 배터리 부족 문제
  • Software 인터럽트   : 0으로 나누는 문제

  • R : 인터럽트가 걸렸는지 체크하는 Flip-Flop (1bit 짜리 저장장치)
  • R = 0 : Instruction Cycle
  • R = 1 : Interrupt Cycle

플로우 차트를 보면 알 수 있듯이, Excecute 중간에 인터럽트를 걸 수 없고 하나의 Instruction Cycle이 돌아간 후에 인터럽트를 체크한다.

'CS 개념 > 운영체제' 카테고리의 다른 글

운영체제 수업 (7) 03/26  (0) 2024.03.28
운영체제 수업 (6) 03/21  (0) 2024.03.28
운영체제 수업 (5) 03/19  (1) 2024.03.25
운영체제 수업 (4) 03/14  (0) 2024.03.22
운영체제 수업 (3) 03/12  (0) 2024.03.19