Linux-0.12内核sleep_on函数分析

linux-011中休眠函数以及唤醒函数的分析(sleep_on,wake_up) 先看一下代码: void sleep_on(struct task_struct **p) { struct task_struct *tmp; if (!p) return; if (current == &(init_task.task)) panic("task[0] trying to sleep"); tmp = *p; *p = current; current 阅读详情

sleep_on用于进程休眠,原型如下:

void sleep_on(struct task_struct **p)

当进程访问某个互斥资源时,如果资源被另外进程占用,当前进程就需要休眠。

假设资源的结构如下:

struct res

{

....

struct task_struct *wait;
}

其实我们参考下文件系统的i节点就会发现,i节点也是一种资源,它的结构体中就有一个变量i_wait。那么我们就用i节点举例。如果进程访问某个i节点,发现i节点被锁住,当前进程就需要睡眠:sleep_on(&i_wait),这样当前进程就在i节点的i_wait队列上睡眠,那么重点是i_wait睡眠队列是如何形成的呢?用下面的图片叙述。

注意点:p和current是全局变量,tmp是进程私有,在进程栈中。i_wait=NULL,并且i_lock=1,代表inode被锁住没法访问。

Linux-0.11内核源码分析系列:进程调度sleep_on()函数分析 /* *Author : DavidLin *Date : 2014-12-10pm *Email : linpeng1577@163.com or linpeng1577@gmail.com *world : the city of SZ, in China *Ver : 000.000.001 *h 阅读详情

相关推荐

对于linux 0.11版本中睡眠和唤醒函数的理解

sleep_on()函数主要是为了在一个进程所请求的资源忙的时候进行进程调度,并把该进程放到等待队列上等待一段时间。代码如下: void sleep_on(struct task_struct **p) { struct task_struct *tmp; if (!p) return; if (current == &(init_task.task)) panic("task[

heiworld的专栏 1974

linux0.11中的sleep_on、wake_up函数与任务等待队列的调度

linux0.11进程睡眠sleep_on函数和唤醒wake_up函数分析。linux0.11进程调度(运行态\就绪态\睡眠态之间的转换)学习linux0.11-schedule函数。操作系统实验3:进程运行轨迹的跟踪与统计。[参考文档] linux内核完全注释。

weixin_44992441的博客 923

LINUX下实现sleep

sleep: 普通版本 1、基本设计思路:    1>注册SIGALRM信号的处理函数;     2>调用alarm(nsecs)设定闹钟;    3>调⽤pause等待,内核切换到别的进程运行;    4>nsecs秒之后,闹钟超时,内核发SIGALRM给这个进程 ;    5>从内核态返回这个进程的⽤户态之前处理未决信号,发现有SIGALRM信号,其处理函数是sig_alrm

he_shuai20的博客 5502

linux0.11 sleep_on函数说明

/* 这是一个非常复杂的函数: 该函数与wake_up配合使用,我们用一个例子来说明这个复杂的问题 sleep_on(&inode->i_wait); 比如有任务在等待资源inode->i_wait,如果这个资源是NULL,也就是说,没有任何人在使用这个东西,那么就无需等待, 如果这个队列里面有东西,那么就存在tmp里面,tmp此时指向原等待队列头,值得注意的是,这个地方,tmp是局部变量,而p是全局的。 所有进程共用p , 每个进程都有自己的tmp 讲本进程设置为TASK_UNIN

qq_38307618的博客 842

sleep_on和wake_up函数分析_重整理.pdf

分析了Linux 0.11版本的 sleep_on和wake_up函数,只有9行关键的代码,但是信息量非常丰富,值得学习。

瑞芯微RK809音频驱动

瑞芯微RV1126中的RK809音频驱动开发

m0_61899715的博客 5221

sleep_on()用于进程睡眠。

sleep_on()用于进程睡眠。 其原型为 void sleep_on(struct task_struct **p); 比如某个资源是互斥的,当资源被某一个进程占用时,其他进程便无法访问此资源。 假设资源结构为 struct __xxx_resource {        struct resource *rs;        struct ta

诺尔曼 2602

Ubuntu 26.04 本地安装 GitLab CE 完整教程(非 Docker 方式)

本文详细介绍了在Ubuntu 26.04系统上通过Omnibus包安装GitLab CE的完整流程。主要内容包括:环境准备(系统要求、依赖安装)、配置清华镜像源、执行安装命令、修改配置文件、服务管理命令以及常见问题解决方法。文章特别强调了内存要求(建议4GB以上)、首次登录密码获取、HTTPS安全配置等关键点,并提供了性能优化建议和安全设置指导。相比Docker方式,Omnibus安装具有性能更好、管理方便等优势,适合需要私有化部署GitLab的场景。

1369

linux睡眠当前进程,linux-0.11中进程睡眠函数sleep_on()解析

sleep_on()用于进程睡眠。其原型为void sleep_on(struct task_struct **p);比如某个资源是互斥的,当资源被某一个进程占用时,其他进程便无法访问此资源。假设资源结构为struct __xxx_resource{struct resource *rs;struct task_struct *wait;....}xxx_resource;那么若某进程无法得到资源...

weixin_34173656的博客 592

机械臂速成小指南(八):标准DH法实战——从连杆坐标系到运动学方程

本文详细介绍了机械臂运动学建模中的标准DH法,从连杆坐标系的建立到运动学方程的求解,提供了实用的操作步骤和代码示例。通过DH参数表和变换矩阵的构建,帮助读者快速掌握机械臂运动学建模的核心技术,并解决实际应用中的常见问题。

oo7890的博客 211

【Proteus仿真】基于AT89C51单片机的单片机双向通信

本文介绍了基于AT89C51单片机实现双向通信的系统设计。系统采用MAX232芯片实现TTL与RS-232电平转换,通过CONN-D9F接口建立串行通信连接。甲机程序通过按键控制发送不同指令字符,同时接收乙机数据驱动数码管显示;乙机程序根据接收指令控制LED显示状态,并可发送0-10数字至甲机。文中详细说明了MAX232电平转换原理、DB9接口定义,以及完整的单片机控制程序代码,包括串口初始化、数据收发处理等关键功能实现,为嵌入式系统串口通信开发提供了实用参考方案。

XU157303764的博客 1094

Linux 0.12 sched.c代码理解

最近看看linux0.12,对自己理解内核有很大帮助,但是有些东西也确实需要时间去认真分析,今天看看了sched.c的代码,和大家分享一下。先上代码 /* * linux/kernel/sched.c * * (C) 1991 Linus Torvalds */ /* * 'sched.c' is the main kernel file. It contains schedu

WSRspirit的专栏 2985

【主题建模】一种基于深度学习的主题建模方法:BERTopic(理论篇)

在我的博客中已经写了很多关于主题建模的内容,当你准备了解 BERTopic 时,默认你已经知道了 LSA、pLSA、NFM、LDA 等传统的主题建模方法。关于主题建模的前置知识我在这里不做赘述,感兴趣的同学可以看看我前几篇博客。学习 BERTopic 需要一定的机器学习基础,让我们一起开始吧!

Data · Model · Agent · Repeat 9892

linux0.11进程睡眠sleep_on函数和唤醒wake_up函数分析

内核中的这两个函数主要用于访问资源时的同步操作,典型的例子就是高速缓冲区的访问,如果两个进程都要访问同一个缓冲块,那么其中的一个进程就必然睡眠等待,直到该缓冲块被释放才可访问。赵炯博士所著的linux0.11内核完全注释一书中也是对该问题进行详细的讨论,但是我在阅读这段代码的时候还是有些疑问,在此发表下自己的见解。 首先将这两个函数贴出来: void sleep_on(struct task_

FK的专栏 4840

rk3588 LightSensor适配从驱动到应用层

本文详细介绍了在RK3588平台上实现光感驱动的开发流程。主要包括:1) 在设备树中配置I2C5接口挂载光感设备;2) 编写内核驱动代码实现光感数据采集;3) HAL层通过ioctl与驱动交互;4) 在BoardConfig.mk中启用相关宏定义;5) Framework层通过AutomaticBrightnessController实现自动亮度调节算法;6) 应用层可通过监听系统设置获取光感变化并调整屏幕亮度。整个流程涵盖了从底层驱动到上层应用的完整实现方案,重点解决了光感设备注册、数据采集传输和自动亮度

tzj1058756809的博客 448

MicroCap声学仿真介绍(六)-入耳式耳机仿真

从上图可以看出,后腔开了泄声孔后,振膜的最大位移从4.8um提升到了10um,振膜位移增加了一倍。在实际应用中,一般耳机的前腔和后腔都需要开泄声孔,开孔的大小和调音网布的阻尼需要根据客户的要求以及仿真的结果进行权衡选择。接着在主界面放置电阻、电感、电容,电阻值为Rms,电感值为Mms,电容值为Cms,如下图。假设后腔泄声孔的直径为1.2mm,宽度为0.3mm,对应调音网的阻抗为5.5e8欧姆。假设前腔泄声孔的直径为1.2mm,宽度为0.3mm,对应调音网的阻抗为5.5e8欧姆。

山无忧的博客 1800

Linux内核0.11版本sched.c中sleep_on()函数分析

void sleep_on(struct task_struct **p)  {      struct task_struct *tmp;        if (!p)   //若指针无效,则退出          return;      if (current == &(init_task.task)) //若当前任务是任务0则死机          panic("task[0

r21nn的博客 1843

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

544_linux内核学习___sleep_on函数功能分析

全部学习汇总:https://github.com/GreyZhang/little_bits_of_linux 这次看一下__sleeo_on函数。按照我的初步理解,我先做了一下注释说明如下: 接下来,看看这个函数的调度。 这个函数一共有两个调用的位置,接下来逐个看一下。 两个调度的信息全都在上面了,其中的一个是可中断的睡眠,另一个是睡眠。从这里看,还是没有找到调度的源头。继续找这两个函数的调用情况。 ...

小灰笔记 786

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【linux多线程】sleep函数作用

进程:有独立的 进程地址空间。有独立的pcb。分配资源的最小单位。线程:有独立的pcb。没有独立的进程地址空间。最小单位的执行。Linux平台下的情况是,线程只不过是进程的一种特殊形式,sleep只影响当前线程。多线程 中经常会使用sleep()函数,我们知道cpu对于多线程的操作是采用时间片轮询的方式,即,时间片1操作线程A,时间片1结束后,时间片2操作线程B,时间片2结束后,时间片3操作线程A,依次交替执行。参考:《Linux 内核源代码情景分析》

专注嵌入式软硬件开发。 6987

linux sleep函数 使用,sleep函数 sleep函数的一般使用方法

sleep函数是我们c语言中一种常见的函数,它的作用就是可以延缓我们编程时间,在我们日常生活中,不论是工作还是学习,我们多多少少都会碰见sleep函数,所以学好sleep函数的使用,对我们的生活还是有非常大的帮助的。下面小编就来带大家了解一下sleep函数以及他的一般使用方法。sleep函数——sleep函数的形式在vc中sleep中的第一个英文字符为大写的”s”在标准c中是sleep,不要大写....

weixin_39830233的博客 4742

linux sleep实现源码,linux0.11源码分析-sleep_on与wake_up

sleep_on如果一个资源没有加锁,就表示还没有被使用,一旦加上锁后,在没有解锁前,其他进程想要使用该资源就要释放cpu等待了。注意执行到schedule()方法时,下面的代码就不会执行了,需要等待调度才能运行,CPU会将该进程的状态保存到进程的TSS中,包括当前进程执行到的位置信息,等待下一次调度后,该进程还有从该位置继续执行,也就执行schedule()方法后面的代码。理解这句话是很重要的,...

weixin_34746495的博客 567

linux内核 sleep,linux 下实现sleep详解及简单实例

linux 下实现sleep详解及简单实例sleep:普通版本1、基本设计思路:1>注册SIGALRM信号的处理函数;2>调用alarm(nsecs)设定闹钟;3>调⽤pause等待,内核切换到别的进程运行;4>nsecs秒之后,闹钟超时,内核发SIGALRM给这个进程 ;5>从内核态返回这个进程的⽤户态之前处理未决信号,发现有SIGALRM信号,其处理函数是sig_...

weixin_28717611的博客 1890

sleep_on_timeout() -- 内核模块睡眠

wait.c  ---------------------------------------------  #include //Needed by all modules  #include //Needed for KERN_ALERT  static int __init hello_init(void)  {      int timeout;      wait_

u013702980的专栏 3110

sleep头文件linux,Linux下的sleep函数 要用的话得包涵什么头文件啊?

Linux下的sleep函数要用的话得需要#include sleep把进程的运行状态改为睡眠,将其从系统可执行队列去掉,这样系统就不会调度到该进程,不会分配CPU时间片,同时根据该进程的睡眠时间,将进程挂入相应的定时器队列中。同时内核维持一个定时器队列,每一次时钟中断处理,都把当前到期的队列中的进程唤醒,加入到可运行进程队列中。 同时对所有挂入定时器队列中的进程时间值减1。参考代码:#incl...

weixin_30864831的博客 3360

C语言 SLEEP函数不起作用,C语言中的sleep() 函数 sleep函数的具体用法

导航:网站首页 >C语言中的sleep() 函数 sleep函数的具体用法C语言中的sleep() 函数 sleep函数的具体用法相关问题:匿名网友:关于sleep()函数在windows系统和linux系统下是两个不同的函数,差别较大,但功能是相同的,都是将进程挂起一段时间。windows系统下函数名为Sleep(),其函数原型为:#include 函数使用头文件void Sleep(D...

weixin_34779181的博客 5401
上一篇: linux0.11内核fork实现分析(不看不知道,一看很简单)
下一篇: linux0.12内核的内存组织和进程结构
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值