摘要:1 slab综述 1.1 slab分配器产生的背景 类似 task_struct mm_struct 等结构被内核中被频繁分配和释放,同时创建和销毁这些结构会产生一定的开销(overhead)。二者累计起来导致大量开销的产生。 Buddy分配器只能分配2^n个页面,对于小于一个页面的内存请求则没有办 阅读全文
posted @ 2021-05-04 14:34 令狐葱dennis 阅读(13) 评论(0) 推荐(0) 编辑
摘要:本文简要说明几个内核和内存管理有关的结构体。其中 struct page 和 struct zone有较大幅度的删减,主要删减了和NUMA模型SPARSE模型以及内存热插拔相关的域。 页框描述符 struct page page用于描述一个4KB的物理页。MMU以页为单位管理页表。 struct p 阅读全文
posted @ 2021-05-04 14:33 令狐葱dennis 阅读(4) 评论(0) 推荐(0) 编辑
摘要:alloc_pages的使用 struct page *alloc_pages(gft_t gfp, unsigned int order) alloc_pages定义于 inux/gfp.h 中. 该函数用于分配2^order个 连续 的物理页. 分配失败返回NULL。 alloc_pages的调 阅读全文
posted @ 2021-05-04 14:32 令狐葱dennis 阅读(2) 评论(0) 推荐(0) 编辑
摘要:#1 软中断概述 软中断是实现中断下半部的一种手段,与2.5以前版本的下半段机制不同。软中断可以同时运行在不同的CPU上。 1.1 软中断的表示 内核中用结构体softirq_action表示一个软中断。软中断是一组静态定义的接口,有32个。但是内核(2.6.34)中只实现了10个。可用的软中断的个 阅读全文
posted @ 2021-05-04 14:19 令狐葱dennis 阅读(136) 评论(0) 推荐(0) 编辑
摘要:题目描述: 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。 示例: 给定二叉树 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以它们之间边的数目表示。 解答: 这道题是一 阅读全文
posted @ 2020-02-01 20:03 令狐葱dennis 阅读(79) 评论(0) 推荐(0) 编辑
摘要:1. 我做了什么 最近在学习如何用select函数实现echo server。期间遇到了一个关于缓冲区的问题,在这里分享给大家。 在使用read/recv, write/send类函数进行数据传输时,需要程序员手动创建缓冲区。通常(各种书籍中),大家都会将缓冲区的大小设置为1024或其整数倍。但是我 阅读全文
posted @ 2019-12-30 21:13 令狐葱dennis 阅读(139) 评论(0) 推荐(0) 编辑
摘要:1. UDP简介 UDP 和TCP 的区别包括 1. 面向字节流和面向报文 2. TCP必须要建立连接后才能进行数据交换,但是UDP则并没有连接的建立和释放过程。面向字节流说明,tcp报文段(segment)是没有边界的,当服务器发送多个报文段到客户端时,客户端可能会把着多个报文段合并成一个报文段进 阅读全文
posted @ 2019-12-23 15:23 令狐葱dennis 阅读(558) 评论(0) 推荐(0) 编辑
摘要:学习Rust已经两周了,基本上是断断续续的在学,或者是在上下班坐公交时,或者是在ODC没事做时。现在已经学习了Rust程序设计语言的前5章,是时候做一个总结了。关于数据类型或者if else这种内容我就不在罗列了,我只说一说我感兴趣的部分。 变量和可变性(variable & mutability) 阅读全文
posted @ 2019-12-22 22:50 令狐葱dennis 阅读(312) 评论(1) 推荐(0) 编辑
摘要:1. 匿名函数 匿名函数就是没有函数名的函数,如下所示。 基本上匿名函数也没啥好说的 。。。 2. 闭包 闭包感觉就是返回值为匿名函数的函数。。。来看个例子吧 (◉3◉) 运行结果如下所示,可以看到三次调用f(),获得的是不同的x。即便是x是squares的局部变量,但是变量x的生命周期被延长到了三 阅读全文
posted @ 2019-10-06 20:12 令狐葱dennis 阅读(305) 评论(0) 推荐(0) 编辑
摘要:1. Introduction mmap是Linux中一个相对复杂的函数,仅函数的参数就有6个。但是他也是一个十分强大的函数,在文件I/O,进程间通信,和malloc函数的实现中皆有他的身影。mmap的强大来源于他和进程的地址空间存在十分密切的关系。mmap用于创建一个虚拟内存区域(vm_area_ 阅读全文
posted @ 2019-09-07 22:45 令狐葱dennis 阅读(274) 评论(0) 推荐(0) 编辑