입출력과 네트워킹

김민우·2023년 5월 28일
0

컴퓨터구조

목록 보기
6/8

저수준 I/O


I/O 포트

  • CPU가 읽거나 쓸 수 있는 비트에 물건을 연결한 형태의 I/O

위 예시에서 LED와 저항을 직렬로 연결했다. 저항을 연결한 이유는 LED에 흐르는 전류를 제한하여 PB0와 LED가 타버리는 일을 방지하기 위함이다. PB0가 0이면 전류가 흐르지 않고, 1이면 전류가 흘러 LED에 빛이 나온다.

다이오드
전기를 회로도에 표시된 속이 빈 화살표 방향으로만 흐르도록 제한

LED
다이오드 + 라이트

포트 B는 다음 3가지 레지스터에 의해 제어된다.

  • DDRB(데이터 방향 레지스터)
    • 이 레지스터의 어느 비트에 1을 넣으면 해당 비트 번호에 해당하는 포트 B 비트가 출력에 쓰이게 된다.
  • PORTB(출력 데이터 저장 래치)
    • 각 핀을 입력 또는 출력 둘 중 하나로 쓸지 결정 (0 : 입력, 1 : 출력)
  • PINB(연관된 핀의 값을 읽는 장치)





버튼

버튼이나 스위치가 설계된 방식으로 인해 컴퓨터가 이들의 값을 읽기는 쉽지 않다.

R : 풀업 저항

버튼이 눌린 유무에 따라 다음 과정이 실행된다.

  • 버튼이 안 눌린 경우
    • 인터럽트 요청 후 공급 전압 V를 올려 논리 1 설정
  • 버튼이 눌린 경우
    • V에서 흘러나오는 전류 제한하여 논리 0 설정

버튼의 구성 요소인 금속의 성질로 인해 실제로 버튼을 누르면 아래 왼쪽 그림과 같다고 생각되지만 오른쪽 그림과 같다.

  • 금속 조각이 아주 잠깐 바운스되면서 접점에서 떨어진다.

이런 현상으로 인해 버튼을 한번 눌렀는데 인터럽트가 여러 번 발생할 수 있다. 인터럽트 핸들러에 타이머를 설정하여 이 현상을 해결(디바운싱)할 수 있다.

그러나, 이런 방식도 부품의 연식이 지남에 따라 타이머 값을 정하기가 어려워진다. 대부분 시스템에서 주기적인 인터럽트를 만들어내는 타이머가 있다. 이를 통해 버튼 디바운싱을 해결한다.




디스플레이가 포함된 장치는 매우 많다. 이런 디스플레이에는 표시등이 여러 개 있거나 간단한 수치를 표시할 수 있는 경우가 많다.

가장 흔한 유형은 세그먼트(segment) 디스플레이다. 이 디스플레이는 7개의 숫자 LED가 숫자 8 형태로 나열되어 있고, 소수점을 표현하는 LED가 하나 더 붙어 있다.

이 디스플레이에 있는 8개의 LED를 처리하려면 16가지 접점(핀)이 필요하지만 보통은 각 LED마다 핀 1개씩 연결하고 핀 하나에 모든 LED를 연결하는 방식을 사용한다.

LED를 켜거나 끄려면 한쪽 끝만 제어하면 되기 때문에, 공통 연결핀(위 그림에서 공통)을 사용하면 핀 개수와 비용을 모두 아낄 수 있다.

위 그림 방식이 바로 공통 캐소드 디스플레이다.

이러한 디스플레이를 제어하기 위한 소프트웨어는 매우 간단하다. 이는 숫자(또는 문자)와 그에 따라 세그먼트의 어느 LED를 켤지 연관시켜주는 표본이다.

각 디스플레이에 별도의 I/O 포트에 연결할 수도 있지만, 프로세서가 충분한 수의 포트를 제공하지 못하는 경우가 흔하다. 디스플레이의 애노드(각 접점)을 포트 A에 연결 후, 캐소드(위 그림에서 공통)에 연결하여 디스플레이를 멀티플렉스하면 해결할 수 있다.

디스플레이 애노드는 병렬로 연결되며 각 디스플레이의 캐노드는 자신만의 출력 핀에 연결된다.

어떤 디스플레이 세그먼트가 켜지려면 해당 디스플레이의 애노드가 1인 동시에 캐소드가 0이여야 한다. 이런 현상이 가능한 이유는 LED의 다이오드 기능 덕분이다.

디스플레이가 계속 켜져있는 상태를 유지하기 위해선 짧은 시간 간격으로 디스플레이를 계속 변경하면서 세그먼트를 짧게 ON/OFF 하면 세그먼트가 계속 켜진 것 처럼 보이게할 수 있다. (시각의 잔상효과 이용)




빛, 동작 그리고 상호 연동

어떤 장치에 버튼과 디스플레이가 함께 있는 경우가 종종있따. 이런 경우 버튼과 디스플레이의 입력을 멀티플렉싱하면 핀을 덜 써도 된다.

다음 그림은 버튼이 12개 있는 전화기 스타일의 키패드와 숫자 4개를 표시하는 디스플레이 구조이다.

푸시 버튼을 12개 사용하기 위해 핀을 12개 추가하지 않고 단지 3개만 추가하면 된다. 디스플레이와 푸시 버튼이 똑같은 신호에 의해 선택되기 때문에, 상태를 스캔하는 코드를 타이머 인터럽트 핸들러에 함께 넣을 수 있다.




밝기 조절

아래 그림처럼 디스플레이의 듀티 사이클을 조절함으로써 밝기를 조절할 수 있다.

왼쪽 부분에서 각 디스플레이는 전체 시간의 1/4 동안 켜져 있고, 오른쪽의 각 디스플레이는 전체 시간의 1/8만 켜져있다.

오른쪽의 디스플레이는 왼쪽 디스플레이가 켜져 있는 시간의 절반 동안은 꺼져 있다. 결론적으로 오른쪽 디스플레이는 왼쪽 디스플레이보다 절반 정도의 밝기로 보인다.

밝기는 디스플레이가 켜져 있는 평균 시간과 관련이 있다. 하지만 듀티 사이클과 사람이 인지하는 밝기 사이의 관계는 선형이 아닐 것이다.




그레이의 2^n가지 그림자

센서를 읽어 모터, 바퀴 같은 회전축의 위치를 알아내야 하는 경우가 종종 있다. 회전축에 스위치를 넣거나 광센서를 읽을 수 있는 검은색과 흰색 점을 사용해 위치를 알아낼 수 있다.

어떤 접근 방법을 선택하든 축의 위치를 반드시 2진수로 인코딩해야 한다. 다음 그림은 흰 부분을 0, 검은 부분을 1이라 하면 위칫값을 어떻게 읽을 수 있는지 알려준다.

제대로 그려진 인코더를 사용하더라도 여전히 회로가 각 비트를 읽으면서 발생하는 전파 지연으로 인한 문제가 생긴다. 인코더가 완벽하게 그려지지 않은 경우엔 다음과 같다.

  • 01234567로 읽히리라 예상했지만 실제로 201023645467이 읽힌다.
  • x,y 축 동경 방향으로 읽으면 단차때문에 0도 부분이 2로 읽힌다. 이후 1이였다 2로 바뀌기 전 단차로 인해 0으로 된 후 2로 읽힌다.

그레이 코드로 각도를 표현하면 쉽게 2진 코드로 바꿀 수 있다.




쿼드러처

2비트 그레이 코드를 약간 뒤틀면, 어떤 대상의 절대적 위치를 알 필요는 없지만 위치가 어떤 방향으로 변했는지를 알 필요가 있는 경우에 써먹을 수 있다.

이런 변형에는 총 4가지 상태가 존재하기 때문에 쿼드러처 인코딩이라 한다.

회전축을 시계방향으로 돌리면 0132 순서로 코드가 발생한다. 현재 위치와 이전 위치로부터 4비트 숫자를 만들어낼 수 있다.




병렬 통신

병렬 통신은 앞에서 살펴본 LED를 켜는 회로를 확장한 것이다. LED 컴포넌트 하나마다 별도의 선이 있기 때문에 동시에 모든 컴포턴트를 제어할 수 있다.

하지만, 데이터 선을 많이 쓰면 데이터 선에 올바른 데이터가 들어 있는 순간을 알기 힘들다. '지금이다'라고 알려주는 또 다른 신호 스트로브 신호를 추가해야 한다.

병렬 인터페이스는 I/O 핀, 커넥터 핀, 선이 많이 필요하기 때문에 가격이 비싸다. 한 선에 연결될 수 있는 신호의 속도에는 한계가 있다. 이런 한계를 넘기 위해서는 여러 선이 필요하다.




직렬 통신

통신에 사용하는 전선에는 비용이 들고, 특히 통신 거리가 멀어짐에 따라 전체 비용이 늘어나기 때문에 선을 덜 쓰고 통신할 수 있으면 좋다.

그렇다면 한 선에 어떻게 신호를 8개 보낼 수 있을까? 각 비트는 서로 다른 선을 통해 전송되지만, 각 문자는 서로 다른 시간에 나뉘어 전송된다. 비트도 마찬가지로 서로 다른 시간에 나눠서 보낼 수 있다.

수신하는 쪽에서 클록이 비트를 한 위치씩 시프트시키면서 새로 생긴 빈 자리에 선을 통해 받은 비트를 채워 넣는다.




네트워킹


네트워크는 일반적으로 두 가지로 구분한다.

  • 근거리 네트워크(LAN)
  • 광역 네트워크(WAN)

'좁다'와 '넓다'라는 용어의 명확한 정의가 없으므로 이 두 용어의 경계는 약간 모호하다.

최초의 네트워크는 전신 네트워크였고, 전신 네트워크는 전화 네트워크로 발전했다. 이는 회선 교환 방식의 네트워크다.

현재의 전화 시스템은 패킷 교환 방식을 사용한다. 통신 내용 다음 두가지로 나뉜다.

  • 수신자
  • 송신자 주소가 포함된 패킷

패킷(pack + bucket)
우체국에서 화물을 적당한 덩어리로 나눠서 행선지를 표시하는 꼬리표를 붙이는 과정을 데이터 과정에서 구현한 것

인터넷
네트워크(net)과 다른 네트워크 사이(inter)를 합친 말이다. 인터넷은 네트워크들로 이뤄진 네트워크이자 여러 LAN을 하나로 연결해주는 WAN이다.




최근의 LAN들

최초의 이더넷은 반 이중 시스템이였다. 각 장치의 네트워크 인터페이스에는 MAC 주소라는 유일한 48비트 주소가 부여되있고 이는 현재도 사용된다.

데이터는 프레임이라는 이름의 패킷으로 구성되며 프레임 안의 내용은 다음과 같다.

  • 송/수신 주소, 오류 검증이 포함된 헤더
  • 페이로드

프레임의 MAC 주소가 자신의 주소와 일치하지 않는 다른 장치의 데이터는 무시한다. 둘 이상 장치가 동시에 말하려 시도하면 앞에서 본 반이중 통신의 경우와 마찬가지로 패킷이 서로 엉키면서 충돌이 발생한다.

말하고 싶은 장치는 충돌이 발생하면 임의의 시간을 잠깐 기다린 다음 다시 말하려 시도(랜덤 백오프 후 재시도)하면 이 현상을 해결할 수 있다.




인터넷

인터넷이란 물리적 네트워크가 아니며 여러 계층으로 이뤄진 프로토콜의 집합이다. 이 프로토콜 계층은 물리적 네트워크를 정의하는 아래쪽 계층을 변경해도 위쪽 계층에 영향을 끼치지 않도록 고안됐다.

프로토콜
컴퓨터 내부 또는 사이에서 데이터 교환 방식을 정의하는 규칙 체계




TCP/IP

전송 제어 프로토콜/인터넷 프로토콜은 인터넷에서 사용하는 두 가지 프로토콜이다.

IP(인터넷 프로토콜)
패킷을 한 곳에서 다른 곳을 옮겨주며, 이 패킷을 데이터그램이라고 부른다. 이는 마치 컴퓨터를 위한 전신과 같다.
그러나, 이를 사용해 데이터를 보내면 송신자는 수신자가 메시지를 언제 받았는지 심지어 제대로 받았는지 여부를 알 수 없다.

TCP(전송 제어 프로토콜)
IP 위에 존재하여 패킷이 제대로 배달됐는지를 확실히 보장해준다.(3-handschake 사용) 먼저 보낸 패킷이 나중에 도착할 수 있기 때문에 배달 보장은 아주 복잡한 작업이다.(UDP에 비해 오래 걸리는 이유?)

IP 주소
인터넷 상의 각 컴퓨터에는 IP 주소라는 유일한 주소가 할당되어 있따. 이는 하드웨어에 종속되있지 않아 변경될 수 있다.
계층적 시스템으로 주소중 일부를 누군가에게 할당하면 그 누군가는 다시 자신에게 할당된 주소 중 일부 블록을 다른 누군가에게 할당하는 식이다.
이는 누군가 자신의 장치에 구체적인 주소를 할당해줄 때 까지 반복된다.

도메인 이름 시스템
휴대폰의 주소록 같은 일이며 어려운 IP 주소 대신 도메인 주소를 제공해주는 전화번호부 같은 역할이다. DNS는 주소가 바뀌는 경우를 알아서 잘 처리해준다.

월드 와이드 웹
TCP/IP 위에 만들어진 여러 프로토콜이 있다. 여러 프로토콜 중 가장 많이 사용되는 프로토콜은 HTTP(하이퍼텍스트 전송 프로토콜)이다.

HTTP 표준은 웹 브라우저와 웹서버가 상호작용하는 방법을 정의한다. URL이라는 웹 브라우저 주소창에 입력하는 웹사이트 주소에 따라 웹 페이지를 얻을 수 있다. 웹 페이지는 보통 HTML로서 존재한다.

하이퍼 텍스트
단순히 링크가 붙은 텍스트를 뜻한다.




아날로그 처리 방법


우리가 실제로 겪는 소리나 빛은 연속적이지만 연속적인 대상을 지정할 방법이 없다. 그래서 데이터의 샘플을 취해야 한다.

샘플을 취한다는 말은 시간이나 공간상 일정한 간격으로 값을 읽어야 한다는 뜻이다. 저장한 데이터를 다시 영상이나 빛으로 보여주려면 샘플링 데이터로부터 아날로그 신호를 다시 만들어내야 한다.

디지털을 아날로그로 변환

DA 변환기를 사용하여 디지털을 아날로그로 변환할 수 있다. LED를 I/O 포트에 연결하는 방법을 그림으로 다시 살펴보자.

아래 그림은 포트 B의 8개의 핀 각각에 LED를 연결했다.

8비트를 사용하여 비트 9수준을 나타낸다. 그러나, 8비트면 256 수준의 빛을 만들어낼 수 있어야 한다.

아래는 비트 i에 2^(i + 1)의 LED를 연결한 회로이다.

비트 i는 비트 i - 1에 비해 2배 더 밝은 빛을 내며 i + 1i - 1 보다 4배 더 밝은 빛을 내는 식이다.

실제 DA 변환기는 빛이 아니라 전압을 만들어낸다. 해상도라는 용어는 DA가 만들어내는 단계 수를 느슨히 표현할 때 쓰이며 (최대 전압) / (단계 수) 이다.

아날로그를 디지털로 변환

AD 변환기(A/D 또는 ADC)는 DAC보다 더 복잡하다. 값을 측정할 수 있도록 아날로그 신호의 현재 값을 흔들리지 않게 안정적으로 잡아내야 하기 때문이다.

디지털 파형이 아날로그 파형과 닮기 위해선 입력 파형의 샘플을 많이 얻어야 한다. 이 때, 샘플 앤드 홀드라는 회로를 사용하여 아날로그 파형의 값을 잡아낼 수 있다. 이를 활용하여 안정적인 값을 얻어 이를 측정해 디지털 값을 만들어낼 수 있다.

  • 이는 래치의 아날로그 버전이라 할 수 있다.
  • 스위치를 닫아 샘플을 얻으면 아날로그 신호가 저장 탱크에 저장되는 방식이다.

어떻게 안정적인 값을 얻을 수 있을까? 비교기라는 회로를 이용하면 된다. 이는 문턱값을 선택할 수 있는 논리 게이트와 유사하다.

  • if ([+] 입력 신호 > [-] 입력신호) : 1
  • else : 0

이를 여러 기준 전압과 연결해 쌓으면 플래시 변환기를 만들 수 있다.

  • 결과를 번개같이 빠르게 만들어낸다는 의미에서 플래시 변환기라 부른다.

이 방식도 DAC와 같이 비트를 비효율적으로 사용한다는 문제가 있다. 또한, 비교기를 많이 사용해야 하므로 상대적으로 가격이 비싸다.

플래시 변환기는 비교기마다 다른 고정된 몇 가지 기준 전압을 사용하는데, 이 기준 전압을 변화시킬 수 있다면 비교기를 하나만 사용해도 될 것이다. 이러한 기준 전압은 DAC에서 얻을 수 있다.

아래 그림은 저장 탱크에서 나온 샘플 값을 DAC와 비교하기 위해 비교기를 사용하는 회로이다.

  • Clear 가 활성화되면 샘플값이 DAC와 같아질 때 까지 카운터가 수를 샌다.
  • 샘플값 = DAC 이면 비교기의 출력이 0이 되면서 카운터가 비활성화된다.
    • 따라서, 원하는 값을 얻고 끝난다.
    • 이 때, 카운터에는 샘플을 디지털로 변환한 값들이 들어있다.

이 회로의 동작을 살펴보자.

  • 아날로그 신호는 진동하지만 샘플을 취한 다음 저장탱크의 출력은 안정적이다.
  • 이후, 카운터를 0으로 설정하고 DAC의 출력과 샘플링된 값이 같을 때 까지 수를 센다.
    • 두 값이 같아지면 카운터가 멈추고 원하는 변환이 끝난다.

DAC 출력이 마치 경사로를 올라가는 것처럼 변하기에 이런 ADC를 램프 변환기라 부른다. 이는 샘플의 크기에 선형으로 비례하는 시간이 걸리므로 n비트에 대해 최대 2^n 클록이 걸려야 변환이 끝난다.

이를 우회하기 위해선 2진 검색으로 수행하는 연속 추정 변환기를 사용한다.

디지털 오디오

일차원으로 샘플링하면 오디오를 디지털화할 수 있다. 이 말은 일정 시간 간격으로 신호의 진폭이나 높이를 측정한다는 것이다.

아래 그림처럼 사인파를 일정한 샘플링 주파수사각파를 얻을 수 있고, 상승 에지마다 A/D를 사용하여 신호의 높이를 기록할 수 있다.

샘플값들을 D/A에 공급해 원래의 신호로 재구성한다.

이 때, 파형은 매우 왜곡되었다. 샘플값을 더 많이 만들어 결과를 개선할 수 있지만 그럴 필요는 없다. 왜 그런지는 매우 복잡하다.

어떤 파형이든 일련의 사인파와 가중치 합으로 표현할 수 있음(테일러 급수)를 통해 일정 값들만 가지고 사인파를 만들어낼 수 있다.

내 생각) 이는 특정 (x, y) 좌표들을 통해 이 위의 점들을 모두 지나는 사인 함수를 추론할 수 있음을 의미하는 것 같다.

미디어 플레이어 기능으로 그래픽 이퀄라이저도 있따. 이는 조절 가능한 필터들의 집합이며 입맛대로 소리를 조정할 수 있게 해준다.

필터 : 정해진 주파수를 통과시키거나 막아버리는 장치

필터는 크게 로우 패스하이 패스 필터가 있다.

  • 로우 패스 : 특정 값보다 낮은 주파수만 통과시키는 필터
  • 하이 패스 : 특정 값보다 높은 주파수만 통과시키는 필터

이 둘을 통해 밴드패스노치를 만든다.

  • 밴드패스 : a < x < b
  • 노치 : x < a or x > b

최고 주파수의 2배의 샘플링 비율로 샘플을 얻어야 한다는 법칙을 통해 40kHz 샘플링 비율로 샘플링하면 폴딩에일리어싱이 일어난다. 샘플링 주파수를 거울이라 생각하고 이 값보다 높은 주파수들은 반사된다고 생각하자.
예를 들어 40kHz로 샘플링된 21kHz 신호는 19kHz에서 아티팩트를 만들어낸다. 이렇게 만들어진 신호를 에일리어스라 하는데, 이를 피하기 위해선 로우패스 필터를 적용해야 한다.

근데 일부 표준 오디오 샘플링 주파수는 40kHz를 초과한다. 더 높은 주파수를 쓰면 훨씬 더 많은 데이터가 발생하고 나이퀴스트 이론(최고 주파수의 2배의 샘플링 비율로 샘플을 얻어야 한다는 법칙)에 따르면 그럴 필요가 없는데 왜 굳이 더 높은 주파수를 사용해서 샘플링할까?

나이퀴스트 비율에 근접해 샘플링한 신호들의 위상을 재구성할 수 없기 때문이다.

이는 왼쪽과 오른쪽 귀에 도달하는 신호 사이의 시간차로 인해 발생한다. 주파수가 높으면 귀 사이의 거리보다 파장이 더 짧기 때문에 위상차를 더 잘 알아챌 수 있다. 두 귀 사이의 거리보다 음과 파장이 너무 길기 때문에 위상차를 감지할 수 없어서 소리가 발생한 위치를 정확히 잡아낼 수 없다.

앞에서 오디오에는 많은 데이터가 들어있다고 했다. 따라서, 압축을 사용해 용량을 작게 만들면 좋다. 오디오 압축 방식은 크게 두가지가 있다.

  • 무손실 압축
    • 원래 데이터를 그대로 유지
    • 원래 데이터 크기의 절반 정도밖에 크기를 줄이지 못한다.
    • ex) 코덱
  • 손실 압축
    • 사람이 들을 수 없는 소리같은 일부 세부사항을 제거하여 압축
    • ex) MP3, AAC, Ogg

코덱 : 모뎀과 비슷하게 어떤 대상을 한 코딩 시스템에서 다른 코딩 시스템으로 변환해주거나 반대 방향으로 변환해주는 장치(소프트웨어 또는 하드웨어)

디지털 이미지

사진 이미지는 2차원 공간을 샘플링하므로 오디오보다 더 복잡하다. 디지털 이미지는 그림 요소를 픽셀로 이뤄진 직사각형 배열로 표현하며, 컬러의 경우 각 픽셀을 RGB의 조합으로 표현한다.

참고) 오늘날 일반적인 디스플레이는 RGB 각각에 8비트를 사용한다.

RGB를 적정 비율로 혼합하면 모든 색을 표현할 수 있다. 따라서, 컴퓨터는 가산 혼합 색 시스템을 사용해 색을 표현한다.

이미지 샘플링 작업은 이미지 앞에 모눈이 달린 창을 놓고 각 네모칸의 색을 기록하는 것과 비슷하다. 이 작업은 포인트 샘플링으로 인해 더 복잡하다.

포인트 샘플링 : 정사각형 전체의 색을 기록하는 대신 각 정사각형의 중심 점의 색을 기록한다는 뜻

이와 같이 더 자세하기 높은 해상도를 사용하면 샘플링한 이미지가 더 명확해진다. 하지만, 해상도를 늘리면 데이터양도 크게 늘어난다.

그러나, 해상도가 높아져도 삐죽삐죽한 모사리가 발생하는데 이는 나이퀴스트 이론에 따른 언더샘플링과 에일리어싱의 결과이다.

오디오에서나 마찬가지로 필터를 사용할 수 있다. 주로 슈퍼 샘플링을 사용한다.

슈퍼 샘플링 : 한 정사각형 안에서 여러 지점의 색을 얻어서 평균을 내는 방법

  • 이는 오디오에서 샘플링 비율을 높이는 것과 같은 효과이다.

우리가 사용하는 이미지는 점점 커짐에 따라 엄청난 공간을 차지한다. 압축을 통해 이를 해결할 수 있다.

가장 일반적인 방법은 JPEG이며 어려운 수학 변환을 통해 이루어진다. 이웃한 픽셀의 색이 서로 비슷할 가능성이 높다는 가정하에 개별적인 픽셀의 색을 저장하지않고 이웃한 픽셀의 색에 대한 표현을 저장하는 방식이다. 손실 오디오 압축과 비슷한 방식으로 사람의 인지 방법에 대한 지식을 활용한다.

비디오

다차원 공간을 한 차원 더 높인 것으로, 비디오는 2차원 이미지를 일정한 시간 간격으로 샘플링한 시퀀스이다.

비디오 샘플링은 이미지 샘플링과 거의 비슷하다. 다만 여러 아티팩트가 시각적으로 거슬리기 때문에 이를 최소화할 필요가 있다. 문제는 물체가 움직이기 때문에 샘플링 아티팩트가 제자리에 머물러 있지 않는다에 있다. 슈퍼 샘플링을 활용한 필터링을 통해 이런 불쾌한 시각적 아티팩트를 줄일 수 있다.

비디오도 마찬가지로 압축이 매우 중요하다. 비디오 프레임과 프레임 사이에 이미지 중 아주 일부분만 변한다는 관찰이 비디오 압축의 핵심이다.

그림을 보면 프레임이 변할 때마다 이미지 중 일부분만 변함을 알 수 있다. 변경된 영역의 데이터만 필요하다면 더 적은 데이터를 저장하거나 송신할 수 있다. 이를 움직임 보상이라 한다.

비디오를 원본 이미지로부터 변화된 내용의 집합으로 표현하는 방식은 데이터가 왜곡되는 문제가 발생한다. 따라서, 데이터를 복구할 방법이 필요하다. 정기적으로 데이터에 키프레임(완전한 이미지)을 추가하는 방식으로 이를 해결한다.

프레임 사이의 차이를 감지하는 알고리즘은 복잡하며 계산이 아주 많이 필요하다.




휴먼 인터페이스 장치


컴퓨터는 휴대전화를 쓰는 10대 청소년과 같다. 대부분의 시간을 컴퓨터끼리 메시지를 주고 받는데 사용하고, 가끔 다른 사람에게 이야기한다.

터미널

과거에는 키보드, 마우스, 디스플레이 같은 장치들은 상상하기 힘든 사치품이였다. 컴퓨터를 실행하는 시간이 정말로 귀했기 때문에, 배치 프로세싱을 사용하여 프로그램을 실행했다.

시간이 지남에 따라 컴퓨터가 빨라지고 저렴해져 사람들을 컴퓨터를 텔레타이프에 연결하기 시작했다. 텔레타이프는 선의 끝에 연결되었기 때문에 터미널이라고 불렀다. 오늘날에도 텔레타이프를 줄인 TTY라는 단어를 여전히 터미널을 가리키는데 사용한다.

이런 작은 컴퓨터를 계속 바쁘게 돌리기 위해 시분할이 발명되었다. 이는 어떤 방을 빌리면 마치 방이 우리 것인 것 마냥 사용할 수 있지만, 우리 차례가 아니라면 다른 사람 방이다.

시분할 시스템에는 컴퓨터의 OS라는 프로그램이 있다. 이는 마치 호텔 예약 담당자 같은 일을 하며 컴퓨터의 여러 자원을 각 사용자에게 배정해준다.

우리가 컴퓨터를 쓸 순서라면 다른 사용자의 프로그램은 디스크로 스왑 아웃되며, 우리의 프로그램은 디스크에서 메모리로 스왑 인 되며 정해진 시간동안 잠깐 실행된다.

어느 시점이 되면 OS 프로그램을 스왑 인하고 스왑 아웃하는데 소모되는 시간이 사용자 프로그램을 실행하는 시간보다 길어지는데 이를 스레싱 현상이라 한다.

시분할 시스템 덕분에 우리는 하나의 이상의 작업을 동시에 실행하는 것 같은 착각을 불러일으키는데 이를 멀티 태스킹 시스템이라 한다. 갑자기 많은 터미널이 같은 컴퓨터에 연결되기 시작했기 때문에, 컴퓨터가 어떤 작업이나 사람에게 속했는지를 구분하기 위해 사용자라는 개념이 생겼다.

그래픽 터미널

하드 카피 터미널에서 멀어져야할 이유가 있다. 특히 속도, 신뢰성, 소음 등이 주된 이유다. 따라서, 화면을 컴퓨터에 사용해야 할 차례다.

전기기기의 발전이 느려서 이러한 변화도 늦게 일어났다. 당시 메모리는 너무 느리고 비쌌다.

그래픽 터미널은 원래 CRT라 부르는 음극선관이라는 진공관의 변형으로 만들어졌다. 이 인광물질에 전자가 부딪히면서 빛이 난다.

이런 디스플레이를 작동하는 방법은 두 가지가 있다.

  • 정전 편향
  • 전자 편향

이 두 경우 모두 비트를 전압으로 변환해야 하기 때문에 디스플레이도 D/A 회로를 활용한다.

오늘날 CRT는 대부분 액정 디스플레이로 대치되었다. 액정은 전기를 가하면 빛을 통과시키는 성질이 바뀌는 물질이다.

벡터 그래픽

CRT는 그래프를 그릴 수 있는 모눈종이처럼 작동한다. 전자 광선은 x, y축 전압에 따라 어떤 지점으로 이동함 z축 값을 통해 밝기를 결정할 수 있다.

벡터 그래픽은 선 또는 벡터로 그림을 그리는 방식이다. 이리저리 선을 그려 그림을 만들어낸다.

이런 방법으로 그림을 표현할 수 있는 이유는 CRT 인광물질의 지속성 때문이다.

지속성 : 전자 빔이 사라진 후 얼마 동안 인관물질이 빛을 발생시키는가를 뜻한다.

사람의 눈은 응답 시간이 더 느리기 때문에 계속 그림을 반복해 그리면 지속적으로 화면에 표현되는 것처럼 보인다.

키보드와 마우스

터미널은 데이터를 출력하는 역할과 입력한 데이터를 받아들이는 역할도 수행한다.

키보드는 여러 스위치와 논리회로를 묶은 것이며, 마우스는 x, y좌표를 담당하는 2개의 쿼드러처 인코더를 사용하여 만든다.

0개의 댓글