You can learn this stuff entirely on your own. And it will cost you less than $5 to do it. Which is way better than in my time. Texas Instruments sells a "LaunchPad" embedded system for $4.30, shipped to your door (US.) It includes two microcontrollers, which gets you pretty close to what you are talking about. But it's still perhaps a ways away.
If you build a computer from scratch, as I have, what you have is a chunk of hardware that includes clocks, buses, and so on. But zero program code. There are lots of ways of getting code in there. One way, a very old way, is to actually "wire up" the code with jumper wires (called plug board programming) so that when the computer starts up and reads the first memory location (the CPU will always have a known, default memory location to start at -- also hard-wired) it sees what was intended by moving physical jumpers around. You can't do much code that way -- it takes up a lot of room. So some folks started selling ROMs -- which were just very, very tiny plug boards where the memory was "hard-wired" by a taped-out design. Later, folks worked out how to not have to tape these out, but instead to allow an external bit of hardware to "burn out" certain bits. The bits were then called "fuses" and you could "blow the fuse" to change the bit. You couldn't change it back. So if you needed to reprogram the memory, you threw away the old one and programmed up a new one. Then they invented UV erasable fuses, which could be "blown" electronically but only could be reset back using UV light. Those had windows in them. Then they invented EEPROM (electrically erasable, instead of UV.) And then flash and so on. These memories were all external and wired up into the circuit just like other parts were.
In the case of the IBM PC, a "BIOS" was included. This was just a UV erasable chip that was socketed on the motherboard and was pre-programmed with some general purpose code. The BIOS knew how to read a floppy disk, how to read a program from a standard cassette tape player, and how to accept keys from a keyboard or put characters into memory so that a display could show them. If it detected a floppy, and if the floppy happened to have data on it in the right places, then the BIOS would read program code from the floppy, stick it into memory, and then jump into it (and hope.) The IBM PC BIOS also supported downloading code into memory by way of the keyboard port, too. Most people don't know that fact. But it is true.
I've written multitasking operating systems in as little as 10-12 hours. However, they depended upon the BIOS for certain services I didn't have to write -- such as floppy disk I/O. The basic concepts of cooperative switching is relatively simple (just a handful of lines of assembly code is all that is needed to add a context switch to C), with pre-emption being more complex by a fair amount but not so much that it is scary -- you just have to attend to static memory issues in libraries, for example. Anyway, it's not hard once you know the concepts to just sit down and do it. This isn't to say that writing Windows would be fast -- Windows is an incredible monster and it requires teams of people many years to do something even slightly similar.
But you can learn all this stuff for just that $4.30 I mentioned. That's because the microcontroller doesn't have any code in it when you buy a new one. You have to write everything yourself. There are tools to help you load it into the memory where the computer will see it. And that part you don't have to do (you could, though, if you really wanted to.) But you write every single line of code that executes when the microcontroller powers up. So you learn a lot that way.
Some computers had front panels (I miss them) which allowed you to "toggle in" your code from there. I used to get callouses on my fingers from doing that, in fact. You set up an address, load it, change data, store that, move to another address, and do it again. Then when you are done "toggling in" your program from the front panel, you'd set the program counter to where ever you'd placed your code by hand using the front panel and just hit "start" and the computer would go.
If you are curious, you should get a microcontroller kit that includes a compiler and assembler and play around with that. It's too bad that front panel computers are mostly dead. But if you could find a PDP-8/e or a PDP-11/45 or PDP-11/70 floating about, or perhaps an IMSAI 8080 or an Altair 8800, you could learn to use the front panel to stick code into blank memory and see how it "used to be done," in that way.