程序和进程的区别(P150)
- 程序是一个静态的概念,是一些预先编译好的指令和数据集合的一个文件
- 进程是一个动态的概念,它是程序运行时的一个过程
程序和进程有什么区别
程序(或者狭义上讲可执行文件)是一个静态的概念,它就是一些预先编译好的指令
和数据集合的一个文件;进程则是一个动态的概念,它是程序运行时的一个过程,很
多时候把动态库叫做运行时(Runtime)也有一定的含义。有人做过一个很有意思的
比喻,说把程序和进程的概念跟做菜相比较的话,那么程序就是菜谱,计算机的 CPU
就是人,相关的厨具则是计算机的其他硬件,整个炒菜的过程就是一个进程。计算机
按照程序的指示把输入数据加工成输出数据,就好像菜谱指导着人把原料做成美味可
口的菜肴。从这个比喻中我们还可以扩大到更大范围,比如一个程序能在两个 CPU上
执行等。
装载的方式(P152)
动态装载的两种方法
- 覆盖装入(Overlay)
- 页映射(Paging)
动态装入的基本原理:程序的局部性原理
程序执行时所需要的指令和数据必须在内存中才能够正常运行,最简单的办法就是将程序运行所需要的指令和数据全都装入内存中,这样程序就可以顺利运行,这就是最简单的静态装入的办法。但是很多情况下程序所需要的内存数量大于物理内存的数量,当内存的数量不够时,根本的解决办法就是添加内存。相对于磁盘米说,内存是品贵且稀有的,这种情况自计算机磁盘诞生以来一直如此。所以人们想尽各种办法,希望能够在不添加内存的情况下让更多的程序运行起来,尽可能有效地利用内存。后来研究发现,程序运行时是有局部性原理的。所以我们可以将程序最常用的部分驻留在内存中,而将一些不太常用的数搭存放在磁盘里面,这就是动态装入的基本原理
页映射(P156)
概括:
一张图足以
详情:
将内存和所有磁盘中的数据和指令按照“页”为单位划分为若干个页,所有的装载和操作的单位都是页。
进程的建立(P157-P159)
从操作系统的角度来看,一个进程最关键的特征是它拥有独立的虚拟地址空间,这使得它有别于其他进程。
创建进程的三件事情:
- 创建一个独立的虛拟地址空间
- 读取可执行文件头,并且建立虚拟空间与可执行文件的映射关系。
- 将 CPU 的指令寄存器设置成可执行文件的入口地址,启动运行。
- 首先是创建虛拟地址空间。回忆第1章的页映射机制,我们知道一个虚拟空间由一组贞
映射函数将虚拟空间的各个页映射至相应的物理空间,那么创建一个虛拟空间实际上并不是创建空间而是创建映射函数所需要的相应的数据结构,在 i386 的Linux 下,创建虚拟地址空间实际上只是分配一个页目录 (Page Directory)就可以了,甚至不设置页映射关系,这些映射关系等到后面程序发生页错误的时候再进行设置。- 读取可执行文件头,并且建立虚拟空间与可执行文件的映射关系。上面那一步的页映射关系两数是虛拟空间到物理内存的映射关系,这一步所做的是虛拟空间与可执行文件的映射关系。我们知道,当程序执行发生页错误时,操作系统将从物理内存中分配
一个物理页,然后将该“缺页,从磁盛中读取到内存中,再设置缺页的虛拟页和物理页的映射关系,这样程序才得以正常运行。但是很明显的一点是,当操作系统捕获到缺页错误时,它应知道程序当前所需要的页