Programátoři z pekel zde za šat a stravu programují čipová pseuda. Nyní s favicon!

BareMetal OS

Nedávno mi Martin Lér poslal odkaz na BareMetal OS a i když se jedná o operační systém pro PC, tak mě ihned nadchnul. Proč?Běží jen a pouze v 64bitovém režimu.
I když se z 64bitů dělá nesmírně nafouklá bublina, protože dvakrát širší sběrnice nemohou vyrovnat mnohonásobně pitomější programátory, znamená 64bitový režim oproštění se od původní architektury PC. Registrů je najednou tolik, co na ostatních rozumných procesorech, operace jsou symetričtější a vůbec je to fajn.

Filosofie systému.
Žádné GUI, žádný multitasking a multithreading, žádné vyšší programovací jazyky. Příkazová řádka, systém umí spustit tolik tasků, kolik máte fyzických procesorových jader, je programovaný pouze v assembleru a uživateli nabízí opět programování v assembleru (případně v C). Proč? Dovolte citát z webu autorů:

Return Infinity goes back to the roots of computer programming with pure Assembly code. As we are programming at the hardware level, we can achieve a runtime speed that is not possible with higher-level languages like C/C++, VB, and Java.

Volně přeloženo: Java je pomalá obluda. Kdo programuje v assembleru, má přístup k železu a plný výkon stroje jen a jen pro sebe. Dodávám: Je pěkné, že už si toho lidé všimli.

Pěkně udělané API.
Od doby BS-DOSu se mi žádný systém z hlediska syscalů tak nelíbil, jako právě BareMetal OS. Přehledné a srozumitelné API, přesto je pokryto vše potřebné – vstup, výstup (klávesnice, monitor, filesystém, sériový port, ethernet), práce s textovými řetězci, přiřazování úloh dalším procesorům atd.

Nároky.
Pomineme-li, že chce systém pro svůj běh 64bitový procesor (deska+CPU se dneska bazarově dají sehnat do pětistovky, navíc v QEMU běží systém leckde bez dalších nákladů), vystačí si s 2MB RAM + 2MB na každé procesorové jádro. I v QEMU spuštěném na relativně pomalém Atomu je systém bleskurychlý.

BareMetal OS

V takovém systému je radost si jen tak pro zábavu něco vyzkoušet. Za pár minut jsem z dokumentace pochopil princip přiřazování úloh jednotlivým jádrům: Patřičným syscalem se do fronty zařadí adresa rutinky a systémem FIFO jsou pak úlohy distribuovány na jednotlivá jádra. První pokus (respektive druhý, po tradičním „Hello world“) je proto logicky právě o běhu na více jádrech. Patnáctkrát se rozdistribuuje na jednotlivá jádra rutinka, která nedělá nic jiného, než že zvýší hodnotu čísla uloženého v paměti o jedna. Uznávám, napočítat do patnácti je mnohem jednodušší bez použití SMP, ale pro demonstraci to myslím plně postačuje.

BareMetal OS se mi rozhodně velmi líbí a budu sledovat, co se s projektem bude dít dále.