运行机制 (1) tasklet方式: 当下半部处理的事情耗时但是可以忍受时,可以使用tasklet。...tasklet是以软中断形式实现的,软中断的优先级仅次于硬件中断,在进入软件中断时,硬件中断会被打开,因此软件中断可被硬件中断打断。 使用: 软中断实现服务子函数,优先级高,影响系统执行效率。 a....下半部实现: static void kpd_keymap_handler(unsigned long data) { } c....下半部实现 void my_func() { } c....在硬件中断调度 schedule_work(&my_work); //工作完成后会自动销毁 注意: 也可以自定义工作队列,实现任务调度,这里不作介绍。
1 linux的分页机制 1.1 四级分页机制 前面我们提到Linux内核仅使用了较少的分段机制,但是却对分页机制的依赖性很强,其使用一种适合32位和64位结构的通用分页模型,该模型使用四级分页机制,即...1.2 不同架构的分页机制 对于不同的体系结构,Linux采用的四级页表目录的大小有所不同:对于i386而言,仅采用二级页表,即页上层目录和页中层目录长度为0;对于启用PAE的i386,采用了三级页表...内核为页上级目录和页中间目录保留了一个位置,这是通过把它们的页目录项数设置为1,并把这两个目录项映射到页全局目录的一个合适的目录项而实现的。 启用了物理地址扩展的32 位系统使用了三级页表。...1.3 为什么linux热衷:分页>分段 那么,为什么Linux是如此地热衷使用分页技术而对分段机制表现得那么地冷淡呢,因为Linux的进程处理很大程度上依赖于分页。...这就是虚拟内存机制的基本要素。 每一个进程有它自己的页全局目录和自己的页表集。
golang的read/write是阻塞的,但底层是非阻塞的,可以使用多协程实现非阻塞。...参考: 浅谈 Linux下的零拷贝机制 TCP TCP的TIME_WAIT有两个作用: 防止前一个TCP连接的残留数据(在序列号恰好正确的情况下)进入后续的TCP连接中 防止TCP挥手过程发出去的最后一个...Linux实现了大量QDisc来满足各个QDisc对应的的报文队列和行为。该接口允许QDisc可以在没有IP栈和NIC驱动修改的前提下实现队列管理。...可以看到reno算法在发生拥塞避免时不会将cwnd变为1,这样提高了传输效率,快速重传和快速恢复机制也有利于更快探测到拥塞。 ?...为了方式这种情况下导致创建和传输大量符合MTU要求的报文,Linux实现了TSO,USO和GSO,参见下面描述 In order to avoid the overhead associated with
为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子 系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。...rw_semaphore rwsem; struct notifier_block *head; }; 原始通知链( Raw notifier chains ):对通知链元素的回调函数没有任何限制,所有锁和保护机制都由调用者维护...三、运作机制: 通知链的运作机制包括两个角色: 被通知者:对某一事件感兴趣一方。定义了当事件发生时,相应的处理函数,即回调函数。.../types.h>#include #include #include #include #include #include #include #include <linux/
RELRO(RELocation Read Only) 在Linux中有两种RELRO模式:Partial RELRO 和 Full RELRO。Linux中Partical RELRO默认开启。
本文主要介绍的是DBus中基于可视化配置的日志结构化转换实现的部分。 一、结构化日志的原理 源端日志抓取 DBus可以对接多种log数据源,例如:Logstash、Flume、Filebeat等。...算子之间具有独立性,算子之间可以任意组合使用,从而可以实现许多复杂的、高级的功能,通过对算子进行迭代使用,最终可以实现对任意数据进行加工的目的。...二、DBus日志处理实例 以DBus集群环境为例,DBus集群中有两台机器(即master-slave)部署了心跳程序,用于监控、统计、预警等,心跳程序会产生一些应用日志,这些应用日志中包含各类事件信息...目前根据项目实际,DBus输出的数据是UMS格式,如果不想使用UMS,可以经过简单的开发,实现定制化。 注:UMS是DBus定义并使用的、通用的数据交换格式,是标准的JSON。...DBus同样可以接入Flume、Filebeat、UMS等数据源,只需要稍作配置,就可以实现类似于对Logstash数据源同样的处理效果,更多关于DBus对log的处理说明,请参考: https://
前言: linux系统下的rm是不可挽回的,命令设计本身没有问题,问题在于我们通常非常的自信,执行的时候喜欢rm -rf,这样的话就非常危险了,在执行的时候如果执行命令不对,甚至是执行的目录不对,那么将会造成很大的麻烦...,轻则会导致加班加点,浪费人力物力,重则影响公司业务,更甚则有开除之虞,而windows下的回收站机制就是一个非常不错的策略,但linux并不自带,那我们就可以手动创建一个,直接执行就好: mkdir...-p ~/.Trash cat >>~/.bashrc<<EOF #add by caimengzhi at $(date +%F) for Linux trash start alias rm=trash...'y' ] || [ $confirm == 'Y' ] && /usr/bin/rm -rf ~/.Trash/* } #add by caimengzhi at $(date +%F) for Linux...\$confirm 是实现验证的意思,也就是最后在文件中就是$confirm。其中\$@一样 3. 上面的作用,说白了就是命令rm 的重命名。
我们先从计算机组成原理的层面介绍DMA,再简单介绍Linux网络子系统的DMA机制是如何的实现的。 一、计算机组成原理中的DMA 以往的I/O设备和主存交换信息都要经过CPU的操作。...“图1”中的“接口”既包括实现某一功能的硬件电路,也包括相应的控制软件,如 “DMA接口” 就是一些实现DMA机制的硬件电路和相应的控制软件。 “DMA接口”有时也叫做“DMA控制器”(DMAC)。...二、Linux网络子系统中DMA机制的实现 1. DMA机制在TCP/IP协议模型中的位置 网卡明显是一个数据流量特别大的地方,所以特别需要DMA方式和主存交换数据。...下图可以看到DMA机制位于TCP/IP协议模型中的位置数据链路层。.../include/linux/dma-mapping.h /* * Set both the DMA mask and the coherent DMA mask to the same thing
本节目标: 学习platform机制,如何实现驱动层分离 1.先来看看我们之前分析输入子系统的分层概念,如下图所示: 如上图所示,分层就是将一个复杂的工作分成了4层, 分而做之,降低难度,每一层专注于自己的事情..., 系统只将其中的核心层和事件处理层写好了,所以我们只需要来写驱动层即可,接下来我们来分析platform机制以及分离概念 2.分离概念 优点: 将所有设备挂接到一个虚拟的总线上,方便sysfs节点和设备电源的管理...使得驱动代码,具有更好的扩展性和跨平台性,就不会因为新的平台而再次编写驱动 介绍: 分离就是在驱动层中使用platform机制把硬件相关的代码(固定的,如板子的网卡、中断地址)和驱动(会根据程序作变动.../module.h> #include #include #include #include #include #include #include #include <linux
缓存机制:Linux引入了buffers和 cached机制,buffers与cached都是内存操作,用来保存系统曾经打开过的文件以及文件元数据,这样当操作系统需要读取某些文件时,首先在buffers...根据Linux虚拟内存管理机制,这种行为是正常的。要理解为什么缓存会变得如此之高,以及为什么这不是一个问题,就必须了解I/O在Linux上是如何工作的。...slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。 如果buffers/cached过高,如何排查哪些进程引起的?...57780 root mem REG 253,0 11567160 17353855 /var/lib/sss/mc/initgroups dbus-daem 57780 root 7r REG 253,0...从Linux缓存机制来说,buffers和cached都是系统可用内存,通常情况下看到bufferes和cached占用内存多,这是一个正常现象,它不是一个问题,所以在看到物理内存快要耗尽时,不要惊慌,
在这里总结一下它的内部机制。也解决一下自己原来的一些疑惑。 Namespace是什么 C++中的Namespace 首先,先提一下Namespace是什么。最早知道这个名词是在学习C++语言的时候。...Linux的Namespasce Linux Namespaces是一种轻量级的虚拟化形式。操作系统在内存,CPU上,已经使用了虚拟化的技术,让每个进程都认为是自己独占了内存和CPU。...这个功能加上Cgroup,就可以实现一个轻量级的虚拟机。这对于提高主机资源利用率很有用。如果说KVM这类虚拟机是为了隔离,而容器技术更多是为了共享。...user_ns 这个在新的3.8内核中实现。 struct net_ns包含所有网络相关的命名空间参数。...参考 Linux内核的namespace机制分析 Namespaces in operation, part 1: namespaces overview Docker基础技术:Linux Namespace
和用户态程序的 coredump 机制类似。...下面就来详细的分析整个 kdump 机制的详细原理。...fi 原理分析 kexec 实现了crash kernel 的加载。...kdump 主要实现把 vmcore 文件从内存拷贝到磁盘,并进行一些瘦身。...所以可以看到 /proc/kcore 和 /proc/vmcore 这两个文件是整个机制的核心,我们重点分析这两部分的实现。
在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在linux新的内核中,有了一种替换它的机制,就是epoll。...epoll IO多路复用模型实现机制 由于epoll的实现机制与select/poll机制完全不同,上面所说的 select的缺点在epoll上不复存在。...epoll的设计和实现与select完全不同。epoll通过在Linux内核中申请一个简易的文件系统(文件系统一般用什么数据结构实现?B+树)。...epoll实现机制 当某一进程调用epoll_create方法时,Linux内核会创建一个eventpoll结构体,这个结构体中有两个成员与epoll的使用方式密切相关。...总结 以上就是本文关于linux epoll机制详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
1、简介: RCU(Read-Copy Update)是数据同步的一种方式,在当前的Linux内核中发挥着重要的作用。...3、相应资料: Linux内核源码当中,关于RCU的文档比较齐全,你可以在 /Documentation/RCU/ 目录下找到这些文件。 Paul E....为此RCU机制提供了相应的API来实现这个功能。...可以通过优化屏障来解决该问题,RCU机制对优化屏障做了包装,提供了专用的API来解决该问题。...但代码的实现确并不是那么容易,难点都集中在了宽限期的检测上,后续分析源代码的时候,我们可以看到一些极富技巧的实现方式。
/a.out bt 4.开发板上使用core文件调试 ----------------------------- 如果开发板的操作系统也是linux,core调试方法依然适用。...如果开发板上不支持gdb,可将开发板的环境(依赖库)、可执行文件和core文件拷贝到PC的linux下。
OOM分析 oom_killer(out of memory killer)是Linux内核的一种内存管理机制,在系统可用内存较少的情况下,内核为保证系统还能够继续运行下去,会选择杀掉一些进程释放掉一些内存
1 页式管理 1.1 分段机制存在的问题 分段,是指将程序所需要的内存空间大小的虚拟空间,通过映射机制映射到某个物理地址空间(映射的操作由硬件完成)。...虚拟内存的实现需要硬件的支持,从Virtual Address到Physical Address的映射,通过一个叫MMU(Memory Mangement Unit)的部件来完成 2 分页机制支持 2.1...但是Linux并没有采用这种机制 正如前面所述,通过设置页目录项的Page Size标志启用扩展分页功能。在这种情况下,分页单元把32位线性地址分成两个字段: Directory:最高10位。...若这个标志为0,只有当CPL小于3(这意味着对于Linux而言,处理器处于内核态)时才能对页寻址;若该标志为1,则总能对页寻址。...第9~11位由操作系统专用,Linux也没有做特殊之用。 ? 80386的每个页目录项指向一个页表,页表最多含有1024个页面项,每项4个字节,包含页面的起始地址和有关该页面的信息。
exec.execute(mFuture) public interface Executor { void execute(Runnable command); } 这是一个接口,具体实现在
上一篇文章写到中断机制,采用了等待队列的方式实现了按键中断。但是你会发现,应用程序在读取按键值的时,当没有按键按下,则一直处于睡眠态。无法继续往下执行。...poll机制的解析:其中poll()函数和select()函数的功能同等。...代码实现: 基本是在上一篇文章《中断机制》的代码实现中修改一些内容。 驱动代码:增加poll的方法。...= button_open, .read = button_read, .release = button_close, .poll = button_poll, }; 应用程序的实现
这篇文章以按键为例子讲解linux的中断原理,中断的架构,中断的实现。 在我们的开发中,检测按键是否触发,无非就两种方法—轮询和中断。作者认为两种方法最大的区别就是CPU的利用率。...Linux的中断原理: 中断:处理器异常的一种,它是一种特殊的电信号,用硬件发给处理器,处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据。...Linux中断的相关函数: 1、注册中断函数: 中断处理函数结构: typedef irqreturn_t (*irq_handler_t)(int, void*); 注册中断函数:int request_irq...dev:与request_irq的参数dev必须一致,将request_irq指定的dev传递给这个参数; Linux中断处理分析: 第一种方式:应用层的读,不管什么情况下,都会返回。...Linux中断实现: 这里例子采用等待队列的方式实现(也就是上述的第二种方法)。
领取专属 10元无门槛券
手把手带您无忧上云