首先,我们需要知道什么是进程?
1.进程是程序的一个执行的实例。
2.进程是正在执行的程序。
3.进程是能分配处理器并由处理器执行的实体。
按内核的观点来谈进程:它是担当分配系统资源(cpu时间,内存)的实体。
-操作系统的调度分为三种:
1.远程调度(创新进程)
2.中程调度(交互功能的一部分)
3.短程调度(下次执行哪个进程)
-进程的三种状态:
1.等待态:等待某个事件的完成
2.就绪态:等待系统分配处理器以便运行
3.运行态:占有处理器正在运行
-调度方式:
剥夺方式:当一个进程正在运行时,系统可以基于某种原则,剥夺以分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则,短进程优先原则,时间片原则。
非剥夺方式:分配程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生阻塞时,才把处理机分配给另一个进程。
-进程调度算法:
1.先来先到服务(FCFS)
2.短作业优先(SPN)
3.最短剩余时间(SRT)
4.时间片轮转法(RR,Round-Robin):采用剥夺方式,每个进程被分配一个时间段,按照在队列中的顺序交替执行;不利于处理紧急作业。
5.最高响应比优先
6.公平共享调度
Linux内核用过一个被称为进程描述符task_struct结构体来管理进程,这个结构体包含了进程的所有信息。
task_struct结构如下:
1.进程状态,将记录进程在等待,运行或死锁。
2.调度信息,由那个调度函数调度,怎样调度等。
3.进程的通讯情况。
4.因为要插入进程树,必须有联系父子兄弟的指针,当然是task_struct型。
5.时间信息,比如计算好执行的时间,以便CPU分配。
6.标号,决定改定进程归属。
7.可以读写打开文件的一些信息。
8.进程上下文和内核上下文。
9.处理器上下文。
10.内存信息。
只有这些结构,才能满足一个进程的需求。