OS

[혼자 공부하는 운영체제] 하드웨어 인터럽트& 파이프라이닝

인생개발 이정환 2024. 9. 4. 21:52

1. 하드웨어 인터럽트

하드웨어 인터럽트는 입출력 작업과 같은 프로세스가 CPU의 주의를 필요로 할 때 발생하는 신호입니다. 이를 통해 CPU는 효율적으로 다양한 작업을 동시에 처리할 수 있습니다.

인터럽트 처리 과정:

  • 인터럽트 요청: 입출력 장치가 CPU에 인터럽트를 요청하는 신호를 보냅니다.
  • 인터럽트 확인: CPU는 명령어 사이클이 끝날 때나 새로운 명령어를 인출하기 전에 인터럽트 요청이 있는지 확인합니다.
  • 인터럽트 플래그: 인터럽트를 처리할 준비가 되어 있는지 확인하기 위해 인터럽트 플래그를 검사합니다. 플래그가 활성화되어 있으면, CPU는 인터럽트 요청을 받아들입니다.
  • 인터럽트 벡터: CPU는 인터럽트 벡터를 참조하여 해당 인터럽트에 대한 인터럽트 서비스 루틴(ISR)의 시작 주소를 가져옵니다. 이를 통해 CPU는 특정 인터럽트 서비스 루틴을 실행합니다.

중요한 작업을 수행하거나 방해받아서는 안 되는 경우, CPU는 인터럽트 플래그를 비활성화하여 인터럽트를 무시할 수 있습니다.

2. 예외 처리 메커니즘

CPU가 명령어를 실행하다가 예외 상황에 직면하면, 그에 따라 적절한 조치를 취해야 합니다. 예외는 크게 폴트, 트랩, **중단(abort)**으로 구분됩니다.

  • 폴트(Fault): 예외가 발생하면 CPU는 예외를 처리한 후, 예외가 발생한 명령어로 되돌아가 그 명령어를 재실행합니다. 예를 들어, 페이지 폴트는 메모리 접근 중 필요한 페이지가 메모리에 없는 경우 발생하며, 필요한 페이지를 불러온 후 해당 명령어를 다시 실행합니다.
  • 트랩(Trap): 트랩은 예외가 발생한 직후 그 다음 명령어를 실행합니다. 디버깅에서 유용하며, 특정 조건이 발생하면 그 시점에 예외 처리를 하고, 이어서 다음 명령어로 진행합니다.
  • 중단(Abort): 중단은 복구가 불가능한 심각한 오류가 발생했을 때, CPU가 현재 실행 중인 프로그램을 강제로 중단시킵니다. 이는 시스템이나 하드웨어에서 큰 문제를 감지한 경우에 발생합니다.

3. CPU 성능 향상 방법

CPU의 성능을 높이기 위한 방법으로는 여러 가지가 있습니다:

  • 클럭 속도 높이기: 클럭 속도는 CPU가 초당 실행할 수 있는 사이클 수를 의미하며, 클럭 속도가 높아지면 CPU가 더 많은 명령어를 빠르게 처리할 수 있습니다.
  • 코어와 스레드 수 늘리기: CPU는 여러 개의 코어를 가질 수 있으며, 각 코어는 독립적으로 명령어를 실행할 수 있습니다. 코어 수를 늘리면 동시에 더 많은 작업을 처리할 수 있습니다. 스레드는 코어가 동시에 처리할 수 있는 명령어 단위로, 스레드 수를 늘리면 단일 코어가 여러 작업을 병렬로 처리하는 효과를 얻을 수 있습니다.
  • 하이퍼스레딩(Hyper-Threading): 인텔의 하이퍼스레딩 기술은 하나의 코어가 두 개의 스레드를 동시에 처리할 수 있게 하여, 프로그램이 마치 두 개의 CPU를 사용하는 것처럼 보이게 합니다. 이는 물리적 코어 수보다 더 많은 논리적 프로세서를 사용하는 것처럼 보이게 합니다.

4. 명령어 파이프라이닝

명령어 파이프라이닝은 CPU 성능을 최적화하기 위한 중요한 기술입니다. 이 기법은 명령어를 여러 단계로 나누고, 각 단계가 동시에 처리되도록 하는 것입니다.

파이프라이닝 단계:

  • 명령어 인출(Fetch): 메모리에서 명령어를 가져옵니다.
  • 명령어 해석(Decode): 인출한 명령어를 해석하여 어떤 작업을 수행할지 결정합니다.
  • 명령어 실행(Execute): 해석된 명령어를 실행합니다.
  • 결과 저장(Write Back): 실행된 결과를 레지스터나 메모리에 저장합니다.

파이프라이닝을 통해 여러 명령어를 동시에 처리함으로써 CPU 성능이 크게 향상됩니다.

파이프라인 위험 (Pipeline Hazard)

파이프라이닝에서 발생할 수 있는 주요 위험 요소는 다음과 같습니다:

  • 데이터 위험(Data Hazard): 이전 명령어의 실행 결과가 다음 명령어에서 필요할 때 발생합니다. 데이터가 준비되지 않은 상태에서 다음 명령어가 실행되면 문제가 발생할 수 있습니다.
  • 제어 위험(Control Hazard): 분기 명령어나 조건부 명령어가 예상과 다르게 실행될 때 발생합니다. 잘못된 경로로 명령어를 인출하면 파이프라인이 재설정되어야 하므로 성능이 저하됩니다.
  • 구조적 위험(Structural Hazard): CPU 내 자원이 충분하지 않아 여러 명령어가 동시에 자원을 필요로 할 때 발생합니다. 예를 들어, 두 명령어가 동시에 메모리에 접근하려고 할 때 메모리 자원이 부족하면 구조적 위험이 발생할 수 있습니다.