ThreadX

**ThreadX**（スレッドエックス）は、アメリカ合衆国カリフォルニア州サンディエゴのExpress Logic社によって開発・販売されている、高度に決定論的な組み込みリアルタイムオペレーティングシステム (RTOS)であり、主にC言語で書かれている。
Express Logic社は、2019年4月18日に非公開の買収金額でマイクロソフト社に買収された。

## 概要
ThreadXの作者(1990年のNucleus RTOSの作者でもある)はWilliam Lamieであり、Express Logic社の社長兼CEOを務めている。

ThreadXの名称は、スレッドが実行可能な要素であることと、
コンテキストスイッチ(スレッドの切り替え)を意味する「X」の文字に由来している。ThreadXは、優先度付きのプリエンプティブなスケジューリングと、高速な割り込みレスポンス、メモリー管理、スレッド間通信、排他制御、イベント通知、スレッド同期の機能を提供する。
ThreadXに特徴的な主な機能としては、preemption-threshold、
優先度継承、効率的なタイマー管理、ピコカーネル設計、event-chaining、高度なソフトウエアタイマー、コンパクトなサイズがある。ThreadXの最小サイズは、ARMのプロセッサー上で2KB程度である。

ThreadXはAMPとSMPの両方のマルチコア環境をサポートしている。モジュールを利用することで、MMUやMPUによるメモリー保護を活用して、アプリケーションスレッドを分離することも可能である。

ThreadXは、TUVとULからextensive safety certificateを与えられており、MISRA Cにも準拠している。

ThreadXは、Express Logic社のX-Ware IoTプラットフォームの基盤であり、X-Wave IoTプラットフォームは、組み込みファイルシステムサポート(FileX)、組み込みUIサポート(GUIX)、組み込みTCP/IPとクラウド接続(NetX/NetX Duo)、USBサポート(USBX)を含んでいる。ThreadXは、開発者から高い評価を得ており、非常に幅広く利用されているRTOSである。
市場調査会社であるVDC Research社によると、ThreadX RTOSは、
家電製品からネットワーク機器、SoCまで、2017年時点で62億台以上の機器で利用されている。

ThreadXは、ソースコードが提供され、ロイヤリティーフリーで利用できるマーケティングモデルで提供されている。

## サポートされたプラットフォーム

* アナログ・デバイセズ
** Blackfin
** CM4xx
** Precision Microcontrollers
** SHARC
** ULP Microcontrollers
* ARMアーキテクチャ
** ARM7
** ARM9
** ARM Cortex-A
** ARM Cortex-R
** ARM Cortex-M
** ARM Cortex-A 64-bit
** ARMv8M TrustZone
* Cadence
** Xtensa
* CEVA
** TeakLite-III
* EnSilica
** eSi-RISC
* Infineon
** XMC1000
** XMC4000
* Intel
** Nios II
** Cyclone
** Arria 10
** X86
* Microchip
** AVR32
** PIC24
** dsPIC33
** PIC32
** SAM C-V
** SAM9
** SAMA5
* MIPSアーキテクチャ
** MIPS32 4Kx
** MIPS32 14Kx
** MIPS32 24Kx
** MIPS32 34Kx
** MIPS32 74Kx
** MIPS32 1004Kx
** interAptiv
** microAptiv
** proAptiv
** M-Class
* NXP
** ColdFire+/ColdFire
** i.MX
** Kinetis
** LPC
** PowerPC
** S32
* ルネサス
** H8/300H
** RX
** RZ
** SH
** Synergy
** V850
* ST
** STM32F0
** STM32F1
** STM32F2
** STM32F3
** STM32F4
** STM32F7
** STM32L
* Silicon Labs
** Gecko 
** Giant Gecko
** Giant Gecko S1
** Happy Gecko
** Jade Gecko
** Leopard Gecko
** Pearl Gecko
** Tiny Gecko
** Wonder Gecko
** Zero Gecko
* シノプシス
** ARC 600
** ARC 700
** ARC EM
** ARC HS
* テキサス・インスツルメンツ
** C674x
** C64x+
** Hercules
** MSP430
** SimpleLink MSP432
** Sitara
** Tiva-C
* ザイリンクス
** Microblaze
** Zynq-7000
** Zynq UltraScale+

## 歴史
ThreadXは、1997年に初めて提供された。ThreadX 4は2001年に、ThreadX 5は2005年に提供が開始された。ThreadX 5が最新バージョンである。

FileX組み込みファイルシステムサポートは1999年に提供が開始された。

NetX組み込みTCP/IPネットワーキングスタックは2002年に提供が開始された。

USBX組み込みUSBサポートは2009年に提供が開始された。

ThreadX SMPは、2009年に提供が開始された。

ThreadX Modules2011年に提供が開始された。

2013年にThreadXはTUV IEC 61508 safety certificationを取得した。また、2014年にはUL 60730 certificateを取得した。

GUIX組み込みUIは2014年に提供が開始された

2017年のVDC Research社の調査によると、ThreadXは62億台以上で利用される最も広く使われるRTOSの一つである。

2019年4月18日にExpress Logic社は、非公開の買収金額でマイクロソフト社に買収された。

## 技術
ThreadXは、preemption-thresholdと呼ばれるプロプライエタリーな機能によって、優先度付きのプリエンプティブなスケジューリングアルゴリズムを実装している。Preemption-thresholdは、クリティカルセクションにおける細かな粒度と、コンテクストスイッチの削減を提供する。

ThreadXはevent chainingと呼ばれる独自の構造を提供する。これにより、アプリケーションは外部イベントで起動される全てのAPIに対してコールバック関数を登録することができる。これにより、アプリケーションはThreadX内の様々な公開されたオブジェクトに対して連結することができ、一つのスレッドが複数のオブジェクトを効果的にブロックすることができる。

ThreadXは、他にもカウンティングセマフォや優先度の継承が可能な排他制御、イベントフラグ、メッセージキュー、ソフトウエアタイマー、固定長メモリーブロック、可変長メモリーの機能を提供している。リソースをブロックするThreadXの全てのAPIは、タイムアウトを設定可能である。

ThreadXはAMPとSMPによるマルチコアサポートを提供する。アプリケーションコードの分離は、ThreadX Modulesコンポーネントにより利用可能である。

## 主なコンポーネント
ThreadX RTOSのコンポーネントは以下のようである。

# 組み込みファイルシステム
# 組み込みグラフィカルユーザーインターフェイス
# 組み込みネットワーキング
# 組み込みUSB
# Safety certification
# パッケージング

## 組み込みファイルシステム
FileXは、ThreadXの組み込みファイルシステムである。
FileXはFAT12とFAT16、FAT32、exFAT形式をサポートする。exFATはFATのファイル容量制限を4GB以上に拡張したものであり、
ビデオファイルで特に有用である。exFATを利用するには、マイクロソフト社から直接ライセンスを得る必要があるのには注意が必要である。FileXは障害許容性と、フラッシュメモリーのウェアレベリングサポートであるLevelXと呼ばれる製品を使ってNORまたはNANDフラッシュメディアを直接利用する機能も提供する。

## 組み込みグラフィカルユーザーインターフェイス
GUIXはThreadX用の組み込みUIである。GUIXはThreadXを利用した組み込みアプリケーションに2次元グラフィックスランタイム環境を提供する。GUIXは、様々な画面解像度と色深度を持つ複数のディスプレイをサポートする。多くの定義済みのウィジェットが利用可能である。GUIX Studioと呼ばれるWIndows用のWYSIWYGホストツールを利用することで、ランタイムで実行可能なGUIX用のCのコードを自動的に生成することができる。

## 組み込みネットワーキング
NetX Duoは、ThreadX用のTCP/IPシステムである。NetX Duoは、IPv4とIPv6の両方をサポートし、ARPやAutoIP、DHCP、DNS、DNS-SD、FTP、HTTP、ICMP、IGMP、mDNS、POP3、PPP、PPPoE、RARP、TFTP、SNTP、SMTP、SNMP、TELNETなどのプロトコルをサポートしている。IPレイヤーでのネットワークセキュリティーは、IPsecによって提供される。TCPまたはUDPのソケットレイヤーでのセキュリティーは、それぞれTLSとDTLSにより提供される。IoTクラウドプロトコルとしては、CoAPやMQTT、LWM2Mなどが提供される。NetXはThreadと6LoWPANもサポートする。2017年に、ThreadXとNetX Duoは、Threadの認証製品となった。

## 組み込みUSB
USBXは、ThreadXの組み込みUSBシステムである。USBXはホストとデバイスの両方をサポートする。ホストコントローラーとしては、EHCIとOHCIに加え、プロプライエタリーなUSBホストコントローラーもサポートする。USBXはOTGもサポートする。USBXはクラス等としてオーディオやASIX、CDC/ACM、CDC/ECM、DFU、GSER、HID、PIMA、プリンター、Prolific、RNDIS、ストレージをサポートする。

## Safety certification
ThreadXとFileX、NetX Duoは、IEC 61508 SIL 4とIEC 62304 Class C、ISO 26262 ASIL D、EN 50128 SW-SIL 4の各安全基準についてSGS-TUV Soarにより事前に認証済みである。

ThreadXとFileX、NetX Duoは、UL/IEC 60730とUL/IEC 60335,UL 1998についても事前に認証済みである。

ThreadXとFileX、NetX Duoは、様々な軍事企業と宇宙航空企業により、DO-178標準の認証済みでもある。wolfSSLといった著名にSSL/TLSライブラリーのサポートもある。

## パッケージ化
2017年の時点で、ThreadXはX-Ware IoTプラットフォームの一部として、全体のソースコードが付属し、ランタイムのロイヤリティーなしでパッケージ化されている。

## ThreadXを利用する製品
主要なThreadXを利用した製品として、小型のウェアラブルデバイスからHP社のプリンター、NASAのディープインパクトスペースプローブまでが挙げられる。

## 関連項目

* Intel Management Engine (ME)

## 脚注

## 外部リンク
*Express Logic, Inc.
*ThreadX Information at Express Logic