혼공 학습단/혼자 공부하는 컴퓨터구조+운영체제

혼자 공부하는 컴퓨터 구조 + 운영체제 Chapter 4

uomnf97 2024. 1. 14. 23:13
안녕하세요! 제이덥입니다~ 저는 지난주부터 학부 때 공부했던 CS 기초 내용을 Wrap-Up 하기 위해 혼공학습단 11기 활동을 진행하고 있는데요. 이번주에 2주차에 접어들었습니다. 포스팅이 늘고, 정리하면서 공부하니 뿌듯함이 느껴지네요.
이번 포스팅에서는 Chapter 4 CPU의 작동원리에 대해서 다룹니다. 지난 번에 작성하였던 CPU에 대해서 더 세세하게 살펴 볼 예정이며, CPU 내부에서 어떻게 작동하는지 해당 글을 통해 확인하실 수 있습니다.
해당 도서는 제가 직접 구매하여 글을 작성한 것이며, 혼공단 11기 활동의 일환으로 학습 내용에 대한 공유 글을 작성하게되었음을 알려드립니다. 도서에 대한 자세한 내용과 활동에 대한 내용을 알고 싶은 분들은 아래 Reference에서 확인해주세요~

Chapter 4. CPU 작동 원리

1️⃣ ALU와 제어장치

  • ALU
    • 역할 : 레지스터를 통해 피연산자를 받아들이고, 제어장치로 부터 수행할 연산을 알려주는 제어 신호를 받아들임. 받아들인 피연산자와 제어신호를 이용해 산술 연산, 논리 연산 등 다양한 연산을 수행함.
    • ALU가 내보내는 정보 : 특정 숫자, 문자메모리 주소, 플래그
    • 결과 값은 내보내지 않고, 레지스터에 저장
      • 레지스터에 저장하는 이유? 메모리에 접근하는 속도가 레지스터에 접근하는 속도보다 훨씬 느리므로 결괏값을 메모리가 아닌 레지스터에 우선 저장하여 프로그램 실행 속도를 높임
  • **플래그**
    • 역할 : 연산 결과에 대한 추가적인 정보를 제공(ex. 음수 양수 여부, overflow여부)
    플래그 종류의미예시
    부호 플래그 연산 결과의 부호 1: 음수 , 0: 양수
    제로 플래그 연산 결과가 0인지 여부 1: zero , 0 : 0이 아님
    캐리 플래그 올림수/빌림수 발생 여부 1: 올림수/빌림수 발생, 0: 발생하지 않음
    오버플로우 플래그 오버플로우 발생 여부 1: 오버플로우 발생, 0: 발생하지 않음
    인터럽트 플래그 인터럽트 가능 여부 1: 인터럽트 발생, 0: 발생하지 않음
    슈퍼바이저 플래그 커널모드 인지, 사용자 모드인지 알려줌 1: 커널 모드, 0: 사용자모드
  • 제어장치
    • 역할: 제어 신호를 내보내고, 명령어를 해석함
    • 제어 신호 : 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호
    • 유의점 : 제조사마다 구현 방식이 상이하니 반드시 모든 제어장치가 이와 같지 않다는 것을 인지할 것 + 대표적인 정보에만 초점을 두고 있음
    • 제어 장치 세부 역할
      1. 클럭 신호를 받아들임.
        • 클럭이란? 컴퓨터가 움직이는 시간 단위. 반드시 한 박자마다 컴퓨터가 작동하지 않다는 것을 인지하기
      2. 해석해야할 명령어를 받아들임.
        • 명령어 레지스터를 이용해 저장
      3. 플래그 레지스터 속 플래그를 받아들임
        • 플래그를 참고하여 제어신호 전달
      4. 제어 버스로 전달된 제어 신호를 받아들임
        1. ALU에 전달하는 제어 신호 : 수행할 연산을 위해
        2. 레지스터에 전달하는 제어 신호 : 데이터 이동 및, 명령어 해석을 위해

2️⃣ 레지스터

  • 레지스터의 역할은 매우 다양하며, CPU 마다 상이함.
  • 전공서적에서 다루는 중요한 8개의 레지스터에 대해 서술

종류역할

프로그램 카운터(PC:Progam Counter) 메모리에서 읽어 들일 명령어의 주소 저장, 명령어 포인터(IP:Instruction Pointer)라고도 부름
명령어 레지스터(IR:Instruction Register) 메모리에서 읽어 들인 명령어의 주소 저장)
메모리 주소 레지스터(MAR:Memory Address Register) 메모리의 주소를 저장하는 레지스터. CPU가 읽어 들이고자 하는 주소 값을 버스로 보낼 때 활용
메모리 버퍼 레지스터(MBR:Memory Buffer Register) 메모리와 주고 받을 데이터와 명령어를 저장하는 레지스터
범용 레지스터(general purpose register) 다양하고 일반적인 상황에서 범용적으로 쓰일 수 있는 레지스터. 현재 대다수 CPU가 가지고 있음)
플래그 레지스터(flag register) 연산 결과와 CPU의 부가적인 상태에 대한 정보를 저장하는 레지스터
  • 레지스터를 이용한 주소 지정방식 : 스택 주소 지정 방식
    • 프로그램 카운터, 스택 포인터, 베이스 레지스터 : 주소 지정에 사용될 수 잇는 레지스터
    • 스택 주소 지정 방식이란? 스택과 스택 포인터를 이용한 주소 지정 방식
  • 레지스터를 이용한 주소 지정방식 : 변위 주소 지정 방식
    • 변위 주소 지정 방식이란? 오퍼랜드의 필드 값, 특정 레지스터의 값을 더하여 유효주소를 얻어내는 저장 방식
    • 종류 :
      • 상대 주소 지정 방식 : 오퍼랜드 + 프로그램 카운터 값 ⇒ 유효 주소 추출
      • 베이스 레지스터 주소 지정 방식 : 오퍼랜드 + 베이스 레지스터 ⇒ 유효 주소 추출
  • 실제 CPU 작동 법은 책과 다른 모습이 있으므로, 임베디드 개발자/게임 엔진 개발자/보안 솔루션 개발자/시스템 해커 등을 지망한다면 더 살펴 볼 것

3️⃣ 명령어 사이클과 인터럽트

  • 명령어 사이클
    • 인출 사이클(fetch cycle) : 메모리에 있는 명령어를 가져옴
    • 실행 사이클(execution cycle): 명령어를 실행하는 단계로 레지스터에 담긴 값을 해석하고 제어신호를 발생 시킴
    • 간접 사이클(indirect cycle) : 명령어를 실행하기 위해 메모리 접근을 한번 더 해야하는 경우(간접 주소 지정 방식의 경우)
    • 명령사이클은 인출과 실행을 반복하며 실행
  • 인터럽트
    • CPU가 작동을 멈추고 다른 작동을 하게 만드는 요청으로 CPU작동을 방해하는 행위
    • 동기 인터럽트(synchronous interrupt):
      • CPU에 의해 발생된느 인터럽트
      • 종류 : 예외, 폴트(fault), 트랙(trap), 중담(abort)
    • 비동기 인터럽트(asynchronous interrupt) : 입출력 장치에 의해 발생하는 인터럽트(하드웨어 인터럽트)
  • 하드웨어 인터럽트
    • CPU가 입출력을 효율적으로 처리할 수 있도록 만듦
    • 어떻게? 만약 인터럽트가 없다면 CPU는 주기적으로 프린트 완료 여부를 확인해야하나 인터럽트를 통해 주기적으로 확인할 필요 없이 인터럽트 시그널이 도착하면 해당 경우에만 처리하면 됨으로 효율적인 처리를 도와줌
    • 인터럽트에는 정전이나 하드웨어 고장으로 막을 수 없는 인터럽트(non maskable interrupt)도 존재함
    • 하드웨어 인터럽트 처리 순서 :
      • 인터럽트 요철 신호 →인터럽트 여부 확인 → 인터럽트 플래그로 처리 가능한 인터럽트인지 확인 → CPU 작업 백업 → 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행 → 백업해둔 작업을 재개
    • 인터럽트 요청 신호 : CPU의 작업을 방해하는 인터럽트에 대한 요청
    • 인터럽트 플래그 : 인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트
    • 인터럽트 벡터 : 인터럽트 서비스 루티의 시작 주소를 포함하는 인터럽트 서비스 루틴의 식별 정보
    • 인터럽트 서비스 루틴 : 인터럽트를 처리하는 프로그램

Reference :