一直对我们操作系统如何运行程序有疑问,并一直想不通,后来看了<深入理解计算机系统>感觉讲得挺有道理(至少从概念上讲),所以写这篇作为自己的理解吧。
先从硬件来计算机分为:CPU(运算器+控制器+寄存器)+总线+I/0设备+内存
对上述进行抽象产生了进程的概念,即进程拥有独立的CPU,虚拟地址,I/0操作等。
对内存的抽象产生了虚拟存储器的概念。
对设备的抽象产生了文件的概念。
从上述角度来理解程序的运行(以linux来说)我们编译好的应用程序一般是ELF格式的文件,里面包含将要运行的虚拟地址,以及代码段,数据段,BSS段等相关信息。
当我们运行程序时,操作系统通过一系列的操作创建跟父进程一样的虚拟空间结构,并创建虚拟存储器和页表,加载器把文件跟虚拟存储器进行映射,并把各个段标志为私有、写时拷贝。当PC运行对虚拟存储器进行写时,OS则创建物理页,并更新页表,
从上述过程来看,我们应用了进程的概念,则每个进程都有独立的虚拟空间,还虚拟存储器的概念,以及存储器映射的概念(即把文件跟虚拟存储器进行关联)。
讲得不是很详细,里面东西比较多,具体大家可以看书。作为总结,只供讨论。
转载于:https://blog.51cto.com/usbhost/1063298