理解进程与线程

参考自《现代操作系统》,《操作系统的设计和实现》

转载请注明出处:http://blog.csdn.net/u012609067点击打开链接

1.在任何时间,一个CPU上只能运行一个进程,CPU由一个进程快速切换到另外一个进程,就能实现并发。在一秒种内,CPU可能运行多个进程,这样就给人产生了并行的错觉,这就是伪并行,多处理器系统才是真正的硬件并行。               

2.一个进程是一个程序对数据集的一次执行实例, 一个程序运行了两遍,则算作两个进程。一个可执行文件包含数据和代码段,当它被加载进内存时增加了从下向上增长的堆和从上向下增长的栈。           

3.当进程切换时,保存进程的上下文,等切换回来时,就恢复之前保存的进程的上下文,继续运行。

4. 为了实现进程模型,操作系统维护着一个进程表项,该表象包含了进程状态的重要信息,如一些寄存器等等。             

5.线程运行在进程的上下文中,一个进程至少有一个线程,线程是进程内的控制流。多个线程共享进程的地址空间,进程有自己独立的地址空间。创建一个线程比创建一个进程快10到100倍,所以线程比进程更快,资源开销小,线程在创建、删除、切换都比进程快速。

6.进程用某种方法把相关资源集中在一起,进程有存放数据,正文以及其他资源的地址空间,线程却只包含有一个程序计数器,寄存器,堆栈和状态。进程把资源集中到一起,而线程却是在CPU上被调度执行的实体,资源管理的单位是进程。

7.一个进程运行多个线程是对一台计算机运行多个进程的模拟,前一种情形下多线程共享同一个地址空间和其他资源,后一种情况多个进程共享的是物理内存,磁盘,打印机等,这样线程就具有进程的某些性质,所以有时也称线程为轻量级进程。

8.进程之间有独立性,线程之间是没有独立性的,线程们有完全一样的地址空间,共享一样的全局变量,线程之间没有保护。

9.每个线程都有自己的堆栈,因为每个线程都会调用不同的过程,从而有一个各自不同的执行历史,这就是为什么每个线程要有自己的堆栈。

10.对每个线程的信息包括程序计数器,寄存器值及状态,需要程序计数器是因为线程可以像进程一样被挂起和恢复运行,需要寄存器值是因为当线程被挂起时,它的寄存器值必须被保存下来,最后,线程像进程一样,可以处于运行,就绪,阻塞泰。

11.在有些系统,操作系统感知不到线程的存在,线程完全在用户空间进行管理。在另一些系统中,操作系统知道每个进程有多个线程,当一个线程阻塞时,操作系统会选择下一个运行的线程,这个线程可能来自同一个进程,也可能是其他进程。

12.放在用户空间管理的话切换速度比需要内核管理快得多,但是一个线程阻塞时,内核将阻塞整个进程,因为他不知道其他线程的存在。

13.在许多系统中,当堆栈溢出时,内核只是简单地提供更多的堆栈空间。当一个进程有多个线程时,它必须有多个堆栈。如果内核感知不到所以这些堆栈,发生堆栈故障时内核不能自动地将其扩展,最后,内核甚至意识不到内存故障跟堆栈增长有关。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值