교재 : 컴퓨터 과학 총론 (13th Edition)
(배운 내용을 책으로 복습하며 작성한 글입니다. )
1. 비트의 저장
: 컴퓨터 안에서 정보는 0과 1들의 패턴으로 표현된다. 이러한 숫자를 비트라고 한다.
1) 부울 연산
AND 연산 : 둘 다 참일 때만 참
OR 연산 : 둘 중 적어도 하나가 참이면 참
XOR 연산 : 두 입력값이 서로 다를 경우 1을 출력
NOT 연산 : 입력의 반대를 출력
2) 게이트와 플립플롭
게이트 : 부울 연산의 입력 값들이 주어질 때 연산 결과를 출력하는 장치 ( == 논리 게이트)
- 오늘날의 컴퓨터 안에 사용되는 게이트는 트랜지스터(전압 수준에 따라 0과 1을 나타냄)로 만들어져있다.
플립플롭 : 컴퓨터 메모리의 기본 단위
- 게이트들을 조합하여 만든 하드웨어 부품
- 0 또는 1을 출력값으로 가진다.
- 다른 회로로부터 출력 값을 변경하라는 펄스 신호(외부자극)를 보내올 때까지 출력 값을 일정하게 유지하는 회로
- 다른 회로에서 플립플롭에 펄스를 보내 플립플롭 출력 값을 쉽게 조절할 수 있으며, 어떤 회로들은 플립플롭의 출력을 자신의 입력으로 사용함으로써 플립플롭에 저장된 값을 이용할 수 있다.
- 칩(chip)이라고 불리는 반도체 웨이퍼 한 장 위에 수백만 개의 전기회로들을 만들 수 있는 VLSI(very large-scale integration ; 초고밀도 집적회로) 기술을 이용해 수백만 개의 플립플롭과 제이회로들을 포함하는 소형 장치를 만든다. (칩은 다시 컴퓨터 시스템 안의 상위 수준 부품 제작에서 추상 도구로 사용된다.)
3) 16진법(hexadecimal notation)
- 컴퓨터의 내부 활동을 살펴볼 때 비트 열이라는 비트 패턴들을 다루게 된다.
- 긴 비트 열은 때로 스트림(stream)이라고 불린다.
- 16진법 : 비트 패턴의 표현을 쉽게 하기 위한 간이 표기법
2. 주기억장치
: 데이터저장을 위해 컴퓨터는 한 개의 비트를 저장할 수 있는 수많은 회로들을 포함하고 있다. 이러한 비트 저장소를 컴퓨터의 주기억장치라 한다.
1) 메모리 구성
- 셀 : 컴퓨터 주기억장치의 관리하기 쉬운 단위, 주로 8비트( == 1바이트)
대개 메모리 셀 안의 비트들이 한 줄에 배열되어 있다고 간주한다. 이 줄의 왼쪽 끝을 상단(high-order end), 오른쪽 끝을 하단(low-order end)이라고 부른다. 셀의 내용이 숫자를 나타내는 것으로 해석될 경우에는 숫자에서 가장 큰 자리수를 나타내는 가장 왼쪽 비트를 상위 비트(high-order) 또는 최상위 비트(most significant bit)라고 부른다. 가장 오른쪽 비트는 하위 비트(low-order) 또는 최하위 비트(least significant bit)라고 부른다.
- 주소 : 주기억장치 안에 있는 개별 셀들을 식별하기 위해 각 셀에 지정한 고유한 이름
- 주기억장치의 셀들과 각 셀 안의 비튿르에 순서를 부여함으로써 얻는 결과
: 컴퓨터 주기억장치 안의 모든 비트들이 길게 일렬로 배열되어 있는것으로 생각할 수 있다.
- 컴퓨터의 주기억장치를 완성하기 위해 실제 비트들을 저장하는 회로는 메모리 셀에 데이터를 저장하거나 메모리 셀에서 데이터를 읽어내기 위해 필요한 회로들과 결합되어 있다.
- 읽기 연산 : 다른 회로에서 특정 주소의 내용을 전자적으로 요청함으로써 데이터를 읽을 수 있다.
- 쓰기 연산 : 특정 주소에 위치한 셀 안에 특정 비트 패턴을 저장하도록 요청함으로써 정보를 기록한다.
- 컴퓨터의 주기억장치는 주소가 부여된 개별 셀들로 이루어져 있으므로, 필요한 셀들에 독립적으로 접근할 수 있다.
- RAM(Random Access Memory, 임의 접근 메모리) : 컴퓨터 주기억장치를 임의의 순서로 셀들에 접근할 수 있다는 점을 반영하여 부르는 이름
- 대부분의 현대식 컴퓨터에는 플립플롭보다 더욱 작고 빠른 응답시간을 제공하는다른 기술(상당수는 빨리 소멸되는 미량의 전하를 사용해 비트를 저장한다. )들을 이용해 RAM을 만든다. 이러한 장치들은 수많은 횟수에 걸쳐 반복적으로 전하를 복원하는 재생회로라는 추가 회로를 필요로 한다.
- 동적 메모리 (dynamic memory) : 휘발성을 반영하여 컴퓨터 메모리를 부르는 이름
- DRAM(Dynamic RAM), SDRAM(Synchronous DRAM)
2) 메모리 용량의 측정
- 전체 셀의 개수를 2의 멱승이 되도록 주기억장치를 설계하면 편리하다.
- 초창기 컴퓨터들에서는 메모리 크기를 1024 셀 단위로 측정하였다. (1024 == 2^10)
- 1024는 1000에 가까운 숫자이기 때문에 컴퓨터 계통에서는 이 단위를 표시하기 위해 킬로라는 접두사를 채택하였다.
-> 1024바이트 = 1킬로바이트
- 컴퓨터 메모리에서 킬로나 메가 등의 접두사는 2의 멱승을 가리킨다.
3. 대용량 기억장치
: 컴퓨터 주기억장치의 휘발성과 제한된 크기 등으로 인해 대부분의 컴퓨터는 보조기억장치라 불리는 대용량 기억장치를 별도로 가지고 있다.
ex) 자기디스크, CD, DVD, 자기테이프, 플래시 드라이브, SSD
- (주기억장치와 비교했을 때) 대용량 기억장치의 장점 : 낮은 휘발성, 큰 저장용량, 적은 비용
- 대용량 기억장치의 단점
- 자기 방식이나 광학 방식 ; 기계적 동작을 요하기 때문에 전자적 동작만을 요하는 주기억장치에 비해 데이털르 읽고 쓰는 데 많은 시간을 요한다.
- 기계적 부품을 사용하는 방식 ; SSD에 비해 기계쩍 고장을 일으키기 쉽다.
- 플래시 드라이브, SSD ; 전자적 문제로 주기억장치에 비해 속도나 수명에 한계가 있다.
1) 자기장치
- 오랜 기간동안 자기 기술이 대용량 저장장치 분야를 주도해 왔다.
- 보편적인 자기장치의 예)
자기 디스크(magnetic disk) == 하드디스크(hard disk drive, HDD)
- 읽기/쓰기 헤드들이 디스크 위와 아래에 달려있어 디스크가 회전함에 따라 각 헤드가 지나가는 자리는 트랙(track)이라 불리는 원 모양을 형성하게 된다.
- 읽기/쓰기 헤드의 위치를 이동시킴으로써 서로 다른 동심원 트랙들에 접근할 수 있다.
- 디스크 저장장치는 하나의 축에 겹겹이 올려놓은 여러 개의 디스크로 이루어진다.
- 읽기/쓰기 헤드들은 함께 움직이며, 위치를 변경할 때마다 새로운 실린더에 접근할 수 있게 된느데, 실린더(cylinder)는 서로 다른 디스크 면상의 같은 크기의 동심원 트랙들이 모여 이루어진다.
- 한 개의 트랙은 보통 한 번에 처리할 수 있는 이상의 정보를 포함하므로, 각 트랙은 연속된 비트 열을 수록하는 섹터(sector)라 불리는 작은 원호들로 분할된다.
- 각 트랙 당 섹터 수는 일정하다
- 디스크 바깥쪽 트랙 상의 섹터 안의 비트들은 중심에 가까운 트랙에 비해 저장 밀도가 낮다. (바깥쪽 트랙의 길이 > 안쪽 트랙의 길이)
- ZBR (zoned-bit recording) 기법은 위의 정보를 이용하여 디스크 표면을 보다 효율적으로 활용가능하다.
- 디스크 저장장치의 용량은 사용되는 디스크 판의 수, 트랙과 섹터의 배치 밀도에 따라 달라진다.
- 디스크 장치 성능 측정에 사용되는 값
- 탐색시간(seek time) : 읽기/쓰기 헤드를 한 트랙에서 다른 트랙으로 이동시키는 데 필요한 시간
- 회전지연(rotational delay) : 디스크가 한 번 회전하는 데 필요한 시간의 1/2 (읽기/쓰기 헤드를 해당 트랙에 위치시킨 후 원하는 데이터가 회전하여 헤드 아래에 오는 데 걸리는 평균 시간)
- 접근시간(access time) : 탐색시간과 회전지연의 합
- 전송속도(transfer rate) : 데이터를 디스크로 보내거나 디스크로부터 받아오는 속도
* 접근속도와 전송속도를 제한하는 요소 중 하나 : 디스크 장치의 회전 속도
- 대용량 저장장치나 통신시스템의 평가에 사용되는 다른 중요한 성능 지표
- 대역폭(bandwidth) : 단위 시간 동안 전송될 수 있는 총 비트 수
- 대기시간(latency) : 데이터 전송 요청과 데이터 수신 사이의 총 소요 시간
- 오늘날 사용 빈도가 크게 줄어든 자기 저장장치
자기테이프(magnetic tape), 플로피디스크(floppy disk drive)
2) 광학 장치
ex) CD
- 원래 CD 기술은 CD-DA(Compact Disk-Digital Audio) 리코딩 포맷을 사용하는 오디오 리코딩에 응용되었는데, 오늘날 컴퓨터에서 데이터 저장에 사요되는 CD도 기본적으로 동일한 리코딩 포맷을 사용한다.
- CD에서 정보를 저장하는 트랙은 예전의 레코드 음반의 홈과 같이 나선형으로 되어있지만, CD의 경우에는 안쪽에서 시작하여 바깥쪽으로 진행한다.
- 트랙은 섹터라 불리는 단위로 분할되고, 섹터는 자체 식별 표식을 가진다.
- CD의 용량을 최대한 활용하기 위해 전체 나선형 트랙 상의 정보 기록 밀도는 일정하게 유지된다.
- CD저장장치는 음악 재생의 경우와 같이 긴 연속적 데이터 열을 처리할 때 가장 좋은 성능을 가진다.
- 일반 CD의 용량은 600~700MB정도이고, DVD의 용량은 수 GB, 싱글 레이어 BD(Blu-ray Disk)는 DVD의 5배 이상의 용량을 제공한다. 다중 레이어 BD 양식은 100GB 대의 용량에 이를 수 있다.
3) 플래시 드라이브
- 자기 기술이나 광학 기술에 기초하고 있는 대용량 저장장치의 공통적인 특징은 데이터를 저장하거나 읽어 오기 위해서는 디스크 회전, 읽기/쓰기 헤드의 이동, 레이저 빔의 조준 등과 같은 물리적 동작이 필요하다. -> 속도가 느림
- 플래시 메모리(flash memory) 기술 : 위의 단점을 완화시킬 수 있다.
- 플래시 메모리 장치에서 비트를 저장하고자 할 경우, 저장매체에서 전자적 신호를 보내면 아주 작은 실리콘 다이옥사이드 방에 전자를 가두어 작은 전자회로의 특성을 변경하는 방식을 사용한다.
- 휴대형 비휘발성 데이터 저장에 적합하고, 물리적 충격에 민감하지 않다.
- 플래시 메모리 장치에 저장된 데이터는 바이트 단위의 소량 접근을 허용하지만 큰 블록 단위로 저장된 데이터를 삭제해야 한다.
- 잦은 데이터 삭제는 실리콘 다이옥사이드 방을 손상시키기 때문에 주기억장치용으로는 적합하지 않다.
플래시 드라이브 (flash drive)
- 휴대 용이성, 고용량성, 컴퓨터에 연결 및 분리가 용이한 점 등으로 인해 플래시 메모리는 휴대형 데이터 저장에 이상적인 장치이다.
- 초소형 실리콘 다이옥사이드 방들의 취약한 내구성으로 인해 아주 긴 기간 동안 사용하기에는 광학 디스크에 비해 신뢰성이 떨어진다.
SSD (soild-state drive)
- 자기 하드디스크를 대체하기 위한 용도로 사용된다.
- 하드디스크에 비해 진동이나 물리적 충격에 강하며, 기계적 부품을 사용하지 않아서 훨씬 조용하고 데이터 접근 속도가 빠르다.
- SSD 섹터는 플래시 메모리 기술 중에서 수명이 가장 짧은 축에 속하는 단점이 있지만, 자주 변경되는 데이터 블록은 SSD 드라이브의 새로운 위치로 재배치하는 기술을 사용하여 이러한 단점을 만회할 수 있다.
SD(Secure Digital) 메모리 카드
- 플래시 기술의 또 다른 응용 분야
- SDHC(High Capacity) 메모리 카드, SDXC(Extended Capacity) 메모리 카드
4. 비트 패턴을 이용한 정보 표현
1) 텍스트의 표현
- 텍스트 상의 상이한 문자 각각에 고유한 비트 패턴을 지정하는 코드에 의해 표현된다.
- 코드가 정해지면 텍스트는 비트 패턴들이 원래 텍스트의 기호들을 나타내는 긴 비트 열로 표현된다.
(1) ASCII 코드
- ANSI에서 통신 문제가 발생하는 상황을 개선하기 위해 채택
- 영문 알파벳 대소문자, 구두점 기호, 0~9, LF(line feed), CR(carriage return), 탭(tab) 등의 제어문자 등을 표현하기 위해 길이가 7인 비트 패턴을 사용한다.
- 각 패턴이 바이트 크기의 메모리 셀에 맞추어졌으며, 또한 추가 비트에 1 값을 사용하여 영문 알파벳이나 구두점 외의 기호들을 표현하기 위해 상요할 수 있는 128개의 추가적인 패턴을 얻게 되었다.
(2) ISO 확장 ASCII 표준
- 세계의 모든 다중언어 의사소통을 지원함에 있어 큰 진척을 이루었다.
- 단점 1 : 확장 ASCII에서 제공하는 추가 비트 패턴의 개수는 여러 아시아 언어 및 일부 유럽 언어의 알파벳들을 수용하기에는 턱없이 부족하다.
- 단점 2 : 개별 문서에서 사용하는 기호는 하나의 선택된 표준의 기호들로 한정되므로 서로 다른 언어 그룹의 언어들을 섞어 사용하는 문서들을 지원할 수 없다.
(3) 유니코드
- 확장 ASCII 의 단점을 해결한다.
- 각 기호의 표현에 최대 21비트까지의 패턴을 사용한다.
- UTF-8(Unicode Transformation Format 8-bit) 코딩 표준과 함께 사용되는 유니코드에서 원래의 ASCII 문자들은 여전히 8비트로 표현되며, 중국어, 일본어, 히브리어 등에서 사용되는 숨나개의 문자들로 16비트로 표현할 수 있다.
- 전세계에서 일반적으로 사용되는 언어들에서 필요한 문자 외의 다른 유니코드 기호들이 필요할 경우 UTF-8은 24비트 또는 32비트 패턴을 사용할 수 있도록 허용함으로써 향후의 확장을 위한 충분한 여지를 남겨두고 있다.
* 텍스트 파일 : ASCII나 유니코드를 사용하여 인코딩된 기호들의 긴 열로 이루어지는 파일
* 텍스트 파일은 텍스트에 대한 문자별 코드만 포함하고 있지만, 워드프로세서로 작성한 파일에는 폰트 변경, 열 맞춤 정보, 기타 등등을 나타내느는 추가적 구조를 포함한다.
2) 숫자의 표현
2진법이나 그 변형이 널리 사용된다.
3) 이미지의 표현
(1) 비트맵 기법
- 이미지를 점들의 집합으로 해석하는 것이며, 각 점을 그림 원소를 줄여 픽셀이라고 부른다.
- 각 픽셀의 모습을 인코딩하여 표현하며, 전체 이미지는 인코딩된 픽셀들의 집합으로 표현된다.
- 픽셀 집합을 비트맵이라 한다.
- 인코딩 방식
① 단순 흑백 이미지 : 각 픽셀은 해당 픽셀이 검은색인지 흰색인지에 따라 값이 정해지는 한 개의 비트로 표현가능하다.
② 보다 정교한 흑백 이미지 : 각 픽셀은 다양한 회색 음영을 표현할 수 있는 비트 집합으로 표현되는데, 대개 8비트 패턴을 많이 사용한다.
③컬러 이미지
- RGB 인코딩 : 각 픽셀을 빛의 3원색에 따라 적(R), 녹(G), 청(B) 등의 세 가지 색상 요소로 표현한다.
- 한 개의 *밝기 요소 & 두 개의 **색상 요소
* 픽셀 휘도 (lumninance) : 적, 녹, 청의 합 (픽셀 안의 백광의 양)
** 청색 색도 차이(chrominance), 적색 색도 차이 : 픽셀의 휘도와 적색 또는 청색의 차이를 계산해 결정
- 단점 : 이미지를 임의의 크기로 축소하거나 확대할 수 없다.
(2) 기하학적 구조 형태로 이미지 표현
- 이미지를 직선이나 곡선과 같은 기하학적 도형의 집합으로 표현하는 것
- 이미지 재생장치는 지정된 픽셀 패턴을 따르기보다 스스로 기하학적 구조를 어떻게 그릴 것인지 결정
4) 소리의 표현
- 일정 간격으로 소리 파동의 진폭 샘플을 추출해 얻은 일련의 값들을 기록
- MIDI(Musical Instrument Digital Interface)
: 소리 자체를 인코딩하는 대신 신시사이저 상에서 음악을 연주하기 위한 지시를 인코딩함
5. 2진 시스템
1) 2진법
각 숫자의 위치는 특정 양에 연계되어 있으며, 각 자리에 연계된 양은 그 오른쪽 자리에 연계된 양의 2배이다.
2) 2진 덧셈
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
3) 분수의 2진법 표현
소수점 왼쪽의 숫자는 정수 부분을 나타내고, 소수점 오른쪽의 숫자들도 동일하게 해석되지만 각 자리에 배정된 양이 분수이다.
ex) 101.101
= 1*(2*2) + 0*(2^1) + 1*(2^0) + 1*(2^(-1)) + 0*(2^(-2)) + 1*(2^(-3))
6. 정수의 저장
1) 2의 보수 표기법
- 각 값을 32비트 패터으로 표현한다.
- 전체가 0으로 이루어진 적절한 길이의 비트 열에서 시작하여 첫 번째 자리만 1이고 나머지는 모두 0이 될 때까지 2진 방식에서 역으로 세어나간다.
- 부호 비트 : 2의 보수 체계에서 가장 왼쪽 비트는 표현되는 값의 부호를 가리키는 이유로 가장 왼쪽 비트를 부르는 이름
- 절댓값이 같은 양의 값과 음의 값 사이의 관계
: 오른쪽에서 왼쪽으로 읽어나갈 때, 첫 번째 1이 나타낼 때까지는 그 1을 포함하여 패턴이 같다.
그 후의 부분에서는 두 패턴은 서로 보수 관계에 있다.
* 보수 (complement) : 모든 0은 1로, 모든 1은 0으로 변경
(1) 2의 보수 표기법에서의 덧셈
: 결과를 포함하여 모든 비트 패턴의 길이가 동일하다.
- 더할 숫자들이 어떤 부호들을 갖더라도 동일한 알고리즘, 즉 동일한 회로를 사용해 계산이 가능하다.
ex) 7-5의 계산
0111 - 0101 = 0111 + 1011 = 0010
(2) 오버플로 문제
- 2의 보수 체계에서는 표현될 수 있는 값에 한계가 있다.
- 오버플로(overflow) : 계산결과 값이 표현될 수 있는 값의 범위를 벗어날 때 발생하는 문제
- 두 개의 양수, 혹은 음수를 더할 때 발생 가능하다.
- 결과의 부호 비트를 검사함으로써 오버플로 발생 여부를 확인 가능하다.
- 오늘날 2의 보수 표기법으로 값들을 저장할 때 32비트를 사용한다.
- 더 큰 값이 필요하다면 더 긴 비트 패턴을 사용하거나 단위를 변경해야 한다.
2) 초과 표기법
- 정수값을 표기하는 또 다른 방법
- 초과 표기법 체계 확립
ⓛ 먼저 사용할 패턴 길이를 정한 다음, 2진법으로 세어갈 때 나타나는 순서대로 모든 비트 패턴들을 적는다.
② 처음으로 최상위 비트에 1이 나타나는 패턴을 0을 나타내는 패턴으로 선택한다.
③ 그 뒤의 패턴은 양수, 앞의 패턴들은 음수를 표현한다.
- 초과 표기법 체계와 2의 보수 체계에서 부호 비트가 반대이다.
7. 분수의 저장
1) 부동 소수점 표기법
* 정규형 (nomalized form)
: 2진법 표현에서 나타내는 가장 왼쪽의 1에서 시작하여 유효숫자를 채워나간다.
-> 동일한 값에 대해 여러 가지 표현이 생길 것을 방지한다.
-> 0 이외의 모든 값에 대한 표현은 유효숫자 부분이 1로 시작한다.
2) 절삭 오차 (truncation error , round-off error)
: 유효 숫자 부분의 자리수가 부족하여 저장될 값의 일부를 잃어버리게 된다.
- 절삭 오차를 줄이기 : 유효 숫자 부분의 길이를 늘린다.
- 절삭 오차의 또 다른 원인 : 무한소수 (2진법에는 10진법보다 무한소수 표현 값이 더 많다.)
- 계산 순서의 중요성
; 아주 큰 숫자와 작은 수를 더할 때 작은 수가 절삭될 수 있다. 따라서 작은 값들끼리 모아 먼저 계산하고 그 후 큰 값에 더한다.
- 일반적인 스프레드시스템에서는 더하는 값들이 10^16배 이상 차이나지 않으면 정확한 값을 얻을 수 있다.
8. 데이터와 프로그래밍
프로그래밍언어 : 사람들이 고급 수준의 추상화를 이용해 알고리즘을 정확히 표현할 수 있도록 만들어진 컴퓨터 시스템
1) 파이썬 개요
- 1980년대 기도 반 로썸이 만든 프로그래밍 언어
- 오늘날 가장 많이 사용되는 10대 언어
- 웹 응용프로그램, 과학적 계산, 학생들을 위한 입문언어 등으로 널리 사용된다.
- 가독성을 강조하며, 명령형, 객체지향형, 함수형 등 다양한 프로그래밍 패러다임을 지원한다.
- 인터프리터 언어(interpreted language)
: 대화형 신호에 맞춰 프로그램을 입력하거나 스크립트라 불리는 텍스트 파일에 저장해두었다가 나중에 실행할 수 있다는 의미로 이해할 수 있다.
2) 변수
- 동적 타입(dynamically typed) 언어 : 변수의 존재를 미리 확립할 필요도, 어떤 타입의 값이 저장될지 미리 규정할 필요가 없다.
- 변수 이름은 알파벳 문자로 시작되고 이후 문자, 숫자, 밑줄문자 드이 임의의 개수만큼 나타날 수 있다.
- 변수 이름은 대소문자를 구분한다.
- 특별한 의미를 갖도록 예약되어 있는 많지 않은 개수의 키워드라는 이름이 있는데, 키워드는 변수 이름으로 사용될 수 없다.
3) 연산자와 식
+ (덧셈, 문자열 접합) - (뺄셈) * (곱셈, 문자열 복제) / (나누기, 실수 결과) // (나누기, 정수 결과)
** (제곱) % (나머지)
4) 디버깅
- 버그 : 코드 상의 오류
- 디버깅 : 버그의 위치를 찾아 고치는 일
- 프로그램 오류 종류
- 구문 오류(syntax error) : 기호 입력 실수
- 의미 오류 (semantic error) : 프로그램 의미 관련 실수
- 실행 오류(runtime error) : 프로그램 실행 시 발생하는 실수
9. 데이터 압축
1) 일반적인 데이터 압축 기법
- 무손실(lossless) 압축 : 압축 과정에서 정보 손실이 없다.
- 손실 (lossy) 압축 : 압축 과정에서 정보 손실이 발생할 수 있다.
(1) RLE (Run-Length Encoding)
- 압축되는 데이터에 동일한 값이 연속하여 나타나는 긴 열이 들어 있는 경우 사용되는 무손실 압축 방법
- 반복되는 우너소와 반복 횟수를 나타낸느 코드로 동일한 데이터 원소의 열을 대체한다.
(2) 빈도 종속 인코딩 (frequency-dependent encoding)
- 데이터 항목을 표현하기 위해 사용되는 비트 패턴의 길이를 해당 항목이 사용되는 빈도의 역과 관련시켜 결정하는 방법
- 빈도 종속 코드 개발에 널리 사용되는 알고리즘을 개발한 허프만의 이름을 따서 그 알고리즘을 사용하여 개발된 코드들을 일반적으로 일반적으로 허프만 코드라 부른다.
- 자주 사용되는 문자에는 짧은 비트 패턴을 사용하고, 잘 나타나지 않는 문자에는 긴 비트 패턴을 사용한다.
(3) 차등 인코딩(differential encoding) == 상대적 인코딩 (relative encoding)
- 압축될 데이터 스트림이 각 단위가 바로 앞의 단위와 약간씩 다른 여러 개의 단위들로 이루어지는 경우에 사용
- 전체 단위들 대신 인접 단위들 사이의 차이를 기록한다. (각 단위는 바로 앞 단위와의 관계로서 인코딩)
- 상대적 인코딩은 연속 데이터 단위 사이의 차이를 정확히 인코딩할지 근사 값을 인코딩할지에 따라 손실 압축이 될 수도, 무손실 압축이 될 수도 있다.
(4) 사전 인코딩(dictionary encoding)
- 사전이라는 용어는 압축될 메시지를 구성하는 항목돌의 집합을 가리키며, 메시지 자체는 사전에 대한 일련의 참조 표시로 인코딩된다.
- 사전 인코딩 방식은 무손실 압축 방식이지만, 이미지 압축 등에서는 사전에 들어 있는 항목들이 정확한 데이터 원소들에 대한 근사 값들이기 때문에 결과적으로는 손실 압축 방식이다.
- 동적 사전 인코딩 (dynamic dictionary encoding) == 적응적 사전 인코딩 (adaptive dictionary encoding)
: 인코딩 과정 중에 사진의 변화가 허용된다.
ex) LZW (Lempel-Ziv-Welsh) 인코딩
- 먼저 메시지를 구성하는 데 사용될 항목들을 포함하는 사전을 가지고 시작하며, 더 큰 단위의 항목들이 메시지에서 발견되면 이들을 사전에 추가한다.
- 사전에 있는 항목이 나타날 때 사전 참조로 인코딩되게 한다.
- 결과적으로 각 메시지에 고유하게 구성되는 다소 큰 사전을 사용하여 인코딩된 메시지를 얻게 된다.
- 디코딩 과정이 진행되면서 인코딩 과정에서 발견되었던 것과 동일한 단어들을 만나게 됨, 인코딩 과정에서와 마찬가지로 이들을 나중에 참조하기 위해 사전에 추가할 수 있다.
- 따라서 디코딩을 위해 인코딩 시 구성된 큰 사전이 필요하지 않다.
2) 이미지의 압축
(1) GIF (Graphic Interchange Format)
- 한 픽셀에 지정될 수 있는 색상의 개수를 256개로 줄이는 방식으로 압축 문제에 접근한다.
- 각 색상의 적-녹-청 조합은 세 바이트를 사용하여 인코딩되고, 256개의 인코딩은 팔레트라고 불리는 표(==사전)에 저장된다.
- 이미지 안의 각 픽셀은 256개의 팔레트 항목 중 어느 값이 그 픽셀의 색상을 나타내는지 가리키는 한 바이트 값으로 표현될 수 있다.
- GIF가 임의의 이미지에 적용되었을 때 팔레트 안의 색상이 원래 이미지의 색상과 일치하지 않을 수 있으므로, GIF는 손실 압축 방법이다.
- 단순한 사전 방식을 LZW 기법을 사용하는 적응적 사전 방식으로 확장하면 압축률을 높일 수 있다.
(인코딩 과정에서 여러 픽셀들로 이루어진 패턴들을 만날 때 사전에 추가해두면, 나중에 이 패턴들이 다시 나타날 때 보다 효율적으로 인코딩할 수 있다. 이 경우, 최종 사전은 원래의 팔레트와 픽셀 패턴들의 집합으로 구성될 것이다. )
(2) JPEG
- ISO 안의 JPEG (Joint Photographic Experts Group) 분과에 의해 개발된 표준
- 컬러 사진의 압축에 유효한 표준
- 정확도가 중요한 상황에서는 JPEG는 무손실 모드를 제공하나, 다른 JPEG 옵션들에 비교할 때 압축률이 떨어져 거의 사용되지 않는다.
- 손실 순차 모드라 불리는 JPEG 기본 표준이 많은 응용 분야에서 사용된다.
- JPEG 기본 표준을 사용하는 이미지 압축 단계
- 육안의 한계성 이용 : 색상의변화보다는 밝기 변화에 민감하다. (휘도 요소와 색도 차이 요소들로 인코딩된 이미지에먼저 2*2 픽셀 사격영역에 대해 색도 차이 값들의 평균을 계산한다. )
- 이미지를 8*8 픽셀 블록들로 분할하고 각 블록 단위로 그안의 정보를 압축한다. -> DCT (Discrete Cosine Transform) 기법 이용
- RLE, 상대적 인코딩, 가변 길이 인코딩 등의 전통적인 과정을 적용되어 압축률을 높인다.
(3) TIFF (Tagged Image File Format)
- 데이터 압축에 사용하기 위한 것이 아니라, 사진을 날짜, 시간, 카메라 설정 등과 같은 관련 정보와 함께 저장하기 위한 표준 형식으로 사용
- 이미지 자체는 압축 없이 적, 녹, 청 등의 픽셀 요소들로 저장된다.
- TIFF 표준에 포함된 컬러 이미지 압축 옵션은 GIF에서 사용되는 것과 유사한 기법에 기초하고 있으며, 따라서 사진 계통에서는 널리 사용되지 않는다.
3) 오디오 및 비디오의 압축
(1) MPEG
- ISO 산하 MPEG (Motion Picture Experts Group) 그룹에서 개발되었다.
- 서로 다른 응용 분야를 위한 다양한 표준을 포함한다.
ex) 비디오 압축 기법
- 영화를 필름에 녹화할 때와 같이 비디오를 일련의 그림들로 구성된 것으로 간주하여 처리한다.
- 일련의 그림을 압축할 때 화상들 중에 I-프레임이라고 불리는 일부 그림에 대해서만 그 전체를 인코딩한다.
- I-프레임들 사이의 그림들은 상대적 인코딩을 사용하여 인코딩된다.
- 전체 그림 대신 이전 그림과의 차이만이 기록되며, I-프레임들은 대개 JPEG와 유사한 기법을 사용하여 압축된다.
(2) MPG
- MPEG 표준 안에 포함되어 있다. (MPEG 계층 3의 약어)
- 사람의 청각기관의 특성을 이용 ; 사람의 청각기관에서 인식할 수 없는 미세한 부분을 버린다.
- 시간적 차폐효과(temporal masking), 주파수 차폐효과(frequency masking)를 이용해 CD 정도의 사운드 품질은 유지하면서도 상당한 오디오 압축을 달성하기 위해 사용된다.
* 시간적 차폐효과(temporal masking)
: 사람의 청각기관에서는 큰 소리를 들은 후 짧은 시간동안은 원래 들려야 할 작은 소리를 듣지 못한다.
** 주파수 차폐효과(frequency masking)
: 특정 주파수의 소리가 그 주변 주파수의 부드러운 소리들을 가리는 현상
(3) 압축 목표
- 반드시 저장공간을 절약하는 것만이 목표가 아니다.
- 시간에 맞게 보여주거나 들려줄 수 있도록 오늘날의 통신 시스템 상에서 정보를 빨리 전송하는 것이 목표이다.
- 오디오 및 비디오 압축 방법에서는 재생 시의 품질도 중요하지만 때로 적시의 데이터 통신에 필요한 전송속도가 판단 기준이 된다.
10. 통신 오류
1) 패리티 비트
: 인코딩 체계상의 기존 비트 패턴에 패리티 비트라는 여분 비트를 최상위 비트로 추가하는 것
-> 패턴에 홀수(짝수) 개의 1이 존재하게 한다. 수정된 인코딩 체계에서 1이 짝수(홀수) 개인 패턴은 오류가 발생한 것.
- 홀수 패리티 비트 (odd parity) : 각 패턴(올바른 패턴)이 홀수 개의 1을 포함하게 함
- 짝수 패리티 비트 (even parity) : 각 패턴(올바른 패턴)이 짝수 개의 1을 포함하게 함
- 오늘날 컴퓨터의 주기억장치에서 패리티 비트의 사용은 보편화되어 있다.
- 보통 컴퓨터의 주기억장치의 메모리 셀들은 8비트 용량을 갖는 것으로 생각하지만, 실제로는 패리티 비트로 사용되는 한 비트를 포함하여 9비트로 되어 있다.
- 8비트 패턴이 저장을 위해 메모리 회로에 주어질 때마다 메모리 회로는 패리티 비트를 추가하여 만들어진 9비트 패턴을 저장한다.
- 패리티 오류가 있을 경우 : 메모리 회로는 8비트 패턴을 보내주지만, 원래 메모리에 맡겨졌던 패턴과는 다른 패턴이라는 경고를 함께 보낸다.
- 패리티 오류가 없을 경우 : 메모리 회로는 오류가 없다고 믿으며 패리티 비트를 제거하고 나머지 8비트 패턴을 보낸다.
- 패리티 비트의 한계 : 패리티 체계의 단순 적용은 한 패턴에서 짝수 개의 오류가 발생하면 탐지하지 못한다.
- 한계를 극복하는 방법
: 자기디스크 상의 한 섹터에 기록되는 비트 열과 같이 긴 비트 패턴에 적용
-> 긴 패턴에 검사바이트(checkbyte)라 불리는 패리티 비트 집합 하나를 첨부한다. 한 곳에서 여러 개의 오류가 발생했을 경우 여러 패리티 비트들에 영향을 미치게 되어 탐지될 가능성이 높다.
-> 검사 바이트의 변형으로 검사합(checksum)이나 CRC(Cyclic Redundancy Check) 오류 탐지 방법이 있다.
2) 오류 정정 코드 (error-correcting code)
: 오류를 탐지할 수도, 고칠 수도 있는 코드
- 해밍 거리 (Hamming distance) : 두 패턴에서 서로 다른 비트 개수
- 한 패턴에서 한 비트만 변경되었을 경우, 그 결과는 유효한 패턴이 아니므로 오류 탐지가 가능하다. (변경된 패턴과 원래 패턴 사이의 해밍 거리는 1이지만, 다른 유효한 패턴들과의 해밍거리는 2 이상일 것이므로 원래 패턴이 무엇인지도 알아낼 수 있다.)
- 오류 정정 기법들은 컴퓨터 장비의 신뢰성을 향상시키기 위해 광범위하게 사용된다.
'전공과목 정리 > 컴퓨터과학의이해' 카테고리의 다른 글
[컴퓨터과학의이해🧮] 알고리즘 (5장) (0) | 2022.08.27 |
---|---|
[컴퓨터과학의이해🧮] 네트워킹과 인터넷 (4장) (0) | 2022.08.27 |
[컴퓨터과학의이해🧮] 운영체제 (3장) (1) | 2022.08.26 |
[컴퓨터과학의이해🧮] 데이터 조작 (2장) (2) | 2022.08.25 |
[컴퓨터과학의이해🧮] 서론 (0장) (0) | 2022.08.24 |