Quick question for the full fledge non student programmers here:
Instead of having a master and slave processor dynamic would it be effective to the. The OS on a third processor which is essentially the master and all it does is basic system upkeep stuff while relegating anything app related to the intel or more powerful A series chip? I’m just curious if instead of needing one of those chips active to control task routing they’d be able to have a dedicated OS runner and task router with two main processors as the muscle.
I’m basically thinking of the big little approach from the A series chips where the Intel is the powerful one and the A series is the low power one but instead of just a scheduler chip handling things they give they chip the basic OS tasks in order for the power hungry stuff to lie dormant as much as possible.
I haven’t taken operating systems yet (for winter quarter next year) so I don’t know but I’m really hoping one of you knows why this would or wouldn’t work if we ignored the thermals for the 3 chips. I also probably got a term wrong so please correct me as necessary
This isn't really something you'd want to do, for a number of reasons.
From a hardware perspective, when two or more CPU's exist on the same bus and competing for the same resources (like memory, PCI lanes, etc.) they will generally conflict with each other unless they have some protocol to negotiate access to the resources. Or just for cache coherency etc. Xeon processors (for example) can do this between each other. I'm pretty sure they cannot do this with an ARM processor. The usual Core processors can't do this at all. So maybe you could set up some heterogeneous system for coprocessors similar to how a GPU might work, but then you may also end up having to do dedicated memory, or have a nightmare with sharing. Nightmare also meaning that it will be far too slow to be of any practical use.
Then from the software side, you're going to run into a problem very quickly if the OS is another architecture than the app itself. With UNIX and friends, apps need access to the part of the OS where the syscalls are implemented so that this code can be executed from user space processes. On Linux this is achieved my mapping part of the kernel into every user process. Don't know how it's done on Darwin, but wouldn't be surprised if it's something similar. This is of course for performance reasons, syscalls get really slow if you need to context switch as part of each call. Now, what do you think happens if the user space app is executing on the Intel processor, maps ARM syscall code into its memory space, and then starts executing the ARM code? It can't. One might maybe imagine some other way to interface with the OS that allows for this to happen, but it would end up being painfully slow.
But this is all ignoring the fact that it's not really needed. The OS is lightweight enough that it doesn't need to be moved off to a separate CPU.
There's much more that could be said, but the point is that it would be extremely tricky to get it to work at all, and you wouldn't achieve anything desirable with this model. There are probably other ways to achieve something with similar effect though.