
linux_kernel
文章平均质量分 73
sicf
这个作者很懒,什么都没留下…
展开
-
为啥spinlock里面不能sleep
1. splin_lock在linux下面的实现,会禁止内核抢占, 代码如下: static inline void __spin_lock(spinlock_t *lock){ preempt_disable(); spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);}2. 这里禁原创 2013-05-21 20:16:39 · 1509 阅读 · 0 评论 -
内核页表1
先贴张图原创 2013-05-21 20:21:44 · 471 阅读 · 0 评论 -
中断处理过程
1. 在entry_32.S 里面,会建立一个interrupt数组, interrupt数组,是一个函数指针数组。数组的每个元素都指向一个函数 其实呢,数组的每个元素,指向的是一段代码。 这段代码的功能为: push $0x5f //这个其实就是将中断向量号压入jmp 3fa 而3fa其实也是一个跳转,跳转到由common_in原创 2013-05-21 20:15:27 · 840 阅读 · 0 评论 -
信号量的处理1
1. 信号量每个task_struct里面都包含有signal_struct这个类型的指针。而signal_stuct里面又包含了struct sigpending这个结构。struct sigpending里面就是一个链表。 这里链表上面,正是挂着该进程(线程),收到的信号。2. 发送信号的过程发送信号是通过kill函数,即SYSCALL_DEFINE2(kill原创 2013-05-21 20:17:24 · 416 阅读 · 0 评论 -
内核里面fork的过程1
先贴张线程栈原创 2013-05-21 20:23:35 · 584 阅读 · 0 评论 -
pthread线程创建过程(未完)
1. 当我们使用pthread_create来创建线程的时候, 实际上调用的是__pthread_create_2_1 versioned_symbol (libpthread, __pthread_create_2_1, pthread_create, GLIBC_2_1); 2. 而__pthread_create_2_1里面呢, 根据传入的pthread_a原创 2013-06-20 00:14:47 · 892 阅读 · 0 评论 -
epoll 内核实现
1. epoll_create 1. 此系统调用分配了eventpoll数据结构, 并初始化了其中wq和poll_wq两个waiting queue 2. 创建了匿名inode节点, 此inode的file_operaitons 即eventpoll_fops仅仅提供了release, poll 两个方法2. epoll_ctl 1. 由输入的epoll_fd 得到对应原创 2013-07-11 22:10:16 · 723 阅读 · 0 评论