进程和线程

一、进程

1)进程是具有一定独立功能的程序在一个数据集合上的一次动态执行的过程

2)进程包含了正在运行的一个程序的所有状态信息
代码、数据、状态寄存器、通用寄存器、进程占用的资源(打开文件、已分配的内存)

3)进程的特性
动态性、并发性、独立性、制约性(访问共享内存/资源或进程间同步而产生制约)

1.进程与程序之间的联系

1)进程是操作系统处于执行状态程序的抽象
程序=文件(静态可执行文件)
进程=程序+执行状态
2)同一个程序的多次执行过程对应为不同的进程

2.进程与程序之间的区别

1)进程是动态的,程序是静态的
程序是有序代码的集合
进程是程序的执行,进程有用户态、内核态
2)进程是暂时的,程序是永久的
进程是一个有状态变化的过程
程序可长久保存
3)进程包括程序、数据和进程控制块

二、进程控制块(PCB)

操作系统用PCB来描述进程的基本情况和运行状态的变化过程,PCB是进程的唯一标识(每个进程在操作系统中有一个对应的PCB)

进程控制块的内容
①进程标志信息
②处理机现场保存
③进程控制信息:调度和状态信息、进程间通信信息、存储管理信息、进程所用资源、有关数据结构的连接情况(进程队列)

三、进程状态

1.进程的生命周期

1)进程创建
系统初始化时
用户请求创建一个新进程
正在运行的进程执行了创建进程的系统调用

2)进程执行
内核选择一个就绪的进程,让它占用处理器并执行

3)进程等待(阻塞):由进程内部原因导致
请求并等待系统服务,无法马上完成
启动某种操作,无法马上完成
需要的数据没有到达

4)进程抢占
高优先级进程就绪
进程执行当前时间片用完

5)进程唤醒:进程只能被别的进程或操作系统唤醒
被阻塞进程需要的资源可以被满足
被阻塞进程等待的事件到达

6)进程结束
正常退出(自愿的)
错误推出(自愿的)
致命退出(强制性的)
被其他进程所杀(强制性的)

2.进程的三状态模型

这里写图片描述
1)NULL->创建:一个新进程被创建出来执行一个程序
2)创建->就绪:当进程创建完成并初始化后,进入就绪状态
3)就绪->运行:处于就绪状态的进程被进程调度程序选中后,就分配到处理机上运行
4)运行->结束:当进程表示已完成或出错,当前运行进程会由操作系统作结束处理
5)运行->就绪:处于运行状态的进程在运行过程中,由于分配给它的时间片用完而让出处理机
6)运行->等待:正在运行的进程请求某资源且必须等待时
7)等待->就绪:当进程要等待的某事件到来时,它从阻塞状态变到就绪状态

3.进程挂起

处于挂起的进程映像在磁盘上,目的是减少进程占用内存(虚拟存储)
等待挂起:进程在外存等待某事件的出现
就绪挂起:进程在外存(因为内存不够或优先级不够高),但只要进入内存即可运行
这里写图片描述
挂起:
1)等待->等待挂起
2)就绪->就绪挂起
3)运行->就绪挂起
4)等待挂起->就绪挂起

激活:
1)等待挂起->等待
2)就绪挂起->就绪

四、线程

线程是进程的一部分,描述指令流执行状态,它是进程中的指令执行流的最小单元,是CPU调度的最小单元。

1)线程的优点
一个进程中可以存在多个线程
各个线程之间可以并发执行
各个线程之间可以共享地址空间和文件等资源

2)线程的缺点(不重要):一个线程崩溃,会导致其所属进程的所有线程崩溃

1.进程与线程的比较

①线程 = 进程 - 共享资源
②进程是资源分配单位,线程时CPU调度单位
③进程拥有一个完整的资源平台,而线程只独享指令流的必要资源(堆栈、指令指针、CPU寄存器的现场保护)
④线程具有就绪、等待、运行三种基本状态和状态间的转换关系
⑤线程能减少并发执行的时间和空间开销:

  • 线程的创建和终止时间比进程短
  • 同一进程内线程切换时间比进程短
  • 同一进程内的各线程共享内存和文件资源,可以不通过内核进行通信

2.用户线程

由一组用户级的函数库来完成线程的管理
这里写图片描述
1)用户线程的特征
①不依赖于操作系统的内核
②在用户空间实现的线程机制(TCB由线程库函数维护)
③同一进程内的用户线程切换速度快(无需用户态/内核态的切换)
④允许每个进程拥有自己的调度算法

2)用户线程的不足
①线程发起系统调用而阻塞时,整个进程进入阻塞状态
②不支持基于线程的处理机抢占
③只能按进程分配时间片

3.内核线程

进程由内核通过系统调用实现的线程机制,由内核完成线程的创建、终止和管理
这里写图片描述
内核线程的特征
①由内核维护PCB和TCB
②线程执行系统调用而不影响进程内的其它线程
③线程的创建、终止和管理开销较大
④以线程为单位进行CPU时间分配(调度单位是线程)

说法一:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程进程一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行 说法二:进程线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序运行效率。 线程在执行过程中与进程还是有区别的。每个独立的线程一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程线程的重要区别。 说法三:多线程共存于应用程序中是现代操作系统中的基本特征和重要标志。用过UNIX操作系统的读者知道进程,在UNIX操作系统中,每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配,但进程线程有什么区别呢? 进程线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程线程的区别在于: 线程的划分尺度小于进程,使得多线程程序的并发性搞。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序运行效率。 线程在执行过程中与进程还是有区别的。每个独立的线程一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值