上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 25 下一页

2013年9月1日

工作队列

摘要: 参考:1、http://blog.csdn.net/droidphone/article/details/7518428 2、http://blog.csdn.net/lizhiguo0532/article/details/6533443 3、《内核设计与实现》 4、2.6.34首先,看下默认工作队列keventd_wq和管理调度其它内核线程(当然也包含工作线程)时需要的kthreadd线程的创建过程;start_kernel()---->rest_init() |---->kernel_thread(kernel_init, NULL, CLONE_FS ... 阅读全文

posted @ 2013-09-01 22:53 阿加 阅读(412) 评论(0) 推荐(0) 编辑

2013年8月31日

中断共享(硬件角度)

摘要: 中断共享: 和别人讨论的时候,谈到了中断共享,下面记录下几种不同的情况:1、一个IP模块中只有一个中断引脚连接到中断控制器,该IP模块中只有一个部件可以产生中断请求;2、一个IP模块中只有一个中断引脚连接到中断控制器,该IP模块中有多个部件可以产生中断请求;3、多个IP模块的中断引脚通过电路设计(例如:数字电路中的线与逻辑电路)连接到中断控制器的一个引脚,该中断引脚上对应着多个IP模块的的中断请求。第一种情形,谈不上中断共享;第二种情形,这个不好定义,因为(1)可以只有一个中断函数、在中断函数内部判定是何种原因导致了该IP模块产生中断(一般都这样);(2)可以为每种导致该IP模块产生中断的情形 阅读全文

posted @ 2013-08-31 20:34 阿加 阅读(840) 评论(0) 推荐(0) 编辑

2013年8月29日

电平触发与边沿触发中断的理解

摘要: 关于handle_level_irq与handle_edge_irq的理解: 电平中断处理handle_level_irq: (1)mask_ack_irq; (2)标记IRQ_INPROGRESS; (3)若发生同一中断线上的中断嵌套、则退出; (4)中断处理(在驱动程序的中断处理过程中可能会unmask中断); (5)unmask中断; 由于驱动程序中可能unmask中断,因此对于同一中断线上可能发生中断嵌套(假定系统设定为IRQF_SHARED),故需要(2)、(3)步骤;可以看出对于电平触发中断方式而言,在软件上并不支持中断嵌套(硬件上支持)。 边沿中断处理handle_edge_.. 阅读全文

posted @ 2013-08-29 13:28 阿加 阅读(4399) 评论(0) 推荐(0) 编辑

2013年8月28日

kuser_cmpxchg_check 原子操作

摘要: 对于ARM体系结构,每一个由用户态到内核态的中断或异常处理路径都经过kuser_cmpxchg_check,kuser_cmpxchg_check中检查被中断的地址是否大于TASK_SIZE;TASK_SIZE是内核与用户空间的分界点,那么对于ARM体系而言,为什么在用户态时其执行路径会“顺利”地进入内核空间? 查了下,在Documentation/zh_CN/arm/kernel/kernel_user_helpers.txt中解释了对于ARM体系结构,由于没有类似x86的“比较交换”指令,因此在用户态下完成一些原子操作时需要借助于内核空间的一些操作来完成(此时,仍处于用户态,只是执行的.. 阅读全文

posted @ 2013-08-28 19:22 阿加 阅读(1120) 评论(0) 推荐(0) 编辑

2013年8月25日

新建普通进程

摘要: 应用程序调用glibc的fork, fork发起系统调用SyS_clone(sys_clone),SyS_clone中主要调用了do_fork。关注了下内核中do_fork的流程,遗留的问题有:(1)关于进程的相关进程号的知识;(2)调度域;(3)调度实体中的一些统计量的意义;(4)父子进程的信号处理关系;(5)copy_mm()---->dup_mm()---->dup_mmap(), dup_mmap()没看懂;(6)其它,很多;关于新建进程时的vruntime的处理需要注意:新建时是减去了min_vruntime,而后在入队时又加上了min_vruntime。以下分析为系统调 阅读全文

posted @ 2013-08-25 14:55 阿加 阅读(540) 评论(0) 推荐(0) 编辑

2013年8月22日

fork 至 “sys_clone" SyS_clone

摘要: 注:glibc-2.17中fork的相应系统调用是sys_clone及SyS_clone。有人说调用的是sys_fork,但是我持否定意见,如果我们向真的来发起系统调用可以使用syscall。fork系统调用等价于直接调用的就是do_fork(CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHILD, NULL, NULL, NULL, &THREAD_SELF->tid)。&THREAD_SELF->tid放在svc状态下的栈上,前四个参数在r0~r3中。比较简单,sys_clone实际上是SyS_clone__ve 阅读全文

posted @ 2013-08-22 13:26 阿加 阅读(1496) 评论(0) 推荐(0) 编辑

glibc中fork系统调用传参

摘要: 因为想跟踪下在新建进程时,如何处理新建进程的vruntime,所以跟踪了下fork。以glic-2.17中ARM为例(unicore架构的没找到),实际上通过寄存器向系统调用传递的参数为:r7: __NR_clone 120r0: CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLDr1: NULLr2: NULLr3: NULLr4: &THREAD_SELF->tidfork()---->__fork()---->__libc_fork()__libc_fork()---->INLINE_SYSCALL (c 阅读全文

posted @ 2013-08-22 10:09 阿加 阅读(1779) 评论(0) 推荐(0) 编辑

2013年8月21日

主调度器schedule

摘要: 中断处理完毕后,系统有三种执行流向: 1)直接返回中断前的状态;2)系统重新进行调度;3)进行信号处理;我们此处重点关注:在用户态下发生scheduler_tick,且已判定当前进程可被抢占的情形(此处以ARM为例)。__irq_usr:#......b ret_to_user_from_irqENTRY(ret_to_user_from_irq) ldr r1, [tsk, #TI_FLAGS]#define _TIF_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_NOTIFY_RESUME) tst r1, #_T... 阅读全文

posted @ 2013-08-21 12:45 阿加 阅读(1866) 评论(0) 推荐(0) 编辑

2013年8月19日

周期性调度器scheduler_tick

摘要: 周期性调度器由中断实现,系统定时产生一个中断,然后启动周期性调度器,周期性调度器执行过程中要关闭中断, 周期性调度器执行完毕后再打开中断(handle_IRQ_event, IRQF_DISABLED) 周期性调度器主要做两个工作:a)更新相关统计量b)检查进程执行的时间是否超过了它对应的ideal_runtime,如果超过了,则告诉系统,需要启动主调度器(schedule)进行进程切换。(注意thread_info:preempt_count、thread_info:flags (TIF_NEED_RESCHED))周期性调度器 |---->do_timer() 更新jiffies.. 阅读全文

posted @ 2013-08-19 14:32 阿加 阅读(2159) 评论(0) 推荐(0) 编辑

2013年8月17日

DEFINE_PER_CPU,如何实现“数组”

摘要: 引述自:http://www.unixresources.net/linux/clf/linuxK/archive/00/00/47/91/479165.htmlKevin.Liu 的《调度器笔记》中指明“有几个 CPU 就会有几个 rq 结构体,所有的结构体保存在 一个数组中(即runqueues)";《深入Linux内核架构》p_73指明”系统的所有就绪队列中都在runqueues数组中,由下定义完成: static DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);由于unicore32是单核,所以原先就没关注过这个问题.. 阅读全文

posted @ 2013-08-17 11:49 阿加 阅读(2519) 评论(0) 推荐(0) 编辑

上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 25 下一页

导航