- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个我为我的 RaspBerry Pi 2 编写的小内核模块,它实现了一个额外的系统调用来生成功耗指标。我想修改系统调用,以便只有在特殊用户(例如“root”或用户“pi”)发出时才会调用它。否则,调用将跳过其主体部分并返回成功。
我已经详细阅读了这个问题,I've found a similar question on SO ,但从我的角度来看,它存在很多问题(如下所述)。
struct task_struct
包含指向 struct cred
的指针元素,如 linux/sched.h
中所定义和 linux/cred.h
。我的系统上不存在这两个 header 中的后者,而前者未显示指向 struct cred
元素的指针的任何声明。 这有意义吗?/usr/src/linux-headers-$(uname -r)/include/linux/cred.h
),我在 gcc 中搜索- 在 /usr/include/linux
中构建 header 。cred.h
已经包含了所有这些。/etc/group
的情况下快速确定用户属于哪些组?cred.h
已经包含了所有这些。因此,剩下的唯一有效问题如下:
Note, that iterating through processes and reading process's credentials should be done under RCU-critical section.
...
我如何确保我的检查在这个关键部分运行?是否有关于如何实现此目的的任何工作示例? I've found some existing kernel documentation that instructs readers to wrap the relevant code with rcu_read_lock()
and rcu_read_unlock()
.我是否只需要针对 struct cred
和/或 struct task_struct
数据结构包装读取操作?最佳答案
首先,添加一个新的系统调用很少是正确的做法。最好通过现有机制来做事,因为您将受益于双方已经存在的工具:内核中现有的实用程序函数、用户空间中现有的 libc 和高级语言支持。文件是 Linux 中的核心概念(与其他 Unix 系统一样),大多数数据都是通过文件交换的,device files或特殊文件系统,例如 proc和 sysfs .
I would like to modify the system call so that it only gets invoked if a special user (such as "root" or user "pi") issues it.
你不能在内核中这样做。从设计的角度来看,这不仅是错误的,而且甚至是不可能的。内核对用户名一无所知。内核中关于用户的唯一知识是一些特权操作保留给根目录中的用户 0 namespace (不要忘记最后一部分!如果这对你来说是新的,那就表明你不应该做一些高级的事情,比如添加系统调用)。 (许多操作实际上寻找 capability 而不是 root。)
您要使用的是sysfs。阅读 kernel documentation并寻找非古老的在线教程或现有的内核代码(如今使用 sysfs 的代码通常非常干净)。使用 sysfs,您可以通过 /sys
下的文件公开信息。访问控制取决于用户空间——在内核中有一个合理的默认值,并在引导脚本中执行诸如调用 chgrp
、chmod
或 setfacl
之类的操作。这是使用现有机制时不需要在用户端重新发明的众多轮子之一。
sysfs show
方法自动锁定文件,因此一次只有一个内核线程可以执行它。这是使用现有机制时不需要在内核端重新发明的众多轮子之一。
关于c - 确保系统调用中的 UID/GID 检查在 RCU 临界区中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39132262/
Read-Copy-Update (RCU) 是一种手动内存管理技术,在 Linux 内核中越来越流行。 是否可以设计一种使用 RCU 而不是传统垃圾收集器来回收无法访问的内存的语言和 VM? 最佳答
我有许多读取器线程读取缓存数据,例如 struct { hash_table *cache; int64_t version; } ctx; 许多读取器线程读取缓存,例如 void *ge
你好, 我是 linux 内核中 rcu 锁定机制的新手。 在尝试了解 rcu 的工作原理和提供的 API 时,我看到 rcu_read_lock()、rcu_synchronize() 不采用任何锁
我有一个样板函数,可以在树状数据库中找到一个结构: struct foo { struct foo *child1; /* RCU-protected. */ struct foo *
(来自 LWN 上的一篇文章) 1 rcu_read_lock(); 2 list_for_each_entry_rcu(p, head, list) { 3 do_something_wi
我正在阅读 Read-copy-update (RCU) .对于 SMP,我不确定我是否理解正确。据我所知,RCU 确保更新以原子方式执行。在单链表的例子中,很明显可以在一个操作中完成用新元素交换旧元
在做教程时,我将数据批量加载到我的 dynamoDB JobsApplication 表中,其中包含大约 400 个随机职位发布。 使用 Node.js 和 aws-sdk 我执行了扫描操作。 var
任务 我有一个我为我的 RaspBerry Pi 2 编写的小内核模块,它实现了一个额外的系统调用来生成功耗指标。我想修改系统调用,以便只有在特殊用户(例如“root”或用户“pi”)发出时才会调用它
看了很多文章,还是搞不懂WCU和RCU是什么意思。 Dynamo 提供以下免费套餐: 25 个预置写入容量单元 (WCU) 25 个预置读取容量单元 (RCU) “每秒 25 次读写”是什么意思?我有
看了很多文章,还是搞不懂WCU和RCU是什么意思。 Dynamo 提供以下免费套餐: 25 个预置写入容量单元 (WCU) 25 个预置读取容量单元 (RCU) “每秒 25 次读写”是什么意思?我有
我已经安装了 OBIEE12c(12.2.1.4)。 OBIEE12c 认证矩阵表示 RCU 创建实用程序支持 oracle 数据库 19c。但是,当我运行 RCU 创建实用程序时,它无法满足先决条件
我试图了解一些内核同步机制(顺序锁、RCU(读取-复制-更新)和每 CPU 锁)的不同用例,建议用于编写您的设备驱动程序或内核模块。任何示例将不胜感激。 最佳答案 顺序锁 这是一种巧妙的锁定方法,写入
我想知道 nf_conntrack_find_get() 在 linux 内核中是否真的通过 RCU 保护了 ct 指针。 Read-Copy-Update(RCU) 可以在节点更新时保护访问(读取)
我正在开发的 Android TV (ATV) 应用具有语音控制功能。基本上,当用户按下 Remote 上的麦克风按钮时,按键事件(由 KeyEvent.KEYCODE_SEARCH 标识)由应用处理
我正在使用 AWS 免费套餐,并且我有 5 个 DynamoDB 表,每个表具有 5 个读/写容量,尽管我不确定是否需要 5 个 - 我只是将它们用于简单的 Lambda 函数,并且绝对没有太多的写入
在 Windows 10 机器上安装 Oracle Data Integrator (ODI) 12.2.1.4.0 时,Studio 安装成功,但 rcu.bat 脚本不运行,无法创建存储库。 双击
为了考虑将 AWS Keyspaces 作为本地 Cassandra 集群的替代方案,我想进行成本估算。但是, key 空间定价基于写入请求单位 (WRU) 和读取容量单位 (RCU)。 https:
我是一名优秀的程序员,十分优秀!