Android Binder-涉及到Linux kernel相关知识点

涉及到Linux 内核相关知识点:

1.工作队列

http://www.ibm.com/developerworks/cn/linux/l-cn-cncrrc-mngd-wkq/

即涉及到内核线程。作用是将一些不紧急的任务都到工作队列中推迟执行,避免在一次中断过程做耗时的任务。

在Android Binder Driver的作用是:将flush & release 动作放到工作队列中进行。

  • flush:刷新proc,来唤醒waiting 的线程。
  • release:在driver 卸载时,内核自动调用,来释放内核数据结构。

2.进程调度的时机

  • 内核是如何进行进程调度的,进程调度的时机以及设备驱动会如何触发进程调度的?
  • 由Linux内核中Schedule()的函数来决定是否要进行进程的切换,如果要切换的话,切换到哪个进程等等

进程调度的时机有:

  1. 进程状态转换的时刻:进程终止、进程睡眠;
  2. 当前进程的时间片用完时(current->counter=0);
  3. 设备驱动程序
  4. 进程从中断、异常及系统调用返回到用户态时;

Android Binder Driver 主要会调用这几个接口触发进程调度的。

  • wait_event_freezable()
  • wait_event_freezable_exclusive()
  • wait_event_interruptible()
  • wake_up()
  • wake_up_interruptible()
  • wake_up_interruptible_all()
    等待队列

3.Linux 内核相关宏定义

  • container_of :Linux内核中一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。
  • current:指向当前在运行的进程,内核代码可以通过使用 current 来使用进程特定的信息。指向 task_struct 的current指针在内核堆栈内,是一个全局项。

4.进程的用户态,内核态,内核栈,以及内核线程。

进程通过系统调用进入内核则变为内核态,在用户空间则为用户态。进程在内核空间会被分配内核栈。
内核线程是只能在内核空间运行的线程。

5. 内核空间与用户空间的相互拷贝

  • copy_to_user()
  • copy_from_user()
  • get_user()
  • put_user()

6. 等待队列

wait queue很早就作为一个基本的功能单位出现在Linux内核里了,它以队列为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。
Linux 2.4.x内核同步机制

7. 内核数据结构

主要有红黑树,链表,kfifo等等,都是比较常见的用法。如果不熟悉,可能阅读kernel 代码有困难。
深入分析 Linux 内核链表-2.6.x

你可能感兴趣的:(Android,Common)