Linux-0.12内核sleep_on函数分析

2023-11-17

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被锁住没法访问。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux-0.12内核sleep_on函数分析 的相关文章

  • 如何在 Linux 中重新添加 unicode 字节顺序标记?

    我有一个相当大的 SQL 文件 它以 FFFE 的字节顺序标记开头 我使用 unicode 感知的 linux 分割工具将此文件分割成 100 000 行块 但是当将这些传递回窗口时 它确实not与第一个部分以外的任何部分一样 只是它具有
  • 如何重命名 .tar.gz 文件而不提取内容并在 UBUNTU 中创建新的 .tar.gz 文件?

    我有一个命令将创建一个新的 tar gz现有文件中的文件 sudo tar zcvf Existing tar gz New tar gz 该命令将创建一个新的New tar gz从现有的文件Existing tar gz file 谁能告
  • 将node.js +expressjs应用程序的NODE_ENV设置为ubuntu下的守护进程

    我按照这些说明让守护进程正常工作 http kevin vanzonneveld net techblog article run nodejs as a service on ubuntu karmic http kevin vanzon
  • XAMPP Windows 上的 Php Cron 作业

    嗯 我是这个词的新手CRON 据我所知 这是一个Unix安排特定操作在定义的时间间隔后执行的概念 我需要运行一个php文件 每小时更新一次数据库 但我的困惑在于安排执行 我在用XAMPP用于 Windows 7 上的本地开发测试 我发现了什
  • Python将文件从Linux复制到WIndows

    我正在构建一个网站 该网站有一个表单 可以捕获用户数据并在用户数据上运行一些cgi cgi 的第一步是需要将文件从 Linux Web 服务器复制到 Windows 计算机 服务器将使用 Active Directory 角色帐户作为复制凭
  • 使用c在linux上分块读写

    我有一个 ASCII 文件 其中每一行都包含一个可变长度的记录 例如 Record 1 15 characters Record 2 200 characters Record 3 500 characters Record n X cha
  • 如何在文件夹中的 xml 文件中 grep 一个单词

    我知道我可以使用 grep 在这样的文件夹中的所有文件中查找单词 grep rn core 但我当前的目录有很多子目录 我只想搜索当前目录及其所有子目录中存在的所有 xml 文件 我怎样才能做到这一点 我试过这个 grep rn core
  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • 为什么使用signalfd无法捕获SIGSEGV?

    我的系统是ubuntu 12 04 我将示例修改为man 2 signalfd 并添加sigaddset mask SIGSEGV 在示例中 但我无法得到输出SIGSEGV被生成 这是一个错误吗glibc 源代码片段如下 sigemptys
  • 无法连接到 Azure Ubuntu VM - 公钥被拒绝

    我们在 Azure 上使用 Ubuntu VM 一段时间了 很少遇到任何问题 然而 其中一台虚拟机最近出现了问题 出乎意料的是 Ubuntu VM 开始拒绝公钥 ssh i azure key email protected cdn cgi
  • 如何使用 nohup 获取正在运行的程序列表

    我正在通过 SSH 连接访问运行 CentOS linux 发行版 的服务器 由于我无法始终保持登录状态 因此我使用 nohup command 来运行我的程序 我找不到如何获取我开始使用 nohup 的所有程序的列表 工作 只有在我注销之
  • BeagleBone Black 如何用作大容量存储设备?

    是否可以使用 BB 作为大容量存储设备 我希望将其连接到可以从 USB 连接 例如 USB 闪存驱动器 读取文件的音频播放器并充当包含一个特定文件夹的数据存储设备 及其子文件夹 从文件系统 如果可能 在连接到开发板的闪存驱动器上 正如设备规
  • 我可以在 Ubuntu 上使用 Homebrew 吗?

    我只是尝试使用 Homebrew 和 Linuxbrew 在我的 Ubuntu 服务器上安装软件包 但都失败了 这就是我尝试安装它们的方法 sudo apt get install build essential curl git m4 r
  • 虚拟内存澄清——大连续内存的分配

    我有一个应用程序 我必须在 Windows 上分配 使用运算符 new 相当大的内存空间 数百 MB 该应用程序是 32 位 我们现在不使用 64 位 即使在 64 位系统上也是如此 我启用了 LARGEADDRESSAWARE 链接器选项
  • 使用 Python 将阿拉伯语或任何从右到左书写系统的字符串打印到 Linux 终端

    非常简单的例子是 city print city 我期望输出是 但实际上输出是相反的字符串 字母看起来有点不同 因为它们有开始 中间和结束形式 我无法将其粘贴到此处 因为复制粘贴会再次更正字符串的顺序 如何在 Linux 终端上正确打印阿拉
  • 打印 STDOUT/STDERR 并将它们写入 Bash 中的文件?

    有没有办法让 Bash 将 STDOUT STDERR 重定向到文件 但仍然将它们打印到终端 这会将 STDOUT 和 STDERR 重定向到同一个文件 some command 2 gt 1 tee file log Example to

随机推荐

  • 校园社区app

    此项目是面向在校大学生开发的一个集预约购物 组织活动 实事热帖于一体的社区app 前后台交互数据采用的是json数据格式 网络请求采用的是volley 后台采用mysql数据库 如果有写的不好的地方还望大家指正 主要功能为 预约购物 组织活
  • DataGrip 2022.2.2 Unknown column ‘generation_expression‘ in ‘field list‘

    安装DataGrip 2022 2 2 连接本地数据库 编写脚本时发现无法自动提示数据库表字段 搜索结果 都是在连接属性 Options Introspection using JDBC metadata 在此版本没有发现此选项 查找发现在
  • undefined、null、isNan

    null 和 undefined的区别 在用法上几乎没有区别 if undefined console log undefined is false undefined is false if null console log null i
  • [电动智能汽车-7]:汽车CAN总线详解

    目录 第1章 CAN总线概述 1 1 概述 1 2 发展历史 1 3 标准化 1 4 底层标准 1 5 上层标准 1 6 总线特点 1 7 CAN总线分类 1 8 应用 1 9 局限性 第2章 电路基础 2 1 硬件拓扑 2 2 收发器 2
  • 【微信小程序】小程序点击图片放大(图片预览)

    这个强大的API wx previewImage 嘿嘿嘿 接下来我们来讲一下微信小程序中图片点击放大预览的实现步骤 思路 1 点击事件 2 放大 3 左右滑动查看上 下一张 在绑定点击事件的时候我们需要同时获取到点击图片的url和这一组数据
  • linux 信号传递参数,Qt 信号槽如何传递参数(或带参数的信号槽)

    信号槽如何传递参数 或带参数的信号槽 利用Qt进行程序开发时 有时需要信号槽来完成参数传递 带参数的信号槽在使用时 有几点需要注意的地方 下面结合实例进行介绍 第一点 当信号与槽函数的参数数量相同时 它们参数类型要完全一致 signals
  • 不死神兔详细解释及解题,看不懂算我输

    不死神兔 不死神兔也叫做斐波那契数列或者叫做黄金分割数列或者叫做兔子数列 不死神兔问题 有1对兔子 从出生后的第3个月起每个月都生一对兔子 小兔子长到第三个月后每个月 又生一对兔子 假如兔子都不死 问第n个月有几对兔子 需求 我们这里需要知
  • JDBC工具类封装

    jdbc工具类的封装 package com hyc study02 utils import java io InputStream import java sql import java util Properties public c
  • 数字化和物联网的发展如何改变我们的生活方式?

    数字化和物联网 IoT 的发展已经给我们的生活方式带来了重大变化 而且这些变革将在未来继续发生 以下是数字化和物联网影响我们生活的一些方式 连接设备和智能家居 物联网使日常物品能够连接到互联网并相互通信 这种连通性允许创建智能家居 其中可以
  • SpringBoot学习---yaml配置

    本篇博客目录 一 什么是yaml 二 yaml基础语法与数据类型 1 yaml基础语法 2 数据类型 1 对象类型 2 数组类型 3 复合结构 4 纯量类型 5 引用 三 yaml注入配置文件 1 yaml配置注入到实体类 2 yaml加载
  • Linux 维护日志:今日系统宕机,问题记录

    查看日志 显示包含如下信息 Jul 21 10 55 10 EYKERP1 kernel sd 3 0 0 0 SCSI error return code 0x00010000 Jul 21 10 55 10 EYKERP1 kernel
  • Redis基础知识(三):缓存穿透、缓存击穿、缓存雪崩

    文章目录 一 缓存穿透 出现过程 解决方法 二 缓存击穿 出现过程 解决方法 三 缓存雪崩 出现过程 解决方法 我们在项目中大量使用Redis承接海量数据的冲击 但是使用过程中也会遇到一些特殊的情况 这个就是缓存击穿 缓存穿透 缓存雪崩 一
  • 全志H3-----制作刷机包(TF卡)

    开发环境 Ubuntu 14 04 LTS busybox 1 26 2 U boot kernel lichee 全志原厂提供的BSP 1 制作一个 256M 的空白映象文件 你可以制作得更小或更大 dd if dev zero of f
  • JWT 安全及案例实战

    文章目录 一 JWT json web token 安全 1 Cookie 放在浏览器 2 Session 放在服务器 3 Token 4 JWT json web token 4 1 头部 4 1 1 alg 4 1 2 typ 4 2
  • Vue源码分析(Render渲染函数)

    文章目录 Render函数 渲染DOM原理 虚拟DOM Vue整体机制 Render Function API 练习Render函数动态渲染标签 函数组件和状态组件 练习Render函数动态渲染组件 Render函数 渲染DOM原理 在前面
  • SGX应用开发入门

    SGX应用开发入门 SGX 及 SDK 应用开发环境简介及搭建 第1部分 SGX应用开发入门 开发第一个 SGX 应用 Hello World 第2部分 SGX应用开发入门 SGX应用开发进阶篇 第3部分 英特尔 Software Guar
  • 周鸿祎力荐|纽约客16000字重磅刊文:区块链是回归互联网本质的唯一希望

    奇虎360创始人周鸿祎曾在朋友圈表示 迄今我认为说的最深入浅出最明明白白的一篇文章 没有大道理 没有空洞的口号 没有吓唬人的概念 这才是学习区块链技术最需要的基础 来源 纽约客 杂志 本文首发于机器之能 编译 张震 Edison Rik 这
  • Qt5中使用C++调用Python

    最近想把C 和Python一起混合编程 故作此文记录整个过程中的 坑 首先打开QtCreator 新建一个QtConsoleApplication 建立好了之后 在你的配置文件下面添加包含目录和库目录 INCLUDEPATH I D Pro
  • cass道路设计教程_cass道路设计

    1 生成里程文件 工程应用 菜单 生成里程文件 由纵断面线生成 功能 由道路中桩线即纵断面线生成里程文件 操作过程 1 在图上画出的道路纵断面线 必须是复合线 2 点取 由纵断面线生成 命令下的 新建 3 提示 选择纵断面线 请选择 1 中
  • Linux-0.12内核sleep_on函数分析

    sleep on用于进程休眠 原型如下 void sleep on struct task struct p 当进程访问某个互斥资源时 如果资源被另外进程占用 当前进程就需要休眠 假设资源的结构如下 struct res struct ta