函数:down_write()

函数down_write()是写者用来得到读写信号量sem时调用的,如果该信号量被读者或写者所持有,则对该函数的调用会导致调用者的睡眠。

文件包含:

函数定义:

在内核源码中的位置:linux-3.19.3/kernel/locking/rwsem.c

函数定义格式:

输入参数说明:

sem:该参数为一指针,指向待获取的读写信号量。关于读写信号量结构体rw_semaphore的定义及读写信号量的概念参考酷客教程中init_rwsem()宏的分析。

返回参数说明:

该函数没有返回值。

实例解析:

编写测试文件:down_write.c

头文件及全局变量声明如下:

模块初始化函数:

模块退出函数:

模块初始化及退出函数调用:

实例运行结果及分析:

首先定义宏EXEC_DOWN_READ为0,则if块中的语句将不执行。编译模块,执行命令insmod down_write.ko插入模块,然后执行命令dmesg -c,会出现如图A所示的结果。

然后定义宏EXEC_DOWN_READ为1,则if块中的语句将执行。重新编译模块,执行命令insmod down_write.ko插入模块,然后执行命令dmesg -c,会出现如图B所示的结果。

结果分析:

测试程序中调用了宏init_rwsem()和函数down_read(),关于其功能参考酷客教程关于它们的分析。

该测试程序分为两步进行测试:

第一步定义宏EXEC_DOWN_WRITE为0,则在执行down_write()操作之前读写信号量rwsem没有被读者获取,写者可以成功获得信号量。写者获取信号量时,count值会减去0x00000000ffffffff(起初count由init_rwsem()初始化为0),因此得到count为0xffffffff00000001(补码表示)。最后程序调用up_write()释放读写信号量,它将count恢复为0,参考酷客教程关于up_write()的分析。

第二步定义宏EXEC_DOWN_WRITE为1,则在执行down_write()操作之前读写信号量rwsem已经被读者获取,写者将不能获得信号量,因此插入模块后进程将被挂起,如图B所示。

酷客网相关文章:

linux中write的实例,Linux内核 down_write()相关推荐

  1. linux中sort命令实例,Linux中文本处理工具之sort命令详解

    前言 sort命令将每一行作为一个单位进行比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按一定的顺序进行输出,实际上,sort命令可以被认为是一个非常强大的数据治理工具,用来治 ...

  2. linux中sort命令实例,Linux命令之排序命令sort使用实例

    名称:sort 位置:/usr/bin/sort 权限:所有用户 用法: sort [OPTION]... [FILE]... sort [OPTION]... --files0-from=F 选项: ...

  3. Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块...

    Linux中mod相关的命令 内核模块化   mod相关命令都是用来动态加载内核模块/驱动程序模块 http://baike.baidu.com/link?url=lxiKxFvYm-UfJIxMjz ...

  4. 在Linux中head命令,Linux 中 head 命令实例

    原标题:Linux 中 head 命令实例 head命令将每个文件的前10行打印到标准输出.对于多个文件,在每个文件前面加上一个给出文件名的头.如果没有文件,或者文件为-,则读取标准输入. 如何使用h ...

  5. 在linux中的sort命令,linux中sort命令

    功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序. 参 数: -b 忽略每行前面开始出的空格字符. -c 检查文件是否已经按照顺序排序. -d 排序时,处理英文字母.数 ...

  6. linux中文件链接,关于Linux中文件,链接的一些思考

    在Unix系统中,操作系统为磁盘上的文本与图像,鼠标键盘操作,网络交互等IO操作设计了一组通用API. 使他们被处理的时候可统一用字节流的方式.所以说,除了进程之外,其他的一切均可看做文件. Linu ...

  7. linux中make命令大全,Linux中的命令 make -f 是什么意思

    二.Makefile的文件名 默认的情况下,make命令会在当前目录下按顺序找寻文件名为"GNUmakefile"."makef ile"."Make ...

  8. linux中original_如何在 Linux 中整理磁盘碎片

    如何在 Linux 中整理磁盘碎片 转载自: 如何在 Linux 中整理磁盘碎片​linux.cn 有一个神话是 linux 的磁盘从来不需要整理碎片.在大多数情况下这是真的,大多数因为是使用的是优秀 ...

  9. linux中用户组和用户,linux中用户和用户组

    一.用户和组原理 一个用户可以属于多个组,一个组有多个用户 在Linux中操作系统必须依赖组和用户进行管理 二.与用户和组相关的配置文件 1.组相关配置文件 1)/etc/group :管理用户组信息 ...

最新文章

  1. Oracle 变量绑定与变量窥视合集系列二
  2. java中的枚举类_java中的枚举类型
  3. QT开发的程序的发布
  4. 禁止和恢复WIN7驱动强制签名
  5. 模糊搜索怎么实现_干货 | 你真的了解自己是怎么搜索的吗_01
  6. Troubleshooting(三):网络
  7. 算法与数据结构(三) 二叉树的遍历及其线索化(Swift版)
  8. uva11054 - Wine trading in Gergovia(等价转换,贪心法)
  9. python menu实例_python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例...
  10. Python是最好的编程语言,Locust是最好的压测工具,不服来辩!
  11. android 分割字符 指定长度_[Android]TextUtils.ellipsize()截取指定长度字符串(附图文混排)...
  12. 代码评审 16.7.1
  13. pyqt 子窗口控制主窗口绘图_PyQtGraph如何关闭绘图窗口/关闭所有绘图窗口?
  14. python下载完是什么样的图片_[宅男福利]用Python下载页面中所有的图片
  15. 查看C语言库函数源码
  16. android java项目源码_Android项目源码本站第三个知乎app项目
  17. 办理签证用的在职证明中英文版
  18. python 图像检索_深度学习图像检索
  19. 小梅哥Xilinx FPGA学习笔记10——串口通信发送
  20. 计算机如何接6块显卡,双显卡怎么切换到独立显卡 5步轻松搞定【图文教程】

热门文章

  1. 北京天宇联科技有限责任公司-T语言中html页面keys键值的设置
  2. border-radius和border-image
  3. 神奇的CSS用法之border-radius
  4. 语音识别入门第七节:语言模型
  5. 计算机专业考研院校选择,怎样找到心中的牛校--关于学校的选择问题(计算机专业)...
  6. 苹果用户界面Aqua背后的故事
  7. [语音处理] .flac文件转.wav文件
  8. 面向对象与原型-ps:这一章简直是天书
  9. Siege——多线程编程最佳实例
  10. 《我是一只IT小小鸟》读后感,献给要正在找工作的有缘朋友