CS Interview

우리가 쓰는 데이터가 컴퓨터에 저장되는 방법

게임이 더 좋아 2022. 5. 28. 16:34
반응형
728x170

우리는 다양한 종류의 데이터를 쓰는데 컴퓨터는 1과 0으로만 이루어져있다고 한다.

도대체 어떻게 저장되길래 우리는 다양한 데이터를 저장할 수 있는 것일까??

배경부터 사소한 것까지 알아보자.

 


 

살다보면 기계어는 0과 1이라면서 컴퓨터도 0과 1로 이루어져있다고 들었을 것이다.

그것을 바로 비트(bit)라고 한다.

도대체 0과 1인데 어떠한 character가 되기도 하고

numeric value가 되기도 하고 어떻게 여러가지 형태의 데이터로 존재할 수 있는 것일까?

 

비트의 가장 기본적인 기능은 Boolean이다. 

Ture / False이다.

0이 일반적으로 False, 1이 일반적으로 True의 값을 가진다.

우리는 이 bit를 가지고 0과 1만 표현할 수 있다고 생각하지만 실제로 생각보다 비트로 할 수 있는 연산은 많다.

우리가 명제를 배우면 기본적으로 배우는 AND, OR, NOT 그리고 OR과 비슷하면서 다른 XOR 등이 실제로 비트 연산에 쓰인다.

 

어떻게 연산이 되는지는 내가 쓴 다른 글 : [전자공학/이산수학] - 논리적 추론과 증명에서 보자

**연산은 내부에서 진행되는데 내부는 수많은 Gate, Flip-Flop으로 되어있는데

이것은 그냥 AND, OR,  NOT, XOR의 조합이라고 보면 된다.

 

더군다나 비트 하나로는 2가지 밖에 표현못하지만

비트 4개가 모여서 16가지 표현방식이 되고 이에 그치지 않고

우리가 예전에 쓰던 32비트 운영체제는 8비트(1바이트)를 기반으로하는 컴퓨터였고

지금은 64비트 운영체제라며 쓰고 있는데 비트가 모여서 표현하는 방식이 무척 많아졌다.

 


 

우선 비트가 2가지 상태를 가지고 있고

비트가 모이면 여러가지 상태를 표현할 수 있는 것은 알았어..

근데 하나면 모르겠는데 여러 개의 비트라면 읽는 순서도 정해야하지 않아??

1011 과 1101은 다르잖아???

 

그래서 나왔다.

Memory Organization, 메모리는 실제로 cell 단위로 관리되는데 cell size는 일반적으로 8-bit이다.(1바이트)

즉, 우리는 cell에 있는 비트를 어떻게 읽냐??에

대해서 약속을 해야한다는 말과 같다.

컴퓨터는 오른쪽과 왼쪽을 구분하지 않는다.

우리가 읽는 방법을 정해주지 않는 한 읽을 줄 모른다.

** 위에선 bit에 대해서 언급했지만 실제로는 바이트에 대해서 판단한다.

 

MSB - Most Significant Byte,  LSB - Least Significant Byte 라는 것도 우리가 만든 개념이다.

항상 왼쪽에서 오른쪽으로 읽는다는 것도 인간이 만든 개념이다.

과연 왼쪽에서 오른쪽으로 읽는 것이 맞을까???

 

사실 두가지 방법이 있다.

**중요한 것은 바이트 단위로 나눈다는 것이다.

 

1. MSB (BIg Endian)

가장 큰 값을 가진 바이트(MSB)가 가장 낮은 주소에 있는 것을 말한다.

아래 그림을 보면 주소가 16진수로 되어있다는 것을 알 수 있을 것이다. (0x로 시작)

 

2. LSB(Little Endian)

가장 작은 값을 가진 바이트(LSB)가 가장 낮은 주소에 있는 것을 말한다.

 

 

다시 말하자면 4바이트 64비트를 표현할 때 바이트 단위로 메모리를 구성하는데

가장 큰 값이 Lowest Address에 가느냐 가장 작은 값이 Lowest Address에 가느냐를 결정하는 것이다.

 


 

비트가 수많은 표현을 하는 것도 알았겠다.

그리고 컴퓨터가 바이트를 읽는 방향도 알았겠다.

이제 실제로 비트(바이트)가 어떻게 데이터를 표현하는지 알아 볼 차례다.

 

우선 가장 첫번째로 문자다.

비트가 어떻게 문자가 되는 것일까?

비트의 조합으로 만들 수 있을 것 같다고??

정답이다. 1940년대 이후 우리는 컴퓨터의 언어로도 인간의 언어를 표현할 수 있게 했다.

 

그것이 American National Standards Institute, ANSI 이다.

지금도 쓰는 용어로 Text의 Encoding format을 말할 때 쓴다.

 

하지만 우리가 더 익숙한 것은 American Standard Code for Imformation Interchance, ASCII 이다.

아스키코드라는 것이 바로 이것이다.

아스키코드는 8비트로 문자를 표현한다.(원래는 7비트였다고 한다)

 

그 다음에는 International Organization for Standardization, ISO가 나왔다.

 

그 다음에는 우리가 가끔씩 듣는 유니코드 Unicode라는 것이 나왔다.

 

 

즉, 우리는 비트의 조합을 약속함으로써 인간의 언어로 인식하게끔 할 수 있었다.

다시 말해서 우리가 비트만으로도 우리가 원하는 문자를 저장할 수 있는 이유다.

 

아스키코드로 인사를 해보자.

 

비트로도 우리는 이제 문자를 표현할 수 있게 되었다.

 


 

그 다음으로는 우리가 알고 있는 숫자의 표현이다.

음.. 0과 1이 이진법이니까 숫자도 그냥 비슷하지 않을까??

정답이다. 다만 조금 주의해야할 사항이 있다.

우리가 종이에 공간이 없으면 더 큰 숫자를 쓰지 못하듯이

컴퓨터에서도 어느 이상은 표현할 수 없다.

그렇게 될 때 2가지 현상이 일어나는데 

 

1. Overflow => 값의 범위를 뛰어 넘어서 수치가 범위 안의 다른 값으로 바뀜.

2.Truncation => 정확하게 표현할 수 없으면 정보를 날림

 

조금 더 자세히 알아보자

이진법을 써서 숫자를 표현하는 것은 맞다.

다만 위에서 말했듯이

종이의 크기보다 더 큰 수는 사용을 못한다고 했다.

다시 말하면 우리가 제한을 건 범위보다 큰 수는 사용을 못한다고 했다.

Integer(정수형) 자료형은 일반적으로 4바이트로 32-bit가 표현할 수 있는 만큼의 숫자 범위를 가지고 있다.

Float(실수형)역시 4 바이트로 32-bit가 표현할 수 있는 만큼의 숫자범위를 가진다.

다만 실수형이기 때문에 소수점 이하 자리를 표현해야하는데 이를 조금 조심해야 한다.

 

부호를 표현하는 비트, 지수를 표현하는 비트, 유효숫자 비트 등이 있다.

쉽게 말해서 2의 거듭제곱만으로 표현이 가능한데.. 여기에서 정보 손실이 일어날 수도 있다.

이 부분을 Truncation Error 또는 Round-off Error라고 한다.

 

음...? 그러면 Exponent를 표현하는 비트와

Mantissa를 표현하는 비트수를 다르게 하면 정확도가 달라지는 거 아냐??

 

맞다.

그래서 우리는 Standard를 만들었다.

IEEE 754 이다.

 

우리가 사용하는 거의 모든 것들은 이 기준을 따른다.

숫자는 이러한 약속을 통해 저장된다고 생각하면 된다.

 


 

그렇다면 컴퓨터로 이미지도 띄우고 소리도 들을 수 있는데 그것은 뭘까??

 

결국 모든 것을 비트로 표현할 수 있어야 한다는 말과 같다.

이미지나영상 같은 경우에는 Bit map Technique을 이용한다.

우리가 흔히 말하는 픽셀, Pixel을 bit로 표현하는 것이다.

최근에는 HexaDecimal을 쓰기 때문에 R을 1바이트로 4bit * 2로 한 색상의 정도를 표현한다.

#FF00FF를 봤다면 바로 그것이다.

 

하지만 비트맵 방식 말고도 여러가지 방법이 있고 그것 또한 역시 내부를 까보면 비트의 약속이다.

 

그렇다면 사운드는 어떻냐?

사운드도 같다. 역시나 비트로 표현이 가능하다. 

이미지와 영상, 사운드 모든 것을 비트로 표현이 가능해서 우리가 원하는 작업을 할 수 있다.

 

그렇다면 압축도 가능한가...?

그렇다.

Compression도 비트로 작업하기 때문이란 것을 알아두면 된다. 

 

이미지는?

 

사운드는?

더 깊숙히 들어가지는 않겠다.

728x90
반응형
그리드형

'CS Interview' 카테고리의 다른 글

OAuth 2.0 이란?  (0) 2022.09.26
Web Server vs WAS  (0) 2022.09.24
SQL - 기본  (0) 2021.11.29
네트워크 - CS 면접 총정리  (0) 2021.11.23
프로그래밍 지식 - CS면접 총정리  (0) 2021.11.23