Introduction: In this assignment, we will be implementing the system calls and scheduler for SEMOS. Remember, this system is not a UNIX system! Rather, we are implementing a microkernel system which will allow us to write daemons to implement higher level functions. We could, if we wanted, write a daemon which would provide Unix services to our system. Because ours is a microkernel, the system calls are rather simpler. They only provide the fundamental operations that only the kernel can supply. Also, because message passing is key to this system, IPC is quite fluid. Every process can write to any open port, which is insecure but easy to manage. This means that all a daemon need do is claim a specific port and then process messages via some established protocol. The fundamental operations of this system can be broken into 3 categories: Port I/O, Port Management, and Process Management. Also note that there are no device-specific calls. Rather, some ports have special meanings. (Recall that we opened a few ports in the port lab by default. These will take on their special meanings in this lab.) Before we delve into the actual coding of this lab, let's explore what each of the system calls in these categories are, and what they do. As is the case with the UNIX system calls, we will document those calls as.