M Rubyc: 소형 장치를 위한 루비
발표자는 M Rubyc가 웹 애플리케이션이나 서버와 같은 풍부한 환경에서 사용되는 일반 루비와 달리, 메모리와 처리 능력이 제한적인 IoT 장치 및 소형 마이크로컨트롤러를 위해 설계되었다고 설명합니다. * 메모리 사용량 비교: 일반 루비는 1MB 이상, M Ruby는 약 120KB, M Rubyc는 약 20KB로 극도로 작습니다. * 타겟 장치: M Rubyc는 원칩 마이크로컨트롤러(CPU, 메모리, I/O가 단일 칩에 통합)를 대상으로 하며, 저전력, 저비용, 장시간 동작에 최적화되어 있습니다. * 주요 기능: 운영체제가 없는 베어메탈 환경에서 메모리 관리, 전력 관리(CPU 딥 슬립 모드), 준실시간 처리 등을 제공합니다. * 실행 환경: 개발은 PC에서 루비 코드를 작성하고, 이를 바이트코드로 컴파일한 후 마이크로컨트롤러로 전송하여 M Rubyc 가상 머신에서 실행합니다. 다양한 하드웨어에 이식성을 제공하기 위해 HAL(Hardware Abstraction Layer)을 지원합니다.
데이터 흐름 프로그래밍
데이터 흐름 프로그래밍은 노드(블록)와 와이어(연결)를 사용하여 프로그램 로직을 시각적으로 구성하는 방식입니다. * 교육적 이점: 중고등학생 교육에서 Scratch나 Blockly 같은 블록 프로그래밍과 유사하게, 시각적으로 프로그램의 동작과 로직을 이해하기 쉽습니다. * IoT에 적합성: IoT는 센싱, 처리, 액추에이션(actuation)의 연속적인 데이터 흐름으로 구성되므로, 데이터 흐름 프로그래밍이 이러한 특성을 표현하는 데 매우 적합합니다. * 마이크로컨트롤러 실행: 브라우저나 서버 환경에서 실행되는 데이터 흐름 설계를 마이크로컨트롤러에서 실행하기 위해, 데이터는 전역 큐(global queue)를 통해 노드 간에 전달됩니다. 데이터 소스 노드(inject node)가 데이터를 큐에 삽입하고, 다른 노드들이 큐에서 데이터를 가져와 처리하는 방식입니다.
M Rubyc와 데이터 흐름 프로그래밍의 통합
발표자는 데이터 흐름 설계를 M Rubyc 코드로 자동 변환하는 스크립트를 개발하여 통합을 구현했습니다.
* 변환 과정: 데이터 흐름 설계(노드 및 연결 정보)를 입력으로 받아, 실행에 필요 없는 시각적 속성(위치, 크기 등)을 제거하고 M Rubyc 코드를 생성합니다.
* 데모: 단일 코어 마이크로컨트롤러에서 두 개의 LED(녹색, 빨강)가 각각 1초 및 2.5초 간격으로 비동기적으로 점멸하는 시연을 보였습니다. 이는 sleep
명령어가 CPU를 딥 슬립 모드로 전환하고, 지정된 시간 후 깨어나 작업을 재개하는 M Rubyc의 전력 관리 기능 덕분에 가능합니다. 이 메커니즘은 비동기 실행과 저전력 소비를 동시에 달성합니다.