草庐IT

内核栈

全部标签

操作系统实验-添加一个内核模块

参考用书:《操作系统实践:基于Linux的应用与内核编程》一.添加一个内核模块1.1需求分析对于一个应用程序而言,源代码经编译后与标准运行库链接,通过系统调用执行操作系统内核中的特权指令,指令返回的结果通过系统调用返回给用户,完成程序。由于Linux是单内核多模块的操作系统,整个操作系统只包含一个由多个不同功能模块组成的内核,通过Linux系统的这种特性,可以动态添加自己编写的内核模块,并由系统每次启动时进行加载。通过内核模块的动态添加和删除,可以直观的感受到内核模块的编写以及动态添加和删除的过程。可以通过此次实验理解用户态(UserModel)和内核态(KernelModel)的关系。并掌握

c++ - 来自 std::chrono 的时钟在不同的内核上可以不同吗

我喜欢比较来自std::chrono::high_resolution_clock的time_point,它们是在处理器不同内核上运行的线程中测量的。是否会有显着差异,例如滞后或更快/更慢的时钟?标准规定了什么? 最佳答案 std时钟与处理器无关,事实上,大多数线程也没有。来自同一线程的两个时钟测量很可能在不同的内核上进行。关于与测量相关的超前和滞后——这与任何其他指令的执行没有什么不同;通常的管道等可能会产生影响,但我认为这不是有害的。如果它可能有害,您可能需要考虑其他工具来完成这项工作,例如一些专门的平台计时工具或某种特定于CP

c++ - 如何使用 ZwQueryInformationProcess 获取内核驱动程序中的 ProcessImageFileName?

我正在为我的应用程序编写一个简单的内核驱动程序(想想一个非常简单的反恶意软件应用程序。)我已HookZwOpenFile()并使用PsGetCurrentProcess()获取调用进程的句柄。它返回一个PEPROCESS结构:PEPROCESSproc=PsGetCurrentProcess();我正在使用ZwQueryInformationProcess()获取PID和ImageFileName:DbgPrint("ZwOpenFileCalled...\n");DbgPrint("PID:%d\n",PsGetProcessId(proc));DbgPrint("ImageFile

c++ - 内核参数的 CUDA C++ 模板化

我正在尝试基于bool变量对CUDA内核进行模板化(如此处所示:ShouldIunifytwosimilarkernelswithan'if'statement,riskingperformanceloss?),但我不断收到编译器错误,提示我的函数不是模板。我认为我只是遗漏了一些明显的东西,所以非常令人沮丧。以下不起作用:实用工具#include"kernels.cuh"//Utilityfunctions内核.cuh#ifndefKERNELS#defineKERNELStemplate__global__voidkernel(...params...);#endif内核.cutem

c++ - 在 CUDA 内核中使用 char 变量会受到惩罚吗?

我似乎记得得到提示,我应该尽量避免在CUDA内核中使用char,因为SM喜欢32位整数。使用它们会有一些速度损失吗?比如做起来是不是比较慢inta[4];intb=a[0]+a[1]+a[2]+a[3];a[1]=a[3];a2[0]=a[0]比chara[4];charb=a[0]+a[1]+a[2]+a[3];a[1]=a[3];a2[0]=a[0]在内核代码中?注意事项:我对使用char值进行算术运算、执行比较以及将它们读写到内存中的惩罚很感兴趣。 最佳答案 预先快速说明:在C/C++中,char的符号是实现定义的。当使用ch

c++ - 在 nvidia cuda 内核中创建数组

嗨,我只是想知道是否可以在nvidiacuda内核中执行以下操作__global__voidcompute(long*c1,longsize,...){...longd[1000];...}或以下__global__voidcompute(long*c1,longsize,...){...longd[size];...} 最佳答案 你可以做第一个例子,我没试过第二个。但是,如果可以的话,您可能希望重新设计您的程序以不这样做。您不想在内核中分配4000字节的内存。这将导致大量使用CUDA本地内存,因为您将无法将所有内容都放入寄存器中。

c++ - 如何将 C++ vector 传递和访问到 OpenCL 内核?

我是C、C++和OpenCL的新手,目前正在尽最大努力学习它们。这是一个预先存在的C++函数,我试图找出如何使用C或C++绑定(bind)将其移植到OpenCL。#includeusingnamespacestd;classTest{private:doublea;vectorb;vectorc;vector>d;public:doublefoo(longx,doubley){//mathematicaloperations//usingx,y,a,b,c,d//andalsob.size()//tocalculatereturnvaluereturn0.0;}};大体上我的问题是如何

虚拟化内核概念

虚拟化与云计算2022年9月13日13:51VMMX86系统是完全运行在裸机上的。X86提供四个特权等级,分别是ring0-1,ring0的级别是最高的。在Linux+X86中,操作系统需要直接访问内存和硬件所以需要运行在ring0上,而应用程序需要运行在ring3上,如果需要进行访问磁盘、读写文件的操作,需要执行系统调用函数,执行系统在调用的时候,CPU运行级别从ring3到ring0并跳转到系统调用对应的内核代码位置执行,完成后从ring0到ring3,这个过程叫做用户态和内核态的切换。此时hostos是在ring0工作的,而guestOS不能在ring0了。但是它依旧执行之前的命令,却没

LSM零知识学习二、Linux内核中的安全模块

接前一篇文章:LSM零知识学习一、概念与框架机制本文内容参考:《Linux内核安全模块深入剖析》李志机械工业出版社LinuxLSM(LinuxSecurityModules)HookTechnology_weixin_30929011的博客-CSDN博客LinuxSecurityModuleUsage—TheLinuxKerneldocumentation一、总体概况前文已提到,LSM的全称为LinuxSecurityModule,字面意思为Linux安全模块。其在Linux内核中体现为一组安全相关的函数,这些安全函数在系统调用的执行路径中会被调用。因此LSM的目的是对用户态进程进行强制访问控

windows - DLL是在内核态还是用户态加载的?

我在面试中被问到这样一个问题:Inwindows,supposethereisanexewhichdependsonsomedlls,whenyoustarttheexe,andthenthedependentdllswillbeloaded,arethesedllsloadedinkernelmodeorusermode?我不太确定这个问题,而不是提到答案-你能帮忙解释一下吗?谢谢。 最佳答案 我不是Windows内部如何工作的专家,但据我所知,正确答案是用户模式,因为只有与您的操作系统相关的进程才能进入内核空间http://en