`
huangyongxing310
  • 浏览: 483696 次
  • 性别: 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操作系统环境下,利用信号量来实现进程间的互斥访问,确保关键资源的安全共享。 信号量是一种特殊的变量,用于控制多个进程对共享资源的访问。在...

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

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

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

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

    linux-进程调度

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

    linux进程调度图

    在Linux操作系统中,进程调度是核心功能之一,它负责决定哪个进程应该在何时获得CPU的执行权。在本文中,我们将深入探讨“Linux进程调度”这一主题,特别是O(1)调度算法,以及当前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内核调度原理的基本概念和算法,包括进程调度、优先级调度、实时进程和一般进程的调度策略。 进程调度是操作系统的核心部分之一,它负责将系统资源分配给不同的进程,以确保系统的高效运行和...

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

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

    linux 设备驱动中的阻塞与非阻塞 I/O

    《Linux设备驱动开发详解》这本书由宋宝华编写,详细阐述了Linux设备驱动的各个方面,包括I/O模型的选择和实现,是学习Linux驱动开发的宝贵参考资料。通过阅读本书,读者可以深入理解Linux内核的I/O机制,并掌握编写...

    Linux下多线程的阻塞模式下的socket编程

    本文将深入探讨如何在Linux环境下实现多线程的阻塞模式socket编程,以及它的工作原理和应用价值。 首先,理解“阻塞”和“非阻塞”模式。在Linux的socket编程中,阻塞模式是指当一个套接字(socket)调用如recv或...

    Linux Socket编程、Linux IO模型、Linux 进程间通信完整用例

    例如,阻塞IO简单易用,但会阻塞进程直到数据准备就绪;非阻塞IO不会阻塞,但需要轮询检查;IO复用允许同时监视多个文件描述符,提高效率;信号驱动IO则通过信号通知IO完成;异步IO完全由内核管理,提供最高效率。`...

    linux_sched.zip_Linux进程调度

    在Linux操作系统中,进程调度是核心功能之一,它负责决定哪个进程应该获得CPU资源以及运行多长时间。"linux_sched.zip"这个压缩包包含了与Linux进程调度相关的源代码,包括"sched.c"、"main.c"、"exit.c"、"fork.c...

    进程管理 程序 绝对可运行

    1. **进程创建与销毁**:代码可能包含了创建新进程(如使用`fork()`函数在Unix/Linux系统中)和终止进程(如`exit()`函数)的实现。在C++中,可以使用`std::process`库进行进程管理。 2. **进程调度**:操作系统...

    操作系统原理及应用(Linux)

    Linux采用多任务机制,允许同时运行多个进程,通过上下文切换实现并发执行。理解进程的状态(如新建、就绪、运行、阻塞和终止)以及调度策略(如轮转调度、优先级调度)对优化系统性能有直接影响。 **内存管理**:...

    linux--进程

    理解Linux进程的概念、管理和控制对于深入理解操作系统的工作原理至关重要。本篇将详细介绍Linux进程的相关知识点。 一、进程定义 进程是计算机中正在运行的程序的实例,它是操作系统分配资源的基本单位。每个进程...

    操作系统实验(全部题目+完整代码:vi编辑器的使用,Linux进程控制,进程控制Lockf(),管道通信).zip

    此外,进程的优先级调度、状态转换(如运行、就绪、阻塞)也是重点。 3. **Lockf()函数**:在多进程环境中,同步和互斥操作是防止数据竞争的关键。Lockf()是Linux提供的一个锁机制,它允许进程对文件进行锁定,确保...

    Linux下进程间通信FIFO演示程序

    在Linux操作系统中,进程间通信(IPC,Inter-Process Communication)是多个进程之间共享数据、交换信息的关键技术。本文将详细讲解如何通过FIFO(First In First Out,先进先出)这种特殊的管道通信机制实现进程间...

    linux下非阻塞IO程序源码.zip

    学习这个源码,开发者可以深入了解非阻塞I/O的工作原理,掌握在Linux环境下如何编写高效的I/O密集型程序。这对于开发网络服务器、数据库连接管理或其他需要处理大量并发连接的应用来说,是至关重要的技能。通过实践...

    Linux进程通信实验参考代码

    在Linux操作系统中,进程间的通信(IPC,Inter-Process Communication)是实现多个程序协同工作、交换数据的关键技术。本实验提供了三个使用不同方法进行进程通信的参考代码:管道通信、消息队列和共享存储器。下面...

Global site tag (gtag.js) - Google Analytics