精华内容
下载资源
问答
  • 显示当前系统正在执行进程相关信息,包括进程 ID、内存占用率、CPU 占用率等常用参数:-c 显示完整进程命令 -s 保密模式 -p 指定进程显示 -n 循环显示次数 1 2 3 4 实例:top - 14:06:23 up 70 days, 16:44, 2...

    显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等

    常用参数:

    -c 显示完整的进程命令 -s 保密模式 -p 指定进程显示 -n 循环显示次数 1 2 3 4 实例:

    top - 14:06:23 up 70 days, 16:44, 2 users, load average: 1.25, 1.32, 1.35 Tasks: 206 total, 1 running, 205 sleeping, 0 stopped, 0 zombie Cpu(s): 5.9%us, 3.4%sy, 0.0%ni, 90.4%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 32949016k total, 14411180k used, 18537836k free, 169884k buffers Swap: 32764556k total, 0k used, 32764556k free, 3612636k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28894 root 22 0 1501m 405m 10m S 52.2 1.3 2534:16 java 1 2 3 4 5 6 7 前五行是当前系统情况整体的统计信息区。

    第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:

    14:06:23 — 当前系统时间

    up 70 days, 16:44 — 系统已经运行了70天16小时44分钟(在这期间系统没有重启过的吆!)

    2 users — 当前有2个用户登录系统

    load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

    load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

    第二行,Tasks — 任务(进程),具体信息说明如下:

    系统现在共有206个进程,其中处于运行中的有1个,205个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

    第三行,cpu状态信息,具体属性说明如下:

    5.9%us — 用户空间占用CPU的百分比。 3.4% sy — 内核空间占用CPU的百分比。 0.0% ni — 改变过优先级的进程占用CPU的百分比 90.4% id — 空闲CPU百分比 0.0% wa — IO等待占用CPU的百分比 0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比 0.2% si — 软中断(Software Interrupts)占用CPU的百分比 1 2 3 4 5 6 7 备注:在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识!

    第四行,内存状态,具体信息如下:

    32949016k total — 物理内存总量(32GB) 14411180k used — 使用中的内存总量(14GB) 18537836k free — 空闲内存总量(18GB) 169884k buffers — 缓存的内存量 (169M) 1 2 3 4 第五行,swap交换分区信息,具体信息说明如下:

    32764556k total — 交换区总量(32GB) 0k used — 使用的交换区总量(0K) 32764556k free — 空闲交换区总量(32GB) 3612636k cached — 缓冲的交换区总量(3.6GB) 1 2 3 4 第六行,空行。

    第七行以下:各进程(任务)的状态监控,项目列信息说明如下:

    PID — 进程id USER — 进程所有者 PR — 进程优先级 NI — nice值。负值表示高优先级,正值表示低优先级 VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA SHR — 共享内存大小,单位kb S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 %CPU — 上次更新到现在的CPU时间占用百分比 %MEM — 进程使用的物理内存百分比 TIME+ — 进程使用的CPU时间总计,单位1/100秒 COMMAND — 进程名称(命令名/命令行) 1 2 3 4 5 6 7 8 9 10 11 12 top 交互命令

    h 显示top交互命令帮助信息 c 切换显示命令名称和完整命令行 m 以内存使用率排序 P 根据CPU使用百分比大小进行排序 T 根据时间/累计时间进行排序 W 将当前设置写入~/.toprc文件中 o或者O 改变显示项目的顺序

    展开全文
  • 中断的作用

    2008-12-08 21:53:00
    方式是通过中断,比如执行系统调用时候是通过0x80,这种在很多书上又被称为trap。在执行系统调用过程中要将寄存器里保存到核心栈中,一方面是为了切换回到原来级别时能恢复现场,也就是保存原来运行环境;...
    怎么由用户态代码转变到内核态代码的执行?方式是通过中断,比如执行系统调用的时候是通过0x80,这种在很多书上又被称为trap。在执行系统调用的过程中要将寄存器里的保存到核心栈中,一方面是为了切换回到原来的级别时能恢复现场,也就是保存原来的运行环境;另一方面也可以传递参数;所以对于每个进程都有自己对应的内核堆栈。在执行int 0x80前,eax里放的就是系统调用号。gcc中的asmlinkage是告诉函数必须从堆栈中取参数,而不是从寄存器中取参数,我们会发现很多系统调用函数的实现都会有这种标志。因为在返回到用户态时会重置原来的寄存器值,所以如果要返回值的话(通常返回值会保存在eax中),系统调用就必须要替换堆栈中的eax所以经常会有这么一条汇编语句movl %eax,EAX(xxx)#save the return value。
    展开全文
  • 时候提高linux系统网卡吞吐量,需要...需要关闭中断自平衡和固定绑定中断号到固定CPU,程序运行退回到单核模式。 1. 关闭irqbalance service irqbalance stop 关闭开机启动 chkconfig irqbalance of...

     

    有的时候提高linux系统网卡的吞吐量,需要开启中断平衡,但前提是内核或者应用程序需要支持多核下的并发操作,否则会因为并发错误,导致程序行为出差。需要关闭中断自平衡和固定绑定中断号到固定的CPU,程序运行退回到单核模式。

     

    1. 关闭irqbalance
        service irqbalance stop
        关闭开机启动
        chkconfig irqbalance off

     


    2. 绑定中断(需要将混杂口和vhost0对应的物理口都绑定)
        a. 查看网卡中断号,

     #16是中断号
        cat /proc/interrupts | grep <interface_name>
        16:    4395027          0          0          0   IO-APIC-fasteoi   vmwgfx, ens34
        b. 绑定中断号
        echo '2' > /proc/irq/16/smp_affinity

    3. linux RPS RFS

    利用软件的方法,将网卡单队列模拟成多队列,然后将不同的队列绑定到不同的CPU

    展开全文
  • 在计算机发展过程中,外部设备速度长期低于...不管是外部中断还是内部中断,在它们到达CPU之前,都会首先经过一个叫做中断控制器(Interrupt Controller)硬件,其作用是根据中断源(Interrupt Source,也叫IRQ ...

    351a544f433c7b3c629ceb8f4e6321ff.png

    在计算机的发展过程中,外部设备的速度长期低于CPU,为了在必要的时候获取CPU的注意,需要在外设和CPU之间提供一种中断的机制。同时,对于现代操作系统,其内部的运行依赖于时钟的驱动,这也需要中断的支持。

    不管是外部中断还是内部中断,在它们到达CPU之前,都会首先经过一个叫做中断控制器(Interrupt Controller)的硬件,其作用是根据中断源(Interrupt Source,也叫IRQ - Interrupt Request)的优先级对中断进行派发。

    在多核系统中,中断控制器还需要根据CPU预先设定的规则,将某个中断送入指定的CPU(有点像路由器),以实现中断的负载均衡(irq balance)。x86架构的中断控制器被称为APIC(Advanced Programmable Interrupt Controller),ARM架构的中断控制器则被称为GIC(Generic Interrupt Controller),它们都是适用于多核系统的。

    204c23adf3406829fd2c67f06b6b13c6.png
    irq_chip

    Linux中描述中断控制器的数据结构是struct irq_chip,因为不同芯片的中断控制器对其挂接的IRQ有不同的控制方法,因而这个结构体主要是由一组用于回调(callback),指向系统实际的中断控制器所使用的控制方法的函数指针构成。

    struct irq_chip {
    	const char    *name;
    	void	     (*irq_enable)(struct irq_data *data);
    	void	     (*irq_disable)(struct irq_data *data);
    	void	     (*irq_mask)(struct irq_data *data);
    	void	     (*irq_unmask)(struct irq_data *data);
    
    	void	     (*ipi_send_single)(struct irq_data *data, unsigned int cpu);
    	void	     (*ipi_send_mask)(struct irq_data *data, const struct cpumask *dest);
    	...
    };

    其中,"name"是中断控制器的名称,就是我们在"/proc/interupts"中看到的那个,比如下图中蓝框所示的的"IO-APIC"。

    58499607f19222c26fd387e4969cd178.png

    "irq_enable/irq_unmask"用于中断使能,"irq_disable/irq_mask"用于中断屏蔽。在多核系统中,CPU之间的中断被称为IPI(Inter-Processor Interrupt),因此"ipi_send_single"表示这个IPI是发给单独的一个CPU,ipi_send_mask"表示IPI是发给mask范围内是所有CPU。

    irq_desc

    既然说到对每个IRQ不同的控制,那就不得不说下对IRQ的描述,IRQ是由struct irq_desc表示的:

    struct irq_desc {
    	const char          *name;
            unsigned int	    depth;
    	struct irqaction    *action;
    	struct irq_data	    irq_data;
    	struct cpumask	    *percpu_enabled;	
    	...
    };

    其中,"name"是这个IRQ的名称,同样可以在"/proc/interupts"中查看,如上图红框所示部分。

    "depth"是关闭该IRQ的嵌套深度,正值表示禁用中断,而0表示可启用中断。

    void __disable_irq(struct irq_desc *desc)
    {
        if (!desc->depth++)
        irq_disable(desc);
    }
    
    irq_action

    "irq_desc"中的"action"是IRQ对应的中断处理函数(ISR - Interrupt Service Routine),按理ISR应该就是一个函数指针,可这里确是一个指向struct irqaction的指针。

    这是因为在早期的一些处理器中,硬件中断的数目很少,而且有些中断编号已经永久性地分配给了标准的系统组件(比如keyboard和timer),为了服务于更多的设备,只能对有限的IRQ中断号进行共享。这样,同一个中断号就会对应多个不同的处理函数,这些处理函数通过一个单向链表串联在一起的。

    struct irqaction {
    	irq_handler_t	    handler;
    	void		    *dev_id;
    	struct irqaction    *next;
    	...
    }

    当一个中断发生的时候,其对应IRQ链表上的所有"irqaction"的"handler"都将被依次执行,以判断是否是自己的设备产生的中断,这主要靠读取自己设备的中断状态寄存器来完成。因此共享中断时,即便不是你的设备产生的中断,你的"handler"也会被调用到。为了避免无谓的消耗,需要一进"handler"就立刻进行判断,如果不是,就尽快的退出。

    6d8f1e54e1b85871c1e3a6bbcdb97869.png

    当一个设备从挂接的IRQ线上卸载时,设备对应的"irqaction"也应该相应地从IRQ链表中移除,此时需要一个表示挂接在同一个IRQ上的不同设备的标识,这个标识就是"dev_id"。内核通过比对"dev_id",来找到那个应该移除的"irqaction"。

    有了中断共享,处理起来着实麻烦了很多,好在新的硬件平台上的设计已经很少采用外设共享IRQ的方式了,因为现在SOC能提供的有中断功能的GPIO已经非常多,足够使用了。

    irq_data

    至于"irq_desc"中的"irq_data",这个在前面已经出现过了,"irq_chip"结构体中的每个函数指针,都会携带一个指向struct irq_data的指针作为参数,可见这个"irq_data"与中断控制必定关系密切。也就是说,在"irq_desc"的定义中,与中断控制器紧密联系的这部分被单独提取出来,构成了"irq_data"结构体:

    struct irq_data {
    	struct irq_chip		*chip;
    	struct irq_domain	*domain;
    	unsigned int		irq;
    	unsigned long		hwirq;
            ...
    };
    

    其中,"chip"就指向了这个IRQ所挂接的中断控制器,两者的绑定是通过irq_set_chip()函数完成的。

    int irq_set_chip(unsigned int irq, struct irq_chip *chip)
    {
    	struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
    	desc->irq_data.chip = chip;
            ...
    }
    

    a21f00084990ba7aaa989591ed861912.png

    绑定之后就可以利用"irq_chip"提供的各种处理函数了,比如内核提供的用于禁止一个IRQ的irq_disable(),它就是通过该IRQ对应的"irq_desc"的"irq_data"域,找到对应的"irq_chip",进而回调"irq_chip"中的"irq_disable"函数。

    void irq_disable(struct irq_desc *desc)
    {
    	if (desc->irq_data.chip->irq_disable) 
    		desc->irq_data.chip->irq_disable(&desc->irq_data);
        ...
    }
    

    挂接在同一个中断控制器上的IRQ有相同的控制方法,比如"irq_enable"都是通过写入这个中断控制器的一组寄存器实现,只是不同IRQ的使能需要写入寄存器中不同的bits。这里的"irq_enable"只是用于使能单个IRQ的,而不是使能整个中断控制器。

    虽然是使能单个IRQ,但由于这是在中断控制器层面的操作,因而对所有挂接这个中断控制器的CPU都有效,如果要控制单个IRQ对单个CPU有效,则可以借助"irq_desc"中的"percpu_enabled"位域,实现irq_percpu_enable()函数。

    要关闭一个CPU对所有中断的响应,应该使用local_irq_disable()/local_irq_save()函数,以x86为例,这是通过关中断指令"cli"实现的。这种中断关闭只对执行关中断指令的CPU有效,要想直接关闭所有CPU对所有中断的响应,通常是不行的。

    系统中如果只有一个中断控制器,其实是不需要什么绑定的,可是随着芯片功能越来越强,硬件也越来越复杂,现在的很多系统已经不止一个中断控制器了。

    4a65162c5e196007b5dd60bbd9277e20.png

    我们读芯片手册的时候都知道,每个IRQ都有一个编号,称为中断号。这里"irq"就是表示中断号,可是为什么会有"irq"和"hwirq"两个中断号?详情请看下文分解。

    参考:

    https://l2h.site/2019/01/01/linux-interrupt-3/

    Interrupts -2- (irq chip)

    原创文章,转载请注明出处。

    展开全文
  • --------  --硬件:  作业访问某页面时,硬件地址转换结构查页表,若该页对应有效位... 中断处理程序先看主存是否还有空缺快,若有,根据辅助存储器地址找到该页并从硬盘装入内存,并在页表中填上它,修
  • 中断

    2017-08-25 11:15:35
    中断Linux驱动作用:1....不同设备对应中断不同,他们之间不同从操作系统级来看,差别就在于一个数字标识中断号。二、中断处理流程三、中断处理上半部分和下半部分举例:网卡接收数据包上半部分:应答硬件,拷
  • 根据CPU的设计,中断类型码的作用就是用来定位中断处理程序。比如CPU 根据中断类型码 13,就可以找到13号中断的处理程序。可随之而来的问题是,若要定位中断处理程序,需要知道它的段地址和偏移地址,而如何根据 8位...
  • 中断的作用是为了定时更新系统日期和时间,使系统时间不断地得到跳转。另外该中断中断处理函数除了更新系统时间外,还需要更新本地CPU统计数。指的是调用scheduler_tick递减进程的时间片,若进程的时间片递减到0...
  • CPU支持256个中断向量,早期的CPU把内存中从0开始的1K字节作为一个中断向量表,当从引脚中得到中断信号后,便读取中断向量,并根据中断向量得到相应的中断服务程序的入口...但门的作用不仅仅限于中断,只要想切...
  • 中断向量表

    2015-02-12 16:38:00
    中断向量表是8088系统内存中最低端1K字节空间,它的作用就是按照中断类型号从小到大的顺序存储对应的中断向量,总共存储256个中断向量。在中断响应过程中,CPU通过从接口电路获取的中断类型号(中断向量)计算对应...
  • Linux之时钟中断详解

    2021-01-20 16:27:30
    中断的作用是为了定时更新系统日期和时间,使系统时间不断地得到跳转。另外该中断中断处理函数除了更新系统时间外,还需要更新本地CPU统计数。指的是调用scheduler_tick递减进程的时间片,若进程的时间片递减到0...
  • 【汇编语言】中断

    2021-05-09 21:15:27
    sti,cli的作用以及什么时候用? 中断的过程,到底干了什么事? (理解)中断向量的存放的内存地址在哪里、中断向量的值、中断向量值的含义。 中断向量存放在地址为0000:0000h~0000:03ffh的内存空间中。 中断向量为...
  • CPU支持256个中断向量,早期的CPU把内存中从0开始的1K字节作为一个中断向量表,当从引脚中得到中断信号后,便读取中断向量,并根据中断向量得到相应的中断服务程序的入口...但门的作用不仅仅限于中断,只要想切...
  • 汇编语言中断指令

    2017-04-04 20:24:00
    INT 21H的作用是功能中断,即通知CPU要实现某种功能,因此需要配合功能使用,功能保存在AH寄存器中。 例子1: MOV AH,4CH INT 21H 解读:AH存放4CH功能,表示返回DOS,INT 21H向CPU发送此功能中断,返回DOS...
  • stm32中断优先级

    2016-02-26 16:27:00
    VIC_IRQChannelPreemptionPriority:先占优先级 NVIC_IRQChannelSubPriority:从优先级 ...同先占优先级下的中断是不能进行嵌套,只能根据从优先级号码进行排队,从优先级号码即为排队号码,号码越低越靠...
  • 如果CPU在DMA初始化设置和启动硬盘操作等方面用了1000个时钟周期,并且在DMA传送完成后的中断处理需要500个时钟,则在硬盘100%处于工作状态情况下, CPU用于硬盘I/O操作时间百分比大约是多少?案例分析二:请求...
  • Linux之时钟中断

    千次阅读 2017-04-14 16:33:13
    中断的作用是为了定时更新系统日期和时间,使系统时间不断地得到跳转。另外该中断中断处理函数除了更新系统时间外,还需要更新本地CPU统计数。指的是调用scheduler_tick递减进程的时间片,若进程的时间片递减到0...
  • 8259A中断控制器

    2015-06-26 19:27:47
    关于IRQIRQ全称为Interrupt Request,即是“中断请求”的意思,IRQ的作用就是在我们所用的电脑中,执行硬件中断请求的动作,比如我们需要读取硬盘中的一段数据时,当数据读取完毕,硬盘就通过IRQ来通知系统
  • STM32 中断实验

    2020-06-17 21:58:28
    实验目的: 对系统中断的过程有一个大概的了解,能够自主写出代码控制各IO口的中断信息;应用目的通 过板载的 4 个按键,控制板载的两个 LED 的亮灭以及蜂鸣器的发声。 简介 STM32支持19个外部中断...它的作用是监视供
  • wince中断之2

    2012-09-12 22:29:59
    上片我的博文说到一个问题,今天现在将将其整理如下: 1:wince下面的中断有两种:一种是静态的,另一种是动态的。他们的作用是维护两个数组g_oalsysIntr2iqr[]和g_oaliqr2sysIntr...向里面填充对应的物理中断号和逻辑
  • 1、PL20ms中断是上升沿边沿触发方式,中断号是61 2、调试过程1,不设置中断触发方式时,一直进入中断出不来,不进入主函数了。 3、调试过程2,设置中断触发方式为边沿触发,不进中断,一直在主函数中。 B、...
  • 51定时器中断程序编写 [李园7舍_404]

    千次阅读 2012-12-01 08:17:45
    上篇笔记记录到51单片机的中断允许寄存器、定时器/计数器工作方式寄存器(TMOD)、定时器/计数器控制寄存器(TCON)各位的作用。这些寄存器都是用来为编写定时器中断程序编写...void 函数名() 中断号 using 工作组 {  
  • GIC简介 GIC全称为General Interrupt Controller,主要作用可以归结为: ...软件产生中断,中断号是0-15。通过向SGI寄存器写数触发,相当于IPI,可用于CPU间通信,比如时间同步,全局进程调度信息等。...
  • 当您在操作过程中输入使用某一硬件命令时,它会根据中断号使用相应硬件来完成命令工作,最后根据中断号跳回原来状态。什么是BIOS?这里有句俗话。BIOS实际上是“Basic Input Output System”英文缩写,中文...
  • 中断门和陷阱门的作用机理几乎是一样的,只不过使用调用门时使用call指令,而这里我们使用int指令。中断门和陷阱门的结构如下图: TYPE的4位将变为0xE(中断门)或0xF(陷阱门)。 指令int n产生中断时的情形如下图...
  • 当可屏蔽中断(INT4~15)发生后,就会运行相应中断vector,在vector代码中会找到注冊在该中断号进程,然后由OSEck负责调度,进而切换到可屏蔽中断进程。该中断进程与优先级进程类似,相同有PCB(进程控制块...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 267
精华内容 106
关键字:

中断号的作用