- 浏览: 498333 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 290windowx 端口占用 netstat -aon|finds ... -
linux常用命令
2020-04-08 08:21 326zip压缩目录 zip -qr test.zip /usr/t ... -
shell 语法
2017-09-09 10:59 431shell 语法 #!/bin/bash //#!告诉 ... -
Linux 命令使用集
2017-01-06 16:40 415Linux 命令使用集 //====== ... -
select、poll、epoll之间的区别总结
2016-09-06 14:46 1274select、poll、epoll之间的 ... -
IO - 同步,异步,阻塞,非阻塞,AIO
2016-09-06 14:43 723IO - 同步,异步,阻塞,非阻塞 阻塞与非阻塞(进程有没 ... -
日志文件系统
2016-09-06 10:14 555日志文件系统 日志文件系统当然要记录日志,而日志也需要占存储 ... -
Linux的原子操作与同步机制
2016-08-18 08:34 647Linux的原子操作与同步 ... -
Linux线程同步 读写锁 rwlock
2016-08-17 11:54 848读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的 ...
相关推荐
在现代操作系统中,尤其是像Linux这样的多任务操作系统,进程管理是一项至关重要的功能。为了高效地管理和利用系统资源,Linux通过多种机制控制进程的状态变化。其中,“阻塞”和“挂起”是两种常见的进程状态,它们...
本项目"基于Linux的实现进程的信号量互斥申请"聚焦于如何在Linux操作系统环境下,利用信号量来实现进程间的互斥访问,确保关键资源的安全共享。 信号量是一种特殊的变量,用于控制多个进程对共享资源的访问。在...
在Linux操作系统中,进程调度是核心功能之一,它决定了系统如何在多个运行的程序之间分配CPU时间。在“ka.rar”这个压缩包中,包含了关于Linux进程调度、进程管理以及进程同步的相关实验和资料,这些都是理解和操作...
为了解决进程间的资源竞争,确保数据的一致性和完整性,LINUX提供了多种进程间通信(IPC)机制以及锁(如信号量、互斥锁等),用于实现进程间的同步和互斥操作。 #### 四、进程的创建与控制 **1. 进程创建** 在...
本文将深入探讨Linux下的进程间通信方式,包括其基本原理、主要技术手段及其应用场景。 #### 进程间通信的重要性 在多进程环境中,进程间通信是必不可少的。无论是简单的数据交换还是复杂的任务协调,IPC都是实现...
本文将深入探讨Linux进程调度器的基本原理、进程分类及其对应的调度策略。 首先,进程调度器在Linux中扮演着决定哪个进程应当获得CPU执行权的角色。它需要在程序之间共享CPU时间,创造出并行执行的假象。调度策略...
在IT领域,尤其是在操作系统的学习和实践中,Linux系统进程实验是一个重要的环节。进程是操作系统资源分配的基本单位,理解并掌握进程的创建、管理以及通信对于深入理解操作系统的工作原理至关重要。在这个实验中,...
本文旨在深入探讨Linux进程调度策略及其背后的实现原理。 #### 2. Linux进程调度原理 ##### 2.1 Linux进程模型 在Linux中,每个进程都由`task_struct`结构来描述。`task_struct`实际上就是通常所说的进程控制块...
本文将深入探讨Linux进程调度的原理、策略以及相关概念。 首先,我们了解什么是进程。在计算机科学中,进程是程序在内存中的实例,拥有自己的独立资源,如内存空间、文件描述符等。每个进程都有一个唯一的进程ID...
在Linux操作系统中,进程调度是核心功能之一,它负责决定哪个进程应该在何时获得CPU的执行权。在本文中,我们将深入探讨“Linux进程调度”这一主题,特别是O(1)调度算法,以及当前Linux内核所采用的调度策略。 首先...
实验报告 一、实验目的 本实验旨在深入理解Linux操作系统中的核心进程概念,包括进程...同时,对于生产者-消费者模型的实现,加深了对资源管理和并发访问控制的理解,提升了在Linux环境中编写和调试多进程程序的能力。
Linux随机进程调度算法实现 Linux 操作系统的进程调度算法是操作系统核心组件之一,负责选择系统中下一个要运行的进程。在 Linux 0.11 内核中,sched.c 函数是内核中进程调度管理的程序,其中 schedule() 函数负责...
本项目“linux-fifo.rar”聚焦于在Linux环境下使用C语言实现进程间的FIFO通信,特别关注了Producer-Customer(生产者-消费者)模型的应用。 首先,我们需要理解Linux FIFO的工作原理。FIFO与普通文件不同,它不存储...
为了实现有效的调度,Linux为进程定义了不同的优先级。优先级决定了进程获得CPU的时间顺序和长短。 1. **普通进程**:默认情况下,大多数用户级进程属于此类别,其优先级范围通常介于-20到19之间。 2. **实时进程**...
Linux进程调度是操作系统中一个至关重要的功能,它负责决定在多任务环境下哪些进程应该占用CPU的执行时间。在Linux操作系统中,进程调度可以基于不同的调度策略和优先级来配置,以确保系统的高效运行和资源的合理...
Linux系统在处理信号时,有一个特性是:对于同一个信号,如果在进程解除阻塞之前多次产生,Linux只会保留最初的那一次信号,后续的相同信号将被忽略。这意味着在信号被阻塞期间,即使信号多次触发,也只会有一次信号...
通过以上介绍可以看出,无论是无名管道还是有名管道,在Linux中都提供了一种简单有效的方式来实现进程间的数据交换。它们各有特点,适用于不同的场景。无名管道主要用于具有亲缘关系的进程之间的通信,而有名管道则...
本文将深入探讨Linux内核调度原理的基本概念和算法,包括进程调度、优先级调度、实时进程和一般进程的调度策略。 进程调度是操作系统的核心部分之一,它负责将系统资源分配给不同的进程,以确保系统的高效运行和...
" Linux操作系统进程同步的几种方式及基本原理" 摘要信息: Linux操作系统中,进程同步是指多个进程之间的合作和互斥,目的是为了避免由于并发执行而引起的错误和不一致。进程同步的方式有多种,包括信号量、管程...