威尼斯www.9778.com-威尼斯正版官方网站

32 Top命令

日期:2019-12-25编辑作者:编程人生

环境说明:1.该进程被PCI设备的中断程序调用,运行在内核态,大概2ms调度一次。2.该进程中创建了两个共享内存(SEC_NOCACHE|SEC_COMMIT|PAGE_READWRITE),而且已经VirtualLock。3.该进程和几个运行在用户态的进程都在读写这两个共享内存。4.操作系统WindowsXPProfessionalSP3,双核四线程CPU正常运行几个小时后,内核态进程会因PageFault崩溃,崩溃时CPU寄存器信息如下:EIP:00000000(固定不变)EAX:F766DF67(固定不变)EBX:00000008(固定不变)ECX:00000014(固定不变)EDX:00000014(固定不变)EBP:89A0DE74(A0D这三位数字有时会变,其他固定)ESP:89A0DE6C(A0D这三位数字有时会变,其他固定)EDI:00000000ESI:00000024此问题困扰很久,有没有什么思路?

进程

Linux中的top命令显示系统上正在运行的进程。它是系统管理员最重要的工具之一。被广泛用于监视服务器的负载。

进程模型

操作系统中最核心的概念是进程:这是对正在运行程序的一个抽象。
一个进程就是一个正在执行程序的实例,包括程序计数器、寄存器和变量的当前值。

在多道程序设计中,一个CPU能在多个进程之间来回快速切换,达到(伪)并行效果。

一个进程是某种类型的一个活动,它有程序、输入、输出以及状态。
单个处理器可以被若干进程共享,它使用某种调度算法决定何时停止一个进程的工作,并转而为另一个进程提供服务。

1. Top 命令输出:

首先,让我们了解一下输出。top命令会显示系统的很多信息。我们需要理解不同部分输出的意义:默认运行时,top命令会显示如下输出:

图片 1

Paste_Image.png

前几行水平显示了不同系统参数的概括,接下来是进程和它们在列中的属性。

进程创建

以下四种事件可以触发进程创建:

  • 系统初始化
  • 执行了正在运行的进程所调用的进程创建系统调用(syscall)
  • 用户请求创建一个新进程
  • 一个批处理作业的初始化。

新进程一般都是由于一个已存在的进程执行了创建进程的系统调用而创建。

系统运行时间和平均负载:

图片 2

Paste_Image.png

这些字段显示:

  • 当前时间
  • 系统已运行的时间
  • 当前登录用户的数量
  • 相应最近1、5和15分钟内的平均负载。
  • 可以使用'l'命令切换uptime的显示。

进程终止

以下四种事件可以触发进程终止:

  • 正常退出(自愿的) :进程正常完成其工作而终止。
  • 出错退出(自愿的) :比如用户输入命令行时,输入一个错误参数等。
  • 严重错误(非自愿的): 出现非法指令,引用不存在的内存,除数为零时,段错误(page fault)等等。
  • 被其他进程杀死(非自愿的):其让他进程通过调用系统调用,kill掉进程。

任务

图片 3

Paste_Image.png

第二行显示的是任务或者进程的总结。进程可以处于不同的状态。这里显示了全部进程的数量。除此之外,还有正在运行、睡眠、停止、僵尸进程的数量(僵尸是一种进程的状态)。这些进程概括信息可以用't'切换显示。

进程层次

在UNIX中。一个进程和它创建的进程(即子进程)构成了一颗进程树,如下图。
UNIX在启动时会先运行一个init进程,由init进程创建新进程,最终形成了进程树,所以在整个系统中,所有的进程都是以init为根节点的进程树的成员。

每个进程和它的子进程共同组成一个进程组。发给该进程组的信号可以被进程组中的进程分别捕捉。

图片 4

image

CPU 状态:

图片 5

Paste_Image.png

下一行显示的是CPU状态。 这里显示了不同模式下的所占CPU时间的百分比。这些不同的CPU时间表示:

  • us, user: 运行(未调整优先级的) 用户进程的CPU时间
  • sy,system: 运行内核进程的CPU时间
  • ni,niced:运行已调整优先级的用户进程的CPU时间
  • wa,IO wait: 用于等待IO完成的CPU时间
  • hi:处理硬件中断的CPU时间
  • si: 处理软件中断的CPU时间
  • st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。

进程状态

  • 运行态(此进程实际占用CPU)
  • 就绪态(可运行,但因其他进程正在运行而暂时停止)
  • 阻塞态(除非某种外部事件发生,否则进程不能运行)

图片 6

image

内存使用:

图片 7

Paste_Image.png

进程的实现

系统(一般是内核)维护着一张进程表(process table)。
每个进程占一个表项,即进程控制块(Process Control Block)。
进程控制块(PCB)包含了进程状态的重要信息。如下

图片 8

image

利用PCB可以在发生中断时把进程状态的相关信息记录下来,让下次运行该进程的时的状态与上次中断时的状态一致。就如下图的过程1。

图片 9

image

进程信息:

图片 10

Paste_Image.png

默认上,top显示这些关于进程的属性:

PID
进程ID,进程的唯一标识符
USER
进程所有者的实际用户名。
PR
进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
NI
进程的nice值(优先级)。越小的值意味着越高的优先级。
VIRT
进程使用的虚拟内存。
RES
驻留内存大小。驻留内存是任务使用的非交换物理内存大小。
SHR
SHR是进程使用的共享内存。
S
这个是进程的状态。它有以下不同的值:
D - 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态

%CPU
自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM
进程使用的可用物理内存百分比。
TIME+
任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND
运行进程所使用的命令。

线程

交互命令

线程模型

进程的模型可以归纳为

  • 资源分组处理
  • 执行

资源分组处理的体现就是进程控制块(Process Control Block)。
执行的体现就是线程。

进程与线程的关系可以在下图体现:

图片 11

image

下面这个图展示出了线程共享和线程独占的内容。

图片 12

image

帮助

首先,我们可以用'h'或者'?'显示交互命令的帮助菜单

线程和进程的区别

  • 调度 :在引入线程的操作系统中,线程是调度和分配的基本单位 ,进程是资源拥有的基本单位 。把传统进程的两个属性分开,线程便能轻装运行,从而可显著地提高系统的并发程度。 在同一进程中,线程的切换不会引起进程的切换;在由一个进程中的线程切换到另一个进程中的线程时,才会引起进程的切换。

  • 并发性 :在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行,因而使操作系统具有更好的并发性,从而能更有效地使用系统资源和提高系统吞吐量。

  • 拥有资源 :不论是传统的操作系统,还是设有线程的操作系统,进程都是拥有资源的一个独立 单位,它可以拥有自己的资源。 一般地说,线程自己不拥有系统资源(只有一些必不可少的资源),但它可以访问其隶属进程的资源。

  • 系统开销: 由于在创建或撤消进程时,系统都要为之分配或回收资源,因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。 进程切换的开销也远大于线程切换的开销。

刷新

Top 命令默认是3s中刷新一次,要手动刷新,用户需要输入空格或者回车。

可以通过d或者s修改刷新间隔。

线程实现

两种方法:

  • 在用户空间
  • 在内核空间
![](https://upload-images.jianshu.io/upload_images/4362193-5b2c6ac8ea78e849.png)

image

显示命令

可以通过按字母c来切换显示命令。

用户级线程

基本结构:

  • 整个操作系统分为两个部分,内核空间和用户空间,进程当时是分布在内核空间中,在进程内部定义一个运行时系统,这个运行时系统维护线程管理过程,多线程运行在这个运行时系统的基础之上。
  • 每个进程有其专用的线程表,用来跟踪该进程中的线程。该表由运行时系统管理。当线程阻塞后,进程调用一个运行时系统的过程来检测是否需要进入阻塞。如果是则,它在线程表中保存状态信息,查看表中的就绪线程,并试图启动它。

优点:

  • 可以在不支持线程的操作系统上实现。
  • 由于线程调度时不需要陷入内核,调用都是本地调用,速度要比内核实习的快一个数量级左右
  • 允许每个进程有自己定制的调度算法。

缺点:

  • 一个线程陷入阻塞,就意味着所属进程的所有线程都阻塞了。
  • 因为线程调度不进入内核,所以无法获取时钟中断,所以进程内的一个线程不主动放弃CPU,同进程的其他线程是无法获取CPU使用权的。

切换树状视图

可以按V,切换树状试图。

图片 13

Paste_Image.png

内核级线程

基本结构:

  • 线程的创建、撤销和切换等,都需要内核直接实现,即内核了解每一个作为可调度实体的线程。
  • 这些线程可以在全系统内进行资源的竞争。
  • 内核空间内为每一个内核支持线程设置了一个线程控制块(PCB),内核根据该控制块,感知线程的存在,并进行控制。
  • 在一定程度上类似于进程,只是创建、调度的开销要比进程小。有的统计是1:10

优点:

  • 不需要任何新的、非阻塞的系统调用;
  • 当有多个处理机时,一个进程的多个线程可以同时执行。

缺点:

  • 由内核进行调度,如果线程的操作比较多,就会带来很大的开销。

修改窗口和颜色

按A分割窗口,按a和w切换,按z修改颜色。

图片 14

Paste_Image.png

进程间通信

进程间通信(Inter Process Communication,IPC)简要的说有三个问题:

  • 一个进程如何把信息传递给另一个。
  • 确保两个或更多的进程在关键活动中不会出现交叉。
  • 保证进程以正确的顺序执行。

进程间通信的方式

无名管道
  • 它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。

  • 它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。

  • 它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。

![](https://upload-images.jianshu.io/upload_images/4362193-eb9e9558631ca3f0.png)

image
命名管道(FIFO)

它是一种文件类型。

  • FIFO可以在无关的进程之间交换数据,与无名管道不同。

  • FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。

消息队列

是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。

  • 消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。

  • 消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。

  • 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。

信号量(semaphore)

它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。

  • 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。

  • 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。

  • 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。

  • 支持信号量组。

共享内存

指两个或多个进程共享一个给定的存储区。

  • 共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。

  • 因为多个进程可以同时操作,所以需要进行同步。

  • 信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。

调度

进程行为

几乎所有进程的(磁盘)I/O请求或计算都是交替突发的。
CPU不停顿地运行一段时间,然后发出一个系统调用以便读写文件。
在完成系统调用之后,CPU又开始计算,直到它需要读取更多的数据或写更多的数据为止。

  • CPU密集型
  • I/O密集型
![](https://upload-images.jianshu.io/upload_images/4362193-1a4b43eeebbcaed9.png)

[Y2X59Y2@WL9RBCAKML`5]F.png

何时调度

  1. 抢占式:给每个进程分配一个时间片,用完换下一个进程
  2. 非抢占式:进程运行知道阻塞才换下一个进程
  • 在创建一个新进程后,需要决定是运行父进程还是运行子进程。
  • 在一个进程退出时必须做出调度决策。
  • 当一个进程阻塞在I/O和信号量上或者由于其他原因阻塞时,必须选择另一个进程运行。
  • 在一个I/O中断发生时,必须做出调度决策。

调度的目标

图片 15

X0$OZJ70)IDZ}C1E}QXP@{I.png

调度算法

  • 批处理

    • 先来先服务(非抢占式)

      • 用一个单链表队列记录所有就绪进程,从尾部加入就绪进程,从首部执行进程。

      • 缺点:对I/O密集型进程不友好,每次阻塞都要排到队尾,执行完成时间相对长。

    • 最短作业优先(非抢占式)

      • 已知进入就绪队列的进程执行时间

      • 对进程排序,使进程的平均周转时间(即从进程进入队列到进程完成的时间)最小。

      • <a> t = (4A + 3B + 2C + D)
        <b> t = (4
        B + 3C + 2D + A)
        所以时间最长的A最末尾。

        图片 16

        X0$OZJ70)IDZ}C1E}QXP@{I.png

    • 最短剩余时间优先(抢占式)

      • 最短作业优先的抢占式版本

      • 每次选择剩余运行时间最短的进程运行

  • 交互式

    • 轮转调度

      • 维护一个就绪进程队列,每个进程分配固定的时间片长度,用完就回到队尾。

      • 时间片长度过短,进程调度消耗太大;过长,则平均周转时间过长。通常设为20ms-50ms。

        ![](https://upload-images.jianshu.io/upload_images/4362193-237bca85d3acc508.png)

        X0$OZJ70)IDZ}C1E}QXP@{I.png

-   优先级调度

    -   优先级高的先运行



        ![](https://upload-images.jianshu.io/upload_images/4362193-20e117d58818761b.png)

        X0$OZJ70)IDZ}C1E}QXP@{I.png

    -   多级队列

    -   最短进程优先

    -   保证调度

    -   彩票调度

    -   公平分享调度
  • 实时

    • 硬实时(hard real time)调度:调度机制确保一个关键任务能在指定时间前完成

    • 软实时(soft real time)调度:调度机制尽量给予关键任务最高优先级,尽量在指定时间前完成

本文由威尼斯www.9778.com发布于编程人生,转载请注明出处:32 Top命令

关键词:

取消高速公路省界收费站重点工作进展情况通报

新人小白一枚,刚完成一个程序,想打包,上网查询后知道installShield可以打包。用自己的笔记本联网验证很快。但是...

详细>>