`
huangyongxing310
  • 浏览: 491959 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Linux 是如何实现阻塞进程功能的原理

 
阅读更多
Linux 是如何实现阻塞进程功能的原理



linux等待队列wait_queue_head_t(队列头用于挂wait_queue_t)和wait_queue_t(包含进程的信息)


进程要指定挂在那个wait_queue_head_t,唤醒时也要这个wait_queue_head_t,



等待事件:
wait_event(wq, condition);//在等待队列中睡眠直到condition为真。
wait_event_timeout(wq, condition, timeout);
wait_event_interruptible(wq, condition) ;
wait_event_interruptible_timeout(wq, condition, timeout) ;

唤醒等待队列:
//可唤醒处于TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE状态的进程;
#define wake_up(x) __wake_up(x, TASK_NORMAL, 1, NULL)
//只能唤醒处于TASK_INTERRUPTIBLE状态的进程
#define wake_up_interruptible(x) __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL)

x代表wq(为wait_queue_head_t)




队列阻塞过程:先入队列头,条件不满足就进程切换(更改进程运行状态)(不满足就退出进行像进程被唤醒的逻辑处理),进程被唤醒,wait_queue_t从队列头中移除,进程继续运行


如果有超时参数的,会在系统中申请一个定时器,定时到时调用process_timeout回调函数用于时间到了就执行该函数,自然该函数就是完成唤醒进程的功能。

process_timeout,会使进程状态更改并重新运行,运行后删除定义的定时器,之后又是回到'队列阻塞过程'的分析一样了.




https://www.cnblogs.com/ck1020/p/6938287.html(wait_event族函数浅析)

http://www.cnblogs.com/hanyan225/archive/2011/07/26/2117158.html(linux内核分析笔记----定时器和时间管理)


分享到:
评论

相关推荐

    Linux中进程的阻塞和挂起的区别

    在现代操作系统中,尤其是像Linux这样的多任务操作系统,进程管理是一项至关重要的功能。为了高效地管理和利用系统资源,Linux通过多种机制控制进程的状态变化。其中,“阻塞”和“挂起”是两种常见的进程状态,它们...

    基于Linux的实现进程的信号量互斥申请

    本项目"基于Linux的实现进程的信号量互斥申请"聚焦于如何在Linux操作系统环境下,利用信号量来实现进程间的互斥访问,确保关键资源的安全共享。 信号量是一种特殊的变量,用于控制多个进程对共享资源的访问。在...

    ka.rar_Linux 进程调度_kalinux_linux 进程_linux进程管理_进程同步

    在Linux操作系统中,进程调度是核心功能之一,它决定了系统如何在多个运行的程序之间分配CPU时间。在“ka.rar”这个压缩包中,包含了关于Linux进程调度、进程管理以及进程同步的相关实验和资料,这些都是理解和操作...

    LINUX进程管理实验

    为了解决进程间的资源竞争,确保数据的一致性和完整性,LINUX提供了多种进程间通信(IPC)机制以及锁(如信号量、互斥锁等),用于实现进程间的同步和互斥操作。 #### 四、进程的创建与控制 **1. 进程创建** 在...

    Linux进程间通信.pdf

    本文将深入探讨Linux下的进程间通信方式,包括其基本原理、主要技术手段及其应用场景。 #### 进程间通信的重要性 在多进程环境中,进程间通信是必不可少的。无论是简单的数据交换还是复杂的任务协调,IPC都是实现...

    Linux进程调度器的设计--Linux进程的管理与调度(十七) - 嵌入式Linux中文站1

    本文将深入探讨Linux进程调度器的基本原理、进程分类及其对应的调度策略。 首先,进程调度器在Linux中扮演着决定哪个进程应当获得CPU执行权的角色。它需要在程序之间共享CPU时间,创造出并行执行的假象。调度策略...

    进程实验_Linux系统进程实验_

    在IT领域,尤其是在操作系统的学习和实践中,Linux系统进程实验是一个重要的环节。进程是操作系统资源分配的基本单位,理解并掌握进程的创建、管理以及通信对于深入理解操作系统的工作原理至关重要。在这个实验中,...

    Linux进程调度策略分析

    本文旨在深入探讨Linux进程调度策略及其背后的实现原理。 #### 2. Linux进程调度原理 ##### 2.1 Linux进程模型 在Linux中,每个进程都由`task_struct`结构来描述。`task_struct`实际上就是通常所说的进程控制块...

    linux-进程调度

    本文将深入探讨Linux进程调度的原理、策略以及相关概念。 首先,我们了解什么是进程。在计算机科学中,进程是程序在内存中的实例,拥有自己的独立资源,如内存空间、文件描述符等。每个进程都有一个唯一的进程ID...

    linux进程调度图

    在Linux操作系统中,进程调度是核心功能之一,它负责决定哪个进程应该在何时获得CPU的执行权。在本文中,我们将深入探讨“Linux进程调度”这一主题,特别是O(1)调度算法,以及当前Linux内核所采用的调度策略。 首先...

    linux进程链、进程扇和信号量实现生产者--消费者模型实验报告

    实验报告 一、实验目的 本实验旨在深入理解Linux操作系统中的核心进程概念,包括进程...同时,对于生产者-消费者模型的实现,加深了对资源管理和并发访问控制的理解,提升了在Linux环境中编写和调试多进程程序的能力。

    Linux随机进程调度算法实现.doc

    Linux随机进程调度算法实现 Linux 操作系统的进程调度算法是操作系统核心组件之一,负责选择系统中下一个要运行的进程。在 Linux 0.11 内核中,sched.c 函数是内核中进程调度管理的程序,其中 schedule() 函数负责...

    linux-fifo.rar_LInux FI_ProducerCustom_fifo_linux fifo_linux 进程

    本项目“linux-fifo.rar”聚焦于在Linux环境下使用C语言实现进程间的FIFO通信,特别关注了Producer-Customer(生产者-消费者)模型的应用。 首先,我们需要理解Linux FIFO的工作原理。FIFO与普通文件不同,它不存储...

    linux进程调度策略

    为了实现有效的调度,Linux为进程定义了不同的优先级。优先级决定了进程获得CPU的时间顺序和长短。 1. **普通进程**:默认情况下,大多数用户级进程属于此类别,其优先级范围通常介于-20到19之间。 2. **实时进程**...

    linux进程调度

    Linux进程调度是操作系统中一个至关重要的功能,它负责决定在多任务环境下哪些进程应该占用CPU的执行时间。在Linux操作系统中,进程调度可以基于不同的调度策略和优先级来配置,以确保系统的高效运行和资源的合理...

    Linux信号的阻塞和投递研究

    Linux系统在处理信号时,有一个特性是:对于同一个信号,如果在进程解除阻塞之前多次产生,Linux只会保留最初的那一次信号,后续的相同信号将被忽略。这意味着在信号被阻塞期间,即使信号多次触发,也只会有一次信号...

    Linux 进程间通信

    通过以上介绍可以看出,无论是无名管道还是有名管道,在Linux中都提供了一种简单有效的方式来实现进程间的数据交换。它们各有特点,适用于不同的场景。无名管道主要用于具有亲缘关系的进程之间的通信,而有名管道则...

    LINUX内核调度原理

    本文将深入探讨Linux内核调度原理的基本概念和算法,包括进程调度、优先级调度、实时进程和一般进程的调度策略。 进程调度是操作系统的核心部分之一,它负责将系统资源分配给不同的进程,以确保系统的高效运行和...

    Linux操作系统进程同步的几种方式及基本原理.pdf

    " Linux操作系统进程同步的几种方式及基本原理" 摘要信息: Linux操作系统中,进程同步是指多个进程之间的合作和互斥,目的是为了避免由于并发执行而引起的错误和不一致。进程同步的方式有多种,包括信号量、管程...

Global site tag (gtag.js) - Google Analytics