[한 권으로 읽는 컴퓨터 구조와 프로그래밍]6장 입출력과 네트워킹
컴퓨터는 외부와 어떻게 상호작용하는가
저수준 I/O
- CPU가 읽거나 쓸 수 있는 비트에 물건을 연결한 가장 단순한 형태의 I/O
I/O 포트
포트 B에 전구와 스위치를 연결한 경우를 가정
- LED(light emitting diode): 빛을 내는 다이오드
- 다이오드: 전기를 한 방향으로만 흐르게 제한하는 반도체 장치
- LED와 저항을 직렬로 연결
- LED에 흐르는 전류를 제한해 LED가 타버리지 않기 위함
포트 B
- 세 가지 레지스터에 의해 제어
- DDRB(Data Direction Register B): 각 판을 입력으로 쓸지 출력으로 쓸지 결정
- 포트 B에 대한 데이터 방향 레지스터
- 이 레지스터의 어느 비트에 1을 넣으면 그 비트 번호에 해당하는 포트 B 비트가 출력에 사용
- 0을 넣으면 입력
- PORTB: 출력 데이터를 저장하는 래치
- PORTB의 어느 비트에 0이나 1을 넣으면 해당 비트가 출력 비트로 DDRB에 지정된 경우 핀의 출력 전압이 0 또는 1로 바뀜
- PINB: 핀의 값을 읽음
- 연관된 핀의 상태를 읽을 수 있음
- DDRB(Data Direction Register B): 각 판을 입력으로 쓸지 출력으로 쓸지 결정
버튼을 눌러라
풀업(pull-up) 저항
- 버튼이 눌리지 않은 경우 프로세서의 인터럽트 요청(interrrupt request, IRQ) 핀에 연결된 선의 전압을 공급 전압까지 올려 논리 1을 만듦
- 버튼이 눌린 경우 IRQ나 회로가 타지 않도록 전류를 제한하면서 IRQ에 논리 0 공급
버튼 바운스
- 버튼에 연결된 금속 조각은 접촉면이 안정되기 전까지 접점에서 여러번 튕겨나옴(bounce)
- 이는 인터럽트를 여러번 발생시킴 ⇒ 버튼을 디바운스(debounce)해서 바운스를 없애야 함
- 디바운스
- 인터럽트 핸들러에 타이머를 설정해서 바운스가 끝난 이후의 버튼 상태를 감지하게 만듦
- 디바운스를 설정하는 두 가지 방법
- 최초 인터럽트 시 타이머를 설정
- 인터럽트가 발생할 때마다 기존 타이머를 새 타이머로 재설정
- 단점
- 기계 부품이 낡으면 바운스 시간이 달라지므로 타이머 값을 정하기 어려움
- 프로세서에 버튼의 수 만큼 인터럽트 핀이 많이 존재하지 않음
- 대부분의 시스템에는 주기적인 인터럽트를 만드는 일종의 타이머가 존재하는데 이를 이용해 버튼 디바운싱 해결
유한 임펄스 응답(finite impulse response, FIR)
- FIR은 큐다.
- 어떤 버튼의 상태가 바뀌었는지 알 수 있다.
빛이 있으라
7 세그먼트 디스플레이
- 7개의 LED가 숫자 8 형태로 나열되어 있고 소수점을 표현하는 하나의 LED가 추가로 존재
- 총 8개의 LED를 처리하기 위해 각 LED에 핀을 하나 연결하고, 핀 하나에는 모든 LED 연결
- LED를 켜거나 끌 때 한쪽 끝만 제어하면 되기 때문에 공통 연결핀을 사용한다.
- 더 적은 핀을 사용하기에 더 싸다.
공통 캐소드 디스플레이
- 모든 캐소드는 한꺼번에 연결되고 각 애노드마다 별도의 핀이 배정
시각의 잔상효과
- 타이머 인터럽트 핸들러를 사용해 짧은 시간 간격으로 세그먼트를 껐다 켰다 하면 계속 켜진 것 처럼 보임
밝기 조절
듀티 사이클
- 디스플레이의 듀티 사이클을 조절해 밝기를 조절한다.
- 밝기는 디스플레이가 켜져 있는 평균 시간과 관련있다.
그레이의 2^n가지 그림자
- 센서를 읽어 모터, 바퀴와 같은 회전축의 위치를 알아내야 하는 경우 회전축에 스위치를 넣거나 광센서가 읽을 수 있는 검은색과 흰색 점을 사용해 위치를 알아낼 수 있다.
- 중요한 것은 축의 위치를 2진수로 인코딩 하는 것
그레이 코드 로터리 인코더
- 2진 로터리 인코더는 배열 오류가 있을시 데이터를 잘못 읽게 된다. 이 문제를 해결하는 그레이 코드는 각도가 변할 때 비트가 하나씩만 달라지는 인코딩 방법이다.
쿼드러처
쿼드러처 인코딩
- 어떤 대상의 절대적 위치는 알 필요 없고, 위치가 변했는지와 어떤 방향으로 변했는지만 아는 경우 사용하는 방법
병렬 통신
병렬
- 컴포넌트 하나하나마다 별도의 선이 있기 때문에 동시에 모든 컴포넌트를 제어할 수 있다.
스트로브
- 데이터를 보낼 때 데이터의 변화만 관찰해서는 올바른 데이터를 보내는지 알 수 없기 때문에 유효한 데이터라고 알려주는 스트로브 신호를 추가
병렬 인터페이스
- I/O 핀, 커넥터 핀, 선이 많이 필요하기 때문에 비싸다.
직렬 통신
- 전선을 덜 써야 비용이 적게 드는 통신을 할 수 있다. 직렬 통신은 선을 최소로 사용하는 것이 목표다.
- 전기 신호가 돌아올 경로가 필요해 전선은 최소 2개 필요
- 비트를 서로 다른 시간에 나누어 보낼 수 있다. 스트로브 또는 클록 신호가 각 비트를 한 위치씩 시프트 시키면서 밀려나가는 비트를 선을 통해 내보낼 수 있다. 수신받는 쪽은 클록이 비트를 한 자리씩 시프트 시키면서 채워넣는다.
- 이 방법은 오류가 발생하기 쉽다.
마크-스페이스 신호
- 전송할 데이터를 직렬 프로토콜을 통해 신호선 하나로 전달한다.
- 당연히 돌아올 전선도 필요
- 하이 상태를 마크, 로우 상태를 스페이스라고 한다.
- 아무 일도 일어나지 않을 때가 하이 상태이다.
- 로우 상태는 시작 비트로써, 시작 비트 이후 데이터가 전달되고 끝에 하이 상태인 정지 비트가 붙는다.
- 각 비트에는 같은 시간이 할당된다.
- 동기화 오류가 발생시 송신가는 문자 시간(character time)동안 수신자가 다시 동기화 하기를 기다린다.
- 시간 분할 멀티플렉싱: 시간을 나눈 슬롯을 만들고 슬롯마다 각기 다른 비트를 할당해 데이터를 한 선에 멀티플렉싱
- 보 레이트(Baud rate): 초당 비트 수
반이중(half-duplex) 통신
- 송신자와 수신자가 같은 선을 공유
- 충돌을 피하기 위해 메세지를 송신하고 “오버”라는 단어를 붙임
- 충돌: 동시에 둘 이상의 송신자가 메세지를 보내는 경우
- 전이중(full-duplex) 통신: 선이 2개여서 각기 다른 방향으로 동시에 통신이 가능
- UART(Universal Asynchronous Receiver-Transmitter): 이런 통신을 위한 IC
- 비트 뱅잉(bit-banging): 소프트웨어로 구현된 UART
파동에 올라타라
- 장거리 통신에는 마크-스페이스 방식이 적합하지 않다.
파장
- 사인파: 근본적인 파장
- 진폭: 사인파의 높이
- 주파수(헤르츠, Hz, 초당 사이클): 매초 같은 방향으로 0을 지나치는 횟수
- 파장: 같은 방향으로 0을 지나는 연속된 두 지점 사이의 거리
- λ=υ/f
- λ: 파장을 미터로 표시한 값
- υ: 매질에서 파동의 속도
- f: 주파수를 Hz로 표시한 값
반송파(carrier)
- 전달하려는 신호를 올려보낼 파동
- 이를 이용해 반송파를 마크-스페이스 파형처럼 변조(modulation)할 수 있다.
- 복조(demodulation): 수신자가 음향을 다시 마크와 스페이스로 되돌리는 작업
- 모뎀(modem): 변조와 복조를 수행하는 장치
범용 직렬 버스(Universal Serial Bus, USB)
- 선이 4줄뿐인 단일 커넥터
- 두 줄의 전력선과 여러 다른 데이터 신호에 사용되는 연선(twisted pair)으로 구성
- USB 타입 C는 선을 24개까지 사용
- 종단점(endpoint)를 담당하는 컨트롤러 존재
- 종단점은 데이터 전송을 보장하기 위해 원하는 대역폭(데이터 전송 비율) 예약을 요청 가능
- 충분한 대역폭이 없는 경우 컨트롤러가 요청 거부 가능
- 종단점은 데이터 전송을 보장하기 위해 원하는 대역폭(데이터 전송 비율) 예약을 요청 가능
- 데이터는 패킷으로 분류
- 패킷에는 헤더와 페이로드가 들어 있음
- 음향과 비디오를 동시성 전송(isochronous transfer)을 통해 처리 가능
네트워킹
- 근거리 네트워크(local area network, LAN)와 광역 네트워크(wide area network, WAN)의 경계는 모호하다.
- 회선 교환(circuit switch) 방식 네트워크
- 과거의 전화 네트워크
- 통화를 위해 두 사람의 전선을 연결해 회로 형성
- 통화가 끝나면 다른 통화를 위해 새로운 회로 형성
- 패킷 교환(packet switch) 방식 네트워크
- 현재의 전화 네트워크 시스템
- 시간 분할 멀티플렉싱을 사용하면 같은 전선을 공유하며 패킷 전송이 가능해 더 효율적
- UUCP(UNIX-to-UNIX copy)
- 컴퓨터가 다른 컴퓨터에게 데이터 전송, 원격 프로그램 실행 가능
- 최초 전자우편 시스템과 유즈넷(USENET)과 같은 뉴스 시스템의 근간
- 원하는 목적지에 도달할 때까지 한 기계에서 다른 기계로 넘기며(hop) 메시지 전달
- ARPANET
- 패킷 스위치 방식의 WAN
- 1990년대 인터넷으로 진화
- 인터넷은 여러 LAN을 하나로 연결하는 WAN
최근의 LAN들
이더넷(Ethernet)
- 먼 거리 연결이 불가하므로 LAN
- 최초의 이더넷은 반이중 시스템
- 모든 장치가 같은 선에 연결
- 각 장치의 네트워크 인터페이스에는 MAC(Media Access Control) 주소가 부여
- 데이터는 프레임(frame)이라는 이름의 패킷으로 구성
- 송신 주소, 수신 주소, 오류 검증이 포함된 헤더와 페이로드가 함께 들어감
- 프레임의 MAC 주소와 장치의 MAC 주소가 일치하지 않으면 장치는 데이터를 무시
- 랜덤 백오프 후 재시도: 말하고 싶은 장치가 둘 이상 동시에 말해 충돌이 발생한 경우 임의의 시간을 기다린 뒤 다시 말하려 시도
- 모든 장치가 같은 선에 연결
- 요즘 이더넷은 각 장치가 라우터에 연결
- 라우터는 어떤 장치가 어떤 선에 연결되었는지 기억하고 패킷을 정확하게 전달
인터넷
- 인터넷은 여러 계층으로 이루어진 프로토콜의 집합
- 프로토콜 계층은 물리적 네트워크를 정의하는 아래쪽 계층을 변경해도 위쪽 계층에 영향을 끼치지 않도록 고안
TCP/IP
- 전송 제어 프로토콜/인터넷 프로토콜(Transmission Control Protocol/Internet Protocol)
- 인터넷이 사용하는 두 가지 프로토콜
- IP는 패킷(데이터그램, datagram)을 한 곳에서 다른 곳으로 옮김
- IP를 이용하면 송신자는 수신자가 메세지를 언제 받는지, 받기는 했는지도 알 수 없음
- TCP는 IP 위에 만들어져 패킷이 제대로 전달되었는지 보장
- 패킷은 먼저 송신해도 수신이 늦어질 수 있다. 택배처럼.
IP 주소
- 각 컴퓨터 또는 장치에는 IP 주소라는 유일한 주소 할당
- MAC 주소와 달리 하드웨어에 묶여있지 않아 변경 가능
- IP 주소 시스템은 계층적
- 주소 중 일부를 누군가에게 할당 → 그 누군가는 다시 주소 중 일부를 다른 누군가에게 할당
- 인터넷은 대부분 IPv4에서 이루어짐
- IPv4는 32비트 주소 사용
- 주소는 옥텟 표기(
xxx.xxx.xxx.xxx
)를 사용해 표현됨xxx
는 32비트 주소 중 8비트(0~255)를 나타냄
- IP 주소는 점점 부족해져 요즘은 128 비트 주소를 사용하는 IPv6를 사용하는 추세
도메인 이름 시스템(DNS)
- DNS는 이름을 주소로 바꿈
- IP 주소가 바뀌어도 DNS는 알아서 이름의 IP 주소를 기억하고 있음
월드 와이드 웹
- SMTP(Simple Mail Transfer Protocol, 단순 우편 전달 프로토콜)
- TCP/IP 위에 만들어짐
- 전자우편 시스템의 작동 기반 프로토콜
- HTTP(Hyper Text Transfer Protocol), HTTPS
- TCP/IP 위에 만들어짐
- 웹 페이지 전송을 책임짐
- 하이퍼텍스트: 링크가 붙은 텍스트
- HTTP 표준
- 웹 브라우저가 웹 서버와 상호작용하는 방법을 정의
- 웹 브라우저: 웹 페이지를 볼 때 사용하는 프로그램
- 웹 서버: 요청한 페이지를 제공
- URL(Uniform Resource Locator, 일관된 자원 위치 지정자)
- 이를 통해 웹 페이지를 얻음
- 인터넷상의 컴퓨터에 대한 도메인 이름과 이 컴퓨터 안의 어디에서 정보를 찾을지에 대한 설명 포함
- 웹 브라우저가 웹 서버와 상호작용하는 방법을 정의
- HTML(Hyper Text Markup Language)
- 웹 페이지는 보통 HTML로서 존재
아날로그 처리 방법
샘플링
- 컴퓨터는 연속적인 대상을 저장할 방법이 없어 데이터의 샘플을 취함
- 시간이나 공간상 일정한 간격으로 값을 읽음
- 저장한 데이터를 다시 영상이나 빛으로 보여주려면 샘플링 데이터로부터 아날로그 신호를 다시 만들어야 함
디지털을 아날로그로 변환
DA 변환기(digital-to-analog converter, D/A, DAC)
- 디지털을 아날로그로 바꾸는 변환기
- 해상도: DAC가 만드는 단계 수를 느슨히 표현하는 단어
- 정확히는 DAC가 만들어낼 수 있는 최대 전압을 단계 수로 나눈 값
- 만약 10비트 DAC가 최대 5V를 만들 수 있다면 해상도는 대략 0.005V(5/2^10)이다.
- 정확히는 DAC가 만들어낼 수 있는 최대 전압을 단계 수로 나눈 값
- DAC 입력을 일정한 비율로 변경하면 파형을 만들 수 있음
- FIFO 메모리: 더 복잡한 파형을 만들기 위해 추가 회로를 통해 데이터를 써넣기 위한 메모리에서 데이터를 읽어옴
- 데이터를 일정한 비율로 읽어 처리하기 위해 사용
- FIFO가 거의 비면 낮은 워터마크 트리거가 인터럽트를 발생, FIFO가 거의 꽉차면 높은 워터마크 트리거가 인터럽트 발생
아날로그를 디지털로 변환
AD 변환기(analog-to-digital converter, A/D, ADC)
- 값을 측정할 수 있도록 아날로그 신호 값을 안정적으로 잡아야 함
- 샘플 앤드 홀드 회로: 아날로그 파형의 샘플 값을 잡아내는 회로
- 비교가(comparator) 회로: 두 전압의 크기를 비교하는 회로
- 입력 신호가 - 입력 신호보다 크거나 같으면 1을 출력, 그렇지 않으면 0 출력
- 여러 기준 전압(reference voltage)과 연결해 쌓으면 플래시 변환기(flash converter)
램프 변환기(ramp converter)
- 플래시 변환기는 비트를 효율적으로 사용 못하고 비교기를 많이 사용하기 때문에 비싸다. 이를 극복해 기준 접압을 DAC 하나에서만 얻도록 한 변환기가 램프 변환기이다.
- 샘플값을 DAC와 비교하고 두 값이 같아질 때까지 카운터가 수를 센다.
- 카운터에 샘플을 디지털로 변환한 값이 들어있다.
- 신호에서 얻은 샘플 크기에 선형으로 비례하는 시간이 걸리기 때문에 전체적으로 오래걸린다.
- 샘플이 최댓값이고 ADC가 n 비트라면 최대 2^n 클록이 걸려야 변환이 끝난다.
연속 추정 변환기(successive approximation converter)
- 하드웨어로 2진 검색을 진행해 램프 변환기보다 빠르다.
- 최악의 경우 log n 클록밖에 안걸린다.
디지털 오디오
- 일정 시간 간격으로 신호의 진폭이나 높이를 측정해 일차원으로 샘플링을 하면 오디오로 디지털화할 수 있다.
- 일정 샘플링 주파수로 사각파(square wave)를 얻을 수 있고 상승 에지(rising edge)마다 A/D를 사용해 신호의 높이를 기록할 수 있다.
- 어떤 파형이든지 일련의 사인파의 가중치 합으로 표현할 수 있고 푸리에 변환을 통해 각 부분을 다시 골라낼 수 있다.
- 푸리에 변환을 이용해 주파수에 따른 진폭을 그래프로 그릴 수 있다.
필터
- 로우패스: 어떤 주파수보다 낮은 주파수를 통과
- 하이패스: 어떤 주파수보다 높은 주파수를 통과
- 밴드패스: 로우패스와 하이패스를 조합해 정해진 구간의 주파수만 통과
- 노치(notch): 특정 주파수만 제외
- 롤오프(roll off): 필터 에지는 날카롭지 않다.
압축
- 무손실 압축(lossless compression)
- 원래 데이터를 그대로 유지하지만 크기가 반 밖에 안줄어듦
- FLAC(Free Lossless Audio Codec)
- 코덱(codec, coder-decoder): 모뎀과 비슷하게 어떤 대상을 한 코딩 시스템에서 다른 코딩 시스템으로 변환하거나 되돌리는 소프트웨어 또는 하드웨어
- 손실 압축(lossy compression)
- 음향심리학에 따라 사람이 들을 수 없는 소리를 없애 일부 세부 사항 사라지지만 높은 압축률을 제공
- MP3, AAC, Ogg
디지털 이미지
- 디지털 이미지는 그림 요소(picture element, pixel)로 이뤄진 직사각형 배열로 표현
- 각 픽셀은 빨간색, 녹색, 파란색의 조합
- 오늘날 디스플레이는 보통 각 색에 8비트 사용
- 컴퓨터는 가산 혼합 색 시스템을 사용
- 포인트 샘플링: 정사각형 전체의 색을 기록하는 대신 각 정사각형의 중심 점의 색을 기록
- 슈퍼샘플링: 한 정사각형 안에서 여러 지점의 색을 얻어서 평균을 내는 방법
JPEG
- 가장 일반적인 이미지 압축 방식
- 연합 사진 전문가 그룹(Joint Photographic Experts Group)의 표준 압축 방식
- 이웃한 픽셀의 색이 서로 비슷할 확률이 높기 때문에 개별 픽셀의 색 대신 이웃 픽셀의 색을 저장하는 방법
- 두뇌는 색 보다는 밝기 변화에 더 민감하다는 사실을 활용
비디오
- 비디오는 2차원 이미지를 일정한 시간 간격으로 샘플링한 시퀀스
- 오래된 영화는 초당 24 프레임, 요즘은 48fps(frame per second)
- 슈퍼 샘플링을 이용하면 불쾌한 시각적 아티팩트를 줄일 수 있음
- 움직임 보상(motion compensation): 비디오 프레임이 변할 때 보통 이미지의 일부분만 변하므로 변경된 영역의 데이터만 이용해 압축 가능하다.
- 데이터가 왜곡되는 단점 존재
- 정기적으로 데이터에 키프레임(keyframe)을 추가하면 데이터가 오염되어도 다음 키프레임에서 전체 이미지 복구 가능
- 레이어링: 레어어 간에 각기 다른 그림을 중첩시켜 비디오 이미지를 만듦
휴먼 인터페이스 장치
터미널
- 배치 프로세싱(batch processing): 키펀치를 사용해 종이에 코딩 양식을 찍어내고 이를 컴퓨터가 읽어 프로그램을 실행
- 텔레타이프(TTY)는 선의 끝에 연결되었기 때문에 터미널이라 불림
- 스레싱(thrashing) 현상: 운영체제가 프로그램을 스왑 인하고 스왑 아웃 하는 시간이 사용자 프로그램을 실행하는 시간보다 더 길어지는 현상
- 시분할 시스템이 아주 느려진다.
- 시분할 시스템은 한 번에 하나 이상의 작업을 하는 것과 같은 착각을 만듦 ⇒ 멀티태스킹
- 많은 터미널이 같은 컴퓨터에 연결되기 시작해 어떤 작업이 누구에게 속했는지 구분하기 위해 사용자(user) 개념 탄생
그래픽 터미널
- 옛 그래픽 터미널은 CRT(cathode ray tube, 음극선관) 진공관의 변형
- CRT 내부 유리에 화학적인 인광물질이 발라져 있고 여기 전자가 부딪히면 빛 발생
- 그리드 또는 편향판(deflection plate)이 여럿 있으면 인광물질에 그림을 그릴 수 있다.
- 편향판 버전: 정전기 현상과 같은 원리인 정전 편향(electrostatic deflection) 사용
- 전자기를 사용한 버전: 전자 편향(electromagnetic deflection)
- 오늘날은 액정 디스플레이(liquid crystal display, LCD) 사용
- 액정(액체 결정): 전기를 가하면 빛을 통과시키는 성질이 바뀌는 물질
벡터 그래픽
CRT
- 모눈종이처럼 x축 전압과 y축 전압에 따라 어떤 지점으로 이동하고 z축 전압으로 밝기 조절
- 원래 흑백이나 그레이스케일 디스플레이
- 인치당 표시할 수 있는 좌표 위치의 개수가 해상도(resolution)
벡터 그래픽
- 선을 그려서 그림을 만듦
- 디스플레이 목록(display list): 그림을 그리는 명령어로 이루어진 목록
- 마지막에는 첫 번째 목록으로 되돌아가 다시 시작해야 한다. 이는 화면상 이미지가 빠르게 사라지기 때문이다.
- CRT 인광물질은 지속성(persistence)이 있어 계속 그림을 반복해 그리면 화면에 이미지가 표시된 상태를 유지할 수 있다.
- 마지막에는 첫 번째 목록으로 되돌아가 다시 시작해야 한다. 이는 화면상 이미지가 빠르게 사라지기 때문이다.
- 플리커(flicker): 디스플레이 목록이 매우 길어지면 화면이 깜박거린다.
래스터 그래픽(raster graphics)
- 점으로 이뤄진 그래픽
- 래스터는 왼쪽 위에서 출발해 화면을 지나고 수평 리트레이스(horizontal retrace)를 통해 다음 줄의 최좌측으로 이동한다. 마지막 줄을 그린 후에는 수직 리트레이스(vertical retrace)를 통해 초기 상단 좌측으로 이동한다.
- 이 래스터가 달리는 동안 원하는 이미지를 표시하기 위해 정확한 시간에 정확히 밝기를 변화시키면 된다.
- 래스터 디스플레이는 실제 화면이라 점과 점 사이에 그림을 그릴 수 없다.
- 이 때문에 불쾌한 시각적 아티팩트 발생
키보드와 마우스
- 키보드: 키 스위치를 격자상에 놓고 멀티플렉싱한 것으로 전원을 격자의 각 행에 순차적으로 인가하고 각 열의 입력을 받음
- 마우스: x와 y좌표를 담당하는 2개의 쿼드러처 인코더를 사용
- 터치 장치: 키보드와 비슷한 행 스캐닝과 열 스캐닝을 더 미세한 단위로 스캔
This post is licensed under CC BY 4.0 by the author.