linux性能优化1-进程相关基础知识
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux性能优化1-进程相关基础知识相关的知识,希望对你有一定的参考价值。
1.进程相关知识点
1.1.什么是进程?
进程可以看做是程序的副本,进程是程序的执行的实例。进程可以使用任意资源以便Linux内核可以处理完成它的任务。
1.2.进程是如何管理的
在Linux操作系统上运行的所有进程都是通过task_struct结构来管理的,也叫“进程描述符”。
1.3.进程描述符属性
一个进程描述符包含了单个进程在运行期间的必要信息,比如进程标识、进程的属性、构建进程的资源等。
1.4.子进程的创建和结束过程
当一个进程创建一个新进程的时候,创建进程(父进程)发出一个fork()系统调用,然后父进程得到一个新创建的进程(子进程) 的进程描述符,并设置一个新的进程ID。它复制父进程的进程描述符的值给子进程。此时父进程的整个地址空间是不能复制的,两个进程共享相同的地址空间。exec()系统调用将新的程序复制到子进程的地址空间。因为两个进程共享相同的地址空间,所以新程序 写数据时会导致页错误。对此,内核会给子进程分配新的物理页。这种延迟的操作被称为Copy On Write。通常子进程执行它自己的程序,而不是执行与父进程相同的作。当程序执行完成的时候,通过一个exit()系统调用终止子进程。exit()系统调用释放进程的大部分数据结构并发出一个终止信号通知父进程。此时的进程被称为僵尸进程。子进程不会被完全移除,直到父进程通过wait()系统调用得知子进程已终止,父进程才会移除所有子进程的数据结构,并释放进程描述符。
1.5.进程的状态
·TASK_RUNNING(运行状态)
在这种状态下,进程正在CPU上运行,或者在队列(运行队列)中等待运行。
·TASK_STOPPED(停止状态)
在这种状态下,进程由于某些信号(SIGINT、SIGSTOP)被暂停。进程在等待一个恢复信号如SIGCONT
·TASK_INTERRUPTIBLE(可中断的睡眠状态)
在这种状态下,进程被暂停,并等待某个条件得到满足。例如进程等待键盘中断。
·TASK_UNINTERRUPTIBLE(不可中断的睡眠状态)
当进程处于此状态时,会给进程发送一个不知晓任何操作的信号。例如进程在等待磁盘I/O的操作。
·TASK_ZOMBIE(僵死状态)
一个进程通过exit()系统调用退出以后,它的父进程应该知道它已经终止。在此状态下,一个进程在等待通知它的父进程释放
所有的数据结构。一个僵尸进程不能终止自己,在这种情况下其显示为Z状态。使用kill命令是不能杀死这样一个进程的,因为它已经
被认定为死亡。如果想摆脱它,可以杀死父进程。但是如果是init进程的子进程称为僵尸进程的话,就必须重启系统来摆脱它。
1.6.进程的基本状态
进程在运行中不断地改变其运行的状态。通常,一个进程必须具有如下三种基本状态。
·Running(运行状态)
当进程已获得CPU资源,进程正在CPU上执行,此时状态称为执行状态。
·Ready(就绪状态)
当进程已分配到除了CPU以为的所有必要的资源,只要获得CPU资源便可以立即执行,这种状态称为就绪状态
·Blocked(阻塞状态)
正在执行的进程,由于等待某个事件而无法执行,此刻的状态称为阻塞状态。引起阻塞状态的因素有:I/O等待,缓冲区申请,等待信号等。
1.7.进程的内存段
进程使用它们自己的内存地址区域来执行工作。工作的变化取决于当前情况和进程的使用。一个进程可以有不同的工作负载和不同需要的数据大小。
进程可以处理各种各样的数据大小。进程的内存区域由如下段组成:
·文本段
这个区域用来存储可执行的代码。
·数据段
数据段由三个区域组成:数据,这个区域存储初始化的数据,比如静态变量;BSS,这个区域存储零初始化的数据,数据初始化为零;
堆(heap),这个区域,malloc()会根据需求动态分配内存。
·堆栈段
这个区域是局部变量、函数参数、返回的存储函数的存放区域。
1.8.进程的优先级和nice值
进程优先级是一个数字,用来确定CPU处理进程的顺序,并可以确定静态(实时)优先级和动态(非实时)优先级。一个具有最高优先级的进程有较大的机会得到在一个处理器上运行的权限。最高静态(实时)优先级99对应于系统优先级0,最低静态(非实时)优先级0对应于系统优先级99. 这些静态(实时)优先级,系统是不能动态改变它们的。对于动态(非实时)的优先级,内核需要使用一个基于进程行为和特征的算法做上下加减5的动态调整。一个进程可以间接的通过使用进程的nice值来改变静态优先级。Linux支持nice值从19(最低优先级)到-20(最高优先级)。默认值是0。nice值越小进程越优先获得CPU运行权限。
1.9.什么是上下文切换
在处理器执行期间,运行进程的信息被存储在处理器的寄存器或者高速缓存中,执行的进程被加载到寄存器的数据集被称为上下文。在切换过程中先存储运行进程的上下文,然后将下一个要运行的进程的上下文恢复到寄存器。进程描述符和内核模式堆栈区域用于存储上下文。这个切换的过程叫做上下文切换(context switching)。一般不能有太多的上下文切换,因为处理器每次要刷新寄存器和高速缓存,以便释放空间给新的进程,此时会导致
性能问题。
1.9.什么是中断
中断处理是优先级最高的任务之一,中断通常由I/O设备产生,比如网络接口卡、键盘、磁盘控制器、等。中断处理是Linux内核通知事件。它告诉内核中断进程执行,并要尽可能地快速执行中断处理,因为有些设备需要快速响应。当一个中断信号到达内核的时候,内核必须从当前执行的进程切换到一个新的进程,以处理这个中断。这意味着中断会导致上下文切换。中断分为两类;硬中断和软中断。硬中断由硬件设备产生,需要快速的响应,软中断被用来处理可以推迟的任务。在一个多处理器的环境中,中断是由每个处理器处理的。将中断绑定到单个处理器上可以提高系统的性能。
1.10.什么是线程
线程是在进程中产生的一个执行单元,在同一个进程中与其他线程并行运行。它们共享相同的资源,比如内存、地址空间、打开的文件等等。它们可以访问同一组应用程序的数据。线程也被称为轻量级的进程。因为它们共享资源,所以在它们中的每个线程不能同时改变它们的共享资源,因此,互斥、锁、序列化等是用户应用程序要实现的机制。
通过拜读赵永刚老师的佳作《Linux性能优化大师》,并加上自己的理解所总结的知识点。如有雷同,纯属巧合。如有维权,请通知我删除。
以上是关于linux性能优化1-进程相关基础知识的主要内容,如果未能解决你的问题,请参考以下文章