1. A multi-core processing system comprising: a first input/output interface configured to transmit data over a first network based on a first network protocol; a second input/output interface configured to transmit data over a second network based on a second network protocol; a plurality of processing cores; one or more hardware accelerators coupled to the first and second input/output interfaces; and one or more memory devices storing software enabling virtual processing resources of the plurality of processing cores and virtual memory to be assigned to support: a first compartment implementing one or more first virtual machines; a second compartment implementing one or more second virtual machines; and a programmable virtual switch configured to provide an interface between the first and second virtual machines and the first and second input/output interfaces, wherein: the programmable virtual switch comprises: a shared memory permitting communications between the first and second virtual machines; a first compartment switch providing an interface between the one or more first virtual machines and the first input/output interface and/or the one or more hardware accelerators; and a second compartment switch providing an interface between the one or more second virtual machines and the second input/output interface and/or the one or more hardware accelerators, wherein the first and second compartment switches are configured to communicate via the shared memory; and the programmable virtual switch is further configured to dynamically allocate the one or more hardware accelerators for use by the first or second virtual machines, wherein: the first compartment switch is configured to access the shared memory only during the first compartment execution; and the second compartment switch is configured to access the shared memory only during the second compartment execution.