摘要:
问题 1. C10K 就是单机同时处理 1 万个请求(并发连接 1 万)的问题 2. C1000K 也就是单机支持处理 100 万个请求(并发连接 100 万)的问题 C10K I/O 模型 两种 I/O 事件通知的方式: 水平触发和边缘触发 (1) 水平触发:只要文件描述符可以非阻塞地执行 I/O 阅读全文
摘要:
问题: 1. 内核态内存映射函数 vmalloc、kmap_atomic 是如何工作的; 2. 内核态页表是放在哪里的,如何工作的? 3. swapper_pg_dir 是怎么回事; 4. 出现了内核态缺页异常应该怎么办? 内核页表 注意:和用户态页表不同,在系统初始化的时候,我们就要创建内核页表了 阅读全文
摘要:
mmap 的原理 每一个进程都有一个列表 vm_area_struct 1 struct mm_struct { 2 struct vm_area_struct *mmap; /* list of VMAs */ 3 ...... 4 } 5 6 7 struct vm_area_struct { 阅读全文
摘要:
前言: 重点讲解slub分配器原因: 内核里小内存分配一共有三种,SLAB/SLUB/SLOB,slub分配器是slab分配器的进化版,而slob是一种精简的小内存分配算法,主要用于嵌入式系统。慢慢的slab分配器或许会被slub取代,所以对slub的了解是十分有必要的。 slab分配器的弊端: s 阅读全文
摘要:
物理内存的组织方式 物理内存的布局平坦内存模型: 由于物理地址是连续的,页也是连续的,每个页大小也是一样的。因而对于任何一个地址,只要直接除一下每页的大小,很容易直接算出在哪一页。每个页有一个结构 struct page 表示,这个结构也是放在一个数组里面,这样根据页号,很容易通过下标找到相应的 s 阅读全文
摘要:
1 #include <vector> 2 3 class CTask 4 { 5 protected: 6 string m_strTaskName; //任务的名称 7 void* m_ptrData; //要执行的任务的具体数据 8 public: 9 CTask(){} 10 CTask(s 阅读全文