
LKD 笔记
文章平均质量分 97
alenliu0621
随风飘飘天地任逍遥~~~
展开
-
LKD 笔记:内核同步方法
文章目录原子操作原子的整数操作64 位原子操作原子的位操作自旋锁其他的自旋锁方法自旋锁和底半部读写自旋锁信号量计数和二值信号量创建和初始化信号量使用信号量读写信号量互斥锁完成变量顺序锁关掉内核抢占顺序与屏障前一节介绍了内核同步,这一节介绍内核提供的同步方法。原子操作从 互斥锁与条件变量 这篇文章中我们知道:即使多个线程对同一个整数进行自增操作也会存在同步问题(因为整数的自增操作不是原子(性)的)。因此内核提供了两类原子性的操作接口——一类接口操作一个整数,另一类接口操作整数中单独的某一位。这些接口的原创 2020-05-05 17:13:00 · 486 阅读 · 0 评论 -
LKD 笔记:内核同步
文章目录介绍临界区和竞争条件为什么需要保护?造成并发访问的原因要知道什么需要保护介绍在一个共享内存的应用程序中,开发者必须确保共享的资源不会被并发地访问。内核也不例外。共享的资源需要避免并发地访问是因为当有多个执行线程同时访问和修改数据时,一个线程可能会覆盖其他线程的修改或者造成访问的数据处于一个非一致的状态。在 Linux 内核支持对称多处理器(SMP)之前,防止数据被并发地访问很简单。因为仅仅支持一个处理器,唯一能造成数据能够被并发地访问方式是中断发生或者内核代码显示地重新调度让另一个任务运行。原创 2020-04-21 16:04:20 · 368 阅读 · 0 评论 -
LKD 笔记:底半部和推迟的工作
文章目录底半部软中断(Softirqs)执行软中断使用软中断Tasklets工作队列(Work Queues)底半部机制中的锁关掉底半部处理底半部中断处理函数是异步执行的,在执行时,至少当前(产生中断信号的这条)中断线(在所有的处理器上)是关闭的。[另一种情况是当前的中断线在所有处理器上是关闭的再加上本地处理器上所有的中断线都是关闭的] 它们的执行时间越短越好。以下是几个提示,如何将工作划分为顶半部(中断处理函数中)和底半部:如果这个工作对执行时间要求很严格,将它放到中断处理函数中如果这个工作与硬原创 2020-04-02 18:06:36 · 360 阅读 · 0 评论 -
LKD 笔记:中断和中断处理函数
文章目录进程上下文中断上下文顶半部 VS 底半部中断控制中断系统的状态进程上下文进程最重要的一个部分是正在执行的程序代码。程序代码从一个可执行文件中读入,在进程的地址空间中执行。正常的程序执行发生在用户空间。当一个程序执行了一个系统调用或者触发了一个异常后,它进入内核空间。此时,我们说内核正代表着进程在执行,它正处在进程上下文。在进程上下文中,current宏是有效的。在退出内核空间后,进程重新在用户空间执行,除非有一个更高优先级的进程在退出内核空间时处于可运行状态,在这种情形下,调度器会被触发以选择原创 2020-04-01 21:23:50 · 1421 阅读 · 0 评论