并发与同步--问答

并发与同步

  • 1.在ARM64处理器中,如何实现独占访问内存?
  • 2.atomic_cmpxchg()和atomic_xchg()分别表示什么含义?
  • 3.在ARM64中,CAS指令包含了加载-获取和存储-释放指令,它们的作用是什么?
  • 4.atomic_try_cmpxchg()函数和atomic_cmpxchg()函数有什么区别?
  • 5.cmpxchg_acquire()函数、cmpxchg_release()函数、cmpxchg_relaxed()函数以及cmpxchg()函数的区别是什么?
  • 6.请举例说明内核使用内存屏障的场景。
  • 7.smp_cond_load_relaxed()函数的作用和使用场景是什么?
  • 8.smp_mb__before_atomic()函数和smp_mb__after_atomic()函数的作用和使用场景是什么?
  • 9.为什么自旋锁的临界区不能睡眠(不考虑RT-Linux的情况)?
  • 10.Linux内核中经典自旋锁的实现有什么缺点?
  • 11.为什么自旋锁的临界区不允许发生抢占?
  • 12.基于排队的自旋锁机制是如何实现的?
  • 13.如果在spin_lock()和spin_unlock()的临界区中发生了中断,并且中断处理程序也恰巧修改了该临界区,那么会发生什么后果?该如何避免呢?
  • 14.排队自旋锁是如何实现MCS锁的?
  • 15.排队自旋锁把32位的变量划分成几个域,每个域的含义和作用是什么?
  • 16.假设CPU0先持有了自旋锁,接着CPU1、CPU2、CPU3都加入该锁的争用中,请阐述这几个CPU如何获取锁,并画出它们申请锁的流程图。
  • 17.与自旋锁相比,信号量有哪些特点?
  • 18.请简述信号量是如何实现的。
  • 19.乐观自旋等待的判断条件是什么?
  • 20.为什么在互斥锁争用中进入乐观自旋等待比睡眠等待模式要好?
  • 21.假设CPU0~CPU3同时争用一个互斥锁,CPU0率先申请了互斥锁,然后CPU1也加入锁的申请。CPU1在持有锁期间会进入睡眠状态。然后CPU2和CPU3陆续加入该锁的争用中。请画出这几个CPU争用锁的时序图。
  • 22.Linux内核已经实现了信号量机制,为何要单独设置一个互斥锁机制呢?
  • 23.请简述MCS锁机制的实现原理。
  • 24.在编写内核代码时,该如何选择信号量和互斥锁?
  • 25.什么时候使用读者锁?什么时候使用写者锁?怎么判断?
  • 26.读写信号量使用的自旋等待机制是如何实现的?
  • 27.RCU相比读写锁有哪些优势?
  • 28.请解释静止状态和宽限期。
  • 29.请简述RCU实现的基本原理。
  • 30.在大型系统中,经典RCU遇到了什么问题?Tree RCU又是如何解决该问题的?
  • 31.在RCU实现中,为什么要使用ULONG_CMP_GE()和ULONG_CMP_LT()宏来比较两个数的大小,而不直接使用大于号或者小于号来比较?
  • 32.请简述一个宽限期的生命周期及其状态机的变化。
  • 33.请阐述原子操作、自旋锁、信号量、互斥锁以及RCU的特点和使用规则。
  • 34.在KSM中扫描某个VMA以寻找有效的匿名页面时,假设此VMA恰巧被其他CPU销毁了,会不会有问题呢?
  • 35.请简述PG_locked的常见使用方法。
  • 36.在mm/rmap.c文件中的page_get_anon_vma()函数中,为什么要使用rcu_read_lock()函数?什么时候注册RCU回调函数呢?
  • 37.在mm/oom_kill.c的select_bad_process()函数中,为什么要使用rcu_read_lock()函数?什么时候注册RCU回调函数呢?

1.在ARM64处理器中,如何实现独占访问内存?

答:
   

2.atomic_cmpxchg()和atomic_xchg()分别表示什么含义?

答:
   

3.在ARM64中,CAS指令包含了加载-获取和存储-释放指令,它们的作用是什么?

答:
   

4.atomic_try_cmpxchg()函数和atomic_cmpxchg()函数有什么区别?

答:
   

5.cmpxchg_acquire()函数、cmpxchg_release()函数、cmpxchg_relaxed()函数以及cmpxchg()函数的区别是什么?

答:
   

6.请举例说明内核使用内存屏障的场景。

答:
   

7.smp_cond_load_relaxed()函数的作用和使用场景是什么?

答:
   

8.smp_mb__before_atomic()函数和smp_mb__after_atomic()函数的作用和使用场景是什么?

答:
   

9.为什么自旋锁的临界区不能睡眠(不考虑RT-Linux的情况)?

答:
   

10.Linux内核中经典自旋锁的实现有什么缺点?

答:
   

11.为什么自旋锁的临界区不允许发生抢占?

答:
   

12.基于排队的自旋锁机制是如何实现的?

答:
   

13.如果在spin_lock()和spin_unlock()的临界区中发生了中断,并且中断处理程序也恰巧修改了该临界区,那么会发生什么后果?该如何避免呢?

答:
   

14.排队自旋锁是如何实现MCS锁的?

答:
   

15.排队自旋锁把32位的变量划分成几个域,每个域的含义和作用是什么?

答:
   

16.假设CPU0先持有了自旋锁,接着CPU1、CPU2、CPU3都加入该锁的争用中,请阐述这几个CPU如何获取锁,并画出它们申请锁的流程图。

答:
   

17.与自旋锁相比,信号量有哪些特点?

答:
   

18.请简述信号量是如何实现的。

答:
   

19.乐观自旋等待的判断条件是什么?

答:
   

20.为什么在互斥锁争用中进入乐观自旋等待比睡眠等待模式要好?

答:
   

21.假设CPU0~CPU3同时争用一个互斥锁,CPU0率先申请了互斥锁,然后CPU1也加入锁的申请。CPU1在持有锁期间会进入睡眠状态。然后CPU2和CPU3陆续加入该锁的争用中。请画出这几个CPU争用锁的时序图。

答:
   

22.Linux内核已经实现了信号量机制,为何要单独设置一个互斥锁机制呢?

答:
   

23.请简述MCS锁机制的实现原理。

答:
   

24.在编写内核代码时,该如何选择信号量和互斥锁?

答:
   

25.什么时候使用读者锁?什么时候使用写者锁?怎么判断?

答:
   

26.读写信号量使用的自旋等待机制是如何实现的?

答:
   

27.RCU相比读写锁有哪些优势?

答:
   

28.请解释静止状态和宽限期。

答:
   

29.请简述RCU实现的基本原理。

答:
   

30.在大型系统中,经典RCU遇到了什么问题?Tree RCU又是如何解决该问题的?

答:
   

31.在RCU实现中,为什么要使用ULONG_CMP_GE()和ULONG_CMP_LT()宏来比较两个数的大小,而不直接使用大于号或者小于号来比较?

答:
   

32.请简述一个宽限期的生命周期及其状态机的变化。

答:
   

33.请阐述原子操作、自旋锁、信号量、互斥锁以及RCU的特点和使用规则。

答:
   

34.在KSM中扫描某个VMA以寻找有效的匿名页面时,假设此VMA恰巧被其他CPU销毁了,会不会有问题呢?

答:
   

35.请简述PG_locked的常见使用方法。

答:
   

36.在mm/rmap.c文件中的page_get_anon_vma()函数中,为什么要使用rcu_read_lock()函数?什么时候注册RCU回调函数呢?

答:
   

37.在mm/oom_kill.c的select_bad_process()函数中,为什么要使用rcu_read_lock()函数?什么时候注册RCU回调函数呢?

答:
   

你可能感兴趣的:(Linux学习,linux)