Again, I am very interested to see how you approach the task of constructing examples that thoroughly test the software you have developed. You will have much more flexibility than you had in the interrupt driven input/output program you just completed. Writing lots of output to one terminal won't lead to the loss of input from other terminals, because when one process runs out of space in its output queue, the kernel will take that process out of the ready queue and let others go.
Notice that you are not limited to one user process. Once "userinit" gets control it can easily allocate one process for each terminal (or more).