首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Linux内核中使用workqueue或kthread执行ELF

在Linux内核中,可以使用workqueue或kthread来执行ELF文件。

  1. Workqueue:
    • 概念:Workqueue是Linux内核中的一种机制,用于异步执行工作项。它允许将工作项提交到内核中的工作队列中,然后由内核调度执行。
    • 分类:Workqueue分为系统工作队列和自定义工作队列。系统工作队列是内核提供的全局工作队列,而自定义工作队列是由开发者创建的专用工作队列。
    • 优势:使用Workqueue可以将一些耗时的操作放在后台执行,避免阻塞主线程,提高系统的响应性能。
    • 应用场景:Workqueue适用于需要异步执行的任务,如后台数据处理、设备驱动程序等。
    • 推荐的腾讯云相关产品:腾讯云服务器(CVM)
    • 产品介绍链接地址:https://cloud.tencent.com/product/cvm
  • Kthread:
    • 概念:Kthread是Linux内核中的一种线程实现,用于执行内核级别的任务。它是一种轻量级的线程,由内核调度执行。
    • 分类:Kthread可以分为内核线程和用户线程。内核线程是由内核创建和管理的线程,而用户线程是由用户空间程序创建和管理的线程。
    • 优势:Kthread具有较低的开销和较高的执行效率,适用于需要在内核空间执行的任务。
    • 应用场景:Kthread适用于需要在内核空间执行的任务,如内核模块加载、设备驱动程序等。
    • 推荐的腾讯云相关产品:腾讯云容器服务(TKE)
    • 产品介绍链接地址:https://cloud.tencent.com/product/tke

总结:在Linux内核中,使用workqueue或kthread执行ELF文件可以实现异步执行和内核级别任务的需求。腾讯云提供了相应的产品,如腾讯云服务器和腾讯云容器服务,可以满足不同场景下的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux内核线程kernel thread详解--Linux进程的管理与调度(十)

线程启动后按周期性间隔运行,检测特定资源的使用,在用量超出或低于预置的限制时采取行动。 内核线程由内核自身生成,其特点在于 它们在CPU的管态执行,而不是用户态。...#L21 Linux中的workqueue机制就是为了简化内核线程的创建。...工作队列(workqueue)是另外一种将工作推后执行的形式.工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。...执行的操作, 只是在内核线程任务队列kthread_create_list中增加了一个create任务, 然后会唤醒kthreadd进程来执行真正的创建操作 内核线程会出现在系统进程列表中, 但是在ps..., 虽然创建的代价已经很小了, 但是对于追求性能的linux内核来说还不能忍受 因此我们只能说kernel_thread是一个古老的接口, 内核中的有些地方仍然在使用该方法, 将一个函数直接传递给内核来创建内核线程

7.9K51

《Essential Linux Dev

清单3.5 使用工作队列进行延后工作 #include linux/workqueue.h> struct workqueue_struct *wq; /* Driver Initialization...一些使用场景的例子包括: (1)你的驱动模块中包含了一个辅助内核线程。当你卸载这个模块时,在模块的代码从内核空间被移除之前,release()函数将被调用。...在第11章中,开发一个遥测设备驱动的时候,我们会使用完成接口。 Kthread辅助接口 Kthread为原始的线程创建函数添加了一层外衣由此简化了线程管理的任务。...list和hlist库函数位于include/linux/list.h。在整个类型中都有对它们的使用,因此在大多数子目录中,都能找到例子。...() kernel/kthread.c 内核线程可以使用该函数轮询是否其他的执行单元已经调用kthread_stop()让其停止 IS_ERR() include/linux

2.2K20
  • HCRootkit Sutersu Linux Rootkit 分析

    大多数“kill”二进制文件的核心功能保持不变,但增加了在执行期间将两个 ELF 文件写入磁盘的功能。...值得注意的是,图1和图2显示 ELF 植入程序和内核 rootkit 在 VirusTotal 上的检测率很低或根本不存在。...执行sudo会获得安装内核模块和写入 /proc/ 中的特权位置的适当权限。写入文件后,文件描述符被关闭,二进制文件通过系统调用执行,然后通过 unlink 系统调用删除。该行为可以在下图中看到。...当接收到特定的 ICMP 数据包时,DLEXC 和 ICMP 模块可以一起使用来触发二进制文件的下载和执行。它们也可以独立使用。...Userland ELF 在隔离环境中执行,该环境将一个子集的静态域名条目添加到 /etc/hosts 文件,以监测域名交互行为。

    88120

    万字整理 | 深入理解工作队列

    是内核里面很重要的一个机制,特别是内核驱动,一般的小型任务(work)都不会自己起一个线程来处理,而是扔到workqueu中处理。...workqueue :工作的集合。workqueue和work是一对多的关系。 worker :工人。在代码中worker对应一个work_thread()内核线程。...使用; 1.1.1 normal worker_pool 默认work是在normal worker_pool中处理的。...= pool->cpu);  // (8.1) 如果work已经在worker_pool的其他worker上执行,  // 将work放入对应worker的scheduled队列中延后执行  /*   ...怎么判断异步的work已经执行完成?这里面使用了一个技巧:在目标work的后面插入一个新的work wq_barrier,如果wq_barrier执行完成,那么目标work肯定已经执行完成。

    1.7K21

    Linux驱动实践:中断处理中的【工作队列】 workqueue 是什么鬼?

    也正因为此,它们之间的使用方式几乎是大同小异,至少是在API接口函数的使用方式上,从使用这的角度来看,都是非常类似的。...这篇文章,我们就通过实际的代码操作,来演示一下工作队列(workqueue)的使用方式。 工作队列是什么 工作队列是Linux操作系统中,进行中断下半部分处理的重要方式!...原因有二: 创建一个内核线程是很耗费资源的,如果函数很简单,很快执行结束之后再关闭线程,太划不来了,得不偿失; 如果每一个驱动程序编写者都毫无节制地创建内核线程,那么内核中将会存在大量不必要的线程,当然了本质上还是系统资源消耗和执行效率的问题...例如下面这些工作队列,就是内核默认创建的(include/linux/workqueue.h): /* * System-wide workqueues which are always present...,于是内核就封装了一个简单的函数(schedule_work)给我们使用: /** * schedule_work - put work task in global workqueue * @work

    2K40

    针对Linux Rootkit HCRootkit的分析

    写入内核模块后,用户态样本写入 /proc/.inl或 /tmp/.tmp_XXXXXX。...由于基于 kill程序修改而来,使用 sudo kill执行的方式并不少见,使用 sudo执行可以获得安装内核模块和写入特定位置的权限。...在包含 ICMP 模块的 ELF Dropper 中识别出 Sutersu 的变种,该模块监控发出的 ICMP 数据包,隐藏特定地址的出站链接。...内核模块中也能找到该类代码: 将正在执行的程序写入本地缓冲区,并伪装进程名称 [kthread]: 最后,向端口 65130上的多个域名发出 HTTP GET 请求,拉取 /iplist。...值得注意的是,该端口作为隐藏端口也被包含在 Sutersu 的内核模块中。每 180 秒,二进制文件就会尝试在 127.0.0.1 的 65439端口上生成 sshd 连接。

    90410

    Linux唤醒抢占----Linux进程的管理与调度(二十三)

    . */ 3 linux进程的唤醒 当在try_to_wake_up/wake_up_process和wake_up_new_task中唤醒进程时, 内核使用全局check_preempt_curr看看是否进程可以抢占当前进程可以抢占当前运行的进程...例如: 调用该函数唤醒等待队列中的进程, 或恢复执行等待信号的进程. static int try_to_wake_up(struct task_struct *p, unsigned int state...在Linux操作系统中, 内核的稳定性至关重要, 为了避免在Linux操作系统内核中出现无效唤醒问题, Linux内核在需要进程睡眠的时候应该使用类似如下的操作: /* ‘q’是我们希望睡眠的等待队列...2号进程的例子-避免无效抢占 下面让我们用linux内核中的实例来看看Linux 内核是如何避免无效睡眠的, 我还记得2号进程吧, 它的主要工作就是接手内核线程kthread的创建, 其工作流程函数是...__kthread_parkme函数中也包含了类似的代码 6 总结 通过上面的讨论, 可以发现在Linux 中避免进程的无效唤醒的关键是 在进程检查条件之前就将进程的状态置为TASK_INTERRUPTIBLE

    4K30

    Linux内核中的软中断、tasklet和工作队列具体解释

    [TOC] 本文基于Linux2.6.32内核版本号。...引言 软中断、tasklet和工作队列并非Linux内核中一直存在的机制,而是由更早版本号的内核中的“下半部”(bottom half)演变而来。 下半部的机制实际上包含五种,但2.6版本号的内核中。...系统使用I/O APIC,在处理完本地时钟中断时。 local_bh_enable,即开启本地软中断时。 SMP系统中。...– 假设推后运行的任务须要延时指定的时间再触发,那么使用工作队列。由于其能够利用timer延时(内核定时器实现)。 – 假设推后运行的任务须要在一个tick之内处理。则使用软中断或tasklet。...详细流程图例如以下所看到的: ---- 是否处于中断中在Linux中是通过preempt_count来判断的,详细例如以下: 在linux系统的进程数据结构里,有这么一个数据结构: #define

    2.3K30

    linux内核nfs rpc task处理分析

    本文以centos7 3.10.0-957.21.3.el7.x86_64内核为例介绍linux内核nfs v4.0 处理状态为RPC_TASK_ASYNC的async rpc task的工作机制。...中rpc_make_runnable初始化会给async rpc task 注册一个工作任务处理函数rpc_async_schedule后 添加到rpciod_workqueue工作队列, 然后唤醒内核线程处理...中,并调用queue_work唤醒内核线程执行该rpc task的工作任务处理函数rpc_async_schedule。...在第4点中介绍到当上一个rpc task被响应后,已被响应的rpc task关联的进程会被唤醒并为待发送等待队列Seqid_waitqueue里的下一个async rpc task注册一个工作任务并唤醒内核线程处理该即将发送的...已发送的rpc task收到server端响应后最终会唤醒内核工作线程来执行该rpc task的工作任务处理函数rpc_async_schedule,其主要任务就是在__rpc_execute循环调用task

    63810

    应急响应篇——Linux进程排查

    kthreadd在执行kthread会调用老的接口——kernel_thread运行一个名叫“kthread”的内核线程去运行创建的kthread,被执行过的kthread会从kthread_create_list...这些任务包括处理硬件中断、文件系统事件、管理系统内存等 ksoftirqd 在Linux内核中,ksoftirqd是一个专门用于处理软中断的线程。...在Linux 内核下, watchdog的基本工作原理是:当watchdog启动后(即/dev/watchdog设备被打开后),如果在某一设定的时间间隔(1分钟)内/dev/watchdog没有被执行写操作...crypto 在Linux内核中提供了加密API,通过一组头文件crypto引出。整体的思路为首先创建加密上下文,并且在上下文中注册使用的算法,最后使用内核API完成加解密的操作。...kthread进程负责管理和调度其他内核线程,所有的内核线程都直接或间接以kthread为父进程。我们利用ps和pstree来观察一下CentOS6.10系统上的进程。

    49010

    深入理解Linux内核之内核线程(上)

    1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 在linux系统中, 我们接触最多的莫过于用户空间的任务...本文力求与完整介绍完内核线程的整个生命周期,如内核线程的创建、调度等等,当然本文还是主要从内存管理和进程调度两个维度来解析,且不会涉及到具体的内核线程如kswapd的实现,最后我们会以一个简单的内核模块来说明如何在驱动代码中来创建使用内核线程...实际上,kthreadd创建的内核线程就是请求创建的内核线程的外壳,只不过创建完成之后并没有马上执行线程的执行函数,这和用户空间执行程序很相似:一般在shell中执行程序,首先shell进程通过fork...而创建内核线程也必须首先要创建一个子进程,这是kthreadd通过kernel_thread来完成的,然后在kthread执行函数中在合适的时机来执行所请求的内核线程执行函数。...:首先函数将需要在内核线程中执行的函数等信息封装在kthread_create_info结构中,然后加入到kthreadd的kthread_create_list链表,接着去唤醒kthreadd去处理创建内核线程请求

    2.5K20

    深入理解Linux内核之内核线程(下)

    7.2 使用调度上下文 当内核线程被唤醒,在合适的时机被调度时,会执行如下内核路径: __schedule //kernel/sched/core.c ->context_switch ->switch_to...将 x20赋值到x0, 就做了内核线程参数的传递动作,接着就执行958行跳转到了线程执行函数中执行了,于是新创建的内核线程才开始真正的欢乐执行。...(kswapd, pgdat, "kswapd%d", nid) //使用kthread_run结构创建并唤醒创建的内核线程 执行kswapd函数 用例2:Linux软中断是下半部的一种机制,一般对效率要求较高的场景会使用到...->kthread_bind(p, cpu) //内核线程绑定cpu 可以看到这里虽然没有使用kthread_run这样的api创建内核线程,但是还是和kthread_run实现一样将内核线程创建信息添加到...内核模块代码:kthread_demo.c #include linux/module.h> #include linux/kernel.h> #include linux/init.h> #include

    2.3K30

    内核线程的创建和运行

    0号线程 linux 内核中为0号进程专门定义了一个静态的 task_struct 的结构,称为 init_task: /* include/linux/init_task.h */ #define INIT_TASK_COMM...至此,我们已经知道 Linux 启动的第一个线程,0号线程是静态创建的。在0号线程启动后会接连创建两个线程,分别是1号线程和2和线程。...1号进程最终会去调用可init可执行文件,init进程最终会去创建所有的应用进程。2号进程会在内核中负责创建所有的内核线程。...kthread 处理流程 上面 kthreadd 线程会循环查看链表 kthread_create_list,如果有线程的创建申请,则从链表中取出一个,然后调用 create_kthread 去创建一个内核线程...会设置) 执行真正的线程执行函数 退出当前任务 内核线程的创建和运行 现在我们知道 kthreadd 会从链表 kthread_create_list 中取出一个,然后调用 create_kthread

    1.7K30

    linux内核线程「建议收藏」

    https://blog.csdn.net/huangweiqing80/article/details/83088465 内核经常需要在后台执行一些操作,这种任务就可以通过内核线程(kernle thread...实际上,内核线程只能由其他内核线程创建,linux驱动模块中可以用kernel_thread(),kthread_create()/kthread_run()两种方式创建内核线程,另外还可以用第三方库(...如pthread,除此之外还有其他的第三方库),在驱动模块中创建线程(pthread也可以用在用户空间): 一、linux进程的创建 kernel/init/main.c asmlinkage void.../sched.h中,注意有的版本中,没用定义),其他标志及含义见uapi/linux/sched.h中。...新创建的线程开始运行后,入口在kthread(),kthread()调用complete(&create->done)唤醒阻塞的模块进程,并使用schedule()调度出去。

    1.5K30

    浅谈Linux dirty data配置

    回刷进程定时唤醒时间(单位:1/100s),当内存中存在dirty inode时内核per-bdi 刷新线程以dirty_writeback_centisecs/100 秒的周期执行。...3.10.0-1062.18.1.el7来看下这些配置项是怎么生效的: 在default_bdi_init中申请了workqueue bdi_wq: static int __init default_bdi_init...->create_worker->kthread_create_on_node ps命令可以看到有一个writeback内核线程,这个线程又是干嘛用的呢?...S< May16 0:00 [writeback] 调用alloc_workqueue申请工作队列时如果传递了WQ_MEM_RECLAIM,则会使用参数1的字符作为线程名创建内核rescuer线程...,在这里是"writeback",只有kworker线程不足以处理work时才会被启用,具体实现参考https://www.binss.me/blog/analysis-of-linux-workqueue

    4K100

    linux大量kworker_linux load average 非常高

    aarch32 linux4.14 最近遇到一个kworker问题,callstack如下,线程adas的陷入kernel space后会schedule_work调用一个while(1)的worker...manage_workers 的策略是如果有工作要执行且worker pool中的nr_idle为空要创建一个新的kworker,如果已经进入idle的worker 超过(IDLE_WORKER_TIMEOUT...,总要保证任何时候在一个kworke pool中要有一个预留的idle kworker,并且没有工作项的时候保证只有一个idle kworker,其他的都动态destroy掉以节省资源。...(work); } 使用schedule_work可以将自己创建的工作项加入到系统的工作队列中,这个接口使用的是unbound的普通优先级队列,等待worker调用到自己,如果当前work pool没有正在运行的...workqueue的优先级是高于低优先级的 使用高优先级的队列可以在源码中找到实例,创建一个高优先级队列然后queue work就行了 int __init watchdog_dev_init(void

    3.8K10

    硬中断和软中断_软中断和硬中断的优先级

    (5)硬中断和软中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。...中的__softirq_pending是等待处理的软中断的位图,通过设置此变量 即可告诉内核该执行哪些软中断。...在ksoftirqd内核线程中 3. 在那些显示检查和执行待处理的软中断的代码中,如网络子系统中 而不管是用什么方法唤起,软中断都要在do_softirq()中执行。...在中断处理程序中触发软中断是最常见的形式。中断处理程序执行硬件设备的相关操作, 然后触发相应的软中断,最后退出。...内核在执行完中断处理程序以后,马上就会调用 do_softirq(),于是软中断开始执行中断处理程序完成剩余的任务。 下面来看下do_softirq()的具体实现。

    2.7K40

    Linux内核硬中断 软中断的原理和实现

    (3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...中的__softirq_pending是等待处理的软中断的位图,通过设置此变量即可告诉内核该执行哪些软中断。...在ksoftirqd内核线程中 c. 在那些显示检查和执行待处理的软中断的代码中,如网络子系统中 而不管是用什么方法唤起,软中断都要在do_softirq()中执行。...在中断处理程序中触发软中断是最常见的形式。中断处理程序执行硬件设备的相关操作,然后触发相应的软中断,最后退出。...内核在执行完中断处理程序以后,马上就会调用do_softirq(),于是软中断开始执行中断处理程序完成剩余的任务。 下面来看下do_softirq()的具体实现。

    22.7K21
    领券