[Chapter 04] CPU의 작동 원리

2025. 7. 29. 15:09·✍🏻 TIL/혼자 공부하는 컴퓨터 구조+운영체제

CPU가 메모리에 접근하는 속도는 레지스터에 접근하느 속도보다 훨씬 느림

-> ALU 결과값을 메모리가 아닌 레지스터에 우선 저장

 

<플래그>  -> 플래그 레지스터에 저장됨

- 부호 플래그

- 제로 플래그 : 연산 결과가 0인지

- 캐리 플래그 : 연산 과정에서 올림수나 빌림수 발생 여부

- 오버플로우 플래그

- 인터럽트 플래그 : 인터럽크 가능 여부

- 슈퍼바이저 플래그 : 커널 모드인지 사용자 모드인지

 

제어장치: 제어 신호를 내보내고, 명령어를 해석하는 부품 / 클럭, 수행할 명령어, 플래그, 제어신호를 받아들임

제어 신호: 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호


<중요하게 다루는, 많은 CPU가 공통으로 포함하는 여덟 개의 레지스터>

- 프로그램 카운터(PC; Program Counter) (= 명령어 포인터)  -> 변위 주소 지정 방식

 : 메모리에서 읽어 올 명령어의 주소를 저장

 

- 명령어 레지스터(IR; Instruction Register)

 : 메모리에서 읽어 온 명령어를 저장

명령어 레지스터 속 명령어 -> 제어장치 -(해석)--(제어신호)->

 

- 메모리 주소 레지스터(MAR; Memory Address Register)

 : 메모리 주소를 저장

CPU -(메모리 주소 레지스터)-> 주소 버스

 

- 메모리 버퍼 레지스터 (MBR; Memory Buffer Register) (= 메모리 데이터 레지스터 MDR; Memory Data Register)

 : 메모리와 주고받을 값 (데이터 + 명령어)을 저장

메모리 -(메모리 버퍼 레지스터)-

 

- 플래그 레지스터 : 연산 결과 또는 CPU 상태에 대한 부가적인 정보 저장

- 범용 레지스터 : 데이터와 주소 모두 저장 가능

 

- 스택 포인터  -> 스택 주소 지정 방식

 : 스택의 꼭대기를 가리키는 레지스터. 스택에 마지막으로 저장한 값의 위치를 저장

 

- 베이스 레지스터 -> 변위 주소 지정 방식


변위 주소 지정 방식(displacement addressing mode)

 : 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식

= 연산 코드 + 레지스터 필드 + 오퍼랜드 필드

 -> 상대 주소 지정 방식, 베이스 레지스터 주소 지정 방식 등

 

- 상대 주소 지정 방식(relative addressing mode) : 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식

 -> 분기하여 특정 주소의 코드를 실행할 때 사용

 

- 베이스 레지스터 주소 지정 방식(base-register addressing mode) : 오퍼랜드와 베리스 레지스터의 값을 더하여 유효 주소를 얻는 방식


명령어 사이클: 하나의 명령어가 처리되는 주기 / 인출 - 실행 - 간접 - 인터럽트

- 인출 사이클(fetch cycle): 메모리에 있는 명령어를 CPU로 가져오는 단계

- 실행 사이클(execution cycle): CPU로 가져온 명령어를 실행하는 단계 / 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생

- 간접 사이클(indirect cycle)  -> e.g. 간접 주소 지정 방식

- 인터럽트(interrupt): CPU의 작업을 방해하는 신호  -> 동기 인터럽트, 비동기 인터럽트


 

동기 인터럽트(synchronous interrupts): CPU에 의해 발생하는 인터럽트 (= 예외; exception)

-> 폴트, 트랩, 중단, 소프트웨어 인터럽트

- 폴트(fault): 에외가 발생한 명령어부터 실행을 재개

- 트랩(trap): 예외가 발생한 명령어의 다음 명령어부터 실행을 재개.  e.g. 디버깅

- 중단(abort): CPU가 실행 중인 프로그램을 강제 중단할 수 밖에 없는 심각한 오류를 발견했을 때 발생하는 예외

- 소프트웨어 인터럽트(software interrupt): 시스템 호출이 발생했을 때

 

 

비동기 인터럽트(asynchronous interrups): 주로 입출력장치에 의해 발생하는 인터럽트 (= 하드웨어 인터럽트)

-> 막을 수 있는 인터럽트(maskable interrupt) , 막을 수 없는 인터럽트(non-maskable interrupt)

 

 

- 인터럽트 서비스 루틴(ISR; Interrupt Service Routine) : 인터럽트를 처리하기 위한 동작들로 이루어진 프로그램

 = 인터럽트 핸들러(interrupt handler)

= 명령어 + 데이터

 

- 인터럽트 벡터(interrupt vector) : 인터럽트 서비스 루틴을 식별하기 위한 정보

 

인터럽트 서비스 루틴을 실행하기 전의 프로그램을 재개하기 위해 필요한 내용들을 스택에 백업.

 

저작자표시 비영리 변경금지 (새창열림)

'✍🏻 TIL > 혼자 공부하는 컴퓨터 구조+운영체제' 카테고리의 다른 글

[Chapter 03] 명령어  (1) 2025.07.25
[Chapter 02] 데이터  (1) 2025.07.24
[Chapter 01] 컴퓨터 구조 시작하기  (1) 2025.07.24
'✍🏻 TIL/혼자 공부하는 컴퓨터 구조+운영체제' 카테고리의 다른 글
  • [Chapter 03] 명령어
  • [Chapter 02] 데이터
  • [Chapter 01] 컴퓨터 구조 시작하기
레이제로
레이제로
  • 레이제로
    한 걸음
    레이제로
  • 전체
    오늘
    어제
    • 분류 전체보기 (11)
      • ✍🏻 TIL (4)
        • 혼자 공부하는 컴퓨터 구조+운영체제 (4)
      • ✏ Study (3)
        • Problem Solving (1)
        • Spring (0)
        • Java (2)
        • Data Structure (0)
        • Algorithm (0)
      • 💻 Code Kata (4)
        • Algorithm (4)
        • SQL (0)
      • 📃etc. (0)
        • JS (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 개발 공부 외 이모저모
  • 공지사항

  • 인기 글

  • 태그

    length
    Solid 원칙
    프로그래머스
    음수
    코드카타
    java
    FastIO
    나머지
    length()
    OOP
    size()
    나눗셈
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
레이제로
[Chapter 04] CPU의 작동 원리
상단으로

티스토리툴바