Timesharing gives poor performance if too many users run compute-intensive jobs. Abstractions often fail for performance reasons. Abstractions also fail because they prevent programmer from controlling machine at desired level. More recently, existing OS schedulers fail to adequately support multimedia and parallel processing needs, causing poor performance. Concurrency and asynchrony make operating systems very complicated pieces of software.
Operating systems are fundamentally non-deterministic and event driven.
On a multiprocessor multiple user processes execute in parallel. Multiple workstations execute concurrently and communicate by sending messages over a network. Protocol processing takes place asynchronously. Operating systems are so large no one person understands whole system. Outlives any of its original builders.