文章目录
- 一、什么是程序、进程和线程?
- 二、进程的状态
- 三、进程调度
- 四、进程间通信
前言
本文主要介绍程序、进程和线程的基本概念和进程的一些相关知识。
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是程序、进程和线程?
程序(Program)是由程序员编写的一组稳定的指令,保存咋爱硬盘上。
进程(Process)是运行中的程序,存在于内存(包括虚拟内存)中。
线程(Thread)是利用CPU的一个基本单位,也称轻量级进程。
程序是一个静态的被动实体,程序员编写(编译、链接生成可执行代码)完以后就保存在硬盘上,进程是一个动态的主动实体,运行某个程序(操作系统需要把程序调入内存)的时候才会产生进程,进程是与运行密切相关的。
进程是一个动态的主动实体,它具有生命周期,从创建、运行到终止。进程是操作系统进行资源分配和调度基本单位。每个进程都有自己的执行环境和资源,如内存空间、文件描述符等。进程之间可以通过各种方式通信和同步。
一个进程可以有多个线程,这些线程共享进程的资源,但有自己的栈和局部变量。线程之间的切换比进程之间的切换要快得多,因为它们共享相同的地址空间和资源。线程通常用于实现bing
二、进程的状态
由于进程是一个运行中的程序,因此它具有生存期,在生存期内一个进程可能处于多种状态中的一个,进程的状态一般由进程当前的活动而定义,每个进程可能处于以下几种状态之一。
1.新建(New),进程正被创建。
2.运行(Running),进程的指令正被执行(分配了CPU)。
3.等待(Waiting),进成正等待某些事件的发生(如I/O的完成或一个信号量的接收)。 4. 就绪(Ready进程正等待备分配给处理器(万事具备只欠CPU)。
5.终止(Terminated),进程已经完成执行。
进程的状态及在各个状态之间的转换如图3.8所示,其中圆圈表示状态,箭头表示状态之间的转换,箭头所指方向为状态转换方向,箭头上的文字表示转换条件。一个进程在其生存期内,处于新建状态和终止状态各只有一次,而在其他状态可能会处于多次。当运行一个程序的时候(如在Windows系统中,用户双击某一个应用程序图标),操作系统会判断是否可以运行,如果以则创建一个新进程并将其放入就绪队列;进程管理模块的调度器会依据调度规则在合适的时侯将该进程调度到CPU去执行;执行完毕进程终止;执行过程中,进程可能会被调度器暴多其CPU而重新放入就绪队列,也有可能需要等待I/O或某些事件而被放入等待队列,等到等待的I/O或时间到来以后重新被放入就绪队列,如此反复,直到进程终止。
三、进程调度
进程调度是操作系统中的一项重要任务,它负责决定何时以及如何将CPU分配给各个进程。在多任务环境中,多个进程可能同时请求使用CPU,而进程调度器则通过某种算法来确定哪个进程应该获得CPU的使用权。常见的调度算法包括先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)等。进程调度的目标通常包括提高系统效率、公平性以及响应时间等。
在一个典型的分时计算机中,通常有多个进程在时间片断中竞争(主要是竞争使用CPU),这些进程包括运行的应用程序和系统程序以及部分操作系统的程序,操作系统需要协调这些进程。例如确保每一个进程拥有其所需要的资源(CPU、主存储器空间、I/O、数据访问),独立的进程不能相互影响,需要交换数据的进程能正常的通信。这都需要操作系统完成进程的调度。
当进程进入系统后,他们被送入一个作业队列(Job Queue),该队列由系统中的所有进程组成。操作系统还有其他的一些队列,如那些驻留在主内存准备等待执行的进程保存在一个称为就绪队列(Ready Queue)的列表中,而那些等待某一个特定TO设备的进程保存在一个杯为谈制(Device Queue)的列表中。一个新创建的进程最初被放在就绪队列中,它在就绪队列中等直到被选择执行。一旦一个进程分配了CPU而执行,可能发生以下几个事件之一。
四、进程间通信
进程间通信(Interprocess communication,IPC)是指在操作系统中,两个或多个进程之间交换数据和信息的过程。以下是一些常见的进程间通信方式:
1. 管道(Pipe):
- 普通管道:只能单向传输,且只能在父子或兄弟进程间使用。
- 流管道:可以双向传输,但仍受一定限制。
- 命名管道:可以在不相关的进程之间进行通信,通过文件系统路径名引用。
2. 共享内存(Shared Memory):
- 多个进程可以访问同一块物理内存区域,是最快的进程间通信方式,因为数据不需要复制到另一个进程的地址空间中。
3. 信号(Signals):
- 进程之间唯一的异步通信机制,主要用于通知进程某个事件已经发生。
4. 信号量(Semaphores):
- 用于保护共享资源,实现同步操作和互斥操作,防止多个进程同时访问共享资源导致的错误。
5. 消息队列(Message Queues):
- 允许进程以有序的方式传递数据,并且可以实现多个进程之间的通信。
6. 套接字(Sockets):
- 不仅可以用于本地进程间的通信,还可以用于不同主机之间的进程通信。
每种进程间通信方式都有其优点和局限性,具体选择哪种方式取决于应用程序的实际需求。例如,对于需要高速通信的场景,共享内存可能是最佳选择;而对于需要异步通知的场景,信号则更为合适。
请注意,在使用进程间通信时,需要确保通信的双方都能够正确地处理和解析传递的数据,以避免通信错误或数据不一致的问题。同时,也需要考虑通信的安全性,防止未经授权的进程访问或篡改通信数据。
总结
进程、线程和程序是计算机科学中非常重要的概念,它们各自扮演着不同的角色,共同构成了计算机系统的运行机制。
标签:队列,程序,调度,间通信,线程,进程,CPU From: https://blog.csdn.net/zk124_/article/details/144000010