Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1417347
  • 博文数量: 122
  • 博客积分: 340
  • 博客等级: 一等列兵
  • 技术积分: 2967
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-01 11:50
个人简介

说点什么呢

文章分类

全部博文(122)

文章存档

2018年(2)

2017年(1)

2015年(2)

2014年(30)

2013年(81)

2011年(5)

2009年(1)

分类: LINUX

2013-12-06 14:32:11

1. Linux系统组件结构

Linux系统各组件相互之间的关系如下图所示:

2. 进程的优先级和nice级别

进程的优先级是一个代表进程被CPU处理的先后顺序的数字。它分为动态的优先级和静态优先级。较高优先级的进程将会获得更多的CPU处理的机会。系统内核依照进程的特性和行为,使用特定的算法动态的调整进程的动态优先级。而用户可以通过设置nice的大小来间隔的调整用户进程的静态优先级。具有高优先级的进程将会得到更长的CPU处理时间片段。

Linux支持的nice级别从19(最低优先级)-20(最高优先级)之间。nice默认值是0。进程最终被CPU处理的优先级是由内核决定的prioprity值与负的nice值之和来决定的。所以,nice取负值表示调高进程的优先级,而其取正值则表示调低系统的优先级。

Linux系统中,普通用户只能设置属于自己的进程的nice,而且nice值只能取正值,即只能调低进程的优先级。而root用户可以调整所有进程的nice,且可以设置nice值为正值,也可以为负值。

Linux下使用renice 命令来调整nice值。

3. 上下文切换

正在运行的进程的信息是存储在处理器的寄存器器和缓存里面的。将正在执行进程的数据集加载到寄存器称为上下文。在一个进程的执行片段结束执行下一个进程之前,处理器里的与之相关的内容将会存储回系统内存中,而下一个准备执行的进程相关的数据将会被加载到处理器的寄存器或缓存里(实际过程没有这么简单,CPU会按照一定算法来决定哪些数据会被移出其寄存器和缓存,而不是某一个进程的执行片断执行完成就将其相关的数据立即移出寄存器和缓存),这个过程称之为上下文切换。如果上下文切换频繁,则会影响系统的性能,因为处理器不得不在每次进行上下文切换时对其寄存器和缓存进行清理。下图显示了上文切换的过程:

上下文切换过程

4. 进程状态

每个进程在执行过程的不同阶段,有着不同的状态以标识,这些状态包括:

运行状态(TASK_RUNNING:处在这个状态下的进程意味正在被CPU执行或者处在运行队列中等待CPU的运行;

停止状态(TASK_STOPPED:当进程因为接收到系统某些信号(如SIGINT, SIGSTOP等)而挂起,则进入这个状态。处在这个状态下的进程会等待系统的信号(如SIGCONT)指示其继续执行;

可中断状态(TASK_INTERRUPTIBLE):处在这个状态下的进程会被挂起并等待某一特定的条件出现。如果处在这个状态下的进程接收到了一个停止的信号,那么进程的状态可能会改变,但是仍然可以被中断的。典型的“任务可中断”状态的进程状态是一个进程正在等待键盘的中断(即等待键盘的输入)。

非可中断状态(TASK_UNINTERRUPTIBLE:这个状态与可断状态是类似的。但是,可中断状态下的进程是可以通过发送信号被中断的,而非可中断状态下的进程却不可能通过系统信号来中断它。典型的非可中断状态是进程正在等待磁盘I/O操作时候的状态。

僵死状态(TASK_ZOMBILE:正常情况下,一个进程在其完成所有任务后会调用exit函数进行退出,并通知其父进程其将要退出。而在某些时候,处在退出中的进程并不能很好的退出,而是僵死在哪里,这样进程便进入到了僵死状态,形成僵死进程。僵死进程如果不处理则会一直挂在系统里,并占用系统资源。而通过kill命令向僵死进程发送信号是无法杀死僵死进程的,要退出僵死进程,必须要通杀死它的父进程的方法来处理。

下图是进程各状态关系图:

进程状态关系图

阅读(1697) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~