systems-programming相关内容

Linux中的ioctl()是否可以为NVMe IO请求指定提交队列ID

我正在开发一个nvme-cli的测试工具(用c编写,可以在Linux上运行)。 出于SSD验证的目的,我们实际上正在寻找将I/O命令发送到特定的提交队列(IO队列对)。我们需要它,因为我们想要线程化,但要实现线程化,我们需要将I/O请求发送到不同的队列,否则I/O请求将被连续处理。 那么在ioctl()中有什么方法可以指定提交队列ID吗? 以下是使用ioctl() 请求NVMe ..

vfork() 系统调用中的返回值

考虑以下代码: int main(){国际PID;pid=vfork();如果(PID==0)printf("孩子\n");别的printf("父\n");返回0;} 在vfork()的情况下,父进程和子进程使用的地址空间相同,所以变量pid的单个副本应该在那里.现在我无法理解这个 pid 变量如何具有 vfork() 返回的两个值,即子级为零,父级非零? 在 fork() 的情况下,地 ..
发布时间:2022-01-11 23:36:15 其他开发

使用信号量实现 N 个进程屏障

我目前正在为之前迭代的操作系统考试进行培训,我遇到了这个问题: 实施“N 流程屏障",即是,确保每个过程出来一群人在等待,在某些点在其各自的执行,对于其他进程达到他们的给定点. 你有以下可用的操作: init(sem,value)、wait(sem)和signal(sem) N 是一个任意数字.我可以使它适用于给定数量的进程,但不适用于任何数量. 有什么想法吗?用伪代 ..

以编程方式获取缓存行大小?

欢迎所有平台,请指定您的回答平台. 一个类似的问题:如何在 C++ 中以编程方式获取 CPU 缓存页面大小? 解决方案 在 Linux(具有相当新的内核)上,您可以从/sys 中获取此信息: /sys/devices/system/cpu/cpu0/cache/ 这个目录对于每一级缓存都有一个子目录.这些目录中的每一个都包含以下文件: coherency_line_size等级 ..
发布时间:2021-12-20 10:59:48 C/C++开发

*nix select 和exceptfds/errorfds 语义

select 系统调用需要 3 个文件描述符集来观看 fds 以确保可读性/writeable 和文件描述符上的“异常". 我的选择 manpage 没有过多说明 exceptfd 描述符集.这有什么用途;什么样的异常可以并且会通知文件描述符? 我假设这对于描述符类型可能会有所不同......无论是 TCP 套接字、管道、tty 等).有没有人有关于 select 可以报告不同类型的描 ..
发布时间:2021-12-15 08:01:59 服务器开发

如果指向的文件被移动或删除,Linux 上打开的文件句柄会发生什么

如果同时获取指向的文件,Linux 上打开的文件句柄会发生什么: 搬走 -> 文件句柄是否保持有效? 已删除 -> 这是否会导致 EBADF,表明文件句柄无效? 被新文件替换 -> 文件句柄是否指向这个新文件? 被一个新文件的硬链接替换 ​​-> 我的文件是否处理“跟随"这个链接? 被一个新文件的软链接替换 ​​-> 我的文件句柄现在是否命中了这个软链接文件? 我为什么要问这样 ..
发布时间:2021-12-03 12:58:36 服务器开发

64 位 Windows 是否使用 KERNEL64?

我正在查看一些带有 dumpbin 的库,我注意到所有 64 位版本都链接到 KERNEL32.64 位 Windows 上没有 KERNEL64 吗?如果没有,为什么? 我所有的操作系​​统都是 32 位的,所以我不能只看.谷歌搜索没有找到任何有价值的东西,所以我怀疑没有 KERNEL64,但我仍然很好奇这是为什么. 编辑:我后来发现这个非常有用.MSDN x64 指南 解决方 ..
发布时间:2021-11-25 05:49:40 C#

进程的页表是否映射到内核地址空间?

我在做 Windows 系统编程,想知道是否可以在源代码级别访问进程的页表. 这是我所知道的与虚拟内存相关的页表. 假设用户只是在 Windows 操作系统(32 位)上运行一个名为“A"的进程. 首先,操作系统为 A 进程创建并维护了 4GB 的虚拟地址空间. (其中2GB是内核地址空间,另外2GB是用户地址空间. 用户地址空间中的任何代码都不能直接访问内核地址空间 ..

使用 sigaction(), c

我正在阅读有关 sigaction()(来源来自我的课程笔记)但我不确定我是否理解这段文字: 信号掩码仅在持续时间计算和安装信号处理程序. 默认情况下,信号“sig"也会在信号发生时被阻塞. 一旦使用 sigaction 为特定信号安装了操作,在明确请求另一个操作之前,它会保持安装状态. 这是否意味着从信号处理程序返回后恢复了默认信号掩码?另外,我是否必须在使用后重新安装处 ..
发布时间:2021-09-14 19:50:11 服务器开发

在检查文件是否存在然后创建它时如何避免竞争条件?

我正在考虑代码中的极端情况,当您检查文件是否存在时,我无法弄清楚如何避免问题,如果不存在,则使用该文件名创建一个文件.代码大致如下: //1状态 = 统计(文件名);如果(!状态){//2创建文件(文件名);} 在调用 1 和 2 之间,另一个进程可以创建文件名.如何避免这个问题,是否有针对此类问题的通用解决方案?它们经常发生在系统编程中. 解决方案 这就是O_EXCL |open() ..
发布时间:2021-07-02 18:43:51 其他开发

在运行时更改进程名称

对于 A.EXE PE 文件,如果程序以测试模式运行,我想将进程名称更改为“A_TEST.exe". 如果程序以安全模式运行,我想更改为“A_SAFE.exe" 文件名必须相同(A.EXE). 有可能吗? 解决方案 如果“进程名称"是显示任务管理器的名称 - 您只能从 ring0 更改它. 从 ring3 您只能更改默认窗口标题. #include PEB* peb ..
发布时间:2021-06-21 19:45:52 其他开发

当我们使用 mmap 函数时,操作系统会做什么工作?

这是一个使用 mmap 函数将给定文件映射到内存的示例.在这个例子中,我没有使用 fwrite 或 write 函数将内容写入磁盘文件(只是将内容打印到 stdout),但实际上反映了修改后的内存内容在磁盘文件上.我猜操作系统会跟踪映射内存并在修改映射内存时写入磁盘.我想知道操作系统的详细信息. example.c #include #include #include #include # ..
发布时间:2021-06-12 20:38:06 其他开发

文字VS立即操作数

在本学期的系统软件课程中,我们正在学习组装程序和其他系统软件.在阅读本课程时,我遇到了文学主题. 文字与立即操作数之间有一个比较,即它们之间的唯一区别是文字不作为指令的一部分进行汇编,而立即操作数则作为指令的一部分. 如果可以使用立即数操作数,为什么必须使用文字?是什么让他们与众不同?换句话说,什么时候使用文字,什么时候使用立即数? 解决方案 立即操作数是可以将其编码为指令本身 ..

使用`int a [3] = {0,};`格式在c中初始化数组.

我已经看到一个源,其中数组在 int arr [3] = {0,}; 中进行初始化?我通常使用这种格式 int arr [3] = {0}; 我可以知道有什么区别 解决方案 这可能是 dup ,但是我不管怎样,我都会开枪. int arr [3] = {0,}; 与 int arr [3] = {0}; 之间没有区别. 参考:C11 6.7.9: 初始值设定项:任务表达{in ..
发布时间:2021-05-29 23:00:37 服务器开发

exec系列功能的工作

我正在研究exec函数家族.其手册页说,它将新的过程映像替换为当前过程映像.如果替换了二进制文件,则返回后如何获取称为exec的进程的先前参数?由于替换进程映像意味着替换了其所有内存部分.如果我输入错误或知识不足,请更正我. 解决方案 真正的工作由 ..
发布时间:2021-05-06 18:55:38 服务器开发

在Windows中以编程方式重新启动USB设备

我正在开发的某些软件需要存在USB设备(我可以通过USB到UART的桥接器作为SerialPort与之交互). 有时,从休眠状态重新启动计算机后,未检测到该设备,并且我无法再通过其串行端口写入或读取该设备.必须具有对该设备的读/写访问权限. 我不能依靠用户采取任何措施(物理或其他方式),因此我需要一种以编程方式重新启动设备的方法. 在Windows XP/Vista/7中,如何使 ..
发布时间:2021-04-01 21:27:55 C#/.NET

系统范围的右键单击上下文挂钩

**你好.. 我正在创建英语到古吉拉特语词典WinForm应用程序. 我需要在右键单击上下文菜单上设置一个系统范围的钩子,以选择文本. 这表示该应用程序在运行时,并且如果用户从任何程序中选择单词并右键单击它,则该单词的含义应显示为菜单项. 该怎么做? 或其他任何选项,例如注册编程,shell扩展等...? 即使您说不可能,我也必须这样做. 所以请帮助我.* ..
发布时间:2020-11-23 20:20:32 其他开发