还是老话,首先得知道什么叫做作业
作业:作业是一个比程序更为广泛的概念,它不仅包含了通常的程序和数据,而且还应配有一份作业说明书,系统根据该说明书来对程序的运行进行控制。(在我看来可以理解为一个section)
前面说过,“Shell可以同时运行一个前台进程和任意多个后台进程”是不太全面的。事实上Shell分前后台来控制的不是进程,而是作业(Job)或者进程组(Process Group)。一个前台作业可以由多个进程组成,一个后台也可以由多个进程组成。Shell可以同时运行一个前台作业和任意多个后台作业,这称位作业控制。
作业调度:其主要任务是按一定的原则从外存上处于后备状态的作业中挑选一个(或多个)作业,给他们分配内存、设备等必要的资源,并建立相应的进程,以使它们获得竞争处理机的能力。
中级调度:又称内存调度。引入是为了提高内存利用率和系统吞吐量。把那些暂时不能运行的进程调至外存等待,而此时进程的状态称为挂起状态。当他们已具备运行条件且内存又稍有空间时,就由中级调度把外存上那些已具备运行条件的就绪进程,再重新调入内存,并修改其状态为就绪状态,挂在就绪队列上等待。
进程调度:又称低级调度。主要是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。进程调度是操作系统中最基本的一种调度。
后台进程是不能读终端输入的,如果读了,内核发SIGTTIN信号给进程,该信号的默认处理动作是使进程停止。但是后台进程是可以向终端写数据的。如果觉得后台进程向控制终端输出信息干扰了用户使用终端,可以设置一个终端选项禁止后台进程写。