首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

进程状态之不可中断状态

Linux系统中,进程的“不可中断状态”就像是这位员工在专心等待一个非常重要的快递包裹——里面可能是他完成工作的关键文件。...不可中断的等待时刻 当进程发起一个磁盘读写请求或等待其他类似的硬件操作时,它会进入“不可中断的睡眠”状态,用字母“D”表示。...为什么要有不可中断? 这种设计是为了数据的一致性和安全性。比如,进程正在读取磁盘上的数据,如果读取过程中允许进程中断,那么可能一部分数据已经读入内存,另一部分却还是旧的,这样就会造成数据不一致。...因此,系统不允许这样的中断,确保操作要么全部完成,要么都不开始。 僵尸进程与D状态的区别 有时候,不可中断状态的进程会被误解为“僵尸进程”。实际上,两者是不同的。...总之,不可中断状态是Linux系统中进程生命周期中的一个特殊阶段,它确保了在进行关键性操作时的连续性和完整性,虽然看起来像是在“偷懒”,但实际上是在为后续工作的顺利进行打下坚实的基础。

18810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    进程通信 软中断 signal()解读

    中断通信 进程间通信方式有多种,其中软中断通信是一种常见的方式,它基于信号机制,可以在不同进程之间进行通信。...软中断通信的实现方式是,一个进程向另一个进程发送一个特定的信号,该信号被接收进程捕获,并进行相应的处理。...需要注意的是,软中断通信是一种异步通信方式,即发送进程和接收进程之间并不存在直接的同步机制。...因此,在设计使用软中断通信的系统时,需要充分考虑这种异步机制所带来的影响。 signal() 概述 signal()函数是UNIX/Linux中的一个系统调用,用于注册信号处理程序。...信号是操作系统中的一种通知机制,用于通知进程发生了某些事件,比如接收到了外部中断、收到了某个进程发送的信号等等。当系统接收到信号时,会中断进程的正常执行流程,转而执行信号处理程序。

    23030

    Linux中断 - IDT

    [toc] 如何设置IDT IDT 中断描述符表定义 中断描述符表简单来说说是定义了发生中断/异常时,CPU按这张表中定义的行为来处理对应的中断/异常。...中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...pre-cpu的中断栈,还是使用IST的中断栈; type表示所中断是何种类型,目前有以下四种: enum { GATE_INTERRUPT = 0xE, //中断门 GATE_TRAP...传统系统调用相关 IDT 的设置 Linux系统启动过程中内核压解后最终都调用到start_kernel, 在这里会调用trap_init, 然后又会调用idt_setup_traps: void...硬件中断相关IDT的初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int

    6.6K10

    2.中断进程阻塞

    本篇是多路复用相关的知识的第二篇文章,主要讲解中断进程阻塞在整个网络数据传递过程中,所经历的过程。...中断的过程如下图,和函数调用差不多。只不过函数调用是事先定好位置,而中断的位置由“信号”决定。 ? 对于网络数据而言,网卡接收到的数据,会把数据写入到内存中。...然后,网卡向cpu发出一个中断信号,操作系统便能得知有新数据到来,再通过网卡中断程序去处理数据。...进程在recv阻塞期间,计算机收到了对端传送的数据(步骤①)。数据经由网卡传送到内存(步骤②),然后网卡通过中断信号通知cpu有数据到达,cpu执行中断程序(步骤③)。...此处的中断程序主要有两项功能,先将网络数据写入到对应socket的接收缓冲区里面(步骤④),再唤醒进程A(步骤⑤),重新将进程A放入工作队列中。

    1.7K31

    Linux 中的各种栈:进程栈 线程栈 内核栈 中断

    送货 线程 = 开送货车 系统调度 = 决定合适开哪部送货车 进程 = 道路 + 加油站 + 送货车 + 修车厂 Linux 中有几种栈?...内核将栈分成四种: 进程栈 线程栈 内核栈 中断栈 一、进程进程栈是属于用户态栈,和进程 虚拟地址空间 (Virtual Address Space) 密切相关。...二、线程栈 从 Linux 内核的角度来说,其实它并没有线程的概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分的统一到了 task_struct 中。...线程仅仅被视为一个与其他进程共享某些资源的进程,而是否共享地址空间几乎是进程Linux 中所谓线程的唯一区别。...中断也是如此,当系统收到中断事件后,进行中断处理的时候,也需要中断栈来支持函数调用。由于系统中断的时候,系统当然是处于内核态的,所以中断栈是可以和内核栈共享的。

    2.9K50

    面试系列之-可中断不可中断公平非公平自旋锁(JAVA基础)

    中断锁与不可中断锁 在Java中有两种锁,一种是内置锁synchronized,一种是显示锁Lock,其中Lock 锁是可中断锁,而 synchronized 则为不可中断锁。...所谓的中断锁指的是锁在执行时可被中断,也就是在执行时可以接收interrupt的通知,从而中断锁执行,不可中断锁的问题是,当出现“异常”时,只能一直阻塞等待,别无其他办法,中断锁的出现,就可以打破这一僵局...,它可以在等待一定时间之后,主动的中断线程,以解决线程阻塞等待的问题; 可中断锁是指抢占过程可以被中断的锁,JUC的显式锁(如ReentrantLock)是一个可中断锁。...不可中断锁是指抢占过程不可以被中断的锁,如Java的synchronized内置锁就是一个不可中断锁;锁的可中断抢占: 在JUC的显式锁Lock接口中,有以下两个方法可以用于可中断抢占: (1)lockInterruptibly...不可重入的自旋锁 自旋锁的基本含义为:当一个线程在获取锁的如果锁已经被其他线程获取,调用者就一直在那里循环检查该锁是否已经被释放,一直到获取到锁才会退出循环。

    41220

    Linux 中的各种栈:进程栈 线程栈 内核栈 中断

    送货 线程 = 开送货车 系统调度 = 决定合适开哪部送货车 进程 = 道路 + 加油站 + 送货车 + 修车厂 Linux 中有几种栈?...内核将栈分成四种: 进程栈 线程栈 内核栈 中断栈 一、进程进程栈是属于用户态栈,和进程 虚拟地址空间 (Virtual Address Space) 密切相关。...二、线程栈 从 Linux 内核的角度来说,其实它并没有线程的概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分的统一到了 task_struct 中。...线程仅仅被视为一个与其他进程共享某些资源的进程,而是否共享地址空间几乎是进程Linux 中所谓线程的唯一区别。...中断也是如此,当系统收到中断事件后,进行中断处理的时候,也需要中断栈来支持函数调用。由于系统中断的时候,系统当然是处于内核态的,所以中断栈是可以和内核栈共享的。

    3.4K20

    Linux 中断处理浅析

    最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着”重要的事马上做, 不重要的事推后做”的异步处理思想....将当前寄存器信息压入栈中; (以便中断退出时恢复) 显然, 这两步都是不可重入的(如果在保存寄存器值时被中断了, 那么另外的操作很可能就把寄存器给改写了, 现场将无法恢复), 所以前面说到的CPU进入中断服务程序时要自动禁止中断...把不可重入的一部分在中断处理程序中(关中断)去完成, 然后调用raise_softirq设置一个软中断, 中断处理程序结束. 后面的工作将放在soft_irq里面去做....这是由内核的设计决定的, 中断服务程序没有自己的task结构(即操作系统教科书上说的进程控制块), 所以它不能被内核调度....连续的低优先的中断可能持续占有CPU, 而高优先的某些进程则无法获得CPU; 2.

    7.4K80

    操作系统篇-进程管理和中断

    分配资源最重要的是:独立的内存空间,线程调度执行(线程共享进程的内存空间,没有自己独立的内存空间) 线程在Linux中的实现 《Linux内核设计与实现》第三版28页 线程在Linux就是一个普通的进程...进程 Linux中也称为task,是系统分配资源的基本单位 资源包括:独立的地址空间,内核数据结构(进程描述符…),全局变量, 数据段… Linux进程描述符:PCB (Process Control...Block),用于Linux进程管理(线程有他的PCB) 僵尸进程 ps -ef |grep defunct (defunct表示无用的僵尸进程) 父进程产生子进程后,会维护子进程的PCB结构,子进程退出后...只有实时进程主动让出,或者执行完毕后,普通进程才有机会运行。 3. 中断中断 硬件和操作系统通信的一种机制 ?...执行过程: 键盘 -----中断控制器(通知cpu一个中断信号来了)--------cpu(在内存中固定位置找处理程序)-------执行程序(查中断向量表,把中断信号给kernel)-------kernel

    1.2K00

    linux内核缺页中断处理

    4.一旦知道了发生缺页中断的虚拟地址,操作系统会检查地址是否有效,并检查读写是否与保护权限一致,不过不一致,则向进程发一个信号或者杀死该进程。...5.如果选择的页框脏了,则将该页写回磁盘,并发生一次上下文切换,挂起产生缺页中断进程让其他进程运行直到写入磁盘结束。且回写的页框必须标记为忙,以免其他原因被其他进程占用。...6.一旦页框干净后,操作系统查找所需页面在磁盘上的地址,通过磁盘操作将其装入,当页面被装入后,产生缺页中断进程仍然被挂起,并且如果有其他可运行的用户进程,则选择另一用户进程运行。...9.调度引发缺页中断进程,操作系统返回调用他的汇编例程 10.该例程恢复寄存器和其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过。...linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。

    10.8K22

    Linux内核硬中断中断的原理和实现

    linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...(5)硬中断和软中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断中断号是由中断控制器提供的,软中断中断号由指令直接指出,无需使用中断控制器。...硬中断是可屏蔽的,软中断不可屏蔽。 硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。 软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。...in_interrupt()) /* 如果不处于硬中断或软中断 */ wakeup_softirqd(void); /* 唤醒ksoftirqd/n进程 */ } Percpu变量irq_cpustat_t

    22.4K21

    linux 中断机制《Rice linux 学习笔记》

    这篇文章以按键为例子讲解linux中断原理,中断的架构,中断的实现。 在我们的开发中,检测按键是否触发,无非就两种方法—轮询和中断。作者认为两种方法最大的区别就是CPU的利用率。...Linux中断原理: 中断:处理器异常的一种,它是一种特殊的电信号,用硬件发给处理器,处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据。...Linux中断的相关函数: 1、注册中断函数: 中断处理函数结构: typedef irqreturn_t (*irq_handler_t)(int, void*); 注册中断函数:int request_irq...dev:与request_irq的参数dev必须一致,将request_irq指定的dev传递给这个参数; Linux中断处理分析: 第一种方式:应用层的读,不管什么情况下,都会返回。...Linux中断实现: 这里例子采用等待队列的方式实现(也就是上述的第二种方法)。

    4.8K10

    Linux进程——Linux进程进程优先级

    如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进程优先级 1. 僵尸进程 僵尸进程就是处于僵尸状态下的进程!...所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态 僵尸状态就是Linux状态中的X死亡状态!...配置进程优先权对多任务环境的linux很有用,可以改善系统性能。...NI :NICE值,表示优先级的修改数据 NICE其取值范围是-20至19,一共40个级别 Linux进程的优先级数值范围:60~99 Linux中默认进程的优先级都是:80 Linux是支持动态优先级调整的...总结 本篇文章前部分紧贴上篇Linux进程,分析完了Linux下常见的进程状态,然后初步了解了Linux进程优先级,而进程优先级与前面内容相差较大,希望大家能够多花点时间理解!

    10210

    Linux中断虚拟化(一)

    作者简介 王柏生 资深技术专家,先后就职于中科院软件所、红旗Linux和百度,现任百度主任架构师。在操作系统、虚拟化技术、分布式系统、云计算、自动驾驶等相关领域耕耘多年,有着丰富的实践经验。...著有畅销书《深度探索Linux操作系统》(2013年出版)。 谢广军 计算机专业博士,毕业于南开大学计算机系。资深技术专家,多年的IT行业工作经验。...本文内容节选自《深度探索Linux虚拟化技术》,已获得机械工业出版社华章公司授权。...因此,在本章中,我们简单介绍硬件中断的基本原理,然后结合中断的基本原理讨论如何虚拟化中断芯片。...外设的中断引脚不可能连接到每个LAPIC上,因此,有一个统一的I/O APIC芯片负责连接外设,如果一个I/O APIC引脚不够用,系统中可以使用多个I/O APIC。

    6.4K30

    Linux中断虚拟化(二)

    作者简介 王柏生 资深技术专家,先后就职于中科院软件所、红旗Linux和百度,现任百度主任架构师。在操作系统、虚拟化技术、分布式系统、云计算、自动驾驶等相关领域耕耘多年,有着丰富的实践经验。...著有畅销书《深度探索Linux操作系统》(2013年出版)。 谢广军 计算机专业博士,毕业于南开大学计算机系。资深技术专家,多年的IT行业工作经验。...本文内容节选自《深度探索Linux虚拟化技术》,已获得机械工业出版社华章公司授权。...CPU不可能为每个硬件都设计专门的管脚接收中断,管脚数量的限制、电路的复杂度、灵活度等方方面面都不现实,因此,需要设计一个专门管理中断的单元。...= -1) returnvector; … } linux.git/drivers/kvm/i8259.c int kvm_pic_read_irq(struct kvm_pic *s)

    6K10

    Linux中断机制分析

    中断分析最近工作繁忙,没有时间总结内核相关的一些东西。上次更新博客到了linux内核中断子系统。这次总结一下软中断,也就是softirq。之后还会总结一些tasklet、工作队列机制。...这样的后果会造成有可能丢失外部中断。于是,linux内核设计出了一种架构,中断函数需要处理的任务分为两部分,一部分在中断处理函数中执行,这时系统关闭中断。...在linux系统的进程数据结构里,有这么一个数据结构 #define preempt_count()(current_thread_info()->preempt_count), 利用preempt_count...Linux内核就中断方面就必须考虑平衡这三个方面的问题。而下面我要分析的__do_softirq函数就恰似在这三者之间打太极,游刃有余,面面俱到!...系统将唤醒一个软件中断处理的内核进程,在内核进程中处理pending中的软件中断。这里要注意,之前我们分析的触发软件中断的位置其实是中断上下文中,而在软中断的内核线程中实际已经是进程的上下文。

    8.7K91

    LinuxLinux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

    1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。...新进程为子进程,而原进程为父进程 #include pid_t fork(void); 返回值:自进程中返回0,父进程返回子进程id,出错返回-1 进程调用fork,当控制转移到内核中的...else if (ret > 0) { // 异常退出 printf("sig code : %d\n", st & 0X7F); } } } 测试结果: [root@localhost linux.../a.out #等20秒退出 child exit code:10 [root@localhost linux]# ....Linux鼓励将这种应用于程序之内的模式扩展到程序之间。如下图 一个C程序可以fork/exec另一个程序,并传给它一些参数。这个被调用的程序执行一定的操作,然后通过exit(n)来返回值。

    15410
    领券