进程具有三种基本状态:
1、就绪状态。某些进程“万事俱备”(必要资源),只差CPU。(就绪队列)
2、执行状态。某进程占有CPU并在CPU上执行其程序。
3、阻塞状态。某些进程由于某种原因不能继续运行下去,等待处 理问题。也称为等待状态或封锁状态。如:请求I/O。(多个等待队列)
三种状态互相切换的原因:
运行--->就绪:1. 时间片用完了
2.被更高优先级的进程抢占,被迫让出CPU
就绪--->阻塞:不可能发生,因为就绪根本就没运行就谈不上阻塞 。
阻塞--->运行:不可能发生,运行的时候先要就绪才行,不能跨状态。
就绪--->运行:CPU本该执行的时间片跑完了,就转到就绪态的进程里面找合适的运行(给CPU)
运行--->阻塞:发生了等待事件。比如I/O请求。
阻塞--->就绪:所等待的事情已经发生,先进入就绪态。
为什么会有线程?
每个进程都有自己的地址空间,即进程空间,在网络或多用户换机下,一个服务器通常需要接收大量不确定数量用户的并发请求,为每一个请求都创建一个进程显然行不通(系统开销大响应用户请求效率低),因此操作系统中线程概念被引进。
线程的执行过程是线性的,尽管中间会发生中断或者暂停,但是进程所拥有的资源只为改线状执行过程服务,一旦发生线程切换,这些资源需要被保护起来。
进程分为单线程进程和多线程进程,单线程进程宏观来看也是线性执行过程,微观上只有单一的执行过程。多线程进程宏观是线性的,微观上多个执行操作。
线程的改变只代表CPU的执行过程的改变,而没有发生进程所拥有的资源的变化。
进程线程的区别:
(1)地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
(2)资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
(3)一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
(4)进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
(5)执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
(6)线程是处理器调度的基本单位,但是进程不是。
(7)两者均可并发执行。
标签:就绪,---,线程,进程,执行,CPU From: https://www.cnblogs.com/Relliu/p/17220090.html