데이터의 발전
Scientific computing
Data : Numbers(integer, floating-point number)
처음에는 복잡한 방적식을 풀기 위해서 컴퓨터가 개발되었다.
그렇기에 필요한 데이터는 integer와 floating-point number(소수점이 있는 숫자)만 있으면 되었다.
Business computing
Database, data : characters, text
1945년 IBM과 같은 business computing이 발달하며 점점 방대한 데이터를 다룰 필요가 생겼다.
정보를 담기 위하여 characters나 text와 같은 데이터가 필요해졌다.
Internet application
Multimedia data : audio, image, video
1990년대부터 인터넷 등이 발달하며 멀티미디어 시대가 열렸다.
인터넷을 통해 audio, image, video 등의 데이터를 전송할 수 있게 되었다.
Todays
오늘날에는 public data나 여러 data에서부터 학습을 시키는 분야에 대한 관심이 높아지고 있다.
바로 Machine learning 등을 다루는 Data Science 분야가 그것이다.
Data
Computer and Data
컴퓨터는 크게 3가지 목적을 위해 사용된다.
계산, 저장, 접속이 그것인데 이는 컴퓨터의 3개 구성요소인 CPU, Memory, I/O device의 기능과도 맞물린다.
컴퓨터를 통한 행위는 사람이 하는 것이 아닌 기계가 하는 것이기 때문에 실수나 피로감이 없다.
이를 위해서는 data와 processing이 필수적이다.
Data는 정보를 표현하는 방식이고, Processing은 정보를 다루는 방법이다.
- Processors(계산)
- Execute program, compute
- Memory(저장)
- Programs and data, files, and folders
- Data center
- Input and output(접속)
- Human interactions
- Internet connections
- Internet/mobile commerce
Data
다음과 같은 종류들의 data가 컴퓨터에서는 사용된다.
그러나 data는 크게 integer과 floating-point number로 나눠지며, 이를 통해 표현될 수 있다.
- Numbers
- integer
- floating-point number
- Characters and text
- Multimedia data
- audio
- image
- video
Number systems data
Decimal number system(10진법)과 binary number system(2진법)을 사용한다.
이들은 Positional number system으로, symbol들로 표현되며 그 값은 symbol의 위치에 따라 결정된다.
- Decimal number system
- symbol : {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
- 5000년 정도의 역사가 있다.
- Binary number system
- symbol : {0, 1}
- Binary digit or bit라고 하며, 2000년 정도의 역사가 있다.
컴퓨터는 transistor로 이루어지며 이 transistor는 2개의 stable states(on/off)을 가지기 때문에, 컴퓨터에서는 binary number system을 사용한다.
OS, application 등의 software가 binary form을 인간이 사용하기 쉽도록 human-friendly form(decimal, characters)로 추상화해준다.
Hexademical Notation
컴퓨터에서는 binary form으로 표현되지만 이는 사람이 인지하기가 힘들다. 따라서 컴퓨터는 Hexademical notation(16진법)으로 표현하고 있다. 이는 컴퓨터를 위한 것이 아닌 순전히 사람의 인지를 쉽게하기 위한 pure mnemonic(연상기호)이다.
16진법은 32bit binary를 4bit씩 끊어서 8개의 hex digit으로 표현한다. 즉 2개의 hex digit이 1byte가 되는 셈이다.
예를 들어, "0000 0000 0000 0000 0000 0000 0000 0100"으로 되어있는 32-bit binary는 "00000004"의 8hex digit으로 표현된다.
Memory Model
Binary system
Binary system은 bit로 모든 것을 표현한다.
그렇기 때문에 10진법과 거의 같은 system이지만, 같은 값을 표현하기 위해서는 더 많은 symbol이 필요하다.
Bit를 많이 사용할수록 표현할 수 있는 범위가 늘어나고 더 많은 데이터를 한 번에 처리할 수 있다. 따라서 컴퓨터는 더 powerful 해진다.
요즘 컴퓨터는 32-bit system이나 64-bit system을 많이 사용하며, 지금부터는 32-bit system을 위주로 살펴보려고 한다.
32-bit computer의 메모리는 32-bit wide main memory이다. 따라서 instruction와 기본적인 data의 단위가 32bit로 이루어져있다.
현재의 큰 System에서는 매우 큰 단위의 stroage와 computation 단위를 사용한다.
Storage는 이미 수년 전에 $10^{18}$인 exa을 넘겼다. 이는 수백만개의 1TB의 disk을 합친 것과 같다.
Computation 또한 수년 전에 $10^{15}$(peta)을 넘겼으며 수백만개의 일반 processor을 합친 것과 같다. 그렇다고 속도가 빨라지는 것은 아니다.
참고로 일반 분야에서와 computer science에서의 standard prefixes는 다르다.
Full | short | 일반분야 | Computer science |
yotta | Y | $10^24$ | $2^80$ |
zetta | Z | $10^21$ | $2^70$ |
exa | E | $10^18$ | $2^80$ |
peta | P | $10^15$ | $2^50$ |
tera | T | $10^12$ | $2^40$ |
giga | G | $10^9$ | $2^30$ |
mega | M | $10^6$ | $2^20$ |
kilo | K | $10^3$ | $2^10$ |
Memory model
Single memory는 메모리 하나에 8bit(1byte)을 저장한다. 이를 Byte addressing이라 한다.
이는 효율성을 위한 구조이다. 가장 많은 데이터의 타입은 character로, 1byte이다.
그렇기 때문에 char을 위주로 데이터를 저장할 필요가 있고 더 많거나 적은 단위로 데이터를 저장하게 된다면 불필요한 공간 낭비가 된다.
효율성을 위해 memory는 byte addressing을 채택한 것이다.
그런데 32bit computer는 instruction도 기본적인 데이터도 32bit로 이루어지므로 아래와 같은 형태로 설계되어서는 안된다.
때문에 32bit computer에서는 오른쪽과 같이 메모리가 구성된다.
오른쪽에서 한칸의 구조는 왼쪽과 같다. 즉, 왼쪽 모델 4개가 모여서 32bit memory 모델의 한 줄(row)을 이루는 것이다.
이렇게 함으로써 컴퓨터는 32bit 단위로 data에 접근할 수 있게 된다.
결국 한 줄이 4개의 주소를 차지하게 되는 것이므로, 다음 줄로 넘어갈때는 4단위로 주소가 증가하게 된다.
char는 8bit이므로 한칸을 사용하게 되고, 16bit int는 2칸을 묶어서, 32bit int는 4개(즉, 한줄)을 묶어서 사용하게 된다.
Number Data의 저장
Numbers data
- Integer : 정수
- Floating-point number : 소숫점이 있는 수
Negative Numbers(음수)
Binary integer의 음수는 2의 보수(2's complement)를 이용한다.
다른 보수를 사용하면 ALU의 성능 저하가 일어나기 때문에 2의 보수를 사용한다.
2의 보수는 "1의 보수 결과 + 1"을 한 것으로, 마지막 1은 그대로 두고 나머지를 전환하면 쉽게 계산할 수 있다.
예를 들어, "0100 1011"(75)의 2의 보수를 구해보자.
"0100 1011"의 1의 보수는 "1011 0100"이고 여기에 1을 더하면 "1011 0101"이 된다.
쉽게 마지막 1인 끝자리($2^0$ 자리)을 제외하고 나머지를 전환(0은 1로, 1은 0으로)해주면 "1011 0101"이 된다.
Real Numbers(실수)
1. Fixed-point representation
소수점이 고정되었다고 생각하고 그 소수점 자리 위로는 정수가, 아래로는 소수부분이 위치한다.
그러나 32bit를 정수부분과 소수부분으로 나누게 되면 표현 범위가 작아진다.
그렇기 표현 범위 보장을 위해서 추가적인 hardware support가 필요하다.
정수 부분은 32bit로 그대로 사용하고 소수 부분은 추가적인 10bit(fraction)로 표현하여 표현 범위를 보장할 수 있다.
그러나 소수 부분이 10bit을 넘어가게되면 truncation이 일어나서 근사연산이 일어나서 정확도가 낮아지게되는 문제점이 있다.
2. Floating-point representation
소수점이 고정되어있지 않고 유동적으로 움직이는 표현방법이다.
매우 많은 bit을 필요로 하는 큰 숫자와 매우 작은 숫자까지 적은 bit로도 표현이 가능하다.
유효숫자와 지수부분을 나눠서 저장한다.
예를 들어 $1.001 \times 2^{-97}, 1.110 \times 2^{68}$는 다음과 같이 표현한다.
Fixed-point representation과 마찬가지로 유효 숫자 공간을 넘어서는 숫자가 들어올 경우 truncation이 일어나고 근사연산이 이루어진다.
계산이 fixed-point arithmetic에 비해서 복잡하다는 단점이 있다.
Number data와 ALU
두 가지 종류의 ALU가 존재한다.
- Integer ALU
- FP ALU : Floating-Point ALU
컴퓨터는 범용 프로세서를 가지기 때문에 주로 integer ALU와 FP ALU을 모두 가진다.
반면에 모바일과 같이 embedded system에서는 더 작고, 싸고, 저전력인 프로세서를 요구하기 때문에 주로 Integer ALU만 존재한다.
대신 embedded system에서는 hardware supprt을 통해서 소수점 계산을 수행할 수 있다.
다른 데이터의 저장
Numbers 외에도 text, audio, image, video와 같은 data type도 결국에는 binary pattern(integer)로 표현된다.
Text
각 character들은 고유한 bit pattern을 할당받는다.(가지고 있다.)
- ASCII
- 7개의 bit로 128개의 symbol을 표현할 수 있다.
- 키보드 자판에 있는 symbol(영어, 숫자, 기호 등)을 나타내는데 사용되었다.
- ISO
- ASCII가 8개의 bit로 확장된 것이다.
- 다른 종류의 언어를 포함하기 위해 사용되었다.
- Unicode(유니코드)
- Character들은 1byte에서 4byte로 변환되었다.
- 전세계의 언어를 포함하기 위해 사용되었다. → Internationalization
Auido
아날로그 소리는 무한의 연속으로 저장이 힘들다.
그래서 아날로그 파장에서 일정한 시간마다의 값을 데이터(sample)로 저장함으로써 소리를 디지털로 변환시킨다.
소리의 질은 sample의 빈도, bit 수에 따라 결정된다.
Audio data는 음성인식, computer music 등에 활용된다.
MP3는 소리를 저장하는데 가장 많이 사용되는 형식이다.
- 초당 44100개의 sample(데이터)을 저장한다.
- 하나의 샘플은 16개의 bit을 가지고 있다. 0000~FFFF까지 저장한다.
Image
가장 많이 사용되는 JPEG는 이미지를 여러 픽셀로 나누고, 하나의 픽셀은 24개의 bit(3bytes)에 저장한다.
24개의 bit는 Red, Green, Blue의 정도가 각각 8bit씩 담겨져 있다.
픽셀의 수가 많을 수록 화질이 높아진다.
Full HD의 경우 1920*1080으로, 약 6MB(1920 x 1080 x 3bytes)가 된다.
물체인식, 자율주행, 포토샵 등에서 활용된다.
Video
일정한 초마다의 이미지(frame)를 저장한다. 예를 들어 초당 30 frame을 저장하는 방식이다.
Multimedia Data
Auido, Image, Video data와 같은 멀티미디어의 저장은 lossy compression(손실 압축)으로 이루어진다. 데이터가 무한으로 이루어져있어서 모든 데이터를 저장하기 힘들기 때문이다.
반면, 텍스트 파일, 은행 기록 등은 유한 집합이기 때문에 losseless compression(무손실 압축)으로 이루어진다.
주로 사용되는 MPEG(Moving Picture Experts Group) standard 중 MPEG-4 lossy compression의 일종이며, ALZip과 같은 것은 losseless compression(무손실 압축)이다.
참고 : C에서의 Built-in Data Types
C는 Integer, character, floating point number 등의 data type을 built-in으로 가지고 있다.
그러나 크게 Integer와 Floating point number로 나눌 수 있다.
- Integer
- short, long, signed, unsigned
- size는 machine마다 다르지만 int는 최소 16bit 이상의 크기를 가지고 있다.
- Characters
- char
- 하나의 character을 담을 수 있는 single byte이다.
- 개념적으로는 small integer로 볼 수 있다.
- Floating point numbers
- float, double
- single or double precision
- Implicit in C
- boolean, string
'Computer Science > Computer Architecture' 카테고리의 다른 글
Machine Instruction, ISA, and Computer (0) | 2021.03.18 |
---|---|
Program Execution (0) | 2021.03.18 |
Abstraction과 Software Design (0) | 2021.03.14 |
Abstraction과 Hardware Design (0) | 2021.03.14 |
Transistor와 반도체 제조 공정 (0) | 2021.03.14 |
댓글