Remember that your computer is really made of multiple computers that run bare-metal code or can have their own OSes. For example Intel CPUs have Minix running inside of them.
>> After the memory controller, bus bridges, GPUs, and DMA controller, it's probably the largest one
Probably best to distinguish between processing-heavy and throughput-heavy; apart from the GPU, all those are throughput-heavy but do very little to the data, and I think would not normally have a recognisable processor or an OS. There's the additional problem that they're required to boot, so nowhere convenient to load the OS from unless you scatter SPI flash across the board.
GPUs on the other hand have a full task-switching operating system.
It means it has a large processor that can run an RTOS. It does not automatically mean it has an RTOS.
I would be surprised if the faster bus and memory controllers had it (because of latency problems). I would expect something like it on a USB controller, GPU, network or disk interface. I really have no idea what to expect from a DMA controller.
It’s the card itself fairly similar to how controllers work in HDD/SSDs basically they abstract the physical storage medium which allows them to use a wide range of flash memory on the backend while maintianing compatibility with the SD format.
While you can achieve the same abstraction in hardware it’s much easier and cheaper to simply pick a small micro controller and do all the black magic you need in software especially since the flash on some of these cards can be really really bad as it’s often the lowest grade flash or worse recycled memory that ends up being used which means you end up with chips that are 50-80% defected so the controller ensures that these sectors/cells aren’t used.
Wow. I wonder if my mental image of an RTOS on the devices is correct? I would've imagined there's some sort of firmware inside any device that communicates with a host, but when I hear RTOS I think of something fairly generic that would be deployed across a range of device types (like a Linux system but real time) rather than specialized firmware... is that accurate?
For the Wifi device mentioned in the original article, they dissasembled the firmware and found out that it uses "ThreadX": https://en.wikipedia.org/wiki/ThreadX
> "hreadX provides priority-based, preemptive scheduling, fast interrupt response, memory management, interthread communication, mutual exclusion, event notification, and thread synchronization features. Major distinguishing technology characteristics of ThreadX include preemption-threshold, priority inheritance, efficient timer management, picokernel design, event-chaining, fast software timers, and compact size. The minimal footprint of ThreadX on an ARM processor is on the order of 2KB"
ie it's generic code that gets built into a unikernel-style image with the device-specific code that actually implements the various tasks required of a wifi controller.
Embedded micro controllers are very common these days in a wide range of ICs most of them aren’t disclosed or accessible to their users their sole role is to abstract the physical IC and present what the customer expects this can be things like timers, flash memory or even microcontrollers themselves as well as more complex ICs that need to ensure some defined PHY like network or serial controllers.
A RTOS is not really an OS, just a super-fast way of dealing with I/O streams. More driver/firmware than OS, if you ask me. But some companies need fancy words for marketing, I guess.
> not really an OS, just a super-fast way of dealing with I/O streams
Saying this without any animosity, but you would probably be interested in reading about the history of operating systems. Desktop OSes are a (very visible) minority, and it's the opposite way in my opinion: a desktop OS is an OS + a large suite of tools + a shell.
It's literally something that operates the system so that every program written doesn't have to handle all the low level IO, that enables task management, etc.
RTOS literally means "OS with real-time capabilities", you can't say in general that an RTOS is not really an OS. QNX is very clearly an OS. Linux with real-time modifications is clearly an OS. And even with really small variants, like ThreadX in this case, they have many markers of an OS: It provides threads, with scheduling, synchronization and memory isolation (if the hardware supports that). It has a networking stack and file system abstractions. What exactly is it missing that makes it clearly "not an OS"?