- 浏览: 483696 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
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等待队列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内核分析笔记----定时器和时间管理)
发表评论
-
windowx 命令
2020-10-23 17:35 262windowx 端口占用 netstat -aon|finds ... -
linux常用命令
2020-04-08 08:21 299zip压缩目录 zip -qr test.zip /usr/t ... -
shell 语法
2017-09-09 10:59 402shell 语法 #!/bin/bash //#!告诉 ... -
Linux 命令使用集
2017-01-06 16:40 400Linux 命令使用集 //====== ... -
select、poll、epoll之间的区别总结
2016-09-06 14:46 1244select、poll、epoll之间的 ... -
IO - 同步,异步,阻塞,非阻塞,AIO
2016-09-06 14:43 660IO - 同步,异步,阻塞,非阻塞 阻塞与非阻塞(进程有没 ... -
日志文件系统
2016-09-06 10:14 531日志文件系统 日志文件系统当然要记录日志,而日志也需要占存储 ... -
Linux的原子操作与同步机制
2016-08-18 08:34 625Linux的原子操作与同步 ... -
Linux线程同步 读写锁 rwlock
2016-08-17 11:54 819读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的 ...
相关推荐
本项目"基于Linux的实现进程的信号量互斥申请"聚焦于如何在Linux操作系统环境下,利用信号量来实现进程间的互斥访问,确保关键资源的安全共享。 信号量是一种特殊的变量,用于控制多个进程对共享资源的访问。在...
在Linux操作系统中,进程调度是核心功能之一,它决定了系统如何在多个运行的程序之间分配CPU时间。在“ka.rar”这个压缩包中,包含了关于Linux进程调度、进程管理以及进程同步的相关实验和资料,这些都是理解和操作...
在IT领域,尤其是在操作系统的学习和实践中,Linux系统进程实验是一个重要的环节。进程是操作系统资源分配的基本单位,理解并掌握进程的创建、管理以及通信对于深入理解操作系统的工作原理至关重要。在这个实验中,...
本文将深入探讨Linux进程调度的原理、策略以及相关概念。 首先,我们了解什么是进程。在计算机科学中,进程是程序在内存中的实例,拥有自己的独立资源,如内存空间、文件描述符等。每个进程都有一个唯一的进程ID...
在Linux操作系统中,进程调度是核心功能之一,它负责决定哪个进程应该在何时获得CPU的执行权。在本文中,我们将深入探讨“Linux进程调度”这一主题,特别是O(1)调度算法,以及当前Linux内核所采用的调度策略。 首先...
Linux随机进程调度算法实现 Linux 操作系统的进程调度算法是操作系统核心组件之一,负责选择系统中下一个要运行的进程。在 Linux 0.11 内核中,sched.c 函数是内核中进程调度管理的程序,其中 schedule() 函数负责...
本项目“linux-fifo.rar”聚焦于在Linux环境下使用C语言实现进程间的FIFO通信,特别关注了Producer-Customer(生产者-消费者)模型的应用。 首先,我们需要理解Linux FIFO的工作原理。FIFO与普通文件不同,它不存储...
本文将深入探讨Linux内核调度原理的基本概念和算法,包括进程调度、优先级调度、实时进程和一般进程的调度策略。 进程调度是操作系统的核心部分之一,它负责将系统资源分配给不同的进程,以确保系统的高效运行和...
" Linux操作系统进程同步的几种方式及基本原理" 摘要信息: Linux操作系统中,进程同步是指多个进程之间的合作和互斥,目的是为了避免由于并发执行而引起的错误和不一致。进程同步的方式有多种,包括信号量、管程...
《Linux设备驱动开发详解》这本书由宋宝华编写,详细阐述了Linux设备驱动的各个方面,包括I/O模型的选择和实现,是学习Linux驱动开发的宝贵参考资料。通过阅读本书,读者可以深入理解Linux内核的I/O机制,并掌握编写...
本文将深入探讨如何在Linux环境下实现多线程的阻塞模式socket编程,以及它的工作原理和应用价值。 首先,理解“阻塞”和“非阻塞”模式。在Linux的socket编程中,阻塞模式是指当一个套接字(socket)调用如recv或...
例如,阻塞IO简单易用,但会阻塞进程直到数据准备就绪;非阻塞IO不会阻塞,但需要轮询检查;IO复用允许同时监视多个文件描述符,提高效率;信号驱动IO则通过信号通知IO完成;异步IO完全由内核管理,提供最高效率。`...
在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进程的相关知识点。 一、进程定义 进程是计算机中正在运行的程序的实例,它是操作系统分配资源的基本单位。每个进程...
此外,进程的优先级调度、状态转换(如运行、就绪、阻塞)也是重点。 3. **Lockf()函数**:在多进程环境中,同步和互斥操作是防止数据竞争的关键。Lockf()是Linux提供的一个锁机制,它允许进程对文件进行锁定,确保...
在Linux操作系统中,进程间通信(IPC,Inter-Process Communication)是多个进程之间共享数据、交换信息的关键技术。本文将详细讲解如何通过FIFO(First In First Out,先进先出)这种特殊的管道通信机制实现进程间...
学习这个源码,开发者可以深入了解非阻塞I/O的工作原理,掌握在Linux环境下如何编写高效的I/O密集型程序。这对于开发网络服务器、数据库连接管理或其他需要处理大量并发连接的应用来说,是至关重要的技能。通过实践...
在Linux操作系统中,进程间的通信(IPC,Inter-Process Communication)是实现多个程序协同工作、交换数据的关键技术。本实验提供了三个使用不同方法进行进程通信的参考代码:管道通信、消息队列和共享存储器。下面...