- 论坛徽章:
- 4
|
1) 如何实现对共享内存的互斥访问呢?
不能互斥。kernel只能是通过一个atomic的标志,判断当前能不能访问这段共享内存,并做好如果不能访问的对策。
如果kernel死等标志被清的话,很容易负责清这个标志的用户进程不在运行态,搞的半天不清这个标志。如果UP可抢占或者SMP还好点,最多进程调度表现怪异而已;UP不可抢占的话直接死机。
2)用户空间如何知道共享内存的地址呢,即kernel如何通知user共享内存的地址和大小?
在驱动中,通过mmap实现共享内存。mmap既可以知道共享内存在kernel的地址,也能知道在user中的地址
另外,kernel与user共享内存是一件很麻烦的事,如果是X86还简单,如果是VIVT或者那些set狂多的VIPT的CPU,简直就是搞定一个坑,又是一个坑。
如果是set很多的VIPT的话,可以在bootmem或者buddy中,分配连续的内存,直接让这些内存具有各个color,然后按照color映射到user.
如果是VIVT的话,只有在kernel更改了共享内存的数据后,根据objrmap遍历pte,来反复的drain && invalidate各个user当前的dcache. |
评分
-
查看全部评分
|