
linux内核编程
文章平均质量分 85
隨意的風
从事10+年的技术开发,结交天下软件研发朋友,共同探讨技术、共同进步。
展开
-
Linux网络数据包接收处理过程
因为要对百万、千万、甚至是过亿的用户提供各种网络服务,所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发,要理解性能开销,会进行性能优化。而很多时候,如果你对Linux底层的理解不深的话,遇到很多线上性能瓶颈你会觉得狗拿刺猬,无从下手。我们今天用图解的方式,来深度理解一下在Linux下网络包的接收过程。还是按照惯例来借用一段最简单的代码开始思考。为了简单起见,我们用udp来举例,如下:int main(){ int serverSocketFd = socket(A原创 2021-07-02 10:11:32 · 1766 阅读 · 2 评论 -
【genius_platform软件平台开发】第十六讲:sync、fsync、fdatasync和fflush函数讲解
sync、fsync、fdatasync和fflush函数讲解一、术语解释脏页:linux内核中的概念,因为硬盘的读写速度远赶不上内存的速度,系统就把读写比较频繁的数据事先放到内存中,以提高读写速度,这就叫高速缓存,linux是以页作为高速缓存的单位,当进程修改了高速缓存里的数据时,该页就被内核标记为脏页,内核将会在合适的时间把脏页的数据写到磁盘中去,以保持高速缓存中的数据和磁盘中的数据是一致的。内存映射:内存映射文件,是由一个文件到一块内存的映射。Win32提供了允许应用程序把文件映射到一个进程的函原创 2021-06-02 18:59:27 · 878 阅读 · 1 评论 -
linux内核编程之二:vm_area_struct结构体
结构体struct vm_area_struct它表示的是一块连续的虚拟地址空间区域,给进程使用的,地址空间范围是0~3G,对应的物理页面都可以是不连续的结构体struct vm_struct表示一块连续的虚拟地址空间区域。给内核使用,地址空间范围是(3G + 896M + 8M) ~ 4G,对应的物理页面都可以是不连续的两者的区别是什么呢?在Linux中,struct vm_area_struct表示的虚拟地址是给进程使用的,而struct vm_struct表示的虚拟地址是给内...原创 2021-03-09 16:27:44 · 5988 阅读 · 0 评论 -
linux内核编程之四:同步方法自旋锁(spin lock)
自旋锁Linux的的内核最常见的锁是自旋锁。自旋锁最多只能被一个可执行线程持有。如果一个执行线程试图获得一个被已经持有(争用)的自旋锁,那么该线程就会一直进行忙循环-旋转-等待锁重新可用要是锁未被争用,请求锁的执行线程就可以立即得到它,继续执行。在任意时间,自旋锁都可以防止多于一个的执行线程同时进入临界区。同一个锁可以用在多个位置,例如,对于给定数据的所有访问都可以得到保护和同步。-----------------------------------------------...原创 2021-03-05 20:21:27 · 639 阅读 · 0 评论 -
linux内核编程之三:linux中原子操作atomic_read、atomic_set、atomic_add、atomic_sub
所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位。因此这里的原子实际是使用了物理学里的物质微粒的概念。原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。原子操作主要用于实现资源计数,很多引用计数(refcnt)就是通过原子操作实现的。原子类型定义如下:typedef struct.原创 2021-03-05 20:11:45 · 11045 阅读 · 1 评论