layered design of operating system