linux中write的实例,Linux内核 down_write()
函数: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()相关推荐
- linux中sort命令实例,Linux中文本处理工具之sort命令详解
前言 sort命令将每一行作为一个单位进行比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按一定的顺序进行输出,实际上,sort命令可以被认为是一个非常强大的数据治理工具,用来治 ...
- linux中sort命令实例,Linux命令之排序命令sort使用实例
名称:sort 位置:/usr/bin/sort 权限:所有用户 用法: sort [OPTION]... [FILE]... sort [OPTION]... --files0-from=F 选项: ...
- Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块...
Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块 http://baike.baidu.com/link?url=lxiKxFvYm-UfJIxMjz ...
- 在Linux中head命令,Linux 中 head 命令实例
原标题:Linux 中 head 命令实例 head命令将每个文件的前10行打印到标准输出.对于多个文件,在每个文件前面加上一个给出文件名的头.如果没有文件,或者文件为-,则读取标准输入. 如何使用h ...
- 在linux中的sort命令,linux中sort命令
功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序. 参 数: -b 忽略每行前面开始出的空格字符. -c 检查文件是否已经按照顺序排序. -d 排序时,处理英文字母.数 ...
- linux中文件链接,关于Linux中文件,链接的一些思考
在Unix系统中,操作系统为磁盘上的文本与图像,鼠标键盘操作,网络交互等IO操作设计了一组通用API. 使他们被处理的时候可统一用字节流的方式.所以说,除了进程之外,其他的一切均可看做文件. Linu ...
- linux中make命令大全,Linux中的命令 make -f 是什么意思
二.Makefile的文件名 默认的情况下,make命令会在当前目录下按顺序找寻文件名为"GNUmakefile"."makef ile"."Make ...
- linux中original_如何在 Linux 中整理磁盘碎片
如何在 Linux 中整理磁盘碎片 转载自: 如何在 Linux 中整理磁盘碎片linux.cn 有一个神话是 linux 的磁盘从来不需要整理碎片.在大多数情况下这是真的,大多数因为是使用的是优秀 ...
- linux中用户组和用户,linux中用户和用户组
一.用户和组原理 一个用户可以属于多个组,一个组有多个用户 在Linux中操作系统必须依赖组和用户进行管理 二.与用户和组相关的配置文件 1.组相关配置文件 1)/etc/group :管理用户组信息 ...
最新文章
- Oracle 变量绑定与变量窥视合集系列二
- java中的枚举类_java中的枚举类型
- QT开发的程序的发布
- 禁止和恢复WIN7驱动强制签名
- 模糊搜索怎么实现_干货 | 你真的了解自己是怎么搜索的吗_01
- Troubleshooting(三):网络
- 算法与数据结构(三) 二叉树的遍历及其线索化(Swift版)
- uva11054 - Wine trading in Gergovia(等价转换,贪心法)
- python menu实例_python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例...
- Python是最好的编程语言,Locust是最好的压测工具,不服来辩!
- android 分割字符 指定长度_[Android]TextUtils.ellipsize()截取指定长度字符串(附图文混排)...
- 代码评审 16.7.1
- pyqt 子窗口控制主窗口绘图_PyQtGraph如何关闭绘图窗口/关闭所有绘图窗口?
- python下载完是什么样的图片_[宅男福利]用Python下载页面中所有的图片
- 查看C语言库函数源码
- android java项目源码_Android项目源码本站第三个知乎app项目
- 办理签证用的在职证明中英文版
- python 图像检索_深度学习图像检索
- 小梅哥Xilinx FPGA学习笔记10——串口通信发送
- 计算机如何接6块显卡,双显卡怎么切换到独立显卡 5步轻松搞定【图文教程】