
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了程序员在学习Linux操作系统的时候需要掌握的一些基础知识等内容,而本文我们就再来说说,Linux操作系统进程基础知识分享。
进程和程序的概念
我们平时所写的C语言代码,通过编译器的编译,终会成为一个可执行的程序,当这个可执行程序运行起来之后,它就变成了一个进程。
程序是存放在存储介质(程序平时都存放在磁盘当中)上的一个可执行文件,而进程就是程序执行的过程。进程的状态是变化的,其中包括进程的创建、调度和死亡。程序是静态的,进程是动态的。
进程:计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
如何描述进程:
进程的所有属性信息都被放在一个叫做进程控制块的结构体中,可以理解为进程属性的集合。
这个数据结构的英文名称是PCB(processcontrolblock),在Linux的OS下的PCB是task_struct(Linux内核中的一种数据结构,它会被装载到RAM(内存)中并且包含并包含进程的信息)。
task_struct内容有哪些?
标识符:描述本进程的标识符(就像是我们每个人的身份证)。
状态:任务状态、退出代码、退出信号等。
优先级:程序被CPU执行的顺序(后面会单独介绍)。
程序计数器:一个寄存器中存放了一个pc指针,这个指针永远指向即将被执行的下一条指令的地址。
内存指针:包含程序代码和进程相关的数据的指针,还有和其它进程共享的内存快的指针。这样就可以PCB找到进程的实体。
上下文数据:在单核CPU中,进程需要在运行队列(run_queue)中排队,等待CPU调度,每个进程在CPU中执行时间是在一个时间片内的,时间片到了,就要从CPU上下来,继续去运行队列中排队。
I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息:能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
组织进程
在内核源代码中发现,所有运行在系统里的进程都以task_struct链表形式存在内核中。
进程的状态
进程的状态反应进程执行过程的变化。这些状态随着进程的执行和外界的变化而转换。
五态模型中,进程分为新建态,终止态,运行态,就绪态,就绪态。
3
(1)TASK_RUNNING(运行态):进程正在被CPU执行。当一个进程被创建的时候会处于TASK_RUNNABLE,表示已经准备就绪,正在准备被调度。
(2)TASK_INTERRUPTIBLE(可中断状态):进程正在睡眠(阻塞)等待某些条件的达成。一旦这些条件达成,内核就会把进程状态设置成运行态。处于此状态的进程也会因为接收到信号而提前被唤醒,比如给一个TASK_INTERRUPTIBLE状态的进程发送SIGKILL信号,这个进程将会被先唤醒(进入TASK_RUNNABLE状态),然后再响应SIGKILL信号而退出(变为TASK_ZOMBIE状态),并不会从TASK_INTERRUPTIBLE状态直接退出。
(3)TASK_UNINTERRUPTIBLE(不可中断):处于等待中的进程,待资源被满足的时候被唤醒,但是不可以由其他进程通过信号或者中断唤醒。由于不接受外来的任何信号,因此无法用KILL杀掉这些处于该状态的进程。而TASK_UNINTERRUPTIBLE状态存在的意义就在于,内核的某些处理流程是不能被打断的。
(4)TASK_ZOMBIE(僵死):表示进程已经结束,但是其父进程还没有回收子进程的资源。为了父进程能够获知它的消息,子进程的进程描述符仍然被保留着。一旦父进程调用wait函数释放子进程的资源,子进程的进程描述符就会被释放。
(5)TASK_STOPPED(停止):进程停止执行。当进程接收到SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU等信号的时候。此外,在调试期间接收到任何信号,都会使进程进入这种状态。当接收到SIGCONT信号,会重新回到TASK_RUNNABLE状态。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。