一.Paging组件的意义 分页加载是在应用程序开发过程中十分常见的需求,我们经常需要以列表的方式加载大量的数据,这些数据通常来自网络或本地数据库。...因此,Google便推出了paging组件,来实现分页加载;分页加载就是对数据进行按需加载,在不影响用户体验的同时,还能节省数据流量,提升应用的性能。...二.Paging支持的架构类型 Paging支持3种架构类型,分别是:网络,数据库,网络+数据库 网络:也就是通过网络请求的方式去获得服务器返回的数据,然后分页加载出来 数据库:掌握了从网络上获取数据并加载出来...三.三种分页机制的适用场景 PositionalDataSource: 适用于从任意位置加载任意数量的数据,且目标数据源中数据固定的情况。 ...四.分页机制的实现 我们以从豆瓣网上获取热度最高的250部电影为例进行讲解,这里我们使用Retrofit+OkHttp进行网络数据的获取,如果对这两个网络请求工具不熟悉的话,可以看这篇博客:https
参考: 浅谈 Linux下的零拷贝机制 TCP TCP的TIME_WAIT有两个作用: 防止前一个TCP连接的残留数据(在序列号恰好正确的情况下)进入后续的TCP连接中 防止TCP挥手过程发出去的最后一个...ACK报文丢弃,此时需要重传该ACK报文 fase sharing:字节对齐的原理 Linux 网络队列:IP栈的报文提交会直接到QDisc队列,QDisc可以使用一定的策略来管控流量 BQL通过自动调节到...Linux实现了大量QDisc来满足各个QDisc对应的的报文队列和行为。该接口允许QDisc可以在没有IP栈和NIC驱动修改的前提下实现队列管理。...TCP rtt和rto TCP拥塞避免算法,目前主流Linux的默认拥塞避免算法为cubic,可以使用ss -i命令查看。...可以看到reno算法在发生拥塞避免时不会将cwnd变为1,这样提高了传输效率,快速重传和快速恢复机制也有利于更快探测到拥塞。 ?
1 页式管理 1.1 分段机制存在的问题 分段,是指将程序所需要的内存空间大小的虚拟空间,通过映射机制映射到某个物理地址空间(映射的操作由硬件完成)。...硬件分页支持 分页单元(paging unit)把线性地址转换成物理地址。...但是Linux并没有采用这种机制 正如前面所述,通过设置页目录项的Page Size标志启用扩展分页功能。在这种情况下,分页单元把32位线性地址分成两个字段: Directory:最高10位。...,不与x86_64系统兼容 IA-32e Paging机制下线性地址映射到4KB的页 2.5 硬件保护方案 与页和页表相关的特权级只有两个,因为特权由前面“常规分页”一节中所提到的User/Supervisor...如果置为1,页目录项指的是4MB的页面,请看后面的扩展分页。 第9~11位由操作系统专用,Linux也没有做特殊之用。 ?
在linux内核系统中,各个模块、子系统之间是相互独立的。Linux内核可以通过通知链机制来获取由其它模块或子系统产生的它感兴趣的某些事件。...notifier_block结构体在include/linux/notifier.h中定义: struct notifier_block { notifier_fn_t notifier_call...; struct notifier_block __rcu *next; int priority; }; priority用来定义优先级,高优先级的处理例程将被优先执行,数值越大,优先级越高..., void *data); TP属于输入子系统,可以通过获取framebuffer子系统来实现亮屏和灭屏时触发相应的事件。...RST脚,LCD灭屏时,为了降低系统的功耗,需要将TP的power关闭,同时将TP的复位脚拉低,让TP自身进入低功耗模式。
RELRO(RELocation Read Only) 在Linux中有两种RELRO模式:Partial RELRO 和 Full RELRO。Linux中Partical RELRO默认开启。...; 整个GOT表映射为只读的。...,可以找到JMP ESP指令的跳板直接调用) 替换EIP一部分(找到没有随机化的模块然后使用利息泄漏确定EIP的位置,再算出模块的基地址,最后算出要跳的函数地址) NOP喷射(DEP没开的情况下,创建一大块...这样就使得进程的地址空间被大量的注入代码所占据。然后结合其他的漏洞攻击技术控制程序流,使得程序执行到堆上,最终将导致shellcode的执行。...统slide code(滑板指令)一般是NOP指令,譬如0x0C(0x0C0C代表的x86指令是OR AL 0x0C),0x0D等等,不影响程序的执行的。)
1 linux的分页机制 1.1 四级分页机制 前面我们提到Linux内核仅使用了较少的分段机制,但是却对分页机制的依赖性很强,其使用一种适合32位和64位结构的通用分页模型,该模型使用四级分页机制,即...1.2 不同架构的分页机制 对于不同的体系结构,Linux采用的四级页表目录的大小有所不同:对于i386而言,仅采用二级页表,即页上层目录和页中层目录长度为0;对于启用PAE的i386,采用了三级页表...Linux 的页全局目录对应80x86 的页目录指针表(PDPT),取消了页上级目录,页中间目录对应80x86的页目录,Linux的页表对应80x86的页表。...1.3 为什么linux热衷:分页>分段 那么,为什么Linux是如此地热衷使用分页技术而对分段机制表现得那么地冷淡呢,因为Linux的进程处理很大程度上依赖于分页。...这就允许存放在某个页框中的一个页,然后保存到磁盘上,以后重新装入这同一页时又被装在不同的页框中。这就是虚拟内存机制的基本要素。 每一个进程有它自己的页全局目录和自己的页表集。
本位由作者 烧麦 投稿 https://github.com/shaomaicheng/Article/blob/master/paging/paging.md 初次接除 paging, 可能会一脸懵逼...我们先对 paging 的组成部分进行一个了解。...首先,我们按照 列表分页加载 这个行为进行一个基本的划分,分为 2 个部分, 数据 和 UI, paging 就是按照这个来进行划分的 数据 数据部分 paging 包括 PagedList 一个继承了...具体的详细使用可以查看google的实例源码 在大致了解了 paging 的组成部分后,我们会开始好奇,那我们到底为什么需要 paging 呢, 他和我们之前普通的使用方式有什么区别呢,我们可以在源码中寻找到答案...这样我们也无需担心 paging 会存在性能问题。 理解 最后谈一下对 paging 的理解。
最近Docker技术越来越受到关注,作为Docker中很重要的一项技术,Namespace也就经常在Docker的简介里面看到。 在这里总结一下它的内部机制。也解决一下自己原来的一些疑惑。...Linux的Namespasce Linux Namespaces是一种轻量级的虚拟化形式。操作系统在内存,CPU上,已经使用了虚拟化的技术,让每个进程都认为是自己独占了内存和CPU。...另外,要进入一个已知的namespace还需要一个标识。不然,进入哪个Namespace呢。 /proc/[pid]/ns 这个时候,Linux一切皆文件的设计就体现出了它的优势。...参考 Linux内核的namespace机制分析 Namespaces in operation, part 1: namespaces overview Docker基础技术:Linux Namespace...(上) Docker基础技术:Linux Namespace(下)
在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的使用方式密切相关。...在telnet终端敲入任何字符敲入Enter后,会在测试终端显示敲入的字符。 总结 以上就是本文关于linux epoll机制详解的全部内容,希望对大家有所帮助。
简介 Kdump 提供了一种机制在内核出现故障的时候把系统的所有内存信息和寄存器信息 dump 出来成一个文件,后续通过 gdb/crash 等工具进行分析和调试。...和用户态程序的 coredump 机制类似。...kdump 主要还是用来捕捉纯软件的故障,在嵌入式领域还需要加上对硬件故障的捕捉,仿照其原理并进行加强和改造,就能构造出自己的 coredump 机制。...下面就来详细的分析整个 kdump 机制的详细原理。...所以可以看到 /proc/kcore 和 /proc/vmcore 这两个文件是整个机制的核心,我们重点分析这两部分的实现。
如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文件的时候,gdb会提示错误。...若系统生成的core文件不带其它任何扩展名称,则全部命名为core。新的core文件生成将覆盖原来的core文件。.../a.out bt 4.开发板上使用core文件调试 ----------------------------- 如果开发板的操作系统也是linux,core调试方法依然适用。...如果开发板上不支持gdb,可将开发板的环境(依赖库)、可执行文件和core文件拷贝到PC的linux下。...有时候core信息很大,超出了开发板的空间限制,生成的core信息会残缺不全而无法使用,可以通过挂载到PC的方式来规避这一点。
1、简介: RCU(Read-Copy Update)是数据同步的一种方式,在当前的Linux内核中发挥着重要的作用。...RCU主要针对的数据对象是链表,目的是提高遍历读取数据的效率,为了达到目的使用RCU机制读取数据的时候不对链表进行耗时的加锁操作。...3、相应资料: Linux内核源码当中,关于RCU的文档比较齐全,你可以在 /Documentation/RCU/ 目录下找到这些文件。 Paul E....为此RCU机制提供了相应的API来实现这个功能。...可以通过优化屏障来解决该问题,RCU机制对优化屏障做了包装,提供了专用的API来解决该问题。
缓存机制:Linux引入了buffers和 cached机制,buffers与cached都是内存操作,用来保存系统曾经打开过的文件以及文件元数据,这样当操作系统需要读取某些文件时,首先在buffers...为了方便查找文件,linux引入目录项(dentry)描述目录与文件的关系树,Linux为每一个目录建立一个目录项,也为每个文件建立一个目录项。...在Linux系统中数据可分为两大类,数据和元数据,数据泛指普通文件中的实际数据,元数据是用来描述一个文件的特征的系统数据。...根据Linux虚拟内存管理机制,这种行为是正常的。要理解为什么缓存会变得如此之高,以及为什么这不是一个问题,就必须了解I/O在Linux上是如何工作的。...从Linux缓存机制来说,buffers和cached都是系统可用内存,通常情况下看到bufferes和cached占用内存多,这是一个正常现象,它不是一个问题,所以在看到物理内存快要耗尽时,不要惊慌,
OOM分析 oom_killer(out of memory killer)是Linux内核的一种内存管理机制,在系统可用内存较少的情况下,内核为保证系统还能够继续运行下去,会选择杀掉一些进程释放掉一些内存...通常oom_killer的触发流程是:进程A想要分配物理内存(通常是当进程真正去读写一块内核已经“分配”给它的内存)->触发缺页异常->内核去分配物理内存->物理内存不够了,触发OOM。...一句话说明oom_killer的功能: 当系统物理内存不足时,oom_killer遍历当前所有进程,根据进程的内存使用情况进行打分,然后从中选择一个分数最高的进程,杀之取内存。...,或者有一些进程正在结束中,那退出本次oom的处理,等待其它进程结束,防止不必要的进程kill动作*/ goto out; /* 找了一圈,没有找到任何一个进程可以被杀死(全都是背景深厚的进程...totalpages) totalpages = 1; /* 获取进程的rss(用户空间的文件映射和匿名页占用的物理内存页数)、页表和swap中使用内存空间的情况 */ points
概述 在多核系统中,为了更好的利用多CPU并行能力,进程调度器可以将进程负载尽可能的平均到各个CPU上。...再具体实现中,如何选择将进程迁移到的目标CPU,除了考虑各个CPU的负载平衡,还需要将Cache利用纳入权衡因素。同时,对于进程A唤醒进程B这个模型,还做了特殊的处理。...从分层的视角分析,下图是调度域实际组织方式,每层都有per-cpu数组保存每个CPU对应的调度域和调度组,它们是在初始化时已经提前分配的内存。...值得注意的是 每个CPU对应的调度域数据结构都包含了有效的内容,比如说SMT层中,CPU0和CPU1对应的不同调度域数据结构,内容是一模一样的。...,每个层级的调度间隔不是固定的,而是临时计算出来,他在一个可通过proc接口配置的最小值和最大值之间。
在Linux系统中,MySQL数据库的备份机制是确保数据安全性和可靠性的重要手段。无论是对于个人开发者还是企业运维人员,掌握MySQL的备份方法都至关重要。...一、逻辑备份 逻辑备份主要备份的是数据库的逻辑组件,如表、视图、存储过程等,通过SQL语句的形式进行保存。...MySQL的增量备份依赖于二进制日志(binlog)。 差异备份 差异备份备份自上次全量备份以来发生变化的所有数据。...三、基于二进制日志的恢复 二进制日志记录了所有对数据库进行修改的操作,可以用于数据恢复和主从复制。...备份策略应考虑备份的频率、备份的类型(全量、增量、差异)、备份的存储位置以及备份的验证和恢复测试。 定期备份 根据业务需求和数据变化频率,制定定期备份计划,如每天全量备份,每小时增量备份。
在 Linux 系统之中有一个核心武器:epoll 池,在高并发的,高吞吐的 IO 系统中常常见到 epoll 的身影。...能,但这种需求只能内核提供机制满足你。 2 这事 Linux 内核必须要给个说法?...Linux 内核对于 epoll 池的内部实现就是用红黑树的结构体来管理这些注册进程来的句柄 fd。...事件注册机制,实现了高效的 fd 事件管理,为高并发的 IO 处理提供了前提条件; epoll 全名 eventpoll,在 Linux 内核下以一个文件系统模块的形式实现,所以有人常说 epoll 其实本身就是文件系统也是对的...那文件就无法使用 epoll 机制了吗?
在Linux中,要发送一个信号相当容易。程序员需要知道两个信息:要发送哪个信号,将这个信号发送给哪个进程。可以用 man 7 signal 找到一个可以利用的信号的列表。...SIGQUIT 输入Quit Key的时候(CTRL+/)发送给所有Foreground Group的进程 SIGSEGV 非法内存访问 SIGSTKFLT Linux专用,数学协处理器的栈异常 SIGSTOP...========================================================================= signal学习推荐: 信号(signal)介绍(Linux...中国) http://www.linux-cn.com/html/linux/system/20070505/27605.shtml Linux 信号signal处理函数(CSDN) http://blog.csdn.net.../Sunboy_2050/archive/2010/10/16/5945535.aspx Linux 信号signal处理机制(CSDN) http://blog.csdn.net/Sunboy_2050
请前往 Tiga on Tech 查看原文以及更多有趣的技术文章。RCU(Read-Copy Update),是 Linux 中比较重要的一种同步机制。...顾名思义就是“读,拷贝更新”,再直白点是“随意读,但更新数据的时候,需要先复制一份副本,在副本上完成修改,再一次性地替换旧数据”。这是 Linux 内核实现的一种针对“读多写少”的共享数据的同步机制。...不同于其他的同步机制,它允许多个读者同时访问共享数据,而且读者的性能不会受影响(“随意读”),读者与写者之间也不需要同步机制(但需要“复制后再写”),但如果存在多个写者时,在写者把更新后的“副本”覆盖到原数据时...RCU 的一个典型的应用场景是链表,在 Linux kernel 中还专门提供了一个头文件(include/linux/rculist.h),提供了利用 RCU 机制对链表进行增删查改操作的接口。...本文将通过一个例子,利用 rculist.h 提供的接口对链表进行增删查改的操作,来讲述 RCU 的原理,以及介绍 Linux kernel 中相关的 API(基于 Linux v3.4.0 的源码)。
上一篇文章写到中断机制,采用了等待队列的方式实现了按键中断。但是你会发现,应用程序在读取按键值的时,当没有按键按下,则一直处于睡眠态。无法继续往下执行。...被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足。...poll机制的解析:其中poll()函数和select()函数的功能同等。...参数说明: fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的文件描述符集; nfds:用于标记数组fds中的结构体元素的总数量; timeout:是poll函数调用阻塞的时间...代码实现: 基本是在上一篇文章《中断机制》的代码实现中修改一些内容。 驱动代码:增加poll的方法。
领取专属 10元无门槛券
手把手带您无忧上云