[운영체제] 명령어 사이클과 인터럽트의 관계( + 폴링과 DMA )

cosmos-JJ·2023년 9월 14일
0

Computer Science

목록 보기
5/15
post-thumbnail

명령어 사이클

프로그램 속 명령어들은 일정한 주기가 반복되며 실행되는데 이 주기를 명령어 사이클이라고 한다.


명령어 사이클 구성

  • 인출 사이클(fetch cycle) : 메모리에 있는 명령어를 CPU로 가지고 오는 단계
  • 실행 사이클(execution cycle) : CPU로 가져온 명령어를 실행하는 단계
  • 간접 사이클(indirect cycle) : 명령어를 실행하기 위해서 한 번더 메모리 접근을 해야할 때 생기는 단계
  • 인터럽트 사이클(interrupt cycle) : 인터럽트가 발생할 경우 생기는 단계

인터럽트

인터럽트(interrupt)란 CPU의 정상적인 작업을 방해하는 신호이다.


인터럽트 종류

  • 동기 인터럽트(예외) : CPU에 의해 발생하는 인터럽트 / 예외적인 상황을 마주쳤을 때 발생하는 인터럽트
  • 비동기 인터럽트(하드웨어 인터럽트) : 주로 입출력장치에 의해 발생하는 인터럽트

하드웨어 인터럽트 특징

  • 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 사용 / 알림과 같은 인터럽트
  • 인터럽트가 없다는 CPU는 입출력 완료 여부를 주기적으로 확인해야하지만 인터럽트가 있기 때문에 입출력 작업동안 CPU는 다른 일을 할 수 있음

하드웨어 인터럽트 순서

  1. 입출력장치 ➡ CPU 인터럽트 요청 신호를 보냄
  2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 인터럽트 여부 확인
  3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는 지 여부 확인
  4. 가능하다면 ➡ 지금까지 작업 백업
  5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행
  6. 인터럽트 서비스 루틴이 끝나면 백업해 둔 작업을 복구하여 실행 재개
❕ 플래그 : 특정 동작을 수행할지 말지 결정하는 (보통 1비트인) 변수
❕ 인터럽트 플래그 : 플래그 레지스터에 있는 인터럽트를 제어하는 플래그
❕ 인터럽트 서비스 루틴(안터럽트 핸들러) : 인터럽트가 발생했을 때 해당 인터럽트를 처리하는 
                                     방법이 나누어저 있는 프로그램
❕ 인터럽트 벡터 : 각각의 인터럽트를 구분하기 위한 정보

폴링

초기 컴퓨터 시스템에 적용된 방식으로 CPU가 직접 입출력장치에서 데이터를 가져오거나 내보내는 방식을 폴링(polling) 이라고 한다.

  • 방식에서는 CPU가 입출력장치의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 데이터를 처리
  • CPU가 명령어 해석과 실행이라는 본래 역할 외에 모든 입출력까지 관여해야 하므로 작업 효율이 떨어짐
  • 오늘날의 컴퓨터에는 많은 주변장치가 있기 생기게 되면서 CPU의 작업 효율이 현저히 떨어지게 되는 문제점 발생 ➡ 폴링을 대체하기 등장한 방식으로 인터럽트가 생김

직접 메모리 접근(DMA)

인터럽트 방식을 사용하면서 CPU가 아닌 입출력 관리자가 데이터의 입출력을 맡게 되었다.

입출력 관리자는 CPU가 요청한 데이터를 메모리에 가져다놔야하기 때문에 메모리에 접근을 해야하지만 메모리는 CPU만 접근 권한을 가지고 있다.

따라서 입출력 관리자에게 CPU의 허락없이 메모리에 접근할 수 있는 권한이 필요하게 되었고, 이러한 권한을 직접 메모리 접근(DMA : direct memory access)라고 한다.


참고

  • 혼자 공부하는 컴퓨터 구조 + 운영체제 ( 강민철 지음 )
  • 쉽게 배우는 운영체제 ( 조성호 지음 )
profile
🤍도전하는 건 즐거워요🤍

0개의 댓글