前一段时间面试,被问了一堆怪问题,其中一道问题就是要解释
中的Process(行程)和thread(执行绪)的区别,附带解释
Inter-process-communication
默认作答的作业系统指Android Linux,但是现在回头想来
在ARM设备中整个演变的蛮厉害的
我最初的回答是Linux中Process只是一个thread group,
group之间有独立Heap和memory map table。
一个Process没有办法访问另外一个Process的Heap,因为一个
Process中有效的Virtual address在另外一个Process是不同的
位置内存或者不存在。
以前Linux的DRM memory share机制,有个是用name的,
这是global都可以访问的。而现在最常用的Ion和将来的DMAHeap
都是基于dmabuf-fd的,在Linux中任何fd都是只存在current的
fd_table的,是每个行程一个表的。
不过Android作业系统早期我记得是可以在Userspace使用Page
的Address来访问内存的,好死不死,这家正好还有做类似的事情。
Androi要求的PIE功能也应该是有关联性的,但是我其实不太明白
他的作用。
而关于调度问题,Process是有context switch的成本的,而
我回答的是同一个group中的thread其实只相当于offset,
所以context switch成本很小。这边好像没有文本支持我的说法?
另外现在一个Process的threads可以run在不同的CPU core上了,
前面有否定的答案我不确定为什么,cache snooping这样的技术应该
可以解决Cross cores的coherence问题才对。
但是在MCU这样环境中用的RTOS又没有Process的概念的样子,都只有
平级的thread(task)。