명령어 사이클: CPU가 하나의 명령어를 처리하는 하나의 정형화된 흐름
- 인출 사이클(Fetch Cycle): 메모리에 있는 명령어를 CPU로 불러오는 단계
- 실행 사이클(Execute Cycle): CPU로 가져온 명령어를 실행하는 단계
- 간접 사이클(Indirect Cycle):
- 간접 주소 지정 방식 등으로 인해 메모리에서 명령어를 가져왔음에도 불구하고 한 번 더 메모리 접근이 필요한 상황
- 인출 사이클과 실행 사이클 사이에서 발생
- 인터럽트 사이클(Interrupt Cycle):
- 실행 사이클이 끝난 후 발생하는 사이클
- 인터럽트 신호가 들어왔는지 아닌지 판단하고, 발생시 인터럽트 처리
인터럽트: CPU의 정상적인 작업을 방해하는 신호
- 인터럽트의 종류
- 동기 인터럽트(예외): CPU에 의해 발생하는 인터럽트. 어떤 명령어를 실행하고 있을 때 오류가 발생하는 경우 등
- 폴트(fault): 예외를 처리하고 예외가 발생한 명령어부터 실행 재개하는 예외
- 트랩(trap): 예외를 처리하고 예외가 발생한 명령어 다음 명령어부터 실행 재개
- 중단(abort): 강제로 프로그램을 중단시켜야 하는 심각한 오류를 발견했을 때 발생시킴
- 소프트웨어 인터럽트(software interrupt): 시스템 호출 발생시 나타남
- 비동기 인터럽트(하드웨어 인터럽트)
- 입출력장치에 의한 인터럽트
- 입출력장치가 어떤 입력을 받았을 때 이를 처리하기 위한 CPU 입력 알림을 보냄
- 동기 인터럽트(예외): CPU에 의해 발생하는 인터럽트. 어떤 명령어를 실행하고 있을 때 오류가 발생하는 경우 등
- 비동기 인터럽트의 실행 순서
- 입출력 장치세어 CPU에 인터럽트 요청 신호 보냄
- CPU는 실행 사이클 이후 인출 사이클로 돌입하기 전 인터럽트가 있는지 확인
- 인터럽트가 있다면 CPU는 인터럽트 플래그를 통해 현재 인터럽트를 처리해줄 수 있는 상태인지 확인
- 반드시 처리해주어야 하는 인터럽트(non maskable interrupt)의 경우 막을 수 없음
- 처리할 수 있는 상태라면, CPU는 지금까지 작업 백업
- 작업 백업 위치는 메모리의 스택 영역
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행
- 인터럽트 서비스 루틴: 컴퓨터의 메모리에는 어떤 인터럽트에는 어떤 방식으로 대응해야 한다는 본인만의 루틴이 있음
- 인터럽트 벡터: 적합한 인터럽트 서비스 루틴이 어디있는지 위치를 찾기 위한 정보
- 하드웨어 인터럽트를 요청한 대상에게서 CPU는 데이터 버스를 통해 인터럽트 벡터를 전달받음
- 인터럽트 서비스 루틴 완료 후 백업 데이터 복구 후 다시 실행
'CS' 카테고리의 다른 글
[혼공컴운] 프로세스 상태와 계층 구조 (0) | 2023.04.07 |
---|---|
[혼공컴운] 빠른 CPU를 위한 설계 기법 (0) | 2023.04.04 |
[혼공컴운] 프로세스 개요 (0) | 2023.03.30 |
[혼공컴운] 레지스터 (0) | 2023.03.28 |
[혼공컴운] 운영체제 시작하기 (0) | 2023.03.16 |