[AIoT] Embedded System과 프로그래밍 기초

    출처: https://www.rs-online.com/designspark/what-is-an-embedded-system

    Embedded System

    Embedded System은 기계나 기타 제어가 필요한 시스템에 대해
    제어를 위한 특정 기능을 수행하는 컴퓨터 시스템으로 장치 내에 존재하는 전자 시스템이다.
    (목적에 맞게 제작된 보드 형태의 시스템)

    컴퓨터와 Embedded의 비교 및 특징

    먼저 일반적으로 사용하는 컴퓨터와 비교를 해볼게요.

    항목 컴퓨터 Embedded
    프로세서 고성능 탑재
    (X86 계열)
    고성능 탑재
    (ARM 계열)
    메모리 대용량 메모리 대용량 메모리
    보조 기억 장치 HDD, ODD, DVD 거의 지원하지 않음
    주변 장치 모니터, USB 등 지원함
    입력 장치 키보드, 마우스 등 터치 입력이 대부분

     

    특징

    Embedded HW와 SW의 특징을 더 알아보죠.

    특정한 목적과 기능에 맞게 HW부터 구성하기 때문에 개발의 과정이 복잡하고 어려워요.
    그리고 보드형태로 구성을 맞추기 때문에 성능이나 기능의 추가를 위한 장치 변경도 어렵죠.
    1년 365일 쉬지 않고 동작하는 경우도 많습니다. 하지만 현장에 있기 때문에 유지보수는 쉽지 않죠.

    ATM을 생각해볼까요? 돈을 인출하는 기계에 블루스크린이 뜬다면?? 😱
    신뢰도가 바닥이겠죠. 컴퓨터와 신뢰도에 있어 기준이 다른 System입니다.

     

    Embedded OS

    컴퓨터 시스템의 구성은 크게 "HW, OS, Application, User"로 나눌 수 있습니다.
    그중 OS는 Operating System의 약자입니다. System 구성에 있어 매우 중요한 요소죠.
    OS의 주요 기능은 "I/O 자원 관리", "메모리 관리", "CPU 스케쥴링"이 있죠.
    대표적인 OS는 Windows, iOS, Linux 등이 있습니다.

    OS를 좀 더 세부적으로 분류해볼까요?

    • Non-MMU OS: uKernel, uCOS, pSOS, Windriver
    • MMU OS: UNIX, Linux, Windows, iOS, Chrome, QnX
    • Real-Time OS

     Android는 Linux 기반의 Phone/Embedded SW Platform이자 OS입니다.

    출처: https://jodev.kr/entry/ANDROID-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%EB%9E%80

     


    프로그래밍 기초

    Process Management

    메모리 맵

    출처: https://developerhenrycho.tistory.com/12

    Embedded System에서는 전력, 메모리 등 환경을 고려해야 하기 때문에 메모리 맵을 고려하는 게 중요합니다.
    일반적인 컴퓨터의 SW와는 다르죠. 😥
    그림을 기준으로 아래쪽으로 갈수록 Low Address, 위쪽이 High Address입니다.
    Low Address는 구동에 필수적인 요소들이, High Address는 Application관련 요소들이 위치합니다.

    • Text Segment (Code Section): 프로그램 Code가 저장되는 메모리 공간입니다.
    • Data Section: 전역 변수, 정적 변수, 배열 구조체가 위치합니다.
    • BSS(Block Started by Symbol): 초기화되지 않은 변수들을 저장합니다.(구동에 필수인 변수들)
    • Heap: 프로그램이 실행될 때 필요한 메모리를 동적으로 할당합니다. (.malloc() 함수를 이용)
    • Stack: 프로그램이 실행하면서 사용하는 저장공간입니다.

     

    Process의 상태 변화

    출처: https://getchan.github.io/cs/OS_4/

    위 그림은 Process의 생성과 소멸에 대한 상태변화도입니다.
    여러 Process가 작동 중일 때, 모든 Process가 동시에 system을 잡고 있을 수 없기 때문에 필요한 개념이죠.
    이때, I/O 관련해서는 waiting state가 있죠?
    일반적인 Process와 비교하면 구동에 시간이 오래 걸려서 CPU를 바로 할당하면 낭비가 생기기 때문에 생긴 State입니다.

    여러 Process가 실행되기를 기다리는 중에 어떤 Process에게 CPU를 할당할지 정하는 것이 Scheduling입니다.
    이때는 Process의 우선순위에 따라 작동하게 해야 효율적이고, 안정적인 동작이 가능합니다. 👍

    ⚠️참고⚠️
    - Thread와 Process에 대한 비교
       OS카테고리의 "Process(프로세스)와 Thread(스레드)의 개념 & 차이(링크)"에서 다뤘으니 참고하시면 도움이 될 거예요.
    - Context Switching
       OS카테고리의 "Context Switching 이란?(링크)"에서 다뤘으니 참고하시면 도움이 될 거예요.

    출처: https://www.javamex.com/tutorials/threads/how_threads_work.shtml

     

    SDK (Software Development Kit)

    시스템에서 정해진 규칙, 함수 등을 모아서 개발자들에게 제공되는 API, IDE, 샘플 코드 등을 모아놓은 라이브러리입니다.

    라이브러리

    그럼 라이브러리에는 어떤 것들이 있을까요?

    • Static Library
      • 컴파일할 때 실행파일에 Library가 포함됩니다.
      • Library가 바뀌면 실행파일을 다시 컴파일해야 한다는 의미기도 하죠.
    • Shared Library
      • 프로그램이 실행될 때 Library도 함께 로딩됩니다.
      • 동일한 Library를 사용하는 다른 실행파일이 있다면 중복으로 로딩할 필요는 없어요.
      • Library가 변경되어도 API가 바뀌지 않으면 다시 컴파일할 필요도 없습니다!
    • Dymanic Library
      • Shared Library와 같지만 Library를 사용할 때 로딩된다는 점이 다릅니다.
      • Windows 기준으로 보면 확장자는 ".dll"입니다.

     


    여기까지 "Embedded System과 프로그래밍 기초"에 대해 알아봤어요.
    글이 도움이 되셨다면 공감 버튼 눌러주세요. 😊

    댓글

    Designed by JB FACTORY