二、进程与线程

2.1  进程

     现代计算机会在同一时间做许多事,需要一些方法控制这些并发的事情。在某一瞬间,CPU只能运行一个进程,但是在较短时间内可以运行多个进程,被称为伪并行。而多处理器系统能够实现真正的硬件并行。

     一个进程就是一个正在执行的程序的实例,包括程序计数器、寄存器和变量的当前值。实际只有一个物理程序计数器,但每个进程都有自己的逻辑进程计数器。

     主要导致进程创建的事件:

  1. 系统初始化
  2. 正在运行的进程调用进程创建系统调用
  3. 用户请求创建
  4. 批处理作业的初始化

     主要终止条件:

  1.  正常退出
  2.  出错退出
  3.  严重错误
  4. 被其他进程杀死       

     进程的状态

  1. 运行态(实际占用CPU)
  2. 就绪态(可运行,但有其他进程正在运行)
  3. 阻塞态(等待某种外部事件发生)

     三种状态间有四种可能地转换关系。

2.1.1 进程的实现

     操作系统维护着一张进程表,每个进程占用一个表项,包括寄存器、程序计数器、堆栈指针、内存分配状况、所打开的文件状态、账号、调度信息、有运行态装换到就绪态或阻塞态所必须的信息(这些信息保证该进程随后能再次启动,并像从未被中断过一样)等。

多道程序设计的CPU利用率技术

2.2 线程

线程中有程序计数器(记录接着要执行哪一条指令)、寄存器(保存当前的工作变量)、堆栈(记录执行历史,已调用还没有返回的过程)

进程用于把资源集中到一起,而线程则是在CPU中被调度执行的实体。所有线程都有完全一样的地址空间,共享同样的全局变量,读写甚至清除另一个线程的堆栈。每个线程自己的内容:程序计数器、寄存器、堆栈、状态。

2.2.1 线程的实现

1.用户空间

把线程包放在用户空间中,内核对线程包一无所知。这种方法的好处:可以在不支持线程的操作系统上实现;线程切换速度比内核实现要快;允许每个进程有自己的线程调度算法。

在用户空间管理线程时,每个经常需要有专用的线程表用来跟踪该进程中的线程,类似进程表,不过仅记录线程的程序计数器、堆栈指针、寄存器和状态等。

缺点:阻塞系统难以实现;页面故障问题;线程永久运行问题(一个单独的进程内部没有时钟中断)

2.内核

内核中有用来记录系统中所有线程的线程表(进程表仍然存在),系统调用通过对线程表的更新完成创建或撤销线程的工作。内核线程不需要任何新的、非阻塞系统调用,也可以解决页面故障问题。

3.混合实现

内核只识别内核级线程,并对其进行调用。其中一些内核级线程会被多个用户级线程多路复用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值