摘要:
概述 本文主要介绍SYN Flood攻击的原理,以及防火墙设备的防御手段; TCP三次握手 TCP建立连接过程需要经过三次握手,在三次握手成功之后,建立连接,进而进行数据传输;假设有客户端和服务器,客户端向服务器发起连接请求: (1) 客户端向服务器发送SYN报文; (2) 服务器收到SYN之后向客 阅读全文
摘要:
DOS攻击 DOS攻击是Denial of Service的简称,即拒绝服务攻击;其主要通过洪水攻击的方式,耗尽目标机器的资源或者网络带宽,造成服务服务中断或者停止;DOS攻击攻击源为单一电脑; DDOS攻击 DDOS攻击是Distributed Denial of Service的缩写,即分布式拒 阅读全文
摘要:
0. 权重 进程的优先级与内核的nice值对应,nice值降低对应权重增加; 内核根据进程类型和静态优先级计算权重值; 内核不仅维护进程自身的权重,还维护调度队列的权重,当进程被加入到调度队列时,也要该进程的权重增加到队列权重中; 1. 完全公平调度延时周期 内核可以通过参数sysctl_sched 阅读全文
摘要:
内中调度器分为周期性调度器和主调度器,他们是调度工作的主体,而更为详细的调度根据策略的不同交给不同的调度类,比如交给公平调度类; 周期性调度器: 周期调度器按照一定的频率周期性的运行,除了进行调度相关的数据统计之外,还会激活具体进程调度类的周期性调度方法; 在完全公平调度类的周期性调度方法中,首先更 阅读全文
摘要:
总览 进程调度的总览图如下,当进程被标记为运行状态时,会加入到就绪队列中;队列中的调度实体(进程)维护自己的虚拟时间,该虚拟时间与就绪队列虚拟时间的差值作为红黑树的键值,将调度实体存入红黑树中,其中左下节点为键值最小的节点,最急需被调度,越向右节点的优先级越低; 调度子系统总图如下,进程调度激活有两 阅读全文
摘要:
在单处理器系统上,在给定时刻只有一个程序可以运行,在多处理器系统上,可以真正并行运行的进程数据,取决于物理CPU的数目; 进程优先级 在比较粗糙的划分中,进程分为实时进程和非实时进程; 1. 硬实时进程具有严格的时间限制,某些任务必须在指定的时间内完成; 2. 软实时进程是硬实时进程的一种弱化形式, 阅读全文
摘要:
负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术。负载均衡将特定的业务(网络服务、网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性。负载均衡基本概念有:实服务、实服务组、虚服务、调度算法、持续性等,其常用应用场景主要是服务器负载均衡, 阅读全文
摘要:
中断和锁 1. 硬中断和软中断(包括tasklet和timer)共享数据,硬中断中使用spin_lock/spin_unlock,软中断中使用spin_lock_irq/spin_unlock_irq或者spin_lock_irqsave/spin_unlock_irqrestore; 硬中断可以打 阅读全文
摘要:
工作队列可以把工作推后,交给一个内核线程去执行–这个下半部分总是会在进程上下文中执行;通过工作队列执行的代码占尽进程上下文的优势;最重要的是工作队列允许重新调度甚至睡眠; 在工作队列和软中断/tasklet中做出选择很容易;如果推后执行的任务需要睡眠,那么就选择工作队列;如果推后执行的任务不需要睡眠 阅读全文
摘要:
多数情况下,为了控制一个寻常的硬件设备,tasklet机制都是实现自己下半部的最佳选择;tasklet可以动态创建,使用方便,执行起来还算快; 声明tasklet tasklet既可以静态的创建,也可以动态的创建;如果准备静态的创建一个tasklet,可以使用下面的两个宏之一: 1 #define 阅读全文
摘要:
软中断保留给系统中对时间要求严格以及最重要的下半部使用;目前,只有两个子系统(网络和SCSI)直接使用软中断;此外,内核定时器和tasklet都是建立在软中断上的;在使用软中断之前,要先确定为什么不能使用tasklet,tasklet可以动态生成,并且对加锁的要求不高,使用起来也很方便,性能也不错; 阅读全文
摘要:
中断处理程序的局限 1. 中断处理程序以异步的方式执行,并且它有可能会打断其他重要代码的执行,因此,为了避免被打段的代码停止时间过长,中断处理程序应该执行的越快越好; 2. 如果当前有一个中断处理程序在执行,在最好的情况下(没有设置IRQF_DISABLED),与该中断同级别的其他中断就会被屏蔽,在 阅读全文
摘要:
注册中断处理程序 中断处理程序是管理硬件驱动程序的组成部分;如果设备使用中断,那么相应的驱动程序就注册一个中断处理程序; 驱动程序通过request_irq()函数注册,并且激活给定的中断线,以处理中断;request_irq()函数可能会睡眠,因此,不能再中断上下文或者其他不行允许阻塞的代码中调用 阅读全文
摘要:
中断 中断使得硬件可以发出通知给处理器,本质上是一种特殊的电信号,由硬件设备发向处理器,处理器接收到中断后,会马上向操作系统反应此信号的到来,然后就由操作系统负责处理这些新来的数据;硬件设备生成中断并不考虑与处理器的始终同步,中断可能随时产生,内核随时都有可能被中断打断; 不同设备的中断不同,而每个 阅读全文
摘要:
数组形式 支持SMP的现代操作系统使用每个cpu上的数据,对于给定的处理器其数据是唯一的;一般来说,每个cpu的数据存放在一个数组中,数组总的每一项对应着系统上的一个存在的处理器;按当前处理器号确定这个数组的当前元素;使用方式如下: 1 unsigned long my_percpu[NR_CPUS 阅读全文
摘要:
vmalloc()函数的工作方式类似于kmalloc(),只不过在前者分配的内存虚拟地址是连续的,而物理地址则无须连续;这也是用户空间分配函数的工作方式:由malloc()返回的页在进程的虚拟地址空间是连续的,但是,这并不保证它们在物理RAM中也是连续的;kmalloc()函数确保页在物理地址上是连 阅读全文
摘要:
get_free_page 如果模块需要分配大块的内存,使用面向页的分配会有很多优点; 分配页面可使用下面的函数: 1 unsigned long get_zeroed_page(gfp_t gfp_mask) 返回指向新页面的指针并将页面清零; 1 unsigned long __get_free 阅读全文
摘要:
内核中有些地方的内存分配是不允许失败的,为了确保这种情况下的成功分配,内核开发者建立了一种称为内存池的抽象;内存池其实就是某种形式的后备高速缓存,它试图始终保存空闲的内存,以便在紧急状态下使用; mempool会分配一些内存块,空闲且不会真的得到使用;因此,使用mempool很容易浪费大量内存;几乎 阅读全文
摘要:
设备驱动程序常常会反复的分配很多相同大小的内存块;内核实现了后备高速缓存来对此进行支持,以反复的使用这些相同的内存块; 创建 Linux内核的高速缓存管理有时被称为“slab分配器”;因此,相关函数和类型在<linux/slab.h>中声明;slab分配器实现的告诉缓存具有kmem_cache类型; 阅读全文
摘要:
原型 kmalloc的原型如下: 1 void *kmalloc(size_t size, gfp_t flags) 第一个参数是要分配的块的大小,第二个参数是分片标志; flags标志 最常用的标志是GFP_KERNEL,表示内存分配(最终总是调用get_free_page来实现实际的分配,这就是 阅读全文