[操作系统] 进程与线程

进程与线程



1. 什么是进程:

进程的本质是正在执行的一个程序的实例,包括程序计数器,寄存器,和变量的当前值。与每个进程相关的是进程的地址空间。

在这个地址空间中,进程可以进行读写。该地址空间中存放有可执行程序、程序的数据以及程序的堆栈。与某个进程相关的还有资源集,通常包含寄存器(包含程序计数器和堆栈指针)打开文件的清单、突出的报警、有关进程清单,以及运行该程序所需要的所有其他信息。进程基本上是容纳运行一个程序所需要所有信息的容器。

为了实现并发,一个进程暂时被挂起后,在某个时刻里再次启动时,必须与暂停时的状态完全相同,这就意味着挂起时该进程的所有信息都要保存下来。在许多操作系统中,与一个进程有关的所有信息,除了该进程自身地址空间的内容以外,均存放在操作系统的一张表中,称为进程表。

进程表

所以一个进程包括:进程的地址空间,以及对应的进程表项。需要注意的是,如果一个程序运行了两遍。应该算作两个进程而不是一个。

2. 中断

为了支持进程交替进行,需要中断来实现。与每一个I/O类关联的是一个称作中断向量(interrupt vector)的位置,它包含中断服务程序的入口地址,假设当一个磁盘中断发时,用户进程3正在运行,则中断硬件将程序计数器,程序状态字,有时还有一个或多个寄存器压入堆栈,计算机随即跳转到中断向量所指示的地址。所有的中断都从保存寄存器开始。

3. 什么是线程

线程是进程中负责程序执行的最小执行单元。一个进程中至少有一个线程。传统操作系统中,每个进程有一个地址空间和一个控制线程。经常存在在同一个地址空间中准并行运行多个控制线程的情形,就像分离的进程。

为什么要设计线程?

  1. 在许多应用中同时发生着多种活动,其中某些活动随着时间的推移会被阻塞,通过将这些应用程序分解成可以准并行运行的多个顺序线程,程序设计模型会变得简单。同一个进程的线程共享进程的地址空间,和所有可用数据的能力。进程无法表达,因为它们具有不同的地址空间。(真正的并行有了实现的可能)
  2. 线程比进程更容易(更快)创建和撤销
  3. 多线程允许活动彼此重叠进行,对于存在大量计算和I/O处理的程序会提高执行速度。

4.进程模型基于两种独立的概念:

  1. 资源分组处理:用某种方法把相关的资源集中在一起。进程有存放程序正文和数据以及其他资源的地址空间。包括打开的文件、子进程、即将发生的报警,信号处理程序、账号信息等。
  2. 执行:进程拥有一个执行的线程。在线程中有一个程序计数器,用来记录接着要执行哪一条指令。线程拥有寄存器,用来保存线程当前的工作变量。还拥有一个堆栈,用来记录执行历史,其中每一帧保存了一个已调用的但是还没有从中返回的过程。

进程用于把资源集中在一起,而线程则是CPU上被调度执行的实体。线程试图实现的是,共享一组资源的多个现成的执行能力,以便这些线程可以为完成某一任务而共同工作

5. 线程的独立性

尽管同一个进程中的线程共享一个地址空间,并且合作完成一个任务,但因为每个线程有不同的调用过程。所以需要自己的堆栈。每个线程的堆栈有一帧,供各个被调用但是还没有从中返回的过程使用,在该帧中存放了相应过程的局部变量以及过程调用完成之后使用的返回地址。
进程与线程各自内容

6. 线程可能引发的问题

  1. 无法利用时钟中断强制让出CPU,所以需要调用过程允许线程自动放CPU。
  2. 如果父进程有多个线程,子进程是否需要与父进程相应的线程?答案是肯定的。但如果父进程在read系统调用(比如键盘)上被阻塞了会怎么样?是父进程与子进程的两个线程都被阻塞?还是其中一个被阻塞?在键入一行输入后,两个线程得到输入副本。还是仅有一个进程得到。
  3. 如果一个线程关闭了某个文件,而另一个线程还在进行读操作怎么办?

参考书目:现代操作系统第三版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值