본문 바로가기

프로그래밍(TA, AA)/C C++

(23)
[C/C++] CRC32 란? CRC32란? 여러 용도가 있지만, PC에서는 주로, 파일의 에러를 체크하는데 CRC가 사용됩니다. 즉 파일이 깨졌는지 아닌지 알아보는데 사용하는 것입니다. 예를 들어, 어떤 홈페이지에서 100기가짜리 파일을 며칠 걸려서 다운로드 받았는데, 그 파일이 깨지지 않고 정확하게 전송되었는지 알려면 어떻게 해야할가요. 그 파일을 다시 한 번 더 다운로드 받아서, 전에 받은 파일과 한 글자씩 비교해 보아야할 것입니다. 그러나 그러면 같은 파일을 2번 다운받아야 하니 아주 비효율적입니다. 그런데 만약 파일의 CRC값을 알게된다면 간단히 해결됩니다. 운영자가 "그 파일의 CRC 값은 D01B0B02다" 라고 알려주게되면, 다운받은 파일의 CRC값을 계산하여, D01B0B02라는 값이 나오면 파일이 100% 정확히 받..
[C] 임베디드 시스템 간단히 훑기 코드를 더 작고 빠르게 만드는 모든 개발자들의 염원일 것입니다. 이러한 요구는 PC 환경에서보다 임베디드 환경에서 더 간절한 것입니다. 메모리나 대용량 보조 기억장치들의 가격이 내려가고 프로세서의 속도가 나날이 발전하는 현 PC의 상황에서 최적화는 어찌보면 귀찮은 일에 불과할지도 모르지만, 크기와 리소스의 제약을 받는 임베디드 환경에서는 중요한 사안입니다. 최적화 방법은 프로세서에 따라서 달라질 수 있습니다. 특정 프로세스에서는 빠른 속도를 제공하는 방법에 다른 프로세서에서는 성능을 떨어뜨리는 방법이 될 수 있습니다. 최적화는 간단한 문제가 아닙니다. 최적화를 어설프게 시도했다가는 오히려 낭패를 볼 수도 있습니다. 부작용 없이 최적화를 적용하기 위해서는 개발에 사용되는 프로그래밍 언어와 툴, 그리고 개발..
[시스템프로그래밍] 디버깅 디버깅은 버그를 없앤다는 의미로 벌레 중에서도 해충을 없애는 것을 뜻합니다. 이렇게 벌레를 없애는 것이 프로그램의 오류를 제거하는 것과 뜻이 같아진 이유는 다음과 같습니다. 초창기 컴퓨터는 지금처럼 작지 않았습니다. 지금은 초고밀도 칩을 사용하기 때문에 크기를 줄일 수 있었지만 이런 기술이 없었던 초창기에는 진공관을 사용하여 컴퓨터를 만들었습니다. 그래서 컴퓨터 한대의 크기가 웬만한 건물 크기와 같았는데 이 속에는 엄청난 양의 진공관이 사용되었습니다. 진공관의 수명이 그렇게 길지 않았기 때문에 컴퓨터 내부를 돌아다니며 진공관만 교체하는 사람도 있었습니다. 이때 이 사람들의 주요 임무 중 하나가 진공관 사이에 타죽은 나방같은 벌레를 제거하는 작업이었습니다. 이때부터 사용된 컴퓨터 용어가 시스템의 오류를 만..
[C C++] 리틀엔디안과 빅엔디안의 차이점 Big Endian과 Little Endian은 컴퓨터 메모리에 저장된 바이트들의 순서를 설명하는 용어입니다. 이 용어는 걸리버 여행기라는 고전 소설에서 처음 나요게 되었는데, 달걀의 뾰족한 쪽을 먼저 깨먹을 것을 주장하는 무리의 "Little Endian"과 넓은 쪽 부부니을 먼저 깨먹을 것을 주장하는 무리의 "Big Endian"의 싸움. 즉, 사소한 것들로 싸우는 인간들의 모습을 풍자한 이야기에서 나오게 됩니다. 현대에 그 용어는 Danny Cohen이라는 사람의 논문 중 Memory Order라는 섹션에서 인용하게되었고, 이논문에는 CPU가 메모리에 데이터를 저장할 때 어느 순서로 저장하는가에 대해 설명했는데, 왼쪽에서 오른쪽으로 저장하는 것을 "Big Endian", 반대로 오른쪽에서 왼쪽을 저..
[시스템프로그래밍] IPC D-Bus란? D-Bus란? D-Bus란 프로세스간 통신(IPC)를 위한 시스템입니다. 오픈 소스 소프트웨어로써 리눅스 데스크톱의 프로세스 통신을 위한 수단으로 널리 사용되고 있습니다. 특히 KDE와 Gnome같은 데스크탑 환경에서 중요하게 사용합니다. 구조적으로는 몇가지 계층이 있습니다. - libdbus: Libdbus는 응용 프로그램간의 통신을 가능하게 하는 라이브러리입니다. - message bus damon: DBUS데몬은 실행 파일이며 libdbus를 기반으로 하여 제작되었으며 여러 개의 응용프로그램에서 연결이 가능합니다. 데몬은 버스에 연결된 하나 이상의 프로세스에 라우팅 및 루트 메시지를 처리합니다. - wrapper library 또는 binding: libdbus-glib, libdbus-qt 등 특..