From 038d924916770142e92b6a7b3aa6d147464c890d Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Wed, 12 Nov 2025 20:39:02 +0100 Subject: [PATCH] MBus messaging IPC --- assets/img/mbus-diagram1.png | Bin 0 -> 34141 bytes content/blog/MOP2/mbus-messaging-ipc.adoc | 153 ++++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 assets/img/mbus-diagram1.png create mode 100644 content/blog/MOP2/mbus-messaging-ipc.adoc diff --git a/assets/img/mbus-diagram1.png b/assets/img/mbus-diagram1.png new file mode 100644 index 0000000000000000000000000000000000000000..aa9f47e5e189889135334e64d9301c842b4f4b49 GIT binary patch literal 34141 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 literal 0 HcmV?d00001 diff --git a/content/blog/MOP2/mbus-messaging-ipc.adoc b/content/blog/MOP2/mbus-messaging-ipc.adoc new file mode 100644 index 0000000..dace531 --- /dev/null +++ b/content/blog/MOP2/mbus-messaging-ipc.adoc @@ -0,0 +1,153 @@ += MBus - in-kernel messaging system +Kamil Kowalczyk +2025-11-12 +:jbake-type: post +:jbake-tags: MOP2 osdev +:jbake-status: published + +In this article I would like to present to you `MBus` - a kernel-space messaging IPC mechanism for +the MOP2 operating system. + +== One-to-many messaging + +MBus is a one-to-many messaging system. This means that there's one sender/publisher and many +readers/subscribers. Think of a YouTube channel - a person posts a video and their subscribers get +a push notification that there's content to consume. + +image::/img/mbus-diagram1.png["One-to-many messaging diagram"] + +== User-space API + +This is the user-space API for MBus. The application can create a message bus for `objmax` +messages of `objsize`. Message buses are indentified via a global string ID, for eg. the PS/2 +keyboard driver uses ID "ps2kb". + +`ipc_mbusattch` and `ipc_mbusdttch` are used for attaching/detattching a consumer to/from the +message bus. + +[source,c] +---- +int32_t ipc_mbusmake(char *name, size_t objsize, size_t objmax); +int32_t ipc_mbusdelete(char *name); +int32_t ipc_mbuspublish(char *name, const uint8_t *const buffer); +int32_t ipc_mbusconsume(char *name, uint8_t *const buffer); +int32_t ipc_mbusattch(char *name); +int32_t ipc_mbusdttch(char *name); +---- + +=== Usage + +The usage of MBus can be found for eg. inside of TB - the MOP2's shell: + +.Initalizing interactive shell mode +[source,c] +---- + if (CONFIG.mode == MODE_INTERACTIVE) { + ipc_mbusattch("ps2kb"); + do_mode_interactive(); + // ... +---- + +.Reading key presses +[source,c] +---- + // ... + int32_t read = ipc_mbusconsume("ps2kb", &b); + if (read > 0) { + switch (b) { + case C('C'): + case 0xE9: + uprintf("\n"); + goto begin; + break; + case C('L'): + uprintf(ANSIQ_CUR_SET(0, 0)); + uprintf(ANSIQ_SCR_CLR_ALL); + goto begin; + break; + } + // ... +---- + +Previously reading the keyboard was done in a quite ugly manner via specialized functions of the +`ps2kbdev` device object (`DEV_PS2KBDEV_ATTCHCONS` and `DEV_PS2KBDEV_READCH`). It was a one big +hack, but the MBus API has turned out quite nicely ;). + +With the new MBus API, the PS/2 keyboard driver becomes way cleaner than before (you can dig +through the commit history...). + +.Kernel-side code for the PS/2 keyboard driver +[source,c] +---- +// ... +IpcMBus *PS2KB_MBUS; + +void ps2kbdev_intr(void) { + int32_t c = ps2kb_intr(); + if (c >= 0) { + uint8_t b = c; + ipc_mbuspublish("ps2kb", &b); + } +} + +void ps2kbdev_init(void) { + intr_attchhandler(&ps2kbdev_intr, INTR_IRQBASE+1); + + Dev *ps2kbdev; + HSHTB_ALLOC(DEVTABLE.devs, ident, "ps2kbdev", ps2kbdev); + spinlock_init(&ps2kbdev->spinlock); + PS2KB_MBUS = ipc_mbusmake("ps2kb", 1, 0x100); +} +---- + +The messaging logic is ~20 lines of code now. + +== The tricky part + +The trickiest part to figure out while implementing MBus was to implement +cleaning up dangling/dead consumers. In the current model, a message bus +doesn't really know if a consumer has died without explicitly detattching +itself from the bus. This is solved by going through each message bus and +it's corresponding consumers and deleting the ones that aren't in the list +of currently running processes. This operation is ran every cycle of the +scheduler - you could say it's a form of garbage collection. All of this +is implemented inside `ipc_mbustick`: + +[source,c] +---- +void ipc_mbustick(void) { + spinlock_acquire(&IPC_MBUSES.spinlock); + // Go through all message buses + for (size_t i = 0; i < LEN(IPC_MBUSES.mbuses); i++) { + IpcMBus *mbus = &IPC_MBUSES.mbuses[i]; + // Skip unused slots + if (mbus->_hshtbstate != HSHTB_TAKEN) { + continue; + } + + IpcMBusCons *cons, *constmp; + spinlock_acquire(&mbus->spinlock); + // Go through every consumer of this message bus + LL_FOREACH_SAFE(mbus->consumers, cons, constmp) { + spinlock_acquire(&PROCS.spinlock); + Proc *proc = NULL; + LL_FINDPROP(PROCS.procs, proc, pid, cons->pid); + spinlock_release(&PROCS.spinlock); + + // If not on the list of processes, purge! + if (proc == NULL) { + LL_REMOVE(mbus->consumers, cons); + dlfree(cons->rbuf.buffer); + dlfree(cons); + } + } + spinlock_release(&mbus->spinlock); + } + spinlock_release(&IPC_MBUSES.spinlock); +} +---- + +As you can see it's a quite heavy operation and thus not ideal - but still +way ahead of what we had before. I guess the next step would be to figure out +a way to optimize this further, although the system doesn't seem to take a +noticable hit in performance (maybe do some benchmarks in the future?).