• 系统调用显示按状态过滤的进程
    我正在进行一个系统调用,该调用循环遍历具有特定状态(作为参数传递给syscall)的每个进程,并显示其名称、PID、UID和子进程的名称。这就是我目前所拥有的:asmlinkage int sys_procinfo(int state){ struct task_struct *task; struct task_struct *child_ptr; struct list_head *list; for_each_process(task) { if(t...
  • 我需要在多线程读取调用中保护fd吗?
    系统调用是否意味着在内核内的描述符上进行同步?我看到一些代码只使用read调用来同步和协调多个使用者线程,如下所示:rfd,wfd = pipe() or socketpair(); // setup fd // a single writer: write(wfd, ...); // multiple read threads, each blocks on read: read(rfd, work); // my questions is here // do the work assigned...
  • 如果我在内核中进行了自定义sys调用和排队,线程安全吗?
    在Linux-4.4内核中,假设有我自己的系统调用和队列。编写了linux-4.4/kernel/my_queue.c文件,文件中定义了int数组作为全局变量,push,pop函数作为队列接口。那么,它是线程安全的吗?对不起,我英语不好。。:)最佳答案:Linux内核不会自动序列化系统调用。一个系统调用可以与自身并行调用(但可以从不同的线程调用)。如果系统调用实现访问全局变量,则需要同步此访问以使其正常工作。
  • 如何编写stap(systemtap)脚本以查看某个进程是否调用了特定的内核函数?
    使用stap,我可以将*.stp文件写入跟踪流程的操作,如:probe process("mytest").begin { printf("Caught mytest process") } 或者跟踪任何进程是否调用了内核函数:probe kernel.function("do_exit").call #all processes { printf("called kernel/exit.c: do_exit\n") } 但我的要求是:从特定进程名跟踪内核函数调用,比如跟踪“mytest”进...
  • 在异常处理程序内部创建的Linux内核线程停止
    我试图在__do_page_fault异常处理程序的主体中创建一个Kthread。这个线程将做一些工作(打印导致异常的用户进程的pc,并使用ptrace跟踪它)。目前我只是在一个不返回的循环中打印pc,但是系统会在一段时间后挂起,好像Kthread应该返回以便用户进程继续执行。这是Kthread的代码: int th1( void * data ){ struct task_struct * tsk= (struct task_struct*) data; int pi...
  • 为什么系统调用的数量非常有限?
    我在玩ioctl,我突然想到了这个问题。背景有人告诉我,系统调用的主要动机是允许的中断处理程序的数量非常有限。许多操作系统实现了系统调用的抽象(也称为陷阱),它只占用一个中断号(对于Linux来说,0x80),但是接受额外的参数来根据需要提供不同的功能。this thread表明系统调用的数量实际上也是非常有限的,因此上面同样的推理被再次应用到inventioctl中。因此我的问题。为什么操作系统不提供足够的系统调用并摆脱ioctl?(或者仅仅是为了创建一个层次结构来提供更好的可伸缩性?)最佳答案:我的看法...
  • make -kpkg使用-O0为kgdb构建内核
    我要设置kgdb来调试Ubuntudebian内核。默认情况下,由make-kpkg编译的内核已经过优化(-O2),因此我无法调试变量。是否有方法禁用内核编译优化(例如,-O0)?谢谢!目前,gdb报告变量已优化:(gdb) p pb $5 = <optimized out> 最佳答案:Linux内核依赖于-O2。它不会以任何较低的优化级别编译。它使用了几个GCC“技巧”,这些技巧只在某些优化被打开时才起作用,比如内联函数应该像宏一样工作。
  • 为什么文件不存在但lsof显示此文件未删除
    stat一个Linux常规文件,目标文件不存在。但是lsof可以找到这个文件,并找到一个打开这个文件的程序。lsof显示此文件正常。我想这个文件必须删除,但我不明白为什么lsof显示这个文件是正常的。最佳答案:我以前遇到过一个像你这样的问题,文件所在的目录是挂载另一个磁盘。试着挂载磁盘,也许你能找到你的文件。或者,文件所在的磁盘可能会被强制卸载。
  • LXC的内核配置
    我正在配置Linux内核3.10.31ltsi,并希望添加对LXC所需的支持,据我所知,LXC应该可以使用cgroup和namespace,但menuconfig中需要包括哪些配置?最佳答案:您应该使用一个名为“lxc checkconfig”的脚本(它是lxc的一部分)来检查您的内核是否支持所有必需的设置;请参见https://linuxcontainers.org/lxc/manpages/man1/lxc-checkconfig.1.html另外,我认为LXC默认使用所有名称空间;这意味着您应该设置配...
  • 丘比特在Linux中做什么?
    我在安装过程中见过类似丘比特这样的模块名,我很好奇它到底是做什么的。我搜索了谷歌,但没有找到太多线索。我相信stackoverflow专家应该知道cupid是linux内核还是发行版中的一个模块/驱动程序?谢谢。最佳答案:cpuid是一个可以作为rpm安装在linux上的工具用于转储有关CPU的x86 CPUID信息的Linux工具
  • 计算进程的cpu使用率占内核空间的百分比
    有谁能指出我如何以百分比计算特定进程的cpu使用率?代码是一个核心模块,因此我正在寻找一种比解析/proc中的数据或使用系统调用更好的方法。我想知道是否可以使用task_struct和linux内核函数的组合来计算它。最佳答案:任务结构有用户时间(utime)、系统时间(stime)、开始时间和…,下面是https://stackoverflow.com/a/16736599/4490542
  • Linux内核模块中未定义模块/ v7_flush_dcache_all中的未知符号
    我正在尝试创建一个linux内核模块来禁用数据缓存。我试着在ARG/ARM/Eng/As/CaseFLUH.H中使用V7XEXITORCONSENCYNYFILE(ALL)函数,并且这个函数调用V7I- FLUHURZDCACHEYALALL,我发现它在ARCH/ARM/MM/ARCH-V7.S中。我的问题是,当我试着制作我的模块时,我会收到一个警告WARNING: "v7_flush_dcache_all [/home/pi/Documents/ARMHammer/kern/my_kernel/cach...
  • mips uasm代码的优点是什么
    在mips架构的内核TLB处理部分中,有一些uasm代码,这是生成汇编而不是使用gcc的另一种方法。 我不知道为什么不写内联汇编而不是uasm。为什么? uasm有哪些优势? 最佳答案 在TLB未命中处理程序中,我认为您需要完全控制要使用的指令。 (以确保您仅通过已知的TLB条目访问内存)。仅使用内联汇编仅作一些特殊说明,并让GCC将局部变量溢出到堆栈中(如果在没有优化的情况下进行编译)将不起作用。 The TLB-miss handler entry point is also not a func...
  • 如何在张量流中对CNN内核进行限制?
    我们特定的训练问题要求CNN内核中的所有权重都必须为正。有人知道该怎么做吗? 最佳答案 您正在寻找内核约束,这里的链接提供了您问题的答案。 您既可以使用内核约束,也可以简单地采用lagrange优化技术在总损失函数中添加一项,从而消除不需要的权重特征。像这样(在参考答案中已提到), added_loss = -tf.minimum(tf.reduce_min(theta),0) final_loss = your_loss + added_loss optimizer.minimize(final_l...
  • 操作系统开发有哪些入门资源? [关闭]
    关闭。这个问题是题外话。它当前不接受答案。                                                                                                                                                                                                                                           ...
  • 什么是OS内核?它与操作系统有何不同? [关闭]
    关闭。这个问题是题外话。它当前不接受答案。                                                                                                                                                                                                                                           ...
  • 陷阱和中断有什么区别?
    陷阱和中断有什么区别? 如果不同系统的术语不同,那么它们在x86上意味着什么? 最佳答案 陷阱是用户进程中的例外。它是由零除或无效的内存访问引起的。这也是调用内核例程(系统调用)的常用方法,因为它们的运行优先级高于用户代码。处理是同步的(因此用户代码将被挂起并随后继续)。从某种意义上说,它们是“活动的”-在大多数情况下,代码期望陷阱发生并依赖于此事实。 中断是由硬件(硬盘,图形卡,I / O端口等设备)生成的。这些是异步的(即它们不会在用户代码中的可预测位置发生)或“被动”的,因为中断处理程序必须等待...
  • 内核空间和用户空间有什么区别?
    内核空间和用户空间有什么区别?内核空间,内核线程,内核进程和内核堆栈是否意味着同一件事?另外,为什么我们需要这种差异化? 最佳答案 真正简化的答案是内核在内核空间中运行,而普通程序在用户空间中运行。用户空间基本上是沙盒的一种形式-它限制了用户程序,因此它们不会弄乱其他程序或OS内核拥有的内存(和其他资源)。这种限制(但通常不能完全消除)限制了他们执行坏事(例如使机器崩溃)的能力。 内核是操作系统的核心。通常,它可以完全访问所有内存和计算机硬件(以及计算机上的所有其他内容)。为了使计算机尽可能稳定,通常...
  • 为什么选择cscope或ctags? [关闭]
    关闭。这个问题是题外话。它当前不接受答案。                                                                                                                                                                                                                                           ...
公众号