- 进程概念
- 什么是进程?
- 进程控制块:pcb
- 如何理解创建进程?
- 如何理解退出进程?
- pcb-结构体内容分类:
- 查看进程
- 通过系统目录查看
- 通过ps命令查看
- 进程状态
- R运行状态
- S睡眠状态
- D磁盘休眠状态(深度睡眠)
- T停止状态
- X死亡状态
- Z(zombie)-僵尸进程
- 孤儿进程
- 进程优先级
- 什么是优先级
- 优先级存在的原因
进程就是一个正在运行的程序,在操作系统角度讲,进程就是一个pcb,是操作系统对一个正在运行的程序的描述,通过这个描述实现对程序的调度管理,在linux中是一个task_struct结构体。(只要把程序(运行起来)加载在内存里那就是进程)
操作系统如何管理进程:先描述、再组织
进程控制块:pcb为什么要有pcb?:操作系统要进行软硬件资源管理,因为要管理就必须先描述、再组织,因为要描述,所以必须要有pcb结构体。
在linux内核中将pcb用双链表的结构组织起来(一个进程对应一个pcb),用链接指针来完成pcb和pcb之间的关系。所以,操作系统要找到进程,那么只需要找到链表的头就可以。
把一个进程中的可执行程序加载到内存中。
如何理解退出进程?退出进程就是在pcb双链表将该节点删除掉。
pcb-结构体内容分类:1、标识符:描述本进程的唯一标识符,用来区分其他进程。(pidppid)
2、状态:任务状态、退出代码、退出信号。
3、优先级:相对其他进程的优先级。
4、程序计数器:程序中即将执行的下一条指令的地址。
5、内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
6、上线文数据:进程执行时处理器的寄存器中的数据。
- R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。(只要在运行队列中就意味着是运行状态)
- S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。
- D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
- T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
- X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
- Z(zombie)-僵尸进程:当进程将要退出的时候,在系统层次该进程曾经申请的资源并不是立即被释放,而是要暂时存储一段时间,以供操作系统或是其父进程进行读取,如果退出信息一直未被读取,则相关数据是不会被释放掉的,一个进程若是正在等待其退出信息被读取,那么我们称该进程处于僵尸进程(zombie)。
注意:首先僵尸进程的存在是必要的,因为进程被创建的目的就是完成某项任务,那么当任务完成的时候,调用方是应该知道任务的完成情况的,所以必须存在僵尸状态,使得调用方得知任务完成的情况,以便进行相应的后续操作。
僵尸进程的危害:
1.进程的退出状态必须被维持下去,因为要告诉关心它的进程(父进程)它的任务现在怎么样了,可是父进程如果一直不读取,那么子进程将会一直处在僵尸状态。
2.维护退出状态本事就是要用数据进行维护,这也是进程的基本信息,所以僵尸状态一直不退出那么PCB将会一直在维护。
3.如果一个父进程创建了很多子进程,但是都不进行回收,那么就会造成资源浪费,因为数据结构对象本身就要占内存。
4.僵尸进程申请的资源是无法回收的,那么僵尸进程越多实际可用的资源就会越少,也就是说僵尸进程会导致内存泄漏。
在Linux当中的进程关系大多数是父子关系,若子进程先退出而父进程没有对子进程的退出信息进行读取,那么我们称该进程为僵尸进程。但若是父进程先退出,那么将来子进程进入僵尸状态时就没有父进程对其进行处理,此时该子进程就称之为孤儿进程。若是一直不处理孤儿进程的退出信息,那么孤儿进程就会一直占用资源,此时就会造成内存泄漏。因此,当出现孤儿进程的时候,孤儿进程会被1号init进程领养,此后当孤儿进程进入僵尸状态时就由int进程进行处理回收。
#include进程优先级 什么是优先级#include #include int main() { pid_t id = fork(); if(id < 0){ perror("fork"); return 1; } else if(id == 0){//child printf("I am child, pid : %dn", getpid()); sleep(10); }else{//parent printf("I am parent, pid: %dn", getpid()); sleep(3); exit(0); } return 0; }
优先级实际上就是获取某种资源的先后顺序,而进程优先级实际上就是进程获取CPU资源分配的先后顺序,就是指进程的优先权,优先权高的 进程有优先执行的权力。
优先级存在的原因优先级存在的主要原因是资源有限。



