running_linux
New_Worms
这个作者很懒,什么都没留下…
展开
-
4.4 Mutex互斥体
Mutex互斥体的实现类似于Semaphore信号量,但在锁争用激烈的测试场景中,Mutex比信号量执行速度更快,可扩展性更好。struct mutex {____/* 1: unlocked, 0: locked, negative: locked, possible waiters */____atomic_t________count;____spinlock_t______wait_lock; /*spinlock锁,用于保护wait_list睡眠等待队列*/____struct原创 2020-08-11 22:56:37 · 267 阅读 · 1 评论 -
4.3 信号量
信号量的数据结构struct semaphore {____raw_spinlock_t______lock;____unsigned int________count;____struct list_head____wait_list;};1、信号量的初始化#define __SEMAPHORE_INITIALIZER(name, n)________________\{___________________________________\____.lock_______=原创 2020-08-11 07:30:48 · 146 阅读 · 0 评论 -
4.2 spinlock
spinlock要解决的问题:保证临界区代码执行过程的原子性。1、spinlock特性:1.1、忙等待锁机制。1.2、同一时刻只能有一个内核代码路径可以获得该锁。1.3、要求spinlock锁持有者尽快完成临界区的执行任务。1.4、spinlock锁可以在中断上下文中使用。2、spinlock的实现...原创 2020-08-10 23:05:18 · 400 阅读 · 0 评论 -
4.1 原子操作
#define ATOMIC_INIT(i)__{ (i) }#define atomic_set(v, i) (((v)->counter) = (i))#ifndef atomic_read #define atomic_read(v)__ACCESS_ONCE((v)->counter)#endif#define atomic_inc(atomic_t *v) /*原子操作v + 1*/#define ato.原创 2020-08-10 07:58:42 · 171 阅读 · 0 评论 -
5.3 workqueue工作队列
工作队列的优点:利用进程上下文来执行中断下半部操作。因此工作队列允许重新调度和睡眠,是异步执行的进程上下文,另外它还能解决软中断和tasklet执行时间过长导致的系统实时性下降等问题。workqueue的组成:struct work_struct { ____atomic_long_t data;____struct list_head entry;____work_func_t func;#ifdef CONFIG_LOCKDEP____struct l原创 2020-08-03 21:56:56 · 298 阅读 · 0 评论 -
2.8 malloc
malloc()函数是c函数库封装的函数。主要通过brk系统调用来实现。1、brk分配地址空间在内存中的位置。2、如果brk分配的地址小于mm->brk,则说明brk使用的是之前的内存。3、以mm_brk为地址去查找系统中有没有一块已经存在的vma。如果找到了,说明mm_brk地址对应的vma已经在使用了。4、do_brk()。5、如果设置VM_LOCKED标志,则与物理地址空间建立映射关系。SYSCALL_DEFINE1(brk, unsigned long, brk)原创 2020-06-30 05:50:38 · 136 阅读 · 0 评论 -
2.7 VMA操作
目录1、查找VMA。find_vma()/find_vma_prev()1.1 在current->vmacache的cache中查找匹配的vma。1.2 遍历进程的rb_node tree找匹配的vma。find_vma_pre()与1,2类似,只不过找prev的vma。2、插入VMA。insert_vm_struct()2.1 找到vma要插入位置相关的:父结点(rb_parent),要插入位置的地址(rb_link),前一个vma(prev)。2.2 将vma加入到对原创 2020-06-29 13:06:06 · 539 阅读 · 0 评论 -
2.4 物理页面的分配
页面分配和释放函数页面核心分配函数:#define alloc_pages(gfp_mask, order) \ __________alloc_pages_node(numa_node_id(), gfp_mask, order)unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order);unsigned long __get_free_pages(gfp_t gfp_mas...原创 2020-06-27 18:57:37 · 354 阅读 · 0 评论