입출력과 네트워킹
입출력과 네트워킹
개요
컴퓨터는 여러 근원에서 입력을 받고, 계산을 수행하고, 다양한 장치를 통해 출력을 만들어내는데, 이때 입출력에 필요한 것은 입력을 위한 트라이스테이트 버퍼와 출력을 위한 래치다. 프로그래밍 관점에서 I/O 장치와 상호작용하는 기술과 아날로그와 디지털을 전환할 수 있는 샘플링에 대해 알아보자.
저수준 I/O
- 비트에 물건을 연결한 형태의 I/O
- 6-1의 그림에서 LED는 전류가 올바른 방향으로 흐를 수 있게 해준다.
- 올바른 방향이란 양극에서 음극으로 흐르는 것을 말한다.
- 방향이 올바를 때만 LED는 빛을 낸다.
- LED와 저항이 직렬로 연결되어 있어, PB0이 1인 경우에만 전류가 흘러 빛을 낸다.
- 포트 B는 DDRB, PORTB, PINB 세 가지 레지스터에 의해 제어된다.
- DDR : 데이터 방향 레지스터로 각 핀을 입력 또는 출력 중 어떤 것으로 사용할지 결정한다.
- PORT : 출력 데이터를 저장하는 래치다. DDR가 출력이면 핀의 전압 레벨을 제어하고, 입력이면 풀업 저항을 활성화 혹은 비활성화 한다.
- PIN : 핀의 값을 읽는 장치다.
- 즉, DDRB의 특정 비트에 0 혹은 1을 넣으면, 해당 번호에 해당하는 포트 B 비트가 입력 혹은 출력에 사용된다.
- 비트가 8개 있을 때, PORTB의 0번과 7번을 하이로 끌어올리고 나머지를 로우로 내리면 PINB의 값은 10000001이 된다.
버튼
- 버튼을 누르면 누른 순간에 전압이 내려가고, 떼면 올라간다고 생각할 수 있지만 아니다.
- 버튼의 금속 조각이 접점에 닿으면서 아주 잠깐 바운스되는게 안정화될 때까지 반복된다.
- 그래서 버튼 한 번에 여러 번의 인터럽트가 발생할 수 있어 이를 디바운스 되게 해야한다.
- 이를 안정화에 걸리는 시간을 생각해 타이머를 설정하고 시간이 지난 뒤 버튼 상태를 감지하는 것으로 해결할 수도 있다.
- 하지만 기계 부품의 노후화에 따라 바운스 시간이 달라져 타이머값을 정하기 애매하다.
- 그래서 대부분의 시스템에는 주기적인 인터럽트를 만들어내는 타이머가 존재한다.
빛
- 가장 흔한 디스플레이 장치는 7세그먼트 디스플레이다.
- 7개의 LED가 숫자 8형태로 나열되어 있고, 소수점 표현용 LED가 하나 붙어있다.
- 원래는 8개의 LED를 처리하기 위해 16개의 핀이 필요하지만, 각 LED에 핀을 하나씩 연결하고, 핀 하나에 모든 LED를 연결해 껏다 킬 수 있다. (이러한 방식을 공통 캐소드라고 한다.)
- 디스플레이를 제어하기 위한 소프트웨어는 숫자 혹은 문자와 그에 따라 세그먼트의 어떤 LED를 켤지 연관시켜주는 표본만 있으면 된다.
- 프로세서가 충분한 수의 I/O 포트를 제공하지 못하기 때문에, 디스플레이의 애노드를 포트 A에 연결하고, 캐소드를 B에 연결해 디스플레이를 멀티플렉스 해야한다.
- LED는 전류가 특정 방향으로 흐를 때만 켜진다. 즉, 지금 경우에는 애노드(+) -> 캐소드(-)로 가야만한다.
- 그래서 애노드가 1이고, 캐소드가 0일 때만 켜지는 것이다.
- 6-9의 사진에서 A는 디스플레이의 각 세그먼트에 모두 연결되어 제어하고, B는 각 디스플레이의 캐소드를 제어한다.
- 즉, 모든 A 세그먼트의 애노드에 +를 보내고, 특정 디스플레이의 캐소드만 -로 만들어 해당 디스플레이에서만 A 세그먼트를 켠다.
- 시각의 잔상효과를 활용해 디스플레이를 항상 켜두지 않고, 짧은 시간 간격으로 디스플레이를 변경하며 세그먼트를 껏다 켜주면 된다.
빛, 동작, 상호 연동
- 디스플레이에 버튼이 추가된 경우다.
- 버튼 B는 디스플레이와 연결되어 있다.
- C는 키패드와 연결되어 있다.
- 버튼 B를 누르면 연결된 디스플레이에 값이 전달되게 된다.
- 키패드를 누르면 해당하는 버튼 C가 눌리고, 어떤 숫자인지 확인 후 디스플레이로 보낸다.
밝기 조절
- 디스플레이의 duty cycle을 조절해 밝기를 조절할 수 있다.
- 디스플레이가 켜져 있는 시간이 길수록 밝기가 높고, 짧을수록 낮다.
그레이의 2^n가지 그림자
- 센서를 읽어서 모터, 바퀴 놉 같은 회전축의 위치를 알아내야 할 때, 회전축에 스위치를 넣거나 광센서가 읽을 수 있는 검은색과 흰색 점을 사용해 위치를 알아낼 수 있다.
- 흰 부분을 0, 검은 부분을 1로 표현해서 2진수로 축의 위치를 인코딩할 수 있다.
- 하지만 전파 지연으로 인해 인코더가 완벽히 그려지지 않을 수도 있다.
- 그래서 각도가 달라질 때 비트가 하나씩만 달라지는 인코딩 방법인 그레이 코드가 발명되었다.
쿼드러처
- 그레이 코드를 응용해 대상의 위치가 어떤 방향으로 변했는지를 알 수 있다.
- 볼륨 조절 장치 등의 놉이 이런 방식으로 동작한다.
- 즉, 볼륨이 변했는지, 변했다면 커졌는지 줄어들었는지를 조절할 때 사용된다.
- 네 가지 상태만 존재해 쿼드러처 인코딩이라고 한다.
- 반시계 방향 혹은 시계 방향으로 돌았는지만 감지하는 2개의 센서만 있다.
병렬 통신
- 모든 컴포넌트를 제어할 수 있다.
- 병렬 포트에는 아스키 문자 코드를 전송하기 위해 8개의 데이터 선이 존재한다.
- 데이터 선을 많이 쓸 때 선에 올바른 데이터가 든 순간을 알기 위해 현재가 올바른 순간이다라고 알려주는 스트로브 신호를 사용한다.
- 병렬 인터페이스는 핀과 선이 많이 필요해 가격이 비싸다.
직렬 통신
- 전선과 통신 거리로 통신 비용이 늘어나기 때문에 최대한 선을 덜 쓰고 통신 하는 것이 좋다.
- 전기 신호가 가고 돌아와야 하니 선이 최소 2개는 필요하다.
- 한 선에 신호를 8개 보내려면 순서대로 데이터를 전송하면 된다.
- 보내는 쪽에서 시프트 레지스터를 사용해 데이터를 하나씩 밀어내면 선을 통해 보낸다.
- 받는 쪽에서 같은 시프트 레지스터를 사용해 밀려오는 데이터를 순서대로 받는다.
- 신호가 있는 상태인 마크와 없는 상태인 스페이스를 사용해 데이터를 구분해서 보낸다.
- 시작 비트 이후 8비트 데이터가 전달되고 문자의 끝에 정지 비트가 붙는다.
- 일정한 시간 간격으로 문자를 보내는 시간을 문자 시간이라 한다.
- 여러 데이터가 같은 선을 공유하더라도 서로 다른 시간에 데이터를 보낼 수 있게 시간별로 각기 다른 비트를 할당해서 한 선에 멀티플렉싱 하는 시간 분할 멀티플렉싱 기법이 있다.
- 초당 비트 수를 표현하는 단위는 보 레이트다.
- 반이중 통신은 송신자와 수신자가 같은 선을 공유해 한 쪽만 말할 수 있고 반대쪽은 듣기만 가능한 통신이다.
- 둘 이상의 송신자가 메시지를 보내려 하면 데이터가 혼신되는 충돌이 발생한다.
- 전이중 통신은 선이 2개라 양쪽이 주고 받는게 가능하다.
파동
- 마크-스페이스 방식은 큰 문제가 있어 장거리 통신에 적합하지 않다.
- 가장 근본적인 파장인 사인파를 조합해 모든 파형을 만들 수 있다.
- 사인파의 높이를 진폭, 매초 같은 방향으로 0을 지나치는 횟수를 주파수라 하고, 주파수의 단위를 헤르츠라 부른다.
- 같은 방향으로 0을 지나는 연속된 두 지점 사이의 거리를 파장이라 한다.
- 파장마다 특성이 다르다. (전달거리, 통과여부 등)
- 정보를 실어 나를 배 같은 역할의 파동을 반송파라 한다. (일정한 주파수를 가짐)
- 반송파를 마크-스페이스 파형처럼 변조시켜야 한다.
- 변조는 정보를 반송파에 실어 보내는 과정이다.
- 주파수 변이 변조는 반송파의 주파수를 바꿔 정보를 보내는 방법이다.
- 예를 들면 높은 소리와 낮은 소리를 번갈아 내면서 0과 1을 표현한다.
- 복조는 변조된 반송파에서 정보를 꺼내는 과정이다.
- 즉, 마크와 스페이스로 되돌리는 과정이다.
- 이런 변조와 복조를 수행하는 장치가 모뎀이다.
범용 직렬 버스
- 패킷은 데이터의 출처와 정보를 포함한 헤더와 데이터가 들어있는 페이로드로 구성되어 있다.
- USB는 데이터를 패킷으로 나누어 전송한다.
- USB는 음향과 비디오를 등시성 전송을 통해 처리한다.
- 종단점에서 데이터 전송 보장을 위해 컨트롤러에게 원하는 대역폭을 예약 요청한다.
- 충분한 대역폭이 없으면 컨트롤러가 요청을 거절한다.
- ? 끝이라고 무슨 말인지 이해가 안 됐는데…
네트워킹
- 저자의 딸은 와이파이와 인터넷의 차이를 모른다.
- 네트워크는 좁은 지리적 영역을 묶는 LAN, 더 넓은 지리적 영역을 묶는 WAN이 있다.
- 회선 교환 방식은 통화가 이루어지는 동안 회선을 만들고, 통화가 끝나면 필요에 따라 새로운 회로를 만든다.
- 현재의 전화 시스템은 패킷 교환 방식을 사용한다.
- 초기 컴퓨터 네트워크는 전화 네트워크와 모뎀을 사용해 각 지점 사이 통신을 수행하는 반자동 지상 환경의 일부분이었다.
- 인터넷은 여러 LAN을 하나로 연결해주는 WAN이다.
최근의 LAN
- 이더넷은 먼 거리를 연결할 수 있는 방식은 아니기에 LAN에 속한다.
- 각 장치의 네트워크 인터페이스에는 MAC 주소라는 48비트 주소가 부여된다.
- 데이터는 약 1500바이트 짜리 프레임이라는 패킷으로 구성되고, 패킷에는 송신 및 수신 주소와 요류 검증이 포함된 헤더가 페이로드와 함께 들어간다.
- 최초의 이더넷은 반이중 시스템이었지만, 현재의 이더넷은 그렇지 않다.
- 요즘은 라우터라는 장치에 각 장치가 연결되고, 라우터는 어떤 장치가 어떤 선에 연결되었는지를 기억해 정확하게 패킷을 배달해준다.
인터넷
- 인터넷은 물리적 네트워크가 아닌 여러 계층으로 이뤄진 프로토콜의 집합이다.
- 물리적 네트워크를 정의하는 아래 계층이 변경해도 위에 계층에 영향을 안끼치게 설계되었다.
- 그래서 선, 전파, 광섬유 혹은 앞으로 등장할 새로운 기술 위에서도 잘 동작한다.
TCP/IP
- IP는 데이터그램이라는 패킷을 한 곳에서 다른 곳으로 옮겨준다.
- IP를 사용한 송신자는 수신자가 메시지를 언제 받았는지나 제대로 받았는지 알 수 없다.
- TCP는 IP 위에 만들어져 패킷이 제대로 배달됐는지를 보장해준다.
IP 주소
- 인터넷 상의 각 장치들은 IP 주소라는 고유한 주소가 할당된다.
- MAC 주소와 다르게 하드웨어 종속적이라 아니라 변할 수 있다.
- 계층적인 구조라 자신이 할당 받은 블록의 일부 블록을 다른 누군가에게 할당할 수 있다.
- 대부분 IPv4 주소인 32비트 주소를 사용하고, 옥텟 표기를 사용해 표현한다.
- 최근에는 주소가 부족해져 IPv6 쪽으로 나아가고 있다.
DNS
- 장치의 현재 실제 주소를 찾을 수 있게 해주는 과정을 수행한다.
- 특정 이름의 IP 주소가 뭔지를 기억한다.
- 그냥 자동으로 갱신되는 주소록이라고 생각하면 된다.
WWW
- HTTP는 웹 브라우저가 웹 서버와 상호작용하는 방법을 정의한다.
- URL을 통해 웹 페이지 혹은 데이터를 얻을 수 있다.
- 웹 페이지는 보통 HTML로서 존재한다.
아날로그 처리 방법
실제로 보고 듣는 소리와 빛은 연속적이지만 컴퓨터는 연속적인 대상을 저장하지 못하기에 샘플을 취해야 하고 이를 샘플링이라고 한다. 이를 다시 들려주거나 보여주려면 샘플링 데이터로부터 아날로그 신호를 다시 만들어야 한다.
디지털 → 아날로그(DAC)
- 6-1에서 봤던 디스플레이를 보면 8개의 비트로 9가지 종류의 세기의 빛을 낼 수 있다.
- 하지만 이는 비효율적이다.
- 8개의 비트를 사용했다면 256가지의 세기를 표현할 수 있어야 한다.
- 실제 DA 변환기(DAC)는 빛이 아닌 전압을 만든다.
- 해상도는 DAC가 만들어내는 단계 수를 표현한다.
- DAC 입력을 일정 비율로 변경해 아날로그 파형을 만들 수 있다.
- 낮은 워터마크는 FIFO가 거의 빈 상태가 된 경우 인터럽트를 발생시킨다.
- 높은 워터마크는 거의 꽉 찼을 때 발생시킨다.
- 이렇게 고수준 소프트웨어에서는 일정 비율로 연속적으로 출력이 일어나게 메모리를 채울 수 있다.
아날로그 → 디지털(ADC)
- 값을 측정할 수 있게 아날로그 신호의 현재 값을 흔들리지 않게 잡아야 한다.
- 샘플 앤드 홀드 회로를 사용해 아날로그 파형의 값을 잡아낼 수 있다.
- 비교기라는 문턱값을 선택할 수 있는 논리게이트 같은 것을 사용한다.
- 비교기를 여러 기준 전압과 연결해 쌓아 플래시 변환기를 만든다.
- 샘플 앤드 홀드에서 오는 신호를 플래시 변환기가 빠르게 결과를 만든다.
- 하지만 이 방식은 비트를 효율적으로 사용하지 못하고 비교기를 많이 사용해야 한다.
- 기준 전압을 변화시킬 수 있는 비교기 하나면 충분하다.
- 이러한 기준 전압은 DAC에서 얻을 수 있다.
- 샘플값이 DAC 값과 같아질 때까지 카운터가 수를 세고, 같아지면 비교기의 출력이 0이 되면서 원하는 값을 얻고 끝나고, 카운터에는 샘플을 디지털로 변환한 값이 들어간다.
- 이런 ADC를 램프 변환기라 한다.
- 램프 변환기는 샘플의 크기에 선형으로 비례해 시간이 걸려 느리단 단점이 있다.
- 그래서 하드웨어로 이진 탐색을 진행하는 연속 추정 변환기가 있다.
디지털 오디오
- 샘플링을 통해 오디오를 디지털화 할 수 있고, 이는 일정 시간 간격으로 신호의 진폭이나 높이를 측정하는 것과 같다.
- 일정한 샘플링 주파수로 사각파를 얻을 수 있고, 상승 에지마다 A/D를 사용해 신호의 높이를 기록할 수 있다.
- 푸리에…푸리에…푸리에…
- 푸리에 변환은 여러 소리가 섞인 소리를 사인파로 나눠서 알려주는 것 = 소리의 조합 찾기
- 빠른 푸리에 변환은 기존 푸리에 변환이 모든 조각을 하나씩 확인해서 오래 걸리는 것과 다르게 패턴을 찾아 조각을 묶음으로 처리해서 훨씬 빠르다.
- 그래픽 이퀄라이저는 정해진 주파수를 통과시키거나 막아버리는 조절 가능한 필터의 집합이다.
- 필터는 로우패스와 하이패스 필터가 있다.
- 둘을 조합해 밴드패스 필터나 노치를 만들 수 있다.
- 필터 에지는 완전한 직각은 아니다.
- 폴딩은 소리를 저장할 때 너무 적은 샘플로 표현해 원래 모양이 접혀서 겹치는 현상이다.
- 에일리어싱은 컴퓨터가 신호를 잘못 이해해 원래 모습과 다르게 보이거나 들리는 현상이다.
- 예를 들면 높은 음이 낮게 들리거나, 낮은 음이 높게 들리는 것이다.
- 아티팩트는 사진 확대 시 보이는 깨진 블록 같은 이상한 모양으로, 원래는 없지만 데이터 처리 혹은 압축 과정에서 생긴 얼룩이나 잡은 같은 것을 말한다.
- 위상은 시간축 위에서 약간씩 신호가 옮겨간 것으로 주파수와 진폭은 재구성이 가능해도 위상은 재구성할 수 없다.
- 오디오에는 많은 데이터가 들어있어 데이터를 압축해 공간을 적게 차지하게 만들어야 한다.
- 무손실 압축은 원래 데이터를 그대로 유지하기 때문에 절반 정도의 크기만 줄일 수 있다.
- 손실 압축은 일부 세부 사항이 사라져 더 많은 크기를 줄일 수 있다.
디지털 이미지
- 이미지 샘플링은 오디오보다 더 복잡하다. 세상에 오디오도 이해 못했는데;;
- 디지털 이미지는 픽셀로 이뤄진 직사각형 배열로 표현된다.
- 컴퓨터는 가산 혼합 색 시스템을 사용해 색을 표현한다.
- 인쇄에는 감산 색 시스템이 사용된다.
- 포인트 샘플링은 정사각형 전체가 아닌 각 정사각형 중심 점의 색을 기록한다.
- 해상도가 높을 수록 샘플링한 이미지가 더 보기 좋고 그만큼 데이터 크기도 커진다.
- 슈퍼 샘플링은 한 정사각형 안에서 여러 지점의 색을 얻어 평균을 낸다.
비디오
- 이미지를 일정 시간 간격으로 샘플링한 시퀀스다.
- 아티팩트를 줄여야하는데 물체가 움직이기 때문에 아티팩트가 제자리에 머물지 않는다.
- 슈퍼 샘플링을 활용한 필터링을 통해 아티팩트를 줄일 수 있다.
- 오디오나 이미지보다 훨씬 크기 때문에 압축이 중요하다.
- 프레임이 변해도 일부는 남아있고, 변경된 영역의 데이터만 필요하다 = 움직임 보상
- 즉, 비디오를 원본 이미지로부터 변화된 내용의 집합으로 표현해서 압축한다.
- 하지만 데이터 왜곡 문제가 있어서 복구 방법이 필요하다.
- 정기적으로 데이터에 완전한 이미지인 키프레임을 추가해, 이미지가 손상된 경우 다음 키프레임에 전체 이미지를 복구할 수 있다.
- 최근 압축 표준은 레이어링을 지원한다.
- 레이어링은 레이어 간에 각기 다른 그림을 중첩시켜 비디오 이미지를 만들어내는 것이다.
휴먼 인터페이스 장치
터미널
- PuTTY의 이름에서 들어가는 TTY가 텔레타이프의 줄임말이였다.
- 컴퓨터를 바쁘게 돌리기 위해 시분할이 발명됐다.
- 시분할 시스템에 운영체제도 포함된다.
- 스와핑이 빠르게 일어나면 여럿이 컴퓨터를 사용해도 혼자 사용하고 있는 것처럼 느껴진다.
- 하지만 사용자가 너무 많거나 작업이 복잡하면 스와핑 시간이 프로그램 실행보다 길어지는 스레싱 현상이 발생한다.
그래픽 터미널
- 컴퓨터 화면에 그림을 보여주는 특별한 장치
- 옛날에는 글자만 보여줬는데 그림과 모양도 보여줄 수 있게 한다.
벡터 그래픽
- 그림을 수학적인 점, 선, 도형으로 그린다.
- 크기를 아무리 크게 늘려도 깨지지 않는다.
- 어디부터 어디까지 선을 그린다던가 같은 방식
래스터 그래픽
- 그림을 픽셀로 채워서 표현한다.
키보드와 마우스
- 키보드는 키 스위치들을 격자상에 놓고 멀티플렉싱 하게 만든다.
- 마우스는 X, Y 좌표를 담당하는 2개의 쿼트러처 인코더를 사용해 만든다.
소감
내가 뭘 읽은거지…책이 문제인가 내가 문제인가…
막힐 때마다 GPT한테 초등학생도 알기 쉽게 설명해달라 말하는데도 이해가 안되는데, 초등학생보다 못한 사람이 되어버린 기분이다…
This post is licensed under CC BY 4.0 by the author.