当前位置:网站首页>进程和线程

进程和线程

2022-08-10 23:22:00 nike_m

1、进程

进程是程序关于某数据集合上的一次运行活动,是正在运行程序的实例。
是系统进行资源分配和调度的基本单位,在操作系统中进程既是基本的分配单元,也是基本的执行单元。

进程是一个实体、每一个进程都有它自己的地址空间

进程文本区域(text region):存储处理器执行的代码。
数据区域(data region):存储变量和进程执行期间使用的动态分配的内存。
堆栈区域(stack region):存储着活动过程调用的指令和本地变量。

进程是一个执行中的程序

程序是一个没有生命的实体,只有操作系统执行时,它才能成为一个活动的实体,我们称其为进程。
进程的目的
是为了描述和控制程序的并发执行,实现操作系统的并发性和共享性。
进程控制块PCB
使参与并发执行的程序(含数据)能独立地运行必须配有一个的数据结构
进程控制块(Process Control Block, PCB),PCB是进程存在的唯一标志!它保存了进程的状态信息。
PCB = PID + 系统用户进程 + Pstatus + priority + 通信 + 资源…
特征:
动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

进程状态

进程的生命周期划分为五个状态:分别是:新建—> 就绪----> 运行—> 阻塞—> 退出
七状态模型的话增加:就绪挂起,阻塞挂起
挂起是指一个进程被交换到磁盘中,就进入到挂起状态。
其中:运行态,阻塞态,就绪态是三个基本状态。
新建:OS执行程序的需要或者用户或进程要求创建一个新的进程。
进程创建的函数

#include <sys/types.h>
#include <unistd.h>
 // 当返回 0 时 代表的是子进程 , 当返回 >0 时代表的是父进程
pid_t fork(void);

就绪态:进程在内存中可以执行,正在排队等待调度的状态。
运行态:进程正在被处理器执行的状态。
阻塞态(等待态 Waiting):进程在
内存
中并等待一个事件。
阻塞挂起:进程在外存中并等待一个事件。
就绪挂起:进程在外存中,但是只要被载入内存就可以被调度执行。
退出:退出 != 进程被OS删除的状态。,退出仅意味着进程不再被执行,但是与进程相关的表及其信息仍然在OS中。一旦辅助程序或支持程序提取了所需要的信息后,OS 会删除。

区分就绪和等待
就绪状态是指进程仅缺少处理机,只要获得处理机资源就立即执行;
而等待状态是指进程需要其他资源(除了处理机)或等待某一事件。
进程的状态

进程控制

特点是执行期间不允许中断,它是一个不可分割的基本单位。

进程切换与处理机模式切换
模式切换时,处理机逻辑上可能还在同一进程中运行。
切换进程,当前运行进程改变了,则当前进程的环境信息也需要改变。
进程切换的时期:异常发生时期。1、中断异常(外部部件) 2、陷阱异常(当前进程主动发起的同步异常) 3、故障和致命故障异常
过程调用与系统调用的区别:(控制流由主程序转向子过程)

进程调度策略

进程调度:长程调度(创建进程时,将新建的进程添加到哪一个活跃或挂起的进程集合中),中程调度(内存管理的一部分,决定是否把一部分或全部进程的虚拟地址空间换入到内存,或从内存换入到磁盘),短程调度(处理器分派给哪一个进程,选择哪一个进程去执行)

短程调度策略
FCFS、轮转、SPN、SRT、HRRN、反馈。

决策模式
抢占式和非抢占式。

2、线程(Thread)

线程的定义

CPU的基本单位,程序执行流的最小单元。环境资源的抽象,程序执行流的抽象。是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程。同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等

线程的别名:执行绪;轻量进程
守护线程是特殊的线程,一般用于在后台为其他线程提供服务.
java中最少两个守护线程:main、gc

线程特点

轻型实体

独立调度和分派的基本单位

可并发执行

共享进程资源

3、区别

多进程:OS下可以同时运行的多个程序,win10 运行QQ.exe、WeChat.exe、idea.exe
多线程:同一个进程下运行的多个任务,idea.exe 中开启多线程(Thread、RUnnable、Callable)

多线程下载软件,可以同时运行多个线程,但是通过程序运行的结果发现,每一次结果都不一致。 因为多线程存在一个特性:随机性。造成的原因:CPU在瞬间不断切换去处理各个线程而导致的,可以理解成多个线程在抢CPU资源。
多线程并不能提高运行速度,但可以提高运行效率,让CPU的使用率更高。多线程出现安全问题或频繁的上下文切换时,运算速度可能反而更低。

原网站

版权声明
本文为[nike_m]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_46724069/article/details/120941812