[yummyHitOS] 26 day (2017.08.16)
호에에.. 이게 얼마만입니까!! 새해 복 많이 받으세요 횐님덜!! 올 해는 황금 돼지세기라고 함니당!!
말 않해도 돼지? 외않되!? 어떡해 그럴수가 잇지?! 꺄핳하하하핳 죄송함니다... 넘 하이텐션인가욥 히히 올만이라 반가워서욤 >_<
퇴사하고 나니 몸이 병나서 쿨럭... 은 변명이구욤 ㅜㅜ 석사를 준비하려 하는데 토익을 해야해서... 넘나 하기 싫어서 빈둥대고 있슴니다 ㅜㅜ 컴퓨터는 뭘 하려 하면 다 초장에 막혀버리구... 뭔가 다 꼬이고있는 것 같은 느낌적인 Feeling 이에욤 ㅜㅜ힝
니냐니냐뇨~~ 이거 몇번봐도 재밌는 영상 중 하나예욤!! 히히
오늘은 시리얼 포트를 통한 통신을 시도하는 챕터예욥!! 이를 통해 파일 전송을 할 수가 있대요!! 오오오오 그럼 이제 나도 OS에 모듈 올리고 본격적으로 파일시스템을 껍데기뿐이 아닌 논리적으로 구현할 수 있는 거신갑!! 김칫국 드링킹 원샷!
처음 28장을 딱! 피면 "데이터 송수신" 이라는 개념이 나와욥! 횐님덜은 다들 똑똑하셔서 "아~ 데이터 송수신 그 패킷가지고 데이터 넘기고 하는거 누가몰라~" 라고 생각하시겠죠!? 야미는 똥멍충이라서요 ㅜㅜ 이것조차 하나하나 짚고 넘어가는 성격이랍니닷!!
Data transmission
Data transmission(데이터 송수신)이란 information(흔히 말하는 data)을 물리적인 선(cable)이나 wireless conductor(선 없는 파장 통신)에서 digital bit stream(디지털로 된 bit 흐름) 또는 digitized analog signal(디지털화 된 아날로그 신호)을 통해 채널 통신하는 것을 의미합니다.
아흑 요즘 이상한 버릇이 생겼어욥.. 회사에서 생긴 버릇인데 영어를 섞어서 쓰는 버릇이욤 ㅜㅜ 저의 멋쟁이 사수님이 그렇게 사용하셔서 닮아버렸네욥.. 히히 야미는 환경에 아주 잘 적응하다 못해 동화되는 성향이 있거든뇸!!
즉, source 가 있고 destination 이 있을 때, 서로 채널을 맺고 그 채널을 통해 디지털로 된 bit를 통신하는 것이며, 그 채널은 cable 또는 wireless 통신으로 연결되어있는 것이죠!
머릿속으로 상상하면 "아 출발지에서 목적지로 패킷을 보내니까 서로 통신을 할 수 있는 환경에서 데이터를 보내는 것을 의미하겠지!" 가 되는데 이게 말로 표현하기 참 어렵네욥... 역시 세상에 설명은 그림이 최곰니다 따봉킹왕짱~
telecommunication
원격 통신(telecommunication)에는 두 가지 방법이 있는데, 하나는 우리가 오늘 구현할 serial communication 이고, 다른 하나는 parallel communication 이예욤!! 두 가지를 구분할 아주 조은 사진이 있슴니다! 짜란!
바로바로 세상의 모든 것이 있는 백과사전인 위키백갓님에게 올라와있는 사진이에욤!! 사진만 봐도 두 가지의 차이점이 뙇 하고 보이시지 않나욥!? 히히
꼭 그림을 보면 flip-flop 이 떠오르시지 않으세욤!? 저희 예전에 했던 SR래치 회로같은거욥!! 네에..? 기억 안나신다구여!? 그 재밌는 플립플롭 디코더 인코더 카르노맵 부울대수가 나오는 논리회로를 기억못하신다구욧!?!? 뿌에에엥
(기억 안나시는 분께서는 14일차를 스리슬쩌억 훑어보고 오시면 댐니다!!)
위 사진을 보았을 때, Parallel communication 의 경우 위부터 아래로 MSB - LSB 로 구성되어있네욥! MSB 는 Most Signification Bit 의 준말로, 가장 좌측의 비트를 의미해요! 그렇다면 LSB 는 당연히 Least Signification Bit 를 의미하겠죠!? 가장 우측일 것이구여!
예를 들어 0b10101010 이렇게 8bit가 존재할 때, 가장 좌측의 1 이 MSB, 가장 우측의 0 이 LSB 가 되는 것이죠!
이렇게 1byte 를 전송하게 되는검니다! Serial communication 의 경우 좌측부터 우측으로 전송하니 더욱 보기 편하네욤! 뭔가 느낌상 Parallel communication 이 대량의 데이터 처리에 효율적일 것 같고(부하가 덜 걸릴 것이니), Serial communication 이 하나를 완벽히 전송하는데 안성맞춤일 것 같지 않나욤!?
영어를 계속 쓰고있는데, 한글(정확히는 한자..)로 말하자면 병렬 통신과 직렬 통신이죠! 이과를 나오셨다면 직렬과 병렬을 아실테닙.. 모르신다면 간단하게 설명드려서 직렬은 일직선 상(같은 선 상)이고 병렬은 같은 선 상에 있을 것을 여러 갈래의 선으로 나눈 것이예요!
전구를 예로 들어서, 바깥에서 100V 라는 전압이 들어왔을 때 전구 10개가 나란히 일직선 상으로 있으면 10개가 100V를 나누어 받아서 각각 10V 씩 밝혀지게 됩니다! 병렬은 100V 라는 전압이 10개에 똑같이 나뉘어 뿌려지기 때문에 모든 전구가 100V를 가지게 되구요!
전구로 생각하면 병렬이 넘나리 좋아보이네욥... 그럼 이번엔 10V 짜리 건전지를 직렬/병렬 연결했을 때 전구의 밝기를 알아보면(아니 갑자기 물리를 하고있네염 요고까지 하고 휘리릭 넘어가버릴게욥!!), 전구 1개에 10V 짜리 건전지 10개를 직렬로 연결했을 때, 전구에게 가는 것은 100V가 되겠죠!?(참 현재 전구/건전지 설명은 모든 저항이 없다는 가정이에욤 ㅜㅜ 태클들어올까바 무섭따... 물리 조아는 했으나 다 까머근.. 힝) 그럼 병렬로 연결하면!? 전구에게 가는 전압은 10V가 되어요! 대신 건전지들의 수명이 길어지구요!
오홍 상황에 따라 필요한 것을 사용하라는 의미같군뇸 히히 다시 본론으로 돌아갑씨다!!
한 번 다른 그림을 통해서 완벽히 이해해볼까욥!?
tx / rx
tx 는 transmit, rx 는 receive 를 의미해욥! 'x' 는 무엇이냐구용? 참 재미난 이야기가 있어욥! X라는 문자가 들어가는 경우가 UTP 와 같은 twisted cable 에서 사용하는 cross 라는 의미의 X 도 있고, GUI 에서 사용되는 X-windows 와 같이 X11 을 의미할 경우도 있고, mailbox exchange 에서의 MX 도 있고.. 참 다양한 의미의 X 가 있는데욥!! 여기서 나오는 TX/RX 의 경우엔 의미가 없어요!! T/R 이라고 하기엔 넘나리 이상해서 그런건갑... padding 시킨 것처럼 X 를 붙였다고 생각하시면 댐니닷!!
현재 TX 에서 RX 로 보내는 것인데, 아까 MSB 가 가장 좌측, LSB 가 가장 우측이라고 했잖아요?! 그럼 위 패킷의 경우 0b11001010 이니 0b1100 0b1010 --> 0xCA 가 되어야하나욤?! 그런데 ASCII 테이블에선 0x7F 가 마지막인디!? 너는 무엇이닙!!
그것이아니라 현재 보내는 측이 좌측에 있으므로 MSB는 RX에 닿는 첫번째 비트가 되어욤! 즉 위 그림에서는 MSB 가 가장 우측의 0, LSB 가 가장 좌측의 1 이 되는 것이죠! 0b01010011 이 되어서 0b0101 0b0011 --> 0x53 이므로 ASCII 문자로 S 가 되는 것이예욤!!
역시 암기는 위험한것임미다 ㅜㅜ 무조건 MSB 는 가장 좌측, LSB 는 가장 우측이라고 암기해버리시면 이런데서 들통나부러욧!! 도착지에 가장 가까운 비트가 MSB, 출발지에 가장 가까운 비트가 LSB 인 것임미다! 히히
이정도면 기본적인 원격 통신의 구조를 이해하셨을라나욥!? 자 이제 첫 페이지의 첫 문단을 지나가보겠슴니다!! 데이터 송수신으로 시작하여.. 시리얼 통신까지 봐버리기~
다음 문단을 보니 QEMU 가 딱 나오는데 흑흑 저 잠시 쉬어가는 것처럼 분풀이좀 하구 갈래욥... 그게 있잖아요!! 커널 모듈 프로그래밍하려고 열심히 공부하다가 현재의 커널에서는 찾을 수 없는 sys_call_table 때문에욤!! 분명히 extern 할 주소는 찾았는데, 그 주소는 보호영역에 존재해서 이용할 수가 없어요!! 그렇다면 환경을 32비트로 바꾸어야 하는걸까 싶기도 하고... 그러다가 문득 찾은 것이 예전 버전인 커널 2.4.X 버전이 담긴 Ubuntu 6.04 버전!!
얏호우! 다운로드 받자~! 다운로드 완료 후 패러럴즈 가상머신에 올렸더니 오잉?! 님외않되.. ㅜㅜㅜ 아무래도 패러럴즈 버전도 올라가면서 예전 가상머신과 호환이 안되는 것 같아욤... 그래서 열심히 생각해보다가... 제가 맥북에 뭘 설치하는걸 좋아하지 않거든욥 ㅜㅜ 깔려있는 Qemu 가 딱 생각났지 뭐예욤!! 바로 하드디스크 이미지 생성해서 우분투 iso 를 넣어 설치를 딱!! 설치가 아주 깔끔하게 잘 되었슴니다 쨕쨕쨕~~
흑흑 그런데 예상치 못한 문제가 발생했어욧... Qemu network 세팅 어떻게함니까!? 예!? tuntap 이요!? 아아 설치하기 싫었지만 그는 강력하다고 함니다... 그래서 tuntap 을 설치해서 virtio bridge 모드를 뙇!! 하는데 님은 또 외않되... ㅜㅜ후엉 왠지 제 느낌상으로 tuntap 이 2015년 1월 15일에 마지막 업데이트가 있었는데, 현재 맥OS는 15년도 시에라를 지나 모하비까지 왔잖아욤?! 가상 bridge NIC 는 생성되었지만 통신연동이 되지 않는다고 한답...
결국 못하고 있는 중임니당 ㅜㅜ 초장에 말씀드린 것 처럼 뭘 하려고 하는데 자꾸 처음부터 막혀서 느낌이 안좋다고 한 그것이에욥 ㅜㅜ sys_call_table 부터 저를 괴롭히더니 결국 Qemu 가 또 말썽을..! 에전에 버전 문제때문에 1주일을 밤새게한 그놈의 Qemu가 또!! 힝...
하 이제 분풀이가 조금 되네욤 이히히 여러분 삽질은 재밌슴니다 후욱,, 후욱,,
이제 눈물을 훔치고 책으로 돌아가봅씨다!! 아 이 왠지 같은 패턴 익숙한 말 "책으로 돌아가봅씨다" ㅋㅋㅋㅋ갑자기 끝내버릴 것 같지 않나욥?!
갓마구이 한승훈 선생님께서 항상 설명을 잘해주셔서ㅜㅜ "일반적으로 시리얼 통신은 가능하긴 한데, 메모리에 적재시키거나 순차적으로 디스크에 써야해서 비효율적이므로 파일시스템을 이용한다" 라고 적어주셨네욤!! 전혀 덧붙일 말이 없는 완벽한 말씀!! 파일시스템 이야기가 나왔으니 최근에 sunyzero 라는 닉네임을 사용하시는 프로그래머 김선영님의 페이스북과 블로그에 올라온 내용을 첨부파일로 올리겠슴니다!!
(출처: https://sunyzero.tistory.com)
정말 좋은 글임니다!! 저도 이제 막 걸음마를 시작하려는 컴린이 리눅스 프로그래머로써 정말정말 존경함니다!!
이제서야 첫 페이지를 떼네욥 히히 다음 페이지를 보니 RS-232 규약이 뙇 먼저 보이는군뇸!! RS-232 는 직렬 방식의 인터페이스(포트)라고 함니다! 즉 시리얼 포트가 되겠네욤!!
이렇게 생겼다고 함니다!! 보신 적 있으신가욤!? 저는 이런 케이블쪽으로 넘나리 구분을 잘 못하는뎁... 왠지 회사에서 써봤던 것 같아욤 유닉스 장비와 모니터를 연결할 때 사용한 컨버터에 썼던것 같거든욤!! 멀티케이블이라 ps/2 핀도 달려있고 그랬어욥!! 그게 맞나는 모르겠네용 ㅜㅜ
RS-232
무조건 위 그림과 같은 것이 아니라, RS-232 규약을 따르는 하드웨어를 총칭한다고 해요! 이더넷, IEEE 1394, USB와 같은 인터페이스 모두요! 이더넷은 보통 RJ45 케이블이라고 하고, IEEE 1394 는 애플사의 썬더볼트 초기버전인 것 같아욤! 빠이어 와이어라고 하더라구욥! USB는 다들 아시다시피 생긴거구욤!!
대표적인 이 세 가지 케이블은 제가 설명드리지 않아도... 음 저와같은 귀차니즘을 위해 참고 위키백갓을 링크로 드리겠슴니다!!
(Ethernet: https://en.wikipedia.org/wiki/Ethernet)
(IEEE 1394: https://en.wikipedia.org/wiki/IEEE_1394)
(USB: https://en.wikipedia.org/wiki/USB)
병렬 포트는 USB 가 대중화 되어버려서 사용하지 않는다고 해욥! legacy port 라고 한다는군뇸!! 기존에는 주변기기들을 연결하기 위해 사용되었는데, 범용 직렬 버스라는 이름부터 범용스러운 USB가 이겨부러따~ 그것이죠!!
RS-232 규약이 DTE - DCE 간 데이터 송수신 방법을 정의한 것이라고 하네욥! DTE, DCE 설명은 책에 넘나리 잘되어있으니 그것만으로 충분함니다! 한 가지 덧붙이자면, 네트워크쪽을 공부하시다 보면 라우터 - 스위치 - 호스트 간 연결을 DTC - DCE 및 bandwidth, baud rate 설정을 어떻게 하느냐 공부를 하실 수 있을거예욥!! 최소한 packet tracer 에도 되어있으니 궁금하신 분들은 한 번 해보세욤!! 그리 어렵지 않고 금방 이해되실 검니답!!
이제 책을 보니 더 이상 포스팅 할 내용은 없어보이네욤!! 완벽 그 자체인 책이 있기 때문이죠!! 처음 데이터 송수신을 하기 전 먼저 데이터 크기를 보내서 얼만큼 받을 지 사이즈를 받은 후 분할해서 받는 형식으로 되어있네욤!! TCP 통신에서의 MTU Size 같은 느낌일까요? ㅎㅎㅎ
오늘도 오랜만에 포스팅 해서 죄송해욥 ㅜㅜ 자주 해야하는딤 흑흑 한 번 시작하려면 5시간은 기본으로 잡아야하니.. 조금씩 슬럼프를 풀어가면서 대학원도 준비 하고! 사우나도 가고! 다해야죱! 캬핳하핳
그럼 이제 다음 포스팅까지 안뇽!! 다들 다시 한 번 새해 복 많이 받으세용!!!
꿀렁꿀렁~~ 히히
Check out the yummyhit’s website for more info on who am i. If you have questions, you can ask them on E-mail.
댓글남기기