전체 글

전체 글

    real banksy

    real banksy

    Wall and Piece🐭

    Kalman Filter and Sensor Fusion #1 How it work

    Kalman Filter and Sensor Fusion #1 How it work

    sensor fusion은 여러개의 센서로부터 수집된 데이터를 결합하여 보다 정확하고 신뢰할 수 있는 데이터를 생성하는 기술을 의미한다. 이 과정에서 각 센서의 장점을 최대한 사용하면서 단일 센서가 가지는 오류나 한계를 보완할 수 있다. 만약 우리가 자율 주행 로봇을 개발한다고 상상해보자. 로봇은 탐색을 위해 자신의 위치를 정확히 알아야한다. 그렇기에 로봇은 상태를 가질 필요가 있다. 상태는 무엇이든 될 수 있다. 위치나 속도 뿐아니라 탱크의 유체 양, 엔진의 온도, 터치패드의 손가락 위치 데이터도 상태가 될 수 있다. 만약 로봇이 GPS 센서에만 의존하여 이동한다면 절벽에서 추락하거나 장애물을 만날 수 있다. GPS 데이터는 10m 정도의 오차가 존재하고 위치를 완벽하게 추정하기에는 불충분하다. 시스템..

    deflate: LZ77 + Huffman coding

    허프만 코딩은 무손실 데이터 압축에 널리 사용되는 알고리즘이다. 입력 심볼에 가변 길이 코드를 할당하고 더 자주 발생하는 심볼에 더 짧은 코드를 할당하여 데이터를 효율적으로 인코딩한다.  허프만 코딩은 접두사 코드의 원칙에 따라 작동하며 여기서 어떤 코드도 다른 코드의 접두사가 되지 않도록 한다. 이를 통해 인코딩된 데이터를 명확하게 디코딩할 수 있다. 이 알고리즘은 허프만 트리라고 하는 이진 트리를 구축하는데 여기서 leaf node는 입력 기호를 나타내고 내부 노드는 병합된 기호를 나타낸다.  각 기호의 이진 인코딩은 root에서 leaf node 까지 트리를 탐색하여 결정된다.  입력 기호의 빈도에 따라 허프만 트리를 구성하고 각 기호에 대한 허프만 코드를 생성해야한다.  구조체 정의#include..

    Linux Device Driver 기초 #2 System Call 추가하기

    Linux Device Driver 기초 #2 System Call 추가하기

    운영체제의 구성: user mode와 kernel mode운영체제는 하드웨어 자원을 효율적으로 관리하고 자원에 대한 인터페이스를 제공한다. 그렇기 때문에 운영체제는 하드웨어와 어플리케이션 사이에서 동작한다. 다음은 운영체제의 기본적인 구성이다.커널은 하드웨어 자원 직접 관리하고 어플리케이션은 시스템 콜을 통해 커널에 자원을 요청한다.어플리케이션은 보통 user mode에서 동작하며 시스템 자원에 접근할 수 있는 권한이 제한되어있다. 시스템 자원에 접근할 때 어플리케이션은 시스템 콜을 통해 kernel mode로 전환된다. kernel mode에서 운영체제는 요청된 자원을 처리하고 다시 user mode로 돌아 간다.  운영체제에서 커널 모드와 사용자 모드는 시스템의 안전성을 보장하고 자원을 효율적으로 관..

    Linux Device Driver 기초 #1 Linux Build System

    Linux Device Driver 기초 #1 Linux Build System

    Linux 개발 환경 이해 컴파일러: C/C++ 같은 소스 코드를 타겟 아키텍처에 맞는 바이너리로 변환링커: 여러 개의 오브젝트 파일을 하나의 실행 파일로 결합어셈블러: 어셈블리 코드를 기계어로 변환라이브러리: 프로그램 실행 시 필요한 기본 함수들을 제공 리눅스를 빌드하는 과정은 간단하게 다음과 같다.1. buildroot를 사용하여 rootfs을 빌드한다.2. linux kernel 최신 코드를 다운받아 빌드한다.3. 이 두가지를 사용하여 qemu에서 가상의 머신을 부팅한다. Rootfs 빌드Buildroot는 임베디드 리눅스 시스템을 위한 경량화된 루트 파일 시스템(root filesystem), 커널 및 부트로더를 쉽게 빌드할 수 있는 도구이다.# Git 설치 (필요한 경우)sudo apt-get ..

    TCP/IP Stack 개발 #1 Ethernet & ARP

    TCP/IP Stack 개발 #1 Ethernet & ARP

    TCP/IP stack을 개발하는 것은 어려운 작업일 수 있으나 핵심사양은 비교적 간결하다.중요한 부분은 TCP header 파싱, 상태 머신, 혼잡 제어, 재전송 시간 초과 계산이다. 가장 일반적인 Layer2와 Layer3 프로토콜인 Ethernet과 IP는 각각 TCP의 복잡성에 비하면 간단하다.  TUN/TAP 장치리눅스 TAP 장치를 이용하여 리눅스 커널에서 저수준 네트워크 트래픽을 가로챌 수 있다. TUN/TAP 장치는 일반적으로 User Space application이 각각 L3/L2 트래픽을 조작하는데 사용된다. 인기있는 예로는 패킷을 다른 패킷의 페이로드 내부에 래핑하는 터널링이 있다.  TUN/TAP 장치의 장점은 User Space 프로그램에서 설정이 쉽고 OpenVPN 과 같은 다..

    [C/C++] epoll

    Epollepoll은 select의 단점을 보완하여 사용할 수 있도록 만든 I/O 통지 모델이다. 파일 디스크립터를 사용자가 아닌 커널이 관리하며 그만큼 cpu 는 계속해서 파일 디스크립터의 상태 변화를 감시할 필요가 있다. 즉 select 처럼 어느 파일 디스크립터에 이벤트가 발생하였는지 찾기 위해 전체 파일디스크립터에 대해서 순차 검색을 위한 FD_ISSET 루프를 돌려야 하지만 Epoll의 경우 이벤트가 발생한 파일 디스크립터들만 구조체 배열을 통해 넘겨주므로 메모리 카피에 대한 비용이 줄어든다. Epoll의 주요기능- non block I/O 지: epoll은 non block 모드로 파일 디스크립터를 처리할 수 있다.- 높은 성능: 파일 디스크립터 집합을 다룰 때 매우 효율적이다.- Edge T..

    도커 커널 디버깅 #1

    도커 커널 디버깅 #1

    컨테이너는 실제로 개별적인 컨셉이 아닌 리눅스의 cgroup, namespace등의 결합체이다.보통의 hypervisor는 os 나 커널 기반으로 올라가지만 컨테이너는 파일 시스템의 가상화로 호스트의 커널을 공유한다. cgroup(control group)은 프로세스들이 사용하는 시스템 자원을 수집, 제한한다.namespace는 리눅스 커널에서 프로세스 자원을 격리한다.  도커 컨테이너 생성 시 system call 분석strace를 이용하여 컨테이너 생성시 containerd(도커 런타임)의 프로세스 추적$ strace -f -p `pidof containerd` -o strace_log$ docker run -itd --name busybox_1 --rm busybox 1. containerd-shi..

    KVM 가상화 환경 구성

    KVM 가상화 환경 구성

    커널 기반 가상 머신(KVM)은 물리적 Linux 시스템에 설치하여 가상 머신을 생성할 수 있는 소프트웨어 기능이다. 가상 머신은 물리적 시스템과 CPU 사이클, 네트워크 대역폭 및 메모리와 같은 리소스를 공유한다. KVM은 Linux에서 가상 머신에 대한 네이티브 지원을 제공하는 Linux 운영 체제 구성 요소이다.  KVM 설치 사전 환경 구성Lab SetupManufacturer: eSlim KoreaOperating System: CentOS Linux 7 (Core)processor-version: Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHzKernel: Linux 3.10.0-1160.el7.x86_64 사전 환경 체크1. Processor 가상화 지원 활성화 확..