CS01 - 디지털 시스템, CPU 책 읽고 정리(일부)

Bibi·2022년 1월 7일

220104

CS01 - 디지털 시스템

디지털 시스템은 2진법을 사용한다.

  • 두 상태(1,true / 0.false) 만 존재하는 Bool 타입을 사용

전원 버튼(①) - 0과 1 을 나타냄. 켜짐/꺼짐.

이진법 binary

  • 컴퓨터는 전자제품이다.
  • 전기가 들어오냐/안들어오냐 의 상태를 기준으로 0, 1로 표현되고, 이를 나타내기 위해 이진법을 사용한다.

16진법 hexa-decimal

  • 16진수임을 나타내기 위해 0x가 앞에 붙어 있다.
  • 16진수를 쓰는 이유 : 바이트를 표현하기 쉽기 때문이다.

아날로그 vs 디지털

  • 세상의 모든 현상은 아날로그이다. - 연속적 continuous
  • 컴퓨터가 전자적으로 처리하는 방식은 디지털이다 - 불연속적 discontinuous
  • A/D Converter : 아날로그 신호를 디지털 신호로 변환하는 것
    • 연속적인 신호를 불연속적인(끊어진) 형태로 나타내는 것
    • 그 다음 코드(code)로 바꾸는 것

코드 code

  • 일상적으로 코드라는 용어를 사용하기도 한다.
    • 예) 그 친구랑 나는 개그 코드가 잘 맞아.
  • 아스키 코드(ASCII) : 알파벳을 입력하기 위해 정해진 숫자
  • 유니코드(unicode) : 모든 문자를 표현할 수 있다.
    • 어떤 플랫폼/프로그램/언어에도 상관없이 표현

컴파일 compile 과정

  • 우리가 작성한 코드를 기계가 처리하기 좋은 상태로 변환하는 것.
  • 컴파일러 - 어셈블러 - 링커
    • 초록색은 사람이 읽을 수 있음 (Text file)
    • 주황색은 사람이 읽을 수 없음 (Binary file)

코드로 디지털 시스템을 만드는 과정

  • 논리 회로도 : 스위치와 릴레이, 전기 등으로 회로를 표현
    • 릴레이 = 전자석.
  • 진리표 : 논리회로의 모든 경우의 수와 그 결과를 표로 정리한 것

이진수로 다루는 숫자는 모든 실수 표현이 가능할까?

소프트웨어는 하드웨어보다는 쉽게 변경이 가능하다.

  • 항상 "변경 가능성"을 염두에 두고 만들어야 한다.

Floating Point Error : Precision vs Round

예) 1 * (0.5 - 0.4 - 0.1) 의 값은 0 이어야 하지만, 실제로는 0이 아닌 이상한 숫자가 나온다.
Floating Point에 대한 이해가 필요하다. 실수를 다루다 보면 실수가 발생한다..ㅠ
"실수 표현은 눈에 보이는 게 전부가 아니다"
왜? 컴퓨터는 이진법으로 소수점을 다루기 때문에, 0.1을 정확하게 표현할 수 없다. 더 작은 숫자들을 더해서 근삿값으로 표현하는 것 뿐이다.

  • round (반올림)을 같이 사용해 처리해야만 원하는 값을 얻을 수 있다.

메모리에 2진법을 표시하는 방법은 한 가지 뿐인가?

byte ordering - 메모리 저장 구조

Little-Endian vs Big-Endian

byte order : byte(8bit) 단위로 앞 자리를 먼저 저장하는지 vs 뒷 자리를 먼저 저장하는지

  • Little-Endian 은 작은 자리 lsb부터 메모리에 저장
  • Big-Endian 은 큰 자리부터 메모리에 저장
  • MSB (Most Significant Bit) : 해당 이진수에서 가장 큰 비트를 의미.
  • 저장 방식은 각 장단점이 있고 문제가 없지만, 네트워크 상으로 공유할 때 byte order가 다르면 문제가 될 수 있다.
  • 네트워크상 주고받을 때에는 network order라는 규칙을 따로 만들어 그것을 지키기로 했다.

타입을 정하기

  • 내가 나타내려는 데이터의 특성을 가장 잘 반영 & 제한하는 타입으로.

그룹리뷰

여러 자리 수 덧셈 : 반가산기 + 전가산기 + 전가산기 ... 방식.

  • 전가산기만 여러 개 붙이되, 첫 전가산기의 carry를 0(false)로 하는 방식으로 구현할 수도 있다.

CPU 책 마저 읽기

기억회로

레지스터 : CPU 속의 기억장치.

  • 일시적인 기억을 담당하는 역할
  • 레지스터를 통해 과거의 상태를 연산 대상으로 삼을 수 있다.
  • 0 또는 1이라는 현재 데이터를 유지하면서, 조건에 의해 1 또는 0으로 반전시켜야 한다.
    플립플롭(FF) 회로로 구현.
    기억회로의 특징 - 8자 모양이 있다.
  • 서로의 출력을 다른 쪽 회로의 입력에 연결하고 있는 형태.
  • RS 플립플롭, D 플립플롭, T 플립플롭

CPU와 메모리의 구조

메모리

  • 메모리에 데이터와 프로그램이 들어 있으며, CPU와 데이터를 주고받는다.
  • 어드레스 adress : 메모리의 저장 장소에 할당된 주소.
    • CPU가 메모리에서 데이터/프로그램을 호출 또는 저장할 때 어드레스로 지정한다.
  • 버스 bus : 데이터의 통로
    • 버스 = 신호선을 묶은 것. 4 가닥의 신호선으로 4비트의 2진수를 나타냄
    • 즉 버스 폭 (=신호선의 수 = 비트 수)이 넓을수록 CPU 처리 능력이 향상됨
    • "64비트 CPU" 는 ALU의 처리 폭 및 버스 폭이 64개임을 의미한다.
    • 외부 버스 : CPU와 외부 장치를 연결하는 버스
      • 한 번에 데이터를 몇 비트 주고받을 수 있는지 알 수 있다
    • 내부 버스 : CPU 내부를 연결하는 버스
      • 한 번에 몇 비트의 데이터를 연산할 수 있는지 알 수 있다.
    • 어드레스 버스 : 어드레스를 지정하는 버스
      • 어드레스를 몇 비트 취급할 수 있는지 알 수 있다.
      • 어드레스 공간의 크기를 결정한다 = 어느 정도의 메모리 용량을 다룰 수 있는지 알 수 있다.
      • 예) 어드레스 버스 폭이 32비트 = 2의 32승 만큼의 어드레스 존재
    • 제어 버스 : 제어 신호를 전하는 버스
      • R/W 제어 신호 등을 주고받음
    • 데이터 버스 : 데이터를 주고받는 버스

R/W 제어, I/O 제어
R/W (Read/Write) = L/S (Load/Store)

  • Read = 메모리 읽기
  • Write = 메모리 쓰기
  • Load = 메모리에서 읽은 데이터를 레지스터로 이동
  • Store = 레지스터의 데이터를 메모리로 이동시켜 작성
    I/O (Input/Output)
  • Input = 입력. 외부에서 컴퓨터로 데이터를 보냄
  • Output = 출력. 컴퓨터에서 외부로 데이터를 보냄
  • I/O 제어 신호 : 입출력 외부 장치를 작동시키는 신호.

명령과 프로그램

  • 명령 : 프로그램을 CPU가 이해하기 쉬운 형태로 만든 것
    • 오퍼랜드와 명령 코드로 구성된다.
    • 오퍼랜드 : 연산의 대상. 어드레스로 지정된 경우도 있다.
    • 명령 코드 : 처리할 동작
  • 프로그램 : 명령의 연속. 작업지시서에 해당한다.
    레지스터
  • 명령을 실행할 때 아래와 같은 여러 종류의 레지스터가 반드시 필요함.
  • 어큐뮬레이터(누적기) : 계산에 필요한 값을 쌓아가는 메모장
    • 비트를 옮기는 시프트shift 기능이 있다.
  • 범용 레지스터 : 계산 외의 다양한 목적에 사용하는 메모장
  • 명령 레지스터 : 명령을 저장하는 메모장.

0개의 댓글