티스토리 뷰

Study/OS

[OS] Mint64OS 28절 Serial Communication.

생각많은 소심남 2013. 2. 6. 21:08

내가 Mint64OS를 만들고 있는 것은 Bochs라는 Emulator상에 OS를 올려 놓은 일종의 Virtual Machine이다. 사실 VMWare 같은 상업용 Emulator를 써보면 알겠지만 main과 VM 사이에 장치나 데이터의 이동이 원할하게 이뤄지는 것을 알 수 있다. 사실 어떻게보면 관건은 두개의 시스템 사이에 데이터를 어떻게 하면 주고 받을 수 있을까인데, 이 책에서 쓰는 방법은 바로 Serial Port를
TCP/IP로 묶어서 자기끼리 통신하게끔 하는 것이다. 네트워크 공부를 해본 사람은 알겠지만 네트워크안에서 밖으로 나가는 실제 IP가 있는가 하면, 자기 내부에서 통신을 할 수 있는 예약된 IP가 존재한다. 보통 이걸 LoopBack이라고 한다. 그래서 여기서도 LoopBack을 하면서 특정 포트를 할당해서 서로 통신하는 것을 예제로 소개했다.

 보통 Serial Communication은 Recommanded Standard -232 Protocol(RS-232) 에 맞춰서 외부와 데이터를 주고받을 수 있는 하나의 규약이다. 다르게 이걸 직렬 통신이라고 하고, 보통은 Data Terminal Equipment와 Data-Circuit Terminal Equipment 간의 통신 방법이라는 정의를 내릴 수 있다. 예전에는 이 규약이 표준이었기 때문에 이 규약을 채용한 기기들이 많이 나왔지만 요새는 USB나 ThunderBolt같은 새로운 기술들이 나오면서 점차 사라지고 있는 상황이다. 그래도 구형기기를 커버할 수 있는 범용성때문에 단기간에 없어지지는 않을 듯 하다.(보통 아두이노나 AVR처럼 Chip상에 프로그램을 올리는 형식은 아직도 시리얼 통신을 많이 사용한다,)



 보통 Serial 통신의 Serial은 이 통신을 통해서 주고 받는 패킷의 배치 형태에서 나온다. 직렬이라는 말 자체에서 오듯 패킷이 순차적으로 전송되는 방식이며, 따라서 전체적인 정보를 얻기에는 시간이 소요된다. 다만 통신을 위한 연결 회선이 많이 필요없기 때문에 간단하게 통신을 할 수 있다는 장점이 있다. 이와 반대의 개념이 바로 Parallel 통신이다. 이때는 병렬이라는 말에서 오듯, 회선 여러개를 통해서 데이터를 한꺼번에 전송할 수 있다. 과거에는 이 포트에서 주로 프린터를 연결할 때 많이 쓰였다.



 통신에서 가장 중요한 관점은 바로 신뢰성이라는 것이다. 아무래도 공간적인 차이에서 원본과 전송된 데이터 사이에 차이가 없어야 가장 이상적인 통신이 될 수 있다. 물론 이상적일 뿐 주변의 간섭으로 인해서 노이즈가 발생하기에 최대한 이것들을 보정하는 방법을 찾아야 한다. 그래서 여기에 적용되는 개념이 Parity 라는 것이다. 그래서 Parity간의 비교를 통해서 정보과 신뢰할 수 있는 것인지를 검증하는 부분이 필요하다. 


책에서는 QEMU에서 Server를 생성한 후에 main에서 통신 프로그램을 켜고 그걸 통해서 메세지를 보내는 예제를 보여줬다. 내가 하고 있는 bochs에서는 과정이 비슷하긴 한데, 약간 책에서 소개해 준 방향과 달라서 수정이 필요했다. 아무튼 결과가 나왔다. 



위 사진과 같은 이미지를 보통 ASCII Art라고 한다. ASCII 코드를 통해서 이미지를 생성하는데 따로 Generator가 있어서 이미지를 집어넣으면 위와 같은 텍스트로 바꿔준다.

전체적으론 루프백의 특수 포트를 사용했기 때문에 Main의 통신 프로그램이 포트를 생성한 후 bochs가 작동되게 되었다.


Port가 4444번으로 된 상태로 루프백통신이 형성되어야 Bochs에서 부팅이 된다.



보다시피 인식되어 있는 hdd에는 파일이 아무것도 없는 상태이다. 정상적인 통신을 마친 후에는 당연히 main에 있던 text.txt 파일이 이 hdd에 저장되어야 한다.

이상태에서 Bochs에서 DownLoad 대기 상태를 만들어 놓는다.



이후에 통신 프로그램을 통해서 test.txt를 시리얼 통신을 통해서 전달하는 과정을 거치게 된다.


같은 Byte가 찍힌 것으로 보아 제대로 전송된 것을 알 수 있다. 정상적으로 전송이 되었는지는 파일의 내용물을 확인해보면 된다.



이런식으로 파일 생성되고 아까 eclipse 상에서 만든 텍스트 파일도 정상적으로 인식하는 것을 볼 수 있다.



댓글