草庐IT

c - protected 内存区域上的 write() 不会触发 sigsegv,但标准访问会触发

我试图理解为什么在内存保护区域上调用写操作不会触发sigsegv。考虑这个例子:void*map_addr;unsignedlongaddr;map_addr=(void*)mmap(NULL,0x4000,PROT_READ_WRITE,MAP_PRIVATE,fd,0);mprotect(map_addr,0x4000,PROT_NONE);addr=(unsignedlong)map_addr;//case1:*(volatileint*)(addr);//sigsegvsent//case2:write(STDOUT_FILENO,map_addr,size);//sigseg

Linux:如何将一系列物理上连续的区域映射到用户空间?

在我的驱动程序中,我有一定数量的物理上连续的DMA缓冲区(例如每个4MB长)来从设备接收数据。它们由硬件使用SG列表处理。由于接收到的数据将经过密集处理,我不想关闭缓存,我将使用dma_sync_single_for_cpu在每个缓冲区都被DMA填充之后。为了简化数据处理,我希望这些缓冲区在用户空间中显示为一个巨大的、连续的、循环的缓冲区。如果是单个缓冲区,我只需使用remap_pfn_range或dma_mmap_coherent。但是,我不能多次使用这些函数来映射连续的缓冲区。当然,我可以在vm_operations中实现fault操作,让它在右边的buffer中找到对应页面的pf

linux - Linux 如何对待( protected )内存区域?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎不是关于aspecificprogrammingproblem,asoftwarealgorithm,orsoftwaretoolsprimarilyusedbyprogrammers的.如果您认为这个问题是关于anotherStackExchangesite的主题,您可以发表评论,说明问题可能在哪里得到解答。关闭6年前。Improvethisquestion来自dmesg、e820日志:BIOS-e820:[mem0x0000000180000000-0x000000047fffffff

linux - 如何使用克隆系统调用分配新的 TLS 区域

问题的简短版本:如果我想为线程分配一个新的TLS区域,我需要将什么参数传递给x86_64Linux系统上的clone系统调用我正在创造。长版:我正在进行一个研究项目,对于我正在试验的东西,我想使用clone系统调用而不是使用pthread_create创建线程。但是,我也希望能够使用线程本地存储。我现在不打算创建很多线程,所以我可以为使用克隆系统调用创建的每个线程创建一个新的TLS区域。我正在查看clone的手册页,其中包含有关TLS参数标志的以下信息:CLONE_SETTLS(sinceLinux2.5.32)ThenewtlsargumentisthenewTLS(ThreadLo

c++ - 将监视器限制在 Linux 中的某个区域

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭9年前。Improvethisquestion我的笔记本电脑的13英寸显示屏坏了。显示屏的左半部分完全是黑色的,我暂时无法修复它。我想知道是否可以用任何语言编写一个程序来将显示限制在右侧,这意味着:将分辨率更改为当前宽度的一半或保持宽高比但缩小显示并将其发送到右侧。我优先考虑能在Linux下使用的方法(Windows次之)语言不是问题(尽管我假设C++是可行的方法)并且我正在寻找一些提示。提前致谢。

linux mmap从用户空间应用程序访问PCI内存区域

作为我的PCI驱动程序的第一级测试,我希望我可以通过/sys/bus/pci/devices/0000:01:00.0/resource0访问pci_iomap区域来self的用户应用程序的文件。mmap的手册页、我找到的示例程序和其他帖子似乎表明用户进程访问应该有效。但是一些文章似乎表明mmap调用需要通过ioctl访问器从内核中完成。我的问题是PCIsysfs资源文件的mmap()应该从应用程序空间工作吗?当我运行我的代码时,mmap返回了一个看似有效的地址,但当我尝试访问该虚拟地址时却收到了总线错误。我相信我的终端设备是FPGA上的PCI到XilinxAXI桥接器,运行正常,因为

C 系统 v 信号量未锁定关键区域

我有一段代码可以从共享内存中读取一个整数,然后在子进程中递增该数字。我正在使用信号量来锁定这个关键区域,以便只有在没有其他进程不增加整数时才会增加整数。所以我得到了一个稳定的整数值。我为此使用了SYSTEMV信号量,但是我无法使其工作,因为看起来我对这些函数的使用没有做任何事情。该程序简单地生成100个进程,其中每个进程将共享内存中的整数递增1。(共享内存段最初由另一个程序创建,如果您也需要,请告诉我!)#include#include#include#include#include#include#include#include#include#include#defineFIFO_

linux - Linux下的DMA和I/O内存区域

我写这篇文章是因为我对DMA的行为有一些疑问。我正在阅读有关PCI布局以及设备驱动程序如何与卡交互的信息,我还阅读了有关DMA的信息。据我了解,PCI卡没有DMAController,而不是它们请求成为总线的主控,然后它们能够获取DMA地址并在内存和设备之间进行传输(通过总线)。这个DMA地址是RAM的一部分,实际上它是一个物理地址,在什么都不做之前你需要把它转换成你的驱动程序可以使用的东西,比如内核虚拟内存。我已经用这段代码检查过了:/*Virtualkerneladdress*/kernel_buff=pci_alloc_consistent(dev,PAGE_SIZE,&dma_

linux - 使用 Linux 虚拟服务器在 MMO 游戏中进行区域负载平衡

我是MMO游戏的开发人员,目前我们公司面临一些可扩展性问题,我认为这些问题可以通过游戏世界的适当集群来解决。我真的不想重新发明轮子,这就是为什么我认为Linux虚拟服务器可能是一个不错的选择,尤其是对于某些7级负载平衡技术。我目前正在查看ktcpvs作为负载平衡解决方案,并想知道它是否是一个合适的选择。主要想法是在专用服务器上运行多个区域(在我的游戏中称为“位置”)。当玩家决定前往某个特定位置时,负载均衡器会决定哪个区域服务器将为玩家实际服务(这就是我需要7级负载均衡器的原因)大家怎么看以上所说的?更新:我向LVS用户邮件列表发布了同样的问题http://marc.info/?l=li

linux - 我是否需要 "enable"Linux 3.12 驱动程序中的 PCIe 内存区域?

我有代码,从我的PCIe驱动程序的probe()函数调用(大致基于此post):编辑:基于AndreasBombe's响应,我更改了代码以使用pci_iomap(),但我仍然遇到系统挂起staticmy_pci_devpci_dev;/*localstructure*/staticintpci_setup_region(structpci_dev*dev){intbar=0;pci_dev.physical.addr=pci_resource_start(dev,bar);pci_dev.physical.size=pci_resource_len(dev,bar);pci_dev.v