linux

Linux进程管理:

进程是可以运行在处理器CPU上的一个可执行的实例。进程完成工作需要所有linux内核需要的资源。

所有的在linux操作系统上运行的内存都是由task_struct 体系来管理的,也被称为进程描述符。一个进程描述符包括进程运行所需的所有信息,比如:进程号,进程的属性,还有构成进程的所有资源。如果你知道进程的体系,你就可以明白进程执行和结果的关键点。

进程的生命周期:

每一个进程都有它自己的生命周期比如创建,执行,终止和删除。只要系统正在运行,这些阶段会被重复几百万次。因此,进程的生命周期对于进程的执行情况很重要。

当一个进程创建一个新进程的时候,父进程发出一个fork()的系统新号。一个fork()信号发出之后,它为新的进程赋予了一个进程描述符和进程号。它复制了父进程的进程号给子进程。

同时父进程的全部地址空间没有被复制,父进程和子进程共享一个地址空间。

Exec()系统新号给子进程的地址空间一个新的程序。因为,父子进程共享一个地址空间,写一个新的程序数据造成页错误。因此,内核给子进程分配一个新的物理页。

被延迟的操作叫做复制写,子进程通常执行它自己的程序而不是执行父进程的。这个操作节省了不必要的开支,因为复制整个内存地址非常缓慢需要占用很多CPU时间。

当程序执行完之后,子进程会伴随着一个exit()的系统信号结束。Exit()系统新号释放大部分的进程数据结构通知父进程发送一个结束的信号。此时,这个子进程被称为僵尸进程。

直到父进程接收到wait()系统信号,知道子进程结束之后,子进程才彻底被移除。它会删除子进程的数据结构并释放进程描述符。

Linux线程管理

线程是在处理器上执行的单元。它和进程里的其他线程并列的在一个CPU中运行。它们共享内存,地址空间,打开的文件等资源。它们可以进入相同的应用数据。一个线程又被称为轻量级进程。因为他们共享资源,每个线程不能同时改变它们的共享资源。贯彻共有抵制,锁,序列是用户应用的责任。

从表现的角度来讲,线程创造没有进程创造昂贵,因为线程不需要在创建的时候复制资源。换一步说,线程和进程在规划运算的时候有相同的特点。内核用相似的态度来处理他们。

现在的linux执行中,支持UNIX操作系统接口标准。

Linux进程优先级和亲和力的等级

进程优先级是个决定进程在CPU中运行顺序的值,被动态的和静态的优先级决定。更高优先级的进程有更大的机会在处理器上运行。

内核根据需要动态调整动态的优先级基于进程的动作和特点。用户的进程通过进程的亲和力等级来改变进程的静态优先级。更高静态优先级的进程会有更长的CPU时间片。

Linux支持亲和力等级从19-20 缺省值是0,切换到root用户可以把程序的亲和力值编程负值(负值的亲和力更高)。

Linux上下文切换

进程执行过程中,正在运行的进程信息储存在CPU的寄存器和缓存中。这些在加载到寄存器里的正在运行的CPU信息叫做上下文。为了在进程中切换,正在运行的进程上下文被存储,下一个要运行的进程的上下文被恢复到寄存器中。这个切换的进程叫做上下文切换。每次上下文切换时,处理器需要冲刷掉寄存器和缓存中的内容来给下一个进程腾出空间。有太多的上下文切换会造成性能的影响。


本文出自 “原歌轩” 博客,谢绝转载!

你可能感兴趣的:(linux调优)