一般来说这个是由操作系统调度,对某个程序来说,是运行在虚拟内存空间中,认为自己是完整控制所有内存空间的,其实这些内存空间由操作系统依据需要把部分实际空间映射过来而已,所以多任务操作系统上都有这样相关的模块。
对于一些共用设备的调度(因为设备也需要联系到内存中才能和程序交换数据),也是用类似的方式映射,不过操作系统还额外的会控制设备由那个程序使用(一般是活动的程序,或者说活动的进程、线程,个别会把信息复制传输到多个程序)
总结说来,对程序来说,认为自己是拥有所有内存空间的,但其实这都是由操作系统控制的。