对处理器的管理是操作系统的一个功能。
其中,对处理器的管理感觉一直都是围绕在进程上面。
从宏观上看,程序的执行可以是顺序执行的,可以是并发执行的,也可以是多道执行。处理器通过两级调度来确定到底该处理哪个进程。处理器选择要处理的进程时分为两步:一,作业调度,通过作业调度,决定将哪些进程装入主存中进行等待,而第二步,进程调度,则是宣布哪个进程获得了处理器的占用权。
在微观上,若干个就绪的队列通过对进程块的链接来形成进程队列,一旦有进程让出处理器,就会有新的进程得到处理器的占用权,这时,进程的状态会改变。另外,当产生中断时,也会有进程状态的改变。那么,如何对众多进程进行管理?这时,就用到了进程控制块。在进程控制块中,包含着进程的标识信息,说明信息,线程信息,管理信息,记录着进程的状态。
但是随着进程的增多,就会增加进程调度的次数,这会给调度和控制带来复杂性。所以,引入了线程。把进程中可以并发执行的个部分分别作为一个线程,将线程作为进程中可独立执行的子任务。
有3个词在这里要做区分下,它们是:程序,进程,线程。
程序是一种静态实体,程序可作为软件资料长期保存。而进程是程序在一个数据集上的执行过程,可看做是一种动态实体。进程是一个动态的实体,它有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消。反映了一个程序在一定的数据集上运行的全部动态过程;进程和程序并不是一一对应的,一个程序执行在不同的数据集上就成为不同的进程,可以用进程控制块来唯一地标识每个进程。而这一点是程序无法做到的,由于程序没有和数据产生直接的联系,既使是执行不同的数据的程序,他们的指令的集合依然是一样的,所以无法唯一地标识出这些运行于不同数据集上的程序。一般来说,一个进程肯定有一个与之对应的程序,而且只有一个。而一个程序有可能没有与之对应的进程(因为它没有执行),也有可能有多个进程与之对应(运行在几个不同的数据集上)。
对于进程和线程,在现代操作系统中,把用户一个计算问题或一个应用问题作为一个进程,把该进程中可以并发执行的各部分分别作为线程。线程是进程中可以独立执行的子任务。个人理解是,进程是 操作系统进行资源分配的最小单位,而线程是比进程更小的能独立运行的最小单元,线程占用所属进程的资源,因而多线程能减小资源的浪费,替代多进程带来的缺点。