ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
kernel synchronization模块 先放这里吧,内核的知识却好似并不长那个用。 [https://e-mailky.github.io/2016-10-13-linux\_kernel\_sync](https://e-mailky.github.io/2016-10-13-linux_kernel_sync) [https://my.oschina.net/u/4362986/blog/3852572](https://my.oschina.net/u/4362986/blog/3852572) [https://tocreate.app/2018/12/10/OSsynchro/](https://tocreate.app/2018/12/10/OSsynchro/) kernel就像一个服务员要处理两种请求,由boss发起的请求与客户发起的请求。 1 waiter idle boss calls(什么叫boss call?),waiter server boss。 2 boss call waiter servicing customer,优先serviceing boss。 3 boss call waiter servicing anoth boss, servicing second one。第二个结束,在回到前一个。 4 在处理完最后一个boss的请求后,waiter决定暂时放弃customer选择一个新的。 cpu处于user mode 的时候,waiter就是idle。 中断就是boss的请求, 由用户模式进程或者系统调用是customer。 user Mode processes想要请求kernel的话会先发起一个指令。 强制cpu从user mode切换到kernel mode。 进程在执行内核功能时,进程以内核模式运行时,可能发生进程切换,则内核是抢占式。在抢占式和非抢占式内核中,运行在kernel mode的进程可以自愿放弃CPU,比如需要去睡眠等待一些资源。这种被陈作有计划的进程切换。 抢占式内核是指在内核功能中,以内核模式运行的进程可以被另一个进程替换。 **一、原子操作** 原子操作的概念来源于物理概念中的原子定义,指执行结束前不可分割(即不可打断)的操作,是最小的执行单位。 **二 、自旋锁(spinlock)** 自旋锁是这样一种同步机制:若自旋锁已被别的执行者保持,调用者就会原地循环等待并检查该锁的持有者是否已经释放锁(即进入自旋状态),若释放则调用者开始持有该锁。自旋锁持有期间不可被抢占。 **三、信号量(Semaphore)** Linux内核的信号量在概念和原理上与用户态的System V的IPC机制信号量是一样的,但是它不可能在内核之外使用,因此它与System V的IPC机制信号量完全不同。 信号量是这样一种同步机制:信号量在创建时设置一个初始值count,用于表示当前可用的资源数。一个任务要想访问共享资源,首先必须得到信号量,获取信号量的操作为count-1,若当前count为负数,表明无法获得信号量,该任务必须挂起在该信号量的等待队列等待;若当前count为非负数,表示可获得信号量,因而可立刻访问被该信号量保护的共享资源。当任务访问完被信号量保护的共享资源后,必须释放信号量,释放信号量通过把count+1实现,如果count为非正数,表明有任务等待,它也唤醒所有等待该信号量的任务。 **四、互斥锁(Mutex)** Linux 内核互斥锁是非常常用的同步机制,互斥锁是这样一种同步机制:在互斥锁中同时只能有一个任务可以访问该锁保护的共享资源,且释放锁和获得锁的调用方必须一致。因此在互斥锁中,除了对锁本身进行同步,对调用方(或称持有者)必须也进行同步。当互斥锁无法获得时,task会加入等待队列,直至可获得锁为止。