CPU의 구조

  • 명령어 사이클
    1. Instruction Fetch
      • CPU가 다음에 실행될 명령어를 가지고 오는 것이다.
      • IP(Instruction Pointer; PC(Program Counter)라고도 함)에서 다음에 실행될 명령어의 주소를 가지고 있다.
      • ex) Add 3, 5 라는 명령어를 가져온다.
    2. Instruction Decode
      • 명령어의 Operation code를 해독하는 단계이다.
      • ex) Add 를 해독하여 더하기 명령이라는 것을 알아낸다
    3. Operand Fetch
      • 피연산자를 가져오는 단계이다.
      • ex) 3, 5를 가져온다.
    4. Execution
      • CPU가 연산을 수행한다.
  • Instruction FetchInstruction DecodeOperand FetchExecution
  • CPU의 연산 과정
    • CPU에는 3가지 주요 Unit이 있다.
    1. Memory(Storage) Unit
      • 이 유닛은 명령어, 데이터, 중간 결과 등을 저장할 수 있다.
      • 다른 유닛으로 정보를 전송할 때도 쓰인다.
      • 레지스터, 캐시등 크기와 속도가 다른 여러 종류가 있다.
      • 모든 입력데이터와 출력데이터가 메모리 유닛을 통해 전송된다.
    2. Control Unit
      • 다음에 실행될 명령을 Memory Unit으로 부터 가져오고, 해독하여 신호를 ALU로 보내준다.
        • Control Unit은 CPU의 클럭 신호를 입력받아 적절한 명령 신호를 보내준다.
        • ALU가 아니더라도 메모리나 입출력 장치로 신호를 보내는 역할도 한다.
    3. Arithmetic Logic Unit
      •  
      • ALU는 실제로 연산을 수행하는 장치이다.
      • 사칙연산, Shift, 논리연산등을 수행한다.
      • Operation code와 Operand를 받는다.
      • 이렇게 받은 값들을 내부의 가산기, 보수기, 시프터, 오버플로우 검출기를 이용해 계산한다.
        • 가산기(Adder) : 2진수의 덧셈 연산을 수행한다.
        • 보수기 : 보수를 구한다. NOT 논리연산이다.
          • 가산기와 보수기를 사용하여 뺄셈 연산을 수행한다.
        • 시프터 : 시프트 연산을 수행한다.
        • 오버플로우 검출기 : 오버플로우를 검출한다.

컴퓨터가 화면을 보여주는 원리

  1. 그래픽 데이터를 만든다. (이미지, 동영상 등)
  2. 이미지(JPEG, PNG, BMP, GIF 등)를 픽셀 단위로 나누고, 3바이트(2^8 = 0~255, RGB)에 픽셀의 색을 저장한다.
  3. GPU가 이미지 데이터를 처리하고 모니터에 표시할 수 있는 디지털 신호(RGB 신호)로 변환한다.

https://velog.io/@ckstn0777/컴퓨터구조-9htxi9jo

'CS > 컴퓨터구조' 카테고리의 다른 글

컴퓨터의 언어 - 비트  (0) 2021.12.27

컴퓨터 내부에서 사용되는 언어체계는 "비트"이다. 

비트(bit)는 2진법을 사용한다. 이 개념은 추상적이라서 사용자, 설계자가 정의하기 나름이다.

예를 들어 비트 하나를 스위치로 생각해서 on/off 나 1이면 오후, 0이면 오전 처럼 임의로 정의해서 사용할 수 있다. 

논리 연산

비트를 참, 거짓으로 사용해서 어떤 연산을 하는 것을 말한다.

불리언 대수

조지 불이 만든 비트(참, 거짓)에 사용할 수 있는 연산 규칙이다.

NOT, AND, OR, XOR의 연산이 있다.

다 아니까 생략.

드 모르간 법칙

불리언 대수에 적용할 수 있는 추가적인 법칙이다.

논리 연산에 모든 것을 뒤집었을 때의 결과는 같다.

a AND b == NOT(NOT a OR NOT b)

https://m.blog.naver.com/mino522/220414861127

비트로 수를 표현하는 방법

인간은 10진수를 사용한다. 

각 자릿수에 0~9까지 10가지 숫자가 들어갈 수 있다.

2진수는 2를 밑으로 사용하는 체계이다. 

각 자릿수에 0~1까지 2가지 숫자가 들어간다. 

10진수 5028 == 2진수 1001110100100

10^3 10^2 10^1 10^0
5 0 2 8
2^12 2^11 2^10 2^9 2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
1 0 0 1 1 1 0 1 0 0 1 0 0

 

  • 10진수 세기
    • 0, 1, 2, 3,... , 9, 10, 11, 12, 13,... , 99, 100, 101, 102,... , 999, 1000
  • 2진수 세기
    • 0, 1, 10, 11, 100, 101, 110, 111, 1000

 

2진수 에서 가장 오른쪽의 2^0자리 수를 LSB(최소 유효 비트)라고 부르고, 가장 왼쪽의 2^n자리 수를 MSB(최대 유효 비트)라고 부른다.

2진수 덧셈

오른쪽(LSB)에서 왼쪽(MSB)으로 더한다.

덧셈 결과와 올림수를 고려해서 계산한다.

A B 덧셈 올림수
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

잘 보면 덧셈 결과는 XOR이고, 올림수는 AND이다.

컴퓨터 하드웨어에서 2진수의 덧셈은 XOR과 AND를 사용해서 할 수 있다.

덧셈을 하다 보면 덧셈의 결과가 사용할 수 있는 비트의 수를 넘어가는 경우가 있다. 이를 오버플로우라고 한다. 

예를 들어 1001 + 1000 = 10001이다. 하지만 4비트만 사용할 수 있다면, 0001만 결과로 나온다.

이런 경우 조건 코드 레지스터 - 오버플로우 비트에 오버플로우가 발생했다는 정보를 담아둔다. 

반대의 경우인 언더플로우도 있다. 

음수 표현

2진법에서 뺄셈은 음수를 더한다고 할 수 있다.

2진법에서 음수를 표현하는 방법은 3가지가 있다.

부호와 크기

가장 왼쪽 비트 MSB를 부호로 사용하는 것이다.

0이면 양수, 1이면 음수 이런 식이다.

이 방식의 단점은 사용할 수 있는 수의 범위가 줄어든다는 것과 0을 표현하는 방법이 2개가 생긴다.

또 연산 결과가 부정확하다. +1 = 0001, -1 = 1001을 더하면 1010 = -2이다.

그저 표현하는 방법일 뿐이다. 복잡한 방법으로 정당화할 수 있는 방법이 있긴 하다.

1의 보수

양수의 모든 비트를 반전시킨 것을 음수로 사용하는 것이다. 

0001 = 1, 1110 = -1이다.

덧셈을 할 때는 순환 올림을 해주어야 한다. MSB의 올림 비트를 LSB에 더해주는 것이다. 

1의 보수 방법도 +-0이 중복된다는 단점이 있다.

2의 보수

양수 비트에서 더했을 때, 0이 나오는 비트 패턴을 음수라고 지정한 것이다.

모든 수를 반전시키고, 1을 더하면 음수 비트 패턴이 나온다. 

0001 = +1, 1111 = -1

0001+1111=10000 인데 오버플로우가 발생해서 0000이 결과가 나온다.

2의 보수를 사용하면 0을 표현하는 방법이 1가지 이다.

실수 표현법

고정 소수점

소수점의 위치를 정해두고 항상 일정하게 사용, 해석하는 것이다.

예를 들어 4비트 중 왼쪽 2비트를 정수부분, 오른쪽 2비트를 소수(분수)부분으로 사용한다고 가정하고 계산하는 것이다.

넓은 범위의 수를 다룰수록 사용하는 비트가 많아진다는 단점이 있어 범용 컴퓨터에서 사용하지 않는다.

부동 소수점

과학적 표기법으로 수를 표현하는 방법이다. 0.0012를 1.2*10^-3 이런식으로 표현하듯 가수부와 지수부를 나눠서 사용하는 것을 말한다.

2진법에서 지수부의 밑은 2이다.

부동소수점 방식은 비트 조합 낭비와, 모든 비트 패턴을 표현하지 못한다는 단점이 있지만, 현재 컴퓨터에서 사용하는 표준 방법이다.

추후에 따로 다루겠다.

2진수를 다루는 방법

BCD

4비트의 2진수를 사용해서 10진수를 자릿수 별로 표현하는 것이다.

12는 0001(1) 0010(2) 이렇게 표현한다.

낭비되는 비트가 많다.

8진 표현법

2진수를 3비트씩 묶어서 8진수로 변환해 사용하는 것이다.

긴 2진수를 더 짧게 읽어지도록 하는 것이다.

16진 표현법

2진수를 4비트씩 묶어서 16진수로 변환해 사용하는 것이다.

진법 표기법

  2진수 8진수 10진수 16진수
숫자 10 10 10 10 10
10진수 변환 2 8 10 16

프로그래밍 언어에서 각 진수들을 표현하는 방법

  • 0으로 시작하면 8진수
    • 017 -> 15
  • 1~9로 시작하면 10진수
  • 0x로 시작하면 16진수
    • 0x12f -> 303

비트 그룹 이름

비트 이름
4 니블
8 바이트
16 하프 워드
32 워드
64 더블 워드

텍스트 표현

  • 아스키 코드
    • 7비트
    • 영어, 숫자, 특수문자, 제어문자 등
  • 유니코드
    • 모든 언어를 포함하는 표준
    • 16비트
      • 21비트 확장

'CS > 컴퓨터구조' 카테고리의 다른 글

CPU는 어떻게 명령을 처리할까?  (1) 2023.10.22

+ Recent posts