민여위-

[Embedded] 개요 본문

Tech

[Embedded] 개요

꿀땡이 2021. 4. 3. 22:29
728x90
반응형

개인의 공부를 위해 작성한 게시글입니다.

조언은 언제든 환영이지만, 의미없는 비난은 삼가주세요

임베디드

- 어떤 기계 안에 '제어'를 목적으로 하는 아주 작은 컴퓨터가 달려있는 것
- 기계의 다른 부분을 위해 일하는 모든 컴퓨터
- 자신이 주인공이 되지 않음
- 극단적으로 단순한 임베디드 시스템의 경우, 운영체제가 아예 없으며 이 경우에도 하드웨어를 제어해주기 위한 소프트웨어는 필요한데, 이 소프트웨어를 보통 펌웨어(Firmware)라고 부름
- 단일 목적 컴퓨터
- 일반 컴퓨터에 비해 더 열악한 하드웨어 환경에서 더 정교하게 작동해야 함

임베디드 특징

- 프로그램 최적화 : 성능이 열악하기 때문에 가장 압축된 코드만으로 최고의 효율을 낼 수 있어야 함.
- 복잡한 알고리즘 : 마이크로프로세서에 의해 수행되는 명령은 아주 정교해야 함.
- GUI : GPS를 사용한 네비게이션이 복잡한 유저 인터페이스의 좋은 예임. 임베디드 GUI를 디자인하기위한 비주얼 빌더가 IDE별로 내장되어있음.
- 실시간 처리 지원 : 실시간으로 수행되는 것이 중요함. 만약 어떤 데이터가 데드라인 안에 준비되지 못하다면 시스템이 멈춤. 하여 많은 임베디드 시스템들은 실시간 운영체제(RTOS)를 사용함.
    RTOS(Real-Time Operating System) : 제한된 시간내에 원하는 작업을 처리하는 것을 보장하는 운영체제. 대부분 임베디드 시스템에서 사용되며, 이들은 보통 일반 PC보다 성능이 낮은 것들이 들어감. 대체로 수 밀리초, 심지어는 마이크로초 단위로 컨트롤하기 위해 쓰임.
    . Realtime vs High Performance : 만약 1초마다 끝마쳐야 하는 작업이 있다고 하면, 일반적인 PC OS를 쓰는 고성능 컴퓨터는 보통의 경우 0.1초만에 끝낼 수는 있지만 다른 프로세스에 의해서 막히면 2초, 심하면 10초도 걸릴 수 있음. 하지만 RTOS를 탑재한 기기는 평균 0.8초가 걸리더라도 어떠한 상황에서도 1초 내에 끝내는 것을 보장함.
- 멀티레이트(Multirate) : 실시간 작업은 하나만 수행되는게 아니라 여러 개가 동시에 일어나기도 함. 어떤 것들은 slow rate로, 어떤 것들은 fast rate로 수행되도록 동시에 컨트롤해야 한다. 멀티미디어를 예로 들면, 스트리밍되는 오디오 부분과 비디오 부분은 서로 rate가 다르지만, 반드시 동기화되어야 함.
- 하드웨어 지식 : 펌웨어를 포함하는 임베디드 시스템은 시스템 회로에 대한 지식이 필수적.

임베디드 시스템 개발의 일반적인 절차

- 개발환경 구축 → 부트로더 제작 및 적재 → 임베디드 OS 및 적재 → 임베디드 응용 SW 제작 → 시험
- 2000년대 중반 이후 라즈베리파이 등 리눅스를 돌릴 수 있는 하드웨어가 저렴하게 공급되면서 이런 기기에서부터 임베디드 시스템 학습을 시작하는 경우가 많음.
- 임베디드 OS 활용을 위해 리눅스 커널, Windows NT 커널 중 하나 정도 공부 필요
    . 커널(kernel) : 운영체제의 심장이자 운영체제를 규정짓는 매우 중요한 부분임. 하드웨어의 자원을 자원이 필요한 프로세스에 나눠주고, 덩달아 프로세스 제어, 메모리 제어, 프로그램이 운영체제에 요구하는 시스템 콜등을 수행하는 부분으로 운영체제 맨 하부에서 돌아감. 현재 많이 사용되고 있는 운영체제는 커널 위에 여러 가지 레이어를 올린 것. 운영체제의 정체성을 결정하기에 매우 중요함. 페도라, 우분투 등이 다 리눅스로 묶이는 것도 이들이 같은 리눅스 커널을 사용하고 있기 때문임.
    . 커널 종류 : 단일형 커널, 마이크로커널, 혼합형 커널, 엑소커널, 나노커널 등
    . 단일형 커널 : 입출력, 네트워크, 디바이스 지원 등의 운영체제에서 일어나는 모든 일들을 한 개의 커널이 다 처리하는 방식임. 속도도 빠르고 디자인도 편리하지만 잠재적 안정성 문제에 커널의 크기도 무지막지하게 커짐. 이 방식은 리눅스 커널, 보통의 유닉스 계통에서 쓰임.
    . 마이크로커널 : I/O Access, Scheduler, MMU를 포함한 시스템 콜 같은 서비스, 그리고 디바이스 관리를 제외하여 안정성을 높이고 커널 크기도 줄인 디자인 방식임. 안정성도 높고 보안도 높아지지만 전반적인 퍼포먼스는 저하됨. QNX, 지르콘, 심비안 등
    . 혼합형 커널 : 단일형 커널에 마이크로커널 디자인을 넣어만든 디자인 방식임.

임베디드 소프트웨어 구조

- 부트로더 : 하드웨어 초기화, 커널 부팅, 명령처리 등을 담당함. 목적은 리눅스 커널 부팅 이전에 미리 실행되면서 커널이 올바르게 부팅되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 리눅스 커널을 부팅시키는 것. 부트로더의 명령어는 보드마다 조금씩 다르지만 대체로 비슷함. 대개 하드웨어 제조사에서 제공함.
- 커널 : 운영체제를 이루는 핵심적 소프트웨어
    . 리눅스 커널


    . 리눅스는 커널에 대한 개별적인 설계를 통해 커널에 포함해야 할 기능을 최소화할 수 있음. 예를 들면 장치에 포함되지 않은 디바이스 드라이버는 포함하지 않을 수 있음.
    . 커널 개발 : C언어를 중심으로 어셈블리어 일부 사용
- 루트 파일 시스템
- 디바이스 드라이버
    . 문자 디바이스 : open, close, read, write 같은 시스템 콜로 구현함. 바이트 단위로 입출력한다는 점은 파일과 같으나, 문자 디바이스는 데이터 채널로서 순차적으로만 접근 가능하는 점이 파일 시스템과 다름. 블록과 네트워크는 전문적인 곳 위주로 작성되고, 실제로 일반 프로그래머가 작성하는 것은 문자 디바이스가 대부분임. 터치 스크린의 디바이스 드라이버는 이쪽에 속함.
    . 블록 디바이스
    . 네트워크 디바이스
- 하드웨어 제어 프로그래밍

728x90
반응형
Comments