操作系统基础(一)进程管理之进程、线程

一、进程

进程是计算机中已经运行程序的实体。程序本身只是指令的集合,进程才是程序的真正运行。用户下达运行程序的命令后,就会产生进程。同一个程序可以产生多个进程,以允许同时又多位用户运行同一程序,缺不会相互冲突。进程需要一些资源才能完成工作,如CPU使用时间、存储器、文件以及I/O设备,并且依序逐一进行,也就是任一时间内仅能运行一项进程。

进程有五种状态,前三种的进程的基本形态、

1) 运行状态(执行窗口):进程正在处理器上运行。在单一处理器的情况下,每一时刻最多只有一个进程处于运行状态。

2) 就绪状态:进程已经处于准备运行的状态,即进程获得了除处理器之外的一切所需要的资源,一旦得到处理器即可运行。

3) 堵塞状态:又称等待状态,进程正在等待某一时间而暂停运行,如等待某资源为可用(不包括处理器)或者等待输入\输出完成。即使处理器处于空闲状态,该进程也不能运行。

4)创建状态:进程正在被创建,尚未转到就绪状态

5)结束状态:进程正在从系统中消失。可能是进程正常结束或其他原因中断退出运行。

进程的三个基本状态是可以相互转换的。

具体讲:当一个就绪进程获得处理时机时,其状态由就绪变成执行

当一个运行进程被剥夺处理时机时,如用完系统分给他的时间片或者出现更高优先级别的其他进程,其状态由运行变为就绪

当一个运行进程因某一时间受阻时,如申请资源被占用、启动I/O传输未完成,其状态由执行变为阻塞

当所等待事件发生时,如申请资源、I/O传输完成,状态由堵塞变为就绪

二:进程和程序的区别

1)进程是一个动态的概念,是程序及数据在计算机上的一次运行活动。进程的实体是程序,离开程序的进程没有存在的意义。从静态角度讲,进程是由 程序、数据和进程控制块(PCB)三部分组成。而程序是一组有序的指令集合,是一种静态的概念。

2)进程是程序一次执行过程,是动态创建和消亡的,具有一定的生命周期,是暂时存在的;而程序则是一组代码的组合,是永久存在的,可以长期保存。

3)一个进程可以执行一个或几个程序,一个程序也可以构成多个进程。进程可以创建进程,而程序则不能形成新的程序
4)组成不同,进程的组成包括程序、数据和进程控制块

创建新进程时会创建新的地址空间:子进程是父进程的复制品,在fork之后子进程获得父进程的数据空间、堆和栈的复制品,而线程则使用当前的地址空间。

三、线程

线程,有时候被称为轻量级进程,是程序执行流的最小单元。一个标准的线程由 线程ID,当前指令指针(pc),寄存器集合和堆栈(stack)组成。

且线程是进程中的一个实体,是被系统独立调度和分配的基本单位,线程自己不拥有系统资源,只拥有一点运行中必不可少的资源,但是它可以与同属同一个进程的其他线程共享进程所拥有的资源。

线程共享的进程环境包括:进程代码段、进程的共有数据(如全局变量,利用这些共享的数据,线程很容易实现相互之间的通信)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID

线程拥有这么多的共性的同时还拥有自己的个性。有了这些个性,才能实现并发性。个性包括

1)线程ID:

每个线程都有自己的ID,这个ID在本进程中是位移的。进程用此来标识线程。

2)寄存器组的值

由于线程间是并发运行的,每个线程都有自己不同的运行线索,当从一个线程切换到另外一个线程上时,必须将原有线程的寄存器集合的状态保存,以便将来该线程在被重新切换时能得以恢复。

3)线程的堆栈(stack)

堆栈是保证线程独立运行所必须的。线程函数可以调用函数,而被调用函数中又可以层层嵌套的,所以线程必须拥有自己的堆栈,是的函数调用可以正常进行,不受其他线程的影响。在一个进程的线程共享堆区(heap)

4) 错误返回码

5)线程的信号屏蔽码

6)线程的优先级

一个线程可以创建和撤销另一个线程,同意进程中的多个线程之间可以并发运行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。

线程也有就绪、堵塞和运行三个基本状态。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

引入线程后,进程的内涵发生了改变,进程只作为除CPU以外系统资源的分配单元,线程则作为处理器的分配单元。

同一进程中,线程的切换不会引起进程的切换,但是从一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。

四、线程和进程的区别

1)调度:在传统操作系统中,拥有资源和独立调度的基本单位都是进程。进入线程后,线程是独立调度的基本单位,进程是拥有资源的基本单位。在同一进程中,线程的切换不会引起进程的切换。在不同的进程中进行线程切换,则会引起线程切换。

2)拥有资源。不是是传统还是引入线程的操作系统,进程都是拥有资源的基本单位,线程不拥有资源(也有一点必不可少的资源),但是线程可以共享其属于进程的系统资源;

3)并发性:在引入线程的操作系统中,不仅进程可以并发执行,线程也可以并发执行,而且同一进程内的多个线也可以并发执行,使操作系统具有更好的并发性,大大提高了系统吞吐量;

4)系统开销:创建和撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等,因此系统所付出的开销远大于创建或撤销进程的开县。类似的是,在进程切换时,涉及当前执行进程CPU环境的保存以及新调度的进程CPU环境的设置;而线程切换时只需保存和设置少量寄存器内容,因此开销很小。另外,同一进程内的多个线程共享进程的地址空间,因此这些线程之间的同步与通信比较容易实现,甚至无需系统的干预。

5)地址空间和其他资源:进程的地址空间相互独立,同一进程的各线程间共享进程的资源,某进程内的线程对其他进程不可见

6)通信方面:进程间的通信需要借助操作系统,而线程间可以之间读/写进程数据段(如程序变量)来进行通信

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值