bluemoon wrote:I am aware that the OP want to run is on 8086, but there are many techniques and ideas can be extracted from those projects.
What consideration they made, what limitation they faced, any trap they solved?
This depends on why the OP wants to use 8086, and what his OS is supposed to be used for. The people building FreeDos didn't aim for an OS that run only on 386+ processors, but one that could run on 8086, which none of the emulators can do. There are still 8086 compatible chips out there. I wouldn't recommend any of them for new designs, but they do exist.
bluemoon wrote:For example,
- memory limitation
> which in turns limit the number of concurrent process.
Obviously, but 8086 can address 16 times more than Z80, but we still had computers that used Z80. It is mostly a matter of selecting reasonable applications, and coding applications with memory limits in mind, which today is unusual, but yesterday was commonplace.
bluemoon wrote:
> Some process that block/sleep/pause for long may get swapped (since it's 8086, swap to disk?)
You cannot swap with real-mode. It practically requires paging, or at least protected mode segmentation.
bluemoon wrote:
- resource competition
> do it make sense for 2 process printing to same screen, or you need to make virtual screen? (and avoid application draw the dirty way)
That issue exists in any environment, and is not specific to real-mode. Again, in real-mode, there is no easy way to provide a virtual screen, and it can practically only be done with an emulator and V86. But the issue of direct hardware access exists in any environment, unless there are means to block IO-ports. Even if IO-ports and memory ranges can be blocked, there is nothing stopping a driver running in kernel from using any IO-port or memory range. But in this case I think it is safe to assume that the application writer (the OP) decides for himself if an application would use direct-IO or not, so it is not an issue.
bluemoon wrote:
- navigation
> since it's not likely to have fancy GUI, there should be a way to navigate between process (and bring active process to screen)
If the OP supports this at all. A simpler OS might only have threads, not processes, as the address-space is too small for multiple processes of any considerable size. That is why I claimed a better solution (that uses less memory) would be to statically link the kernel with a single application that needs an OS and / or multitasking.