ency of the under- lying processes. Multiprocessing allows two or more tasks and threads to be allocated to different processors (CPUs) to be executed at the same time. See Silberschatz et al. (2012) for a good general reference book on os principles. 3.1.3 VIRTUALIZATION OF NETWORK FUNCTIONS As described earlier in this chapter, network functions were traditionally implemented in purpose- built, vendor-proprietary systems (hardware and software). A system that implements layer-2 or layer-3 networking functions is referred to as a switch or router, respectively. A system that imple- ments other networking functions is traditionally referred to as a network appliance. A typical enterprise network has many switches, routers, and appliances, sometimes several such systems in a single location. Network and compute virtualization technologies described earlier allow the implementation of network functions in software that executes on a generic computer network consisting of servers typi- cally based on x86 hardware and Linux OS. VMs provide the execution environment for software implementation of various network functions. Each VM has a logical port that behaves like a physi- cal port on a switch, router, or appliance. Logical ports can be networked just like physical ports are networked. The os implements a virtual router (vR) or a virtual switch (vS) to enable network con- nections that link logical ports with other logical or physical ports on the same server. The network connections that terminate at a logical port are virtual overlay connections described in Section 3.1.1. The network functions that are implemented in this manner are referred to as virtualized network functions (VNFs). Figure 3.4 shows the use of VNFs running on VMs to implement a network connection (dotted line) that is used to carry packet flows for a given source-destination pair. VNF-1 and VNF-2 denote network application software running on two different VMs. The data center fabric (for Ethernet/IP forwarding) and the servers provide the inf