
Linux
文章平均质量分 87
渔舟唱晚_hanpan
面对山峰咆哮的深谷,一往无前,内心好似有万千头雄狮在狂啸怒吼。
展开
-
Linux内核同步方法——信号量
信号量 Linux中的信号量是一种睡眠锁。 如果有一个 任务试图获得一个不可用(已经被占用)的信号量是,信号量将会将其推进一个等待队列,然后让其睡眠。这时处理器能重获自由,从而去执行其他代码。当持有的信号量可用(被释放)后,处于等待队列的哪个任务将被唤醒,并获得该信号量。 举个门和钥匙的例子,当某个人到了门前,拿到钥匙,然后进入房间。最大的差异在于,当另一个人来到门前,但无法得到...原创 2018-06-03 16:48:49 · 3726 阅读 · 1 评论 -
epoll源码剖析
(主要基于Linux-2.6.11.12版本进行分析。)1. 主要数据结构struct eventpoll { /* Protect the this structure access */ rwlock_t lock; /* * This semaphore is used to ensure that files are not removed * while epoll is...原创 2018-06-09 21:11:34 · 766 阅读 · 1 评论 -
poll源码剖析
Poll系统调用,是在指定时间内轮询一定数量的文件描述符,以测试是否有就绪者。函数原型:int poll (struct poddfd *fds, nfds_t nfds, int timeout); · fds参数是一个pollfd结构类型的数组,指定所有感兴趣的文件描述符上发生的可读,可写和异常等事件。· nfds参数指定被监听事件集合fds的大小。 typede...原创 2018-06-09 16:09:05 · 1592 阅读 · 0 评论 -
Linux内核同步方法——互斥锁
互斥锁“互斥体(互斥)”指的是任何可以睡眠的强制互斥锁,比如计数是1的信号量。 也就是说,互斥体是一种互斥信号。 互斥在内核中对应数据结构互斥,其行为和使用计数为1的信号量类似,因为是直接调用的信号量的操作接口,实现更高效,而且使用限制更强。也就是一个简化版的信号量,因为不需要管理任何使用计数。#define MUTEX_DEFAULT 0x0typedef struct sema...原创 2018-06-08 16:30:23 · 1297 阅读 · 0 评论 -
Linux内核同步方法——自旋锁(spin lock)
自旋锁 Linux的的内核最常见的锁是自旋锁。自旋锁最多只能被一个可执行线程持有。如果一个执行线程试图获得一个被已经持有(争用)的自旋锁,那么该线程就会一直进行忙循环-旋转-等待锁重新可用要是锁未被争用,请求锁的执行线程就可以立即得到它,继续执行。 在任意时间,自旋锁都可以防止多于一个的执行线程同时进入临界区。同一个锁可以用在多个位置,例如,对于给定数据的所有访问都可以得到保护和同步。...原创 2018-06-08 16:20:37 · 31403 阅读 · 2 评论 -
Linux内核同步方法——读写锁
读 - 写自旋锁 一个或多个任务可以并发地持有读者锁;相反,用于写的锁最多只能被一个写任务持有,而且此时不能有并发地读操作。 读/写锁也叫做共享/排斥锁,或者并发/排斥锁,因为这种锁对读者而言是共享地,对写者以排斥形式获取地。基本数据结构 在内核代码中,读-写自旋锁用rwlock_t类型表示,typedef struct { /** * 这个锁标志与自旋锁不一样,自旋锁的lo...原创 2018-06-08 13:49:15 · 5254 阅读 · 0 评论 -
内存管理之slab分配器
STL中的空间配置器采用一、二级配置器进行内存管理,当配置区块 在一级配置器中,allocate()直接使用malloc(),deallocate()直接使用free(),对于内存不足的情况,模拟C++的set_new_handler()机制; 在二级配置器中,首先会维护16个自由链表(free lists),负责16种小型区块的次配置能力;如果内存不足,转调一级配置器中的set_...原创 2018-06-20 20:57:29 · 874 阅读 · 1 评论 -
Linux内存管理
1.页 Linux的内核把物理页作为内存管理的基本单位。而视窗操作系统中的基本单位是进程和线程,与Linux的不同。 内存管理单元(MMU):管理内存并把虚拟地址转换为物理地址的硬件。MMU通常以页为单位来管理系统中的页表。当然,页的大小在不同的体系结构下是不同的0.32位一般支持4KB的页,而64位支持8KB的页。 Linux内核中用struct page结构体类型表示系统中的...原创 2018-06-20 16:15:32 · 303 阅读 · 0 评论