`
猪圈羊圈
  • 浏览: 38216 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

进程与线程状态

阅读更多
进程:
在五状态进程模型中,进程状态被分成下列五种状态。进程在运行过程中主要是在就绪、运行和阻塞三种状态间进行转换。创建状态和退出状态描述进程创建的过程和进程退出的过程。

1)运行状态(Running):进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。

2)就绪状态(Ready):进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排人低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。

3)阻塞状态(Blocked):当进程由于等待I/O操作或进程同步等条件而暂停运行时,它处于阻塞状态。

4)创建状态(New):进程正在创建过程中,还不能运行。操作系统在创建状态要进行的工作包括分配和建立进程控制块表项、建立资源表格(如打开文件表)并分配资源、加载程序并建立地址空间表等。

5)退出状态(Exit):进程已结束运行,回收除进程控制块之外的其他资源,并让其他进程从进程控制块中收集有关信息(如记帐和将退出代码传递给父进程)。

五状态进程模型中的状态转换主要包括下列几种。操作系统中多个进程的并发执行是通过调度与超时两种转换间的循环,或调度、等待事件和事件出现三种转换间的循环来描述的。

1)创建新进程:创建一个新进程,以运行一个程序。创建新进程的可能原因包括用户登录、操作系统创建以提供某项服务、批处理作业等。

2)收容(Admit,也称为提交):收容一个新进程,进入就绪状态。由于性能、内存等原因,系统会限制并发进程总数。

3)调度运行(Dispatch):从就绪进程表中选择一个进程,进入运行状态。

4)释放(Release):由于进程完成或失败而终止进程运行,进入结束状态。

为了简洁,状态变迁图中只画出了运行状态到退出状态间的释放转换;但实际上,还存在从就绪状态或阻塞状态到退出状态的释放转换。运行到结束的转换可分为正常退出(Exit)和异常退出(abort);其中异常退出是指进程执行超时、内存不够、非法指令或地址访问、I/0操作失败、被其他进程所终止等原因而退出。从就绪状态或阻塞状态到结束状态的释放转换可能是由于多种原因引发,如父进程可在任何时间终止子进程。

5)超时(Timeout):由于用完时间片或高优先级进程就绪等原因导致进程暂停运行

6)事件等待(Event Wait):进程要求的事件未出现而进入阻塞;可能的原因包括申请系统服务或资源、通信、I/O操作等。

7)事件出现(EventOccurs):进程等待的事件出现;如操作完成、申请成功等。


线程:
New Thread:新建一个线程往往是通过 new Thread(r) 这种方法。新建一个线程并不意味着该线程就能立即进入执行状态(即使是runnable状态也不一定是正在执行),而是对线程注册一些相关信息,并等待调用该线程实例的start方法来启动该线程进入runnable状态。

Runnable Thread:当对该线程的实例调用start方法后,该线程进入runnable状态,进入runnable状态的线程并不意味着一定就在执行中(不然就叫running thread了),它可能被阻塞或者正在执行。即使处于正在执行中的runnable thread,也不一定是持续着执行一直到结束,它很可能因为操作系统所分配的时间片到期而进入中断状态,而让其他获得时间片的线程执行,当其他的线程所占据的时间片到期后,将会根据所有等待执行的线程的优先级来确定哪个线程继续(或开始)执行,所以也未必是刚刚那个被抢占的线程恢复执行。

Blocked Thread:一个线程进入阻塞状态往往由下列原因构成:

一个线程由于并执行命令Thread.sleep(DELAYS),而进入睡眠状态。只有当设定的延时DELAYS到期后,该线程才能重新回到runnable状态。
一个线程在等待I/O操作的完成而进入阻塞状态。只有当相应的I/O操作完成之后,该线程才能回到runnable状态。
由于另一个线程目前处于锁定状态中,所以这个线程无法进入runnable状态而被阻塞。只有当那个处于锁定状态的线程让出了锁定权,那么这个线程(和其他的线程)才能进入runnable状态。(一旦一个线程被锁定,那么整个系统只能等待该线程执行完了之后才能执行别的线程。)
一个线程在等待某个条件的改变而进入阻塞状态。只有当另一个线程sign the condition may have changed之后,该线程会去检查这个条件是已改变,如果确实改变了,那么该线程才能进入runnable状态。
一个线程由于执行suspend方法而被挂起,所以进入阻塞状态。只有当该线程被执行resume方法后,才能回复runnable状态。suspend和resume方法已经逐渐不再使用。
Dead Thread:一个线程死掉的原因有下面两种:

该线程的run方法执行完,并顺利返回。
run方法被异常中断。  
特殊情况下可以使用stop方法来强制杀死线程,但一般不推荐。
     线程的四种状态又可划分为两种:是否属于alive状态。其中runnable和blocked状态是属于alive状态的,而new和dead是 不属于alive状态的,我们可以用isAlive()方法来检查该线程是否处于alive状态。我们无法检查该线程到底是处于runnable还是blocked状态,更区分不了是正处于runnable状态的线程是否正占据着时间片而正在执行中(不过前一章告诉我们可以检测是否处于中断状态!),同样也无法检查到底是处于new还是dead状态。
分享到:
评论

相关推荐

    进程与线程的生动形象理解

    ### 进程与线程的生动形象理解 #### 一、引言 进程与线程作为操作系统中的核心概念,对于理解和开发高效的软件至关重要。本文旨在通过一个生动的类比来帮助读者更好地理解进程与线程的基本概念及其差异,并进一步...

    进程和线程之间的关系

    对于初学者来说,理解进程与线程的关系至关重要,因为这有助于深入掌握操作系统的基本原理及应用。下面将详细阐述进程与线程之间的区别及其相互作用。 #### 一、进程的概念 进程是程序的一次执行过程,是系统进行...

    MFC的状态 模块状态、进程状态、线程状态。

    ### MFC的状态模块状态、进程状态、线程状态详解 #### 9.1 模块状态 MFC中的模块状态是指一个可执行程序或使用MFCDLL的动态链接库(DLL)的状态信息。例如,一个OLE控件可以视为一个模块。每个应用程序的模块都有...

    c++进程与线程

    总结,理解和掌握C++中的进程与线程是编写高性能、并发应用程序的关键。正确地利用它们可以提高程序的效率,但同时也需要关注同步和通信的细节,以避免潜在的问题。通过实践和学习,开发者能够更好地驾驭这个强大的...

    进程与线程的一个简单解释

    了解和掌握进程与线程的区别和交互机制,对于编写高效的多线程程序至关重要。通过互斥锁和信号量等同步工具,我们可以有效地控制线程的并发访问,确保程序的正确性和性能。在实际开发中,合理地使用进程和线程,结合...

    进程线程及死锁

    死锁是指两个或多个进程在竞争资源时,因彼此等待而造成的阻塞状态。在操作系统中,死锁是一个重要的问题,因为它可能会导致系统的崩溃。 在实验中,我们使用互斥锁来避免死锁的发生。互斥锁是指一种机制,它可以...

    windows的进程与线程

    ### Windows的进程与线程详解 #### Windows体系结构与基本概念 Windows操作系统作为一个高度复杂的软件系统,其设计架构和核心组件对于理解进程与线程的行为至关重要。根据《操作系统原理实验》中的内容,我们可以...

    进程与线程--小练习

    在计算机科学领域,进程与线程是操作系统中最基础且至关重要的概念。进程是程序执行时的一个实例,每个进程都有自己的独立内存空间,包括代码、数据、堆栈等资源。线程则是进程内的一个执行单元,它共享进程的内存...

    进程和线程详解

    进程和线程是计算机操作系统中的两个基本概念,对于任何软件开发者,尤其是系统级或服务器...通过阅读“进程和线程.doc”文档,可以进一步深入学习这两个主题的细节,包括它们的生命周期、调度策略、同步与通信方法等。

    \嵌入式linux开发教程之进程与线程--千锋培训

    嵌入式Linux开发教程深入探讨了进程与线程的概念及其在操作系统中的实现,这对于理解和开发高效、并发的嵌入式应用程序至关重要。以下是这些知识点的详细解释: **一、基础知识:线程和进程** 1. **进程**:是操作...

    操作系统实验报告——线程与进程同步

    操作系统实验报告——线程与进程同步,主要探讨了在Linux环境下如何实现进程和线程的同步,以解决经典的生产者-消费者问题。该实验旨在帮助学生掌握操作系统提供的同步机制,并深化对经典同步问题的理解。 实验内容...

    最清楚的进程线程,进程和线程对比

    线程基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但它可与同属一个进程的其他线程共享进程所拥有的全部资源。线程的存在使得操作系统可以同时调度同一进程中的多个...

    feiQhongzha进程与线程

    本文将深入探讨"feiQhongzha"这个场景下,进程与线程的应用。 首先,我们需要理解什么是进程。在操作系统中,进程是正在执行的一个程序实例,它拥有自己的内存空间,包括代码、数据和栈等。每个进程都有独立的资源...

    C#进程和线程资料集锦

    "C#进程和线程资料集锦"这一主题涵盖了进程与线程的基本概念、管理和同步技术,是C#开发者必备的知识库。 **进程与线程** 1. **进程**:进程是操作系统资源分配的基本单位,每个运行的应用程序都有一个独立的进程。...

    操作系统中的进程与线程

    进程是操作系统资源分配的基本单位,它拥有独立的内存空间,包括代码、数据、堆栈等资源,而线程则是执行调度的基本单位,线程共享同一进程的内存资源,但拥有各自的程序计数器、寄存器状态和栈。 **进程与线程的...

    进程&线程查看器2.0.rar_Process_c 查看进程_进程线程

    本文将深入探讨"进程&线程查看器2.0"这一工具,它允许用户直观地观察系统中的进程和线程状态,对理解系统运行机制有着重要的帮助。 1. **进程概念**:进程是操作系统中运行程序的实例,每个进程都有独立的内存空间...

    进程线程及堆栈关系的总结

    ### 进程线程及堆栈关系的总结 #### 一、进程与线程的概念及其关系 **进程**是具有一定独立功能的程序在一个特定数据集合上的运行活动,是系统进行资源分配和调度的一个独立单位。进程是操作系统进行管理和调度的...

Global site tag (gtag.js) - Google Analytics