본문 바로가기

Dev/CS 컴퓨터사이언스

[혼공컴운/OS] CPU | 레지스터의 종류 | CPU 명령어 사이클 | 인터럽트

728x90
반응형

ALU : 산술 및 논리 연산 수행

  • [input] 레지스터에서 피연산자 받기 + 제어장치에서 제어신호 받기
  • [output] 연산 결과와 플래그를 내보내기
  • 플래그는 플래그 레지스터에 저장 → 플래그의 종류 { 부호 플래그, 제로 플래그, 캐리 플래그, 오버플로우 플래그, 인터럽트 플래그, 슈퍼바이저 플래그 }

 

제어장치 : 명령어 해석 및 제어신호 출력

  • [input] 클럭이라는 입력 신호 읽기 → 클럭 단위로 제어 신호 전달
  • [input] 명령어 레지스터에서 해석해야 할 명령어 읽기
  • [input] 플래그 레지스터에서 플래그 값 읽기
  • [output] 제어 신호를 메모리와 입출력 장치에 제어버스를 통해 전달

 

 

레지스터 : CPU 내의 임시저장장치

  • 프로그램 카운터: 메모리에서 가져올 명령어가 저장된 주소를 저장
  • 명령어 레지스터: 방금 메모리에서 가져와서 해석할 명령어를 저장
  • 메모리 레지스터: 메모리 주소를 저장
  • 메모리 버퍼 레지스터: 메모리에 저장하거나 읽어올 값(데이터, 명령어)를 저장
  • 플래그 레지스터: ALU에서 전달받은 부가적인 정보인 플래그 값을 저장
  • 범용 레지스터: 데이터와 주소를 모두 저장하고 여러 개가 있으며 범용적으로 사용
  • 스택 포인터: 스택에 마지막으로 저장된 값의 위치를 저장하는 레지스터
    • 스택 주소 지정 방식: 스택 포인터에 따라 다음 주소 지정

 

  • 베이스 레지스터: 기준 주소로써 역할
    • 변위 주소 지정 방식
      • 상대 주소 지정 방식 : 프로그램 카운터 + 오퍼랜드 값에 따라 다음 유효주소 산출
      • 베이스 레지스터 주소 지정 방식 : 베이스 레지스터 + 오퍼랜드 값에 따라 다음 유효주소 산출

 

 

명령어 사이클

명령어 사이클: 일정한 주기에 따라 각각의 명령어를 반복하는 것

  • 인출 사이클: 메모리에 있는 명령어를 CPU로 가지고 오는 단계
  • 실행 사이클: 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시키는 단계
  • 간접 사이클: CPU가 간접 주소 지정 방식과 같이 명령어 값을 가져가기 위해 메모리 접근을 한 번 더 하는 단계
  • 인터럽트 사이클: 인터럽트 요청에 의해서 기존 작업이 백업되고 인터럽트 서비스 프로그램을 실행하는 단계

 

인터럽트

  • 동기 인터럽트 (예외)
    • 폴트(Fault): 예외가 발생한 명령어부터 실행을 재개
    • 트랩: 예외가 발생한 명령어의 다음 명령어부터 실행을 재개 (예: 디버깅)
    • 중단: 프로그램을 강제로 중단시키는 예외
    • 소프트웨어 인터럽트: 시스템 호출이 발생했을 때 나타나는 예외

 

  • 비동기 인터럽트 (하드웨어 인터럽트)
    1. 입출력 장치가 인터럽트 요청 신호를 보냄
    2. CPU는 인터럽트 플래그를 확인 (1이면 인터럽트 수락)
    3. 기존에 하던 작업을 메모리의 스택 영역에 백업
    4. 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
    5. 인터럽트 작업이 끝나면 다시 기존 작업을 스택 영역에서 불러와 실행

 

추가 참고자료: https://github.com/kangtegong/self-learning-cs/blob/main/registers/registers.md#대표적인-arm-레지스터

728x90
반응형