지식 공유

컴퓨터과학 총론 요약 - 1.데이터의 저장

한상규 2020. 10. 14. 00:54

1. 비트의 저장

1.1 비트

- 컴퓨터 안에 정보들은 0과 1으로 표현된다. 이를 비트라고 부른다.

 

1.2 부울 연산

0은 거짓, 1은 참을 나타낸다.

1.2.1 세가지 기본 부울 연산

- AND : 두 값이 모두 참일 때 참 나머지 거짓

- OR : 두 값이 모두 거짓일 때 거짓, 나머지 참  

- XOR : 두 값이 다르면 참, 같으면 거짓

1.3 게이트

AND 게이트

0 0 -> 0

0 1 -> 0

1 0 -> 0

1 1 -> 1

 

OR 게이트

0 0 -> 0

0 1 -> 1

1 0 -> 1

1 1 -> 1

 

XOR 게이트

0 0 -> 0

0 1 -> 1

1 0 -> 1

1 1 -> 0

 

NOT 게이트

0 -> 1

1 -> 0

1.4 플립플롭

- 컴퓨터 제작에 중요한 회로의 하나

- 0 또는 1을 값을 출력한다.

- 다른 회로로부터 출력 값을 변경하라는 펄스 신호를 받을 때까지 출력 값을 유지한다.

 

1.5 16진법

- 긴 비트열을 스트림이라고 부른다.

- '101101010011' 같은 스트림을 16진법을 이용해서 'B53'로 표현한다.

 

2. 주기억장치

2.1 셀

- 주기억 장치를 조직하는 단위

- 8비트

2.2 주소

- 개별 셀들을 구분하기 위해 각 셀에 주소가 부여된다.

2.3 RAM

- Random Access Memory

- 빠른 응답 속도, 휘발성

2.4 메모리 용량의 측정

1024B = 1KB

1024KB = 1MB

1024MB = 1GB

1024GB = 1TB

...

 

3. 대용량 저장장치

- 낮은 휘발성, 큰 저장용량, 적은 비용의 컴퓨터 저장 장치

3.1 자기 장치

3.1.1 하드디스크

- 헤드가 디스크 위 아래에 달려있어 디스크에 저장된 정보를 읽는다.

3.1.2 트랙

- 헤드가 지나가는 길, 데이터가 저장돼있다.

3.1.3 섹터

- 한번에 처리할 수 있는 만큼의 길이로 트랙을 나눈 단위

3.1.4 자기테이프

- 릴에 감긴 얇은 플라스틱 데이프상의 자기 코팅에 정보가 기록된다.

3.1.5 플로피 디스크

- 자기 코팅이 입혀진 디스크 판 한개가 들어있는 휴대형 케이스 형태, 쉽게 탈착가능

3.2 광학 장치

- 반사 표면에 변화를 주므로로써 정보를 기록한다.

- CD, DVD, Blue-ray Disk

3.3 플래시 드라이브

- 전기신호를 이용해서 전자를 가두는 방식으로 정보를 저장한다.

- 플래시 드라이브, SSD, SD 메모리 카드

 

4. 비트 패턴을 이용한 정보 표현

4.1 텍스트의 표현

 - ASCII : 8비트로 영문 대소문자, 구두점 기호, 0에서 9까지의 숫자, LF, CR tab등 제어문등을 표현함

 - 유니코드(UTF-8) : 가변적인 인코딩 크기를 가진 테스트 표현 방식이다. 전세계 언어와 향후 확장을 염두해서 32비트 패턴까지 가능하게 만들었다.

 

4.2 숫자의 표현

 - 2진법으로 표현한다.

 - 정수를 나타낼 때는 2의 보수 또는 초과 표기법을 사용한다.

 

4.3 이미지의 표현

 - 이미지를 점의 집합으로 해석한다. 

 - 점 하나를 픽셀이라고 부른다.

 - 픽셀 집합을 비트맵이라고 부른다.

 - RGB방식 : 적, 녹, 청색을 1바이트씩 3바이트를 이용해서 나타낸다.

 - 휘도, 청색 색도 차이, 적색 색도 차이를 이용한 색 표현 방식도 있다.

 - CAD : 3차원 물체의 도면을  표시하고 조작하는 시스템

 

4.4 소리의 표현

 - 소리의 진폭의 변화를 기록하는 방식을 사용한다.

 - 초기 전화에 초당 8000개의 진폭을 기록함, 초당 더 많은 수의 진폭을 기록할 수록 고품질이 됨

 - 비디오 게임 사운드, 웹사이트 음향 효과에는 MIDI를 사용함

 - MIDI : 어떤 시각에 어떤 악기를 몇초간 연주해라라는 정보가 들어있다. -> 적은 용량으로 기록가능

 

5. 2진 체계

5.1 2진법 ( 생략 )

5.2 2진 덧셈 ( 생략 )

5.3 분수의 2진법 표현

 - 101.101 정수부, 소수부로 나눠서 계산한다.

 - 1*(2^2)+0*(2^1)+1*(2^0).1*(2^-1)+0*(2^-2)+1*(2^-3)

 

6. 정수의 저장

6.1 2의 보수 표기법

비트패턴 표현 값
011 3
010 2
001 1
000 0
111 -1
110 -2
101 -3
100 -4

 - 가장 왼쪽 비트를 부호비트라고 한다.

 - 정해진 비트 패턴이 넘어가는 수는 표현할 수 없다. 표현되더라도 이상한 값이 출력된다.

  - 위 예시에서는 최대값이 3이다. 만약 3 + 1을 계산하면  100 이 되고 -4가 된다. 

  - 이를 오버플로우라고 한다.

6.2 초과 표기법

비트패턴 표현 값
111 3
110 2
101 1
100 0
011 -1
010 -2
001 -3
000 -4

7. 소수의 표현

 

7.1 소수의 표현

 - 부동소수점 표현 : 부호비트, 지수, 유효숫자를 이용해서 소수를 표현한다.

 - 정규형에 맞춰서 표현해줘야 하나의 소수를 표현할 때 한가지 표현법만 존재하게 된다.

 - 제한된 유효숫자 비트를 넘어서는 표현을 하고 싶을 때 절삭오차가 발생한다.

더 알아보기 : codetorial.net/articles/floating_point.html

 

8. 데이터와 프로그래밍

 - 파이썬에 대한 내용이므로 생략

 

9. 데이터 압축

9.1 일반적인 데이터 압축 기법

 - 무손실 압축 : 압축 해제시 원본과 같은 데이터가 나온다. 일반적으로 손실 압축보다 낮은 압축률을 보인다.

 - 손실 압축 : 압축 해제시 원본과 다른 데이터가 나온다.  일반적으로 무손실 압축보다 높은 압축률을 보인다. 비디오 같은 어느정도 손실을 허용할 수 있는 환경에서 사용한다.

 - RLE : 000000011111111100000 이라는 수를 표현할 때 0이 7번 나온 후, 1이 9번 나온 후, 0이 5번 나온다라고 표현하는 방법이다. 연속된 수가 많으면 많을 수록 압축률이 높아진다.

 - 허프만코드 : 등장하는 문자패턴에 빈도수를 조사해서 빈도수가 높은 것에는 짧은 코드로 인코딩하고 빈도수가 낮은 것에는 긴 코드로 인코딩하여 압축하는 방법, 빈도 종속 인코딩

 - 차등 인코딩, 상대적 인코딩 : 비디오 프레임을 압축할 경우 이전 장면과 현재 장면의 차이만을 저장해서 압축하는 방식이다.

 - 사전 인코딩 : 사전에 모든 데이터 패턴들이 들어있어서 인코딩 값과 대응이 돼있다. 무손실로 만들 수 있지만 사전의 크기가 너무 커져서 사전에는 근사값 몇개만 저장해놓는다. 따라서 손실 압축이 된다.

 - 적응적 사전 인코딩 : 데이터를 읽으면서 사전을 만들어 간다. 디코딩시 적은 크기의 사전만 참조하면 원래 값을 얻을 수 있다. 대표적으로 LZW가 있음.

 

9.2 이미지의 압축

 - GIF : 사전 인코딩 방법을 사용한다. 적, 녹, 청 조합을 256개로 표현한다. 손실 압축이다.

 - JPEG : 8*8 픽셀 사각지의 값들을 DCT라는 변환 공식에 넣어서 값을 얻어내서 압축한다. 디코딩시 손실이 있지만 사람이 알아차리기 어려운 수준이다.

 - TIFF : 주로 팩스를 보낼 때 사용하는 압축방식이다. 흰색 바탕이 대부분이라는 점을 고려하여 RLE 압축법을 이용해서 압축한다. 원래는 압축을 위한 것이 아니라 날짜, 시간, 카메라 설정을 함께 저장하기 위한표준 형식으로 사용함. 

 

9.3 오디오 및 비디오의 압축

 - MPEG : 비디오는 연속된 사진이다. JPEG로 인코딩하고 인코딩 된 값의 차등 인코딩을 이용해서 비디오를 인코딩한다.

 - MP3 : 사람의 청각기관의 특성을 이용한 큰소리를 듣고난 후 짧은 시간 작은 소리가 들리지 않음(시간적 차폐효과), 특정 주파수가 주변 주파수를 가림(주파수 차폐효과)

 - bps (bits per second) :  초당 보내지는 비트 크기, 압축만 중요한게 아니라 정확한 시간에 모든 데이터를 보여주는 것도 중요하다. 그러기 위해서는 일정수준 이상의 통신수준을 보장해주어야 한다.

 

10. 통신 오류

10.1 패리티 비트

 - 송신할 때 비트 패턴과 수신 할 때 비트 패턴이 다르면 통신 오류가 발생한 것이다.

 - 통신 오류를 검출하기 위해서 패리티 비트를 사용한다.

  - 짝수 패리티와 홀수 패리티가 있다.

  - 짝수 패리티는 전체 비트 패턴에 1의 개수가 홀수라면 1이라는 패리티 비트를 추가해서 전체 1의 개수가 짝수가 되게 만드는 것이다. 마찬가지로 전체 비트 패턴에 1의 개수가 짝수였다면 0이라는 패리티 비트를 추가한다.

  - 홀수 패리티는 전체 비트 패턴에 1의 개수가 짝수라면 1이라는 패리티 비트를 추가해서 전체 1의 개수가 홀수가 되게 만드는 것이다. 마찬가지로 전체 비트 패턴에 1의 개수가 홀수였다면 0이라는 패리티 비트를 추가한다.

 - 패리티 비트를 추가한 비트패턴을 송신한다.

 - 홀수패리티를 사용하는 상황에서 수신측에서 받은 비트 패턴에 1의 개수가 짝수였다. 그렇다면 통신 오류가 발생했다는 것을 알 수 있고 재송신을 요청하면 된다.

 - 두 비트 이상 오류가 생기면 오류검출이 되지 않는다. (8비트 크기의 비트 패턴에서는 좋은 성능을 보이지만 긴 비트패턴에서는 두 비트 이상 오류가 생기기 쉽다)

 - 검사바이트 : 긴 패턴에서 첫번째 비트에서 시작해서 8비트씩 떨어져 있는 비트들에 연계된 패리티 비트를 검사바이트 첫 비트에 추가한다. 긴 패턴에서 두번째 비트에서 시작해서 8비트씩 떨어져 있는 비트들에 연계된 패리티 비트를 검사바이트 두번째 비트에 추가한다. 이런 식으로 패리티 비트에 변형을 주어 2개 이상의 비트 오류도 검출할 수 있게 만든다. checksum, CRC 같은 것이 이에 해당한다. 

 

10.2 오류 정정 코드

 - 오류 검출을 넘어 오류 정정도 가능하게 해보자, 진공관 컴퓨터의 신뢰성을 향상하고자 해밍이 개발한 오류 정정법

 - 해밍 거리 : 임의의 두 코드를 비교했을 때 다른 비트의 개수를 센다. 이를 해밍 거리라고 한다.

 - 해밍 거리의 최솟이 3이 되게 만든 오류 정정 코드를 만든다.

 - 수신된 코드와 오류 정정 코드의 해밍거리를 구한다. 그 중 해밍거리가 최소가 되는 코드를 찾아는다. 그 코드와 매핑된 문자가 원본 데이터이다.

 

[오류 정정 코드의 예]

기호 코드
A 000000
B 001111
C 010011
D 011100
E 100110
F 101001
G 110101
H 111010