问题标签 [userspace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 为什么虚拟地址 55Fxxxxxxxxx 和 7FFxxxxxxxxx 之间是 64 位 Linux 用户空间?(只有 45 位)
(在 Linux 64 位上测试)
如果您查看/proc/<pid>/maps
(作为系统中当时运行的任何进程的进程标识符)的内容,您将看到分配给进程的虚拟空间在 and 之间555xxxxxxxxx
,7FFxxxxxxxxx
而不是在000000000000
and之间FFFFFFFFF000
。为什么是这样?
我已经了解,一个进程的虚拟空间是 64 位系统中的 48 位(在《计算机体系结构:定量方法》一书中阅读。Hennessy 和 Patterson。第 118 页),但如果它只使用它55Fxxxxxxxxx
和7FFxxxxxxxxx
它之间的空间意味着仅使用或多或少的 45 位。为什么用户空间比我想象的要小?
multithreading - 用户空间调度困境中的线程
最近我开始(再次)阅读 Tanenbaum 的“Modern Operating Systems 4ed”,我有点卡在第 2 章讨论进程和线程。特别是我对列出所有优点和缺点的用户空间线程子章节感到困惑。
这是支持用户空间线程的直接引用:
用户级线程还有其他优点。它们允许每个进程拥有自己定制的调度算法。对于某些应用程序,例如具有垃圾收集器线程的应用程序,不必担心线程在不方便的时刻被停止是一个优点。它们还可以更好地扩展,因为内核线程总是需要内核中的一些表空间和堆栈空间,如果有大量线程,这可能是一个问题。
我理解它的方式是每个使用线程的进程(因此创建/销毁它们)负责实现这些线程的调度以使它们高效。例如,具有预定义的短时间间隔的简单循环。
然而,稍后在子章节中,我们得到了缺点的引用。它来了:
用户级线程包的另一个问题是,如果一个线程开始运行,除非第一个线程自愿放弃 CPU,否则该进程中的其他线程将永远不会运行。在单个进程中,没有时钟中断,因此无法以循环方式(轮流)调度进程。除非线程自愿进入运行时系统,否则调度程序永远不会有机会。
嗯,WTF?因此,在专业方面,拥有线程的进程 OWN 调度程序是一个优势,在这里似乎无论是否有定制的调度程序 - 它都不会按预期工作,因为线程是贪婪的。
我的问题是:当使用用户空间线程以相同的方式实际调度线程时,进程的调度程序是否不可能?还是我的英语不够好,无法在这里抓住要点。
PS。在查看已发布的问题时,建议我阅读此 - User-level threads for threading。Tanenbaum 的模型适用于旧系统的说法不正确吗?这本书于 2014 年出版,所以这可能是一回事。
c - 是否可以将网络适配器的 DMA 区域映射到用户空间?
您如何找到网络适配器的 DMA 地址,那么是否可以映射该地址然后对其进行读写?
kernel - 是否可以使用 BPF/eBPF 读取用户空间文件(从内核空间)?
我知道作为一般注释文件不应该从内核空间读取。
但是我有兴趣使用 BPF 程序在某些文件中查找关键字。
理想情况下,我希望 BPF 程序能够附加到 Kprobe,并且当事件触发时,我希望它说读取文件并计算关键字出现在文件中的实例。
谁能告诉我是否可以读入这样的文件,也许可以就我如何处理这个问题提供一些指导。
谢谢,山姆
linux-kernel - 制作内核模块并将其注册为 pci 设备驱动程序和网络设备驱动程序,并使用 ioctl 访问模块的缓冲区。可能的?
我喜欢制作一个内核模块。在其中我喜欢将其注册为 pci 和网络设备驱动程序。并使用ioctle
从用户空间访问模块的缓冲区(在 pci 和网络驱动程序中)并获取缓冲区。当数据包到达我的内核模块/设备驱动程序并且缓冲区在模块中是全局的时,缓冲区包含在中断处理程序中接收到的数据包。意味着它不会在用于接收数据包的中断处理程序中。并且在设备驱动程序内部的 ioctl 函数实现中只是将此缓冲区返回到用户空间
可能吗?如果不是,那么什么解决方案将实现从用户空间应用程序访问 kernel_module/ethernet_driver 内部缓冲区中的数据包的结果。
linux - 内核可以识别哪个用户应用程序被杀死/关闭,在它服务的几个应用程序中
我正在编写一个 linux 内核驱动程序,它创建一个字符设备文件“/dev/my_file”。多个用户空间应用程序执行open()
此文件并使用ioctl
提供的 cmd 来注册应用程序特定数据。IOCTL 还提供了注销 cmd,在执行干净退出时,应用程序可以使用和注销自己(内核驱动程序删除应用程序数据,删除任何内存分配等)。但是,如果应用程序在执行open()
并ioctl
注册 cmd 后被杀死。驱动程序如何检测哪个应用程序被杀死,然后执行清理任务以删除应用程序特定数据。我知道调用了.release
func ptrstruct file_operations
并通知了驱动程序,但不确定驱动程序如何找到被杀死的特定应用程序。
谢谢Sheetal
serial-port - 如何实现 TxDataAvailable。如何知道要发送到 USB 层的缓冲区大小
我想使用驱动程序工具包框架开发串行驱动程序。我正在尝试覆盖 IOUserserial 类方法。但我不知道如何使用 TXDataAvailable() 和 RXDataAvailable() 函数获取要发送到 USB 层的缓冲区大小? 任何参考代码都会有所帮助。
linux - 在内核和用户空间程序之间维护某种对象。并在该对象中同步来自用户空间和内核的数据
我正在寻找一种机制来实现内核和用户空间之间的共享对象。无用说类型,但它可能是char *
orchar obj[array_size]
或void *
。
该功能应该使用户空间程序和内核能够同步对象中的数据。如果数据刚刚以非阻塞方式写入内核中的对象,还需要内核中的一种机制来提醒用户空间程序。
我知道它看起来更像是一个字符设备/或块设备驱动程序功能,但我正在开发一个需要在用户空间和设备之间共享数据的嵌入式系统。我对设备读/写的可用用户空间 API 了解不多,因此需要这种方式。但我正在寻找类似在 ISR 或中断处理程序中提醒用户空间应用程序的东西。
我试着在互联网上找到它。但我无法获得任何相关的搜索结果
kernel - 在 buildroot 中使用两个不同的工具链编译内核和用户空间
使用运行 2.6.35 自定义内核的旧 ARM 板。制造商提供了两种不同的交叉工具链:
制造商还提供了一组脚本作为胶水来编译内核、模块并制作最终 rootfs 的包。
我的目的是删除所有自定义的“胶水”脚本,并将整个构建过程集成到一个 buildroot 中。我选择了 buildroot-2016.08.01。
运行 buildroot menuconfig 并设置此变量:
我可以设置外部用户空间工具链。用户空间编译工作正常,按预期生成最终的 rootfs。
我的问题是:是否可以在 buildroot 中定义两个外部工具链,一个用于编译内核,另一个用于编译 rootfs 用户空间?我不知道。我在 buildroot 文档中没有找到任何相关内容。
我认为 buildroot 期望使用相同的工具链来编译内核和用户空间。但是在尝试仅使用一个工具链来编译它们时我遇到了问题。
a) 如果我尝试使用内核工具链编译用户空间,编译busybox会失败:
b) 如果我尝试使用用户空间工具链编译内核,我会收到意外错误:
但是,当使用适当的工具链编译用户空间和内核时,一切正常。我不明白为什么这个在用户空间工作得很好的工具链在编译内核时会产生错误。这是正常的吗?预先感谢!
camera - ov9281 的相机传感器驱动程序
我正在尝试编写一个裸机应用程序来使用 ov9281 相机在 VGA 显示器上流式传输图像。 这是我的硬件设计。我对 ov5640 相机 (PCAM) 使用了相同的设计。到目前为止,我能够使用裸机应用程序配置 ov5640 和蒸汽数据。我知道必须按照下面所示的方式配置寄存器。
然而,这个 ov5640 的驱动程序是可用的,我不知道如何为 ov9281 编写这个驱动程序。
有人可以帮我吗?
非常感谢任何帮助,我已经在各种论坛上问过这个问题,但到目前为止没有任何帮助。提前致谢!