Super Kawaii Cute Cat Kaoani topic0-3 Data

수업정리/컴퓨터 구조론

topic0-3 Data

치킨고양이짱아 2023. 2. 1. 17:36
728x90
728x90

Machines Called Computer

컴퓨터라는 기계는 데이터건, 프로그램이건, address건 모두 'binary'로 되어 있음. 여기서는 'data'에 초점을 맞추어 살펴볼거임.

Data vs Processing

프로그래밍을 할 때 해결해야하는 문제

  • 데이터를 어떻게 표현할지
  • 데이터를 어떻게 processing 할지 → 이 두 문제 모두 중요하다.

Evolution of Data

  • 1945년 현대식 컴퓨터가 최초로 만들어졌을 때 사람들의 초점은 과학 계산이였음.

    그래서 이때의 데이터는 주로 'numbers' (숫자엔 크게 2가지 Integers, floating-point numbers)

  • 2차 세계대전이 끝난 후 기업이나 조직에 컴퓨터의 큰 시장이 형성됨. 이 곳에서는 방대한 데이터를

    관리할 필요가 있었고, 여기서 주된 데이터는 characters or text

  • 1990년도에 인터넷이 널리 보급되면서 멀티 미디어 시대가 열림.

    오디오, 이미지, 비디오 데이터가 널리 사용됨.

→ 오늘날에는 이런 방대한 데이터를 통해서 유용한 지식을 뽑아내고, 나아가 이런 데이터를 사용해 유용한

알고리즘을 만들어보자는 움직임이 많음 (이런걸 하는 분야를 데이터 사이언스, 머신 러닝)

How do we use computers?

  1. 계산 : 컴퓨터 처음 만들어졌을 때의 목적이기도 함
  1. 저장: 많은 기관에서 컴퓨터를 사용하게 되면서 강조된 기능
  1. I/O(접속): 인간끼리의 Interactions, 인터넷 연결, 인터넷 모바일 commerce

이 3기능은 하드웨어 3요소인 CPU, Memory, I/O와 mapping 되는 기능이다.

Data, Programs, Address in Binary - Focus on data

Number systems

  • Decimal number system, Binary number system

    둘 다 Positional number system (symbol의 위치에 따라 weight가 결정된다.)

    그래서 둘이 거의 같은 기법이라고 볼 수 있음. 하지만 2진법에서는 1, 0만 사용하기 때문에

    같은 값을 표현할려면 digit을 더 많이 써야한다.

*Binary digit을 bit라고 한다.

Why binary numbers in computers?

왜 컴퓨터에서는 binary를 사용할까?

→ 컴퓨터라는 기계는 트랜지스터로 만들어진다. 트랜지스터는 2개의 안정된 상태를 가지기 때문에

컴퓨터라는 기계의 모든 내부 정보는 전부 binary로 표현이 된다. 그래서 binary를 사용

Why we don't see binary numbers?

컴퓨터 안에 있는 모든 정보는 binary로 표현된는데 우리는 거의 본적이 없음. 왜?

소프트웨어10진과 characters라는 인터페이스를 제공하기 때문

→ 머신 자체는 binary로 움직임. 근데 binary 를 쓰면 사람들이 불편해하니까 소프트웨어가 추상화를 시켜서 인터페이스 제공

(Unsigned) Binary Integers

16비트를 쓰면 (0 to 2^16-1) 64K 표현 가능

32비트를 쓰면 (0 to 2^32-1) 4G 표현 가능

→ 그렇게 큰 범위는 아님. 우리나라 1년 예산도 표현 못할 정도. 표현하려면 반을 나눠서 처리하거나 그래야함

만약 64비트를 쓸 경우 별도의 처리 없이 바로 처리 가능. 따라서 비트 수가 커지게 되면 컴퓨터는 보다 큰 데이터를

한번에 처리할 수 있어서 더 powerful 해진다.

Standard Prefixes

Where are we?

1) Storage

  • 유튜브 서버같이 규모가 큰 서버의 저장용량은 오래전에 exa byte의 영역을 지났음. 다음 단위를 향해 달려가는 중
  • exa byte 정도 저장할려면 테라 바이트 디스크 백반개를 써야한다. 근데 이렇게 백만개의 디스크를 쓰다보면

    하루에도 여러개의 디스크에 고장이 발생. 이런 여건 속에서도 전세계 유저들에게 문제 없이 스트리밍을 제공

    하는게 이 회사들의 능력이다.

2) Computation

  • 지구 상에서 가장 빠른 컴퓨터는 어느 영역에서 돌고 있을까? 몇년 전에 10의 15승(peta) FLOPS를 지남

    → FLOPS: floating point operation per seconds

    → 이런 기록들은 슈퍼 컴퓨터 경진대회에서 정해진다.

    → 우리가 쓰는 CPU는 giga Hz로 동작하기 때문에 10의 9승 FLOPS로 동작한다.

    10의 15승으로 동작하는 CPU를 설계하는 것은 불가능하기 때문에 슈퍼 컴퓨터들은 우리가 사용하는

    CPU를 100만개 정도 사용한다.

32-bit Computers

여기서는 machine instruction도 32비트, 기본적인 데이터도 길이가 32비트

근데 binary로 되어 있는 데이터를 기록한다던가 다른 사람한테 값을 알려줄 때 굉장히 힘들다. 32개나 불러줘야함

→ 그래서 hexadecimal notation을 사용!

(hexadecimal notation으로 바꿀 때 binary로 표현되어 있는걸 4개씩 끊어서 바꾸면 된다.)

(decimal로 32자리 → hexadecimal로 32/4 = 8자리)

→ 컴퓨터는 hexadecimal을 전혀 사용하지 않는다! 이걸 사용하는 이유는 순전히 인간의 편리를 위한거

Memory Model

메모리는 저장할 공간이 굉장히 많음. 그리고 각각의 공간마다 주소를 가지고 있음.

💡
컴퓨터라는 기계는 주소 하나당 얼마만큼의 양의 데이터를 저장할까? → 8 bits (1 byte)

→ 이렇게 하는건 효율 때문. 컴퓨터를 쓰다보면 가장 흔하게 사용되는 데이터가 character. (1byte)

캐릭터 운영이 많기 때문에 캐릭터를 효율적으로 처리하는게 중요. 그래서 한 주소 당 한 바이트가 저장.

→ 만약 character는 한 byte인데 한 주소당 한 bit만 저장한다면?

캐릭터 하나 저장하는데 여러 번지수가 필요한 상황이 되어 버린다.

→ 한 주소당 32비트를 저장한다면?

가장 흔한 데이터가 캐릭터니까 24비트를 낭비하는 상황이 자주 생긴다.

💡
그런데! CPU가 메모리에 접근해서 32비트를 읽어올 수 있어야하는데 한 주소당 한 바이트만 저장되어 있다면, 한 번 접근해서 한 바이트밖에 못 읽어오는거 아니냐?

→ 다음의 요구를 충족시키기 위해서 32비트 머신의 메모리는 4열 종대로 나열되어 있다.

  • 메모리에 Instruction이 저장되어 있다고 하면 32비트니까 한 줄 전체에 저장되면 된다.
  • 16-bit int일 경우 두칸 쓰면 되고 32-bit int일 경우 한 줄 쓰면 된다.
  • CPU가 메모리에 한 번 access 하면 한 줄씩 읽음

    그래서 PC가 4 또는 8씩 증가하는거다.

  • 16비트 프로세서의 경우 2열 종대로 메모리가 배치되어 있다.

Negative Number

→ 2의 보수를 사용해서 표현

: 2의 보수를 사용하는 이유는? 2의 보수를 사용해서 ALU를 만들어야 ALU가 빠르게 동작할 수 있음

: 수의 표현방법을 잘못선택하면 ALU의 성능이 낮아진다.

Real Numbers

  1. Fixed-point representation
    • 소수점의 위치가 어딘가에 고정되어 있다고 생각.
    • 근데 이렇게 하면 정수 부분의 표현 범위도 줄고, 소수 부분도 그렇게 많이 표현할 수 있지 않음.

      이런 문제 때문에 하드웨어를 좀 추가하게 된다.

    • 정수의 표현 범위를 유지하면서 소수 연산을 하고 싶으면, 하드웨어적으로 ALU에 추가 비트를 제공해주면 된다.

      10비트를 추가적으로 제공해줘서 소수 부분을 표현하게 해주면 전체적으로 42비트를 사용하면서

      정수부분엔 32비트, 소수부분엔 10비트를 사용할 수 있다.

    • 근데 만약 소수부분이 10비트로 표현이 안되면 어쩔 수 없이 잘라냄.

      컴퓨터에서 실수연산은 근사연산이라는 점을 항상 알아야한다. (정수 연산은 정확)

  1. Floating point Nubmers
    • 과학 계산을 하다보면 절댓값이 굉장히 크거나 작은 수들을 보게 된다. (scientific number)

      이런 수들을 fixed 방식으로 표현할려면 100비트 정도가 필요함. 이건 너무 효율이 떨어짐.

      그래서 fixed point 방식에 대응되서 생긴게 floating point 방식

    • floating point 표현에서는 유효숫자지수부분만 표현한다.
    • 실수를 표현할 때 32비트를 쓸 수도 있고 64비트를 쓸 수도 있는데

      32비트일 경우 32비트의 일부는 유효숫자를 나타내는데 사용하고, 일부는 지수를 나타내는데 사용.

      지수의 값에 따라 소수점의 위치가 유동적으로 바뀌므로 이 방식을 floating point 방식이라함.

    • 이 방식을 사용하게 되면 두 수를 더할 때 integer 더하듯이 하면 안된다. 연산이 훨씬 복잡.
    • 이 방식으로 실수를 표현한다 하더라도 여전히 근사연산

Integer and FP ALU

숫자에 Integer와 floating point 2가지가 있음. 따라서 ALU도 Integer ALU, FP ALU 2가지가 있음

FP ALU가 Integer ALU보다 훨씬 복잡하게 동작한다.

  • PC나 노트북과 같은 범용 컴퓨터

    → 이거 다양한 응용 프로그램을 다 돌릴 수 있어야함. 그리고 그 중 하나가 과학계산임.

    그래서 PC나 노트북에 있는 프로세서는 과학계산을 지원할 수 있어야한다.

    그래서 두 종류의 ALU를 모두 가지고 있음.

  • 스마트폰과 같은 embedded systems

    → 스마트폰같이 embedded system의 프로세서는 CPU가 작고, 싸고, 전력을 적게 쓸 수록 미덕임.

    그래서 Integer ALU만 있음. 필요하다면 Fixed point 방식으로 동작하는 hardware을 추가할 수 있음.

Built-in Data Types in C

C가 제공하는 build-in data type에는 무엇이 있을까?

  • int (Integer)

    : short or long, signed or unsigned

  • char (Characters)

    : char 응용이 워낙 많기 떄문에 지원한다. 근데 이건 Integer 부류에 속함. 작은 Integers 라고 보면 된다.

  • float, double (Floating point numbers)
  • Boolean과 string 타입은 C에서 따로 제공하지 않음. 위에서 제공하는 것들을 이용해서 쓰면 된다.

    즉, C에서 모든 데이터의 기본은 Intger와 Floating point

Different Types of Data

Text, audio, image, video 와 같은 multimedia data 내부를 보면 전부 binary로 되어 있음.

Representing Text (Integers)

  • ASCII: 캐릭터들은 아스키코드에서 시작되었음. 아스키코드는 symbol 128개를 7 bit로 인코딩
  • ISO: 그 후, 유럽의 여러 나라들의 알파벳을 표현하기 위해 8비트로 확장
  • Unicode

    그 후, 아시아권을 포함하는 전세계의 언어를 포함하기 위해 유니코드를 만들었음

    자주 쓰이는 캐릭터들은 1 byte, 자주 쓰이지 않는 것들은 최대 4 byte로 인코딩

Storing Audio (Integers)

  • 오디오 데이터도 기본적으로 sequence of integers로 표현된다.
  • 소리의 질은 샘플빈도와 비트수로 결정.
  • 오디오 데이터는 아날로그 데이터이기 때문에 컴퓨터에 그대로 저장할 수 없음

    그래서 아날로그 신호를 일정한 시간 간격마다 샘플링해서 비트들로 값을 저장한다

  • 샘플을 충분히 자주 만든다면 샘플만으로도 아날로그 원음에 유사한 소리를 만들어낼 수 있다.

Storing Images (Integers)

  • 사진은 많은 수의 픽셀로 구성. 픽셀 하나는 24비트로 표현.

    R, G, B가 각각 8비트를 차지하며 이 3색을 가지고 하나의 칼라 픽셀을 구성하게 된다.

  • Full HD resolution: (1920 X 1080)

    Full HD는 가로에는 1920개의 칼라 픽셀, 세로에는 1080개의 칼라 픽셀이 들어간다.

    픽셀 하나 당 3바이트를 쓰니까 총 6MB를 사용하게 된다.

  • 사진 안에 몇개의 픽셀이 들어가느냐에 대한 여러 표준안들이 나와있음.

    → XGA, HD 1080(Full HD), 4K 이런게 가로 세로에 몇개의 픽셀을 넣을건지에 대한 표준안들이다.

Storing Video (Integers)

동영상은 용량이 너무 커서 압축하는게 중요함. 동영상 압축할 때 보통 다음 2가지 방법 사용

  • Lossy compression(ex: MPEG-4)
  • Lossless compression(ex: ALZip)

Uploaded by N2T

728x90
728x90