现在的位置: 首页 > 综合 > 正文

OS–进程

2013年10月08日 ⁄ 综合 ⁄ 共 920字 ⁄ 字号 评论关闭

1. 进程

windows下进程开销极大。

而linux下相当轻量,特别是fork的子进程,句柄,代码段是共享的,数据段是copy-on-write的,开销都极小

2. 线程

资源可以共享,但是出错会影响整个进程,系统不清晰,相对难调试。

在linux下,有两种线程,一种是非内核态的,即用户态通过代码模拟多执行流,开销小,但是对smp支持差。一种内核态,一般一个线程底下对应一个轻量级进程。

比较两者的开销,线程主要是资源共享和通信更方便点。在windows下多进程性能会差很多;而linux下进程相对线程几乎就是增加页表切换那么点时间,这么点时间对线程或者进程要处理的事情实在太小了几乎可以忽略。

3. 内核态分时复用(UNIX/LINUX)

a. 内核线程

b. 硬中断(两段性,top halfs快速标志和结束,bottom halfs处理超时)

c. 软中断 (主要网络收包引起中断/net_rx_action),多处理器

d. tasklets  (一个tasklet只能在跑一次[需要多次自己schedule一下],而且只能在一个处理器上执行完,多个在多个处理器。。。),引入主要是为了替换bottom halfs

e. bottom halfs(看#b),一个bottom half也只在一个cpu上,多个可以多CPU同时执行

NOTE:

yield,sleep等在处理忙等时调用一下,放弃时间片让其他执行体获得机会运行。spin_lock是忙等,单线程只能吃满一个CPU,所以多CPU下即使碰到这种情况下,其他任务还是有机会被调用,影响不是太大。

4. 其他平台的扩展

它们与执行体的映射关系都是m/n。跟linux中的纤程类似。

A. 协程

用户端控制并发,SMP支持良好。

B. 应用程序域

.net中引入的概念,对资源封装好,出现错误不会影响其他应用程序域,对外的表现行为跟进程没有两样。

C. Task

Android中引入的概念。对外表现跟一个进程差不多。其实它是可以配置是跟某某处于同一进程,这样它们间的通讯就无需经过binder之流(参见OS-进程通讯)来跨进程通讯。 手机端的线程或者进程对资源或者电源都是很大的消耗,android把这些全部接管了,以专业的平台来屏蔽这些细节。

......

抱歉!评论已关闭.