[혼공] 2주차

2023. 7. 17. 01:57카테고리 없음

04. CPU의 작동원리

학습목표

  • ALU와 제어장치에 대해 학습
  • 레지스터의 종류와 역할에 대해 학습
  • 명령어 사이클을 이해하자
  • 인터럽트의 개념을 학습하자.

복습타임

  • CPU 구성요소는 레지스터, ALU, 제어창지로 구성되어있다
  • 명령어의 구조는 연산자(연산 작동), 오퍼랜드(피연산자인 데이터)로 구성되어있다.

ALU와 제어장치

CPU가 어느 명령어를 어떻게 읽어들이고 연산하고, 처리하는지 알아보자.

  • ALU
    이 부품의 용도는 명령어의 연산을 담당한다.
    이때 연산에 필요한 값과 연산결과값을 각각 받아들이거나 내보낼 것이다.
    • 받아들이는 값
      • 피연산자 : 레지스터에서 데이터를 가져온다.
      • 수행할 연산 :
    • 내보내는 값
      • 결과값 : 연산결과값
      • 플래그 : 연산결과에 대한 추가정보. 플래그 레지스터로 값을 보낸다.
        여기서 잠깐, 왜 플래그값도 같이 내보낼까?
        그 이유는 컴퓨터는 0과 1로 데이터를 표현하기 때문이다.
      • 음수, 양수 모두 2진수로 표현하다보니 연산값에 대한 추가적인 정보가 필요하다.

| --- | --- | --- |
| 플래그 종류 | 의미 | 사용 예시 |
| 부호 플래그 | 연산 결과의 부호(+,-)를 나타낸다. | 1 : 음수 0 : 양수 |
| 제로 플래그 | 연산 결과가 0인지 여부를 나타낸다. | 1 : 연산결과는 0 0 : 0이 아님 |
| 캐리 플래그 | 올림수나 빌림수가 발생하는지를 나타낸다. | 1 : 올림수나 빌림수 발생 0 : 발생X |
| 오버플로우 플래그 | 오버플로우가 발생했는지 나타낸다. | 1 : 오버플로우 발생 0 : 발생X |
| 인터럽트 플래그 | 인터럽트가 가능한지 나타낸다. | 1 : 인터럽트 가능함 0 : 인터럽트 불가능함. |
| 슈퍼바이저 플래그 | 커널모드/사용자모드 실행중인지 나타낸다. | 1 : 커널모드로 실행중 0 : 사용자 모드로 실행중. |
| | | |

  • 제어장치
    제어신호를 내보내고, 명령어를 해석하는 부품이다.
    당연히 값 도출을 위해서 input값, ouput 값이 있는 법이다.
    • 제어신호 : 컴퓨터 부품들에게 보내는 관리 및 작동 신호.
    • 받아들이는 값
      • 클럭신호
        클럭은 컴퓨터의 실행 시간단위다.
        대다수의 컴퓨터 부품은 클럭 단위에 맞춰 동작한다.
      • 해석해야할 명령어
        해석할 명령어는 명령어 레지스터 으로부터 가져온다.
      • 플래그 값
        플래그 레지스터에서 플러그 값들을 가져온다.
      • 제어신호
        시스템 버스에는 3가지 노선이 있다.(데이터, 주소, 제어)
        그 중에서 제어 버스로 전달된 제어신호를 받아들인다.
    • 내보내는 정보
      • CPU 외뷰/내부에 전달하는 제어신호

레지스터

레지스터는 CPU 연산 시 사용되는 임시저장공간이다.
CPU마다 종류, 크기, 이름이 다양하지만 필수로 존재하는 레지스터들을 알아보자.

  • 프로그램 카운터(PC)
  • 명령어 레지스터
  • 메모리 주서 레지스토
  • 메모리 버퍼 레지스터
  • 범용 레지스터
  • 플래그 레지스터
    위에서 정리했듯이, ALU 연산결과 또는 CPU 상태에 대한 부가정보를 장하는 곳이다.

명령어 사이클와 인터럽트

이번에는 전체적으로 전체적인 명령어들의 처리흐름을 살펴볼 차례이다.
그리고 이 처리흐름의 방해에 대해서도 알아본다.

* 명령어 사이클
하나의 명령어가 처리되는 주기이다. 프로그램 속 여러 명령어들 하나하나가 이 사이클을 가진다.
- 인출 사이클
명령어를 메모리 -> CPU로 가져오는 과정이다.
- 실행 사이클
가져온 명령여를 CPU에서 실행하는 과정이다.
- 간접 사이클
인출한 명령어에서 추가적으로 메모리 접근이 더 필요할 때, 이 과정을 거친다.
ex) 간접주소지정방식

  • 인터럽트
    프로그램을 실행하다가 갑자기 pc가 꺼지거나 내가 강제종료를 시키는 등 여러 일로 프로그램 실행이 중단되는 일이 존재한다.
    이처럼 프로그램의 실행을 방해하는, 즉 인터럽트가 발생할 수 있다.
    • 인터럽트
      CPU의 작업을 방해하는 신호
    • 인터럽트의 분류
      • 동기 인터럽
        CPU에 의해 발생하는 인터럽트이다.
        • 예시
          • 개발 시 예외(exception)
      • 비동기 인터럽트
        주로 입출력장치에 의해 발생하는 인터럽트다.
        CPU에게 보내는 알림이라고 생각하면 된다.
        • 예시
          • 입출력장치가 어떤 입력을 받아들였을 떄, CPU는 잠깐 하던 일을 중지하고 해당 작업을 처리한다.
        • 처리방법

5. CPU 실행기법

보다 효율적이고 빠르게 CPU 연산처리하는 방법에 대해 알아보자.

여러분이 빨리 일을 끝낼 때 아래의 방법을 사용할 것이다.

  1. 작업 속도를 빠르게 하기
  2. 같이 작업할 수 있는 경우라면, 누구 불러서 같이 작업하기
  3. 멀티플레이로 일하기

마찬가지로 CPU도 해당 방법들을 사용해서 일한다.

  • 클럭
    • 복습타임
    • 클럭 :
    • 클럭 속도단위 : 헤르츠(Hz). 1Hz : 1초에 1번 사이클
      컴퓨터 부품들은 클럭 신호에 맞춰 작동한다.
      그렇다면 클럭 속도가 높다면 동작속도도 빨라진다
    • 그렇다고 해서 무작정 오버클럭킹을 하면 발열이 심해지고, 실행속도는 무조건 빨라지는 것은 아니다.
  • 코어와 멀티코어
    사실 요즘 CPU는 명령어를 처리하는 부품들이 n개이다.
    • 코어
      명령어를 처리하는 부품
    • 멀티코어 프로세스
      코어를 여러 개 포함하고 있는 CPU우선 1. 코어들에 일이 균등하게 분배 되어있어야하고, 2. 처리하고자 하는 작업량에 맞는 코어수인가 생각해봐야한다.
    • n개가 동시에 작업하니 CPU 처리 속도는 빨라진다. 그렇지만 무조건 처리속도가 빨라지는 것은 아니다.
  • 스레드와 멀티 스레드
    스레드의 사전적 의미는 '실행 흐름의 단위'이다.
    • 하드웨어적 스레드
      1개의 코어가 동시에 처리하는 명령어 단위이다.
    • 1개 코어라 할지라도 n개의 스레드가 있을 수 있다.
    • 소프트웨어적 스레드
      하나의 프로그램에서 독립적으로 실행되는 단위
  • 명령어 병렬 처리 기법
    명령어를 동시에 처리해서 CPU를 쉴새 없이 가동하는 기법들에는 여러 종류가 있다.
    • 명령어 파이프라인
      이 기법은 명령어가 처리되는 각단계를 동시에 처리하는 기법이다.
      • 파이프라인 위험
        특정 상황에서 성능 향상에 실패하는 경우다.
        • 데이터 위험
          명령어 간의 데이터 의존성에 의해 발생한다.
          이전 명령어가 끝까지 실행되어야만 수행할 수 있는 경우도 있다.
          • 제어 위험
            분기 등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생한다.
            미리 준비한 PC 내에 인출했던 명령어가 무용지물되는 상황이다.
        • 구조적 위험
          겹처서 실행할 시, 서로 같은 CPU 부품을 사용하려할 때 나타난다.
        • 자원위험* 이라고도 부른다.
        명령어 1 : 메모리 주소 100번지에 100을 더하라
        명령어 2 : 메모리 주소 100번지에 3을 곱해라
      • 두 명령어가 명령어 파이프라이닝으로 동시에 처리 중이다.
        2개 모두 메모리 주소 100번지에 참조하게 된다.
  • 슈퍼스칼라 기법
    명령어 파이프라이닝을 n개 두었다.
  • 비순차적 명령어 처리
    명령어를 순차적으로 처리하지 않는 기법이다.
  • 순서를 바꾸어도 상관업는 명령어를 먼저 실행해 명령어 파이프라인이 멈추는 것을 방지한다.
  • CISC와 RISC
    앞선 시간에는 파이프라이닝에 대해 배웠다. 그러면 명령어는 어떤 구조로 되어야 명령어 파이프라이닝에 유리할까?
    • 명령어 집합(=ISA)
      CPU가 이해할 수 있는 명령어들의 모음.
      각 CPU마다 ISA가 다를 수 있다.
    • CICS와 RISC
CISC RISC
복잡하고 다양한 명령어 단순하고 적은 명령어
가변길이 명령어 고정 길이 방식
다양한 주소지정방식 적은 주소 지정 방식
프로그램을 이루는 명령어 수가 적음 프로그램으 이루는 명령어의 수가 많음
여러 클러에 걸쳐 명령어 수행 1클럭 내외로 명령어 수행
파이프라이닝하기 어려움 파이프라이닝하기 쉬움

메모리

  • RAM의 종류
  • 메모리의 주소 공간
    컴퓨터에서 사용하는 주소는 2가지가 있다. 물리 주소, 논리 주소는 각각 메모리, CPU와 실행 중인 프로그램에서 사용하는 주소다.
  • * 물리주소 - 하드웨어 상의 주소를 말한다. - 메모리에서 사용하는 주소 * 논리주소 -
  • 캐시메모리(cache memory)
  • 컴퓨터간 부품들은 각자 저장공간, 처리 속도가 다르다. CPU는 메모리보다 처리속도가 빠르기 때문에 메모리의 처리가 완료될 때까지 기다리기 때문에, 캐시 메모리를 두어서

#확인문제 및 미션