计算机操作系统-进程篇

一、进程

进程(progress):是指计算机中已运行的程序。

每个进程都有自己的地址空间、内存、寄存器和堆栈等资源,它们与其他进程相互隔离,互不干扰。进程是操作系统中最基本的资源分配单位,也是操作系统中最重要的概念之一。

在操作系统中,进程是由操作系统内核创建和管理的。当一个程序被执行时,操作系统会为该程序创建一个新的进程,并分配相应的资源,包括内存、寄存器、文件句柄等。进程可以执行各种操作,包括读写文件、网络通信、计算等等。

每个进程都有一个唯一的进程标识符(PID),用于区分不同的进程。进程可以通过系统调用来创建子进程、等待子进程退出、发送信号等等。操作系统可以通过进程管理器来查看和管理当前正在运行的进程,包括启动、停止、暂停、恢复等等。

二、线程

线程(thread):操作系统内部机制在发展过程中对进程的有效细化,是操作系统分配处理器(CPU)时间的基本单元,它被包含在进程之中,是进程中的实际运作单位。

一个进程可以包含多个线程,它们共享进程的资源,包括内存、文件句柄、网络连接等等。每个线程都有自己的堆栈和寄存器,但是它们共享进程的代码段、数据段和打开的文件等资源。

与进程不同的是,线程是由进程内部创建和管理的。一个进程可以创建多个线程,并且这些线程可以并发执行,共享进程的资源。线程可以协作完成一项任务,也可以分别执行不同的任务。

线程有以下几个特点:

  1. 线程是进程的一部分,是进程中的执行单元。

  2. 线程可以共享进程的资源,包括内存、文件句柄、网络连接等等。

  3. 线程有自己的堆栈和寄存器,但是共享进程的代码段、数据段和打开的文件等资源。

  4. 线程可以并发执行,相互独立,但是它们共享进程的资源,需要通过同步机制来协调和控制访问。

  5. 线程的创建、切换和销毁都比进程快,因为线程共享进程的资源,不需要像进程那样进行资源分配和管理。

线程是操作系统中最基本的执行单元,也是实现并发编程的基础。线程可以提高程序的并发性和响应性,但是也需要注意线程安全和同步机制的问题。

三、并发与并行

并发(Concurrency):多个任务在同一时间段内交替执行的能力。在单个 CPU 上,多个任务通过时间分片技术交替执行,看起来好像是同时执行的。但实际上,每个任务都只能在 CPU 上独占一段时间,然后就要让出 CPU 给其他任务,等待下一次 CPU 分配。在多 CPU 系统中,多个任务可以在不同的 CPU 上并发执行,从而提高系统的处理能力。

并行(Parallelism):多个任务在同一时刻同时执行的能力。在多 CPU 系统中,多个任务可以在不同的 CPU 上并行执行,从而提高系统的处理能力。在单个 CPU 上,多个任务可以通过多线程技术并行执行,但这种并行执行方式受限于 CPU 的核心数和线程数。

总的来说,并发和并行都是提高计算机系统处理能力的重要手段,但它们的实现方式不同。并发是通过时间分片技术实现的,而并行是通过多 CPU 或多线程技术实现的。在实际应用中,我们需要根据具体的需求选择合适的并发和并行方案,以达到最优的性能和效率。

注:

任务(Task):计算机系统中一个独立的工作单元,可以是一个程序、一个进程、一个线程或者一个作业等。任务是计算机系统中最基本的执行单元,可以独立地执行一项工作,也可以与其他任务协同完成复杂的任务。

作业(Job):一组相关的任务,通常是由一个用户提交到计算机系统中,由计算机系统按照一定的顺序依次执行的一系列操作。作业通常由多个任务组成,这些任务之间可能存在依赖关系,需要按照一定的顺序执行

四、为什么要引入进程与线程

 最初的操作系统只有进程.

1、引入进程的目的

为了描述和实现多个程序的并发执行,以改善资源利用率并提高系统的吞吐量。

注:系统的吞吐量是指在单位时间内系统能够处理的请求数量或数据量。吞吐量是衡量系统性能的重要指标之一,通常用来评估系统的处理能力和效率。

进程是操作系统中资源分配的基本单位,每个进程都有独立的内存空间、文件句柄、网络连接等资源。但是,为了使程序能并发执行,系统必须进行一系列的操作

  • 创建进程
  • 撤销进程
  • 进程切换

进程是由操作系统进行调度和管理的,进程的切换需要保存和恢复进程的上下文信息,因此进程切换的开销比较大,所以系统中存在的进程数目不能太多,切换频率不能太频繁。这些因素都在制约着操作系统的并发性。

所以,就提出将进程的调度属性与资源申请属性分开,产生了现代的操作系统中的线程概念。

2、引入线程的目的

为了减少程序并发执行所付出的额外开销,使操作系统具有更好的并发性。进程作为资源的申请与拥有单位,线程作为调度的基本单位。

解释:创建进程就要申请必要的系统资源,而进程获取处理器资源(即CUP执行)就称为调度。

           系统资源:包括内存空间,I/O设备等。

同一进程中的多个线程之间的切换不会引起进程的切换,而一个进程的线程切换到另一个进程的线程时,会引起进程的切换。

五、进程的状态

进程一般有三种状态:执行,阻塞,就绪

执行:当一个进程正在占用CPU,进程在内存

就绪:进程可以运行,但是CPU被其他进程占用,导致不能立即运行,进程在内存

阻塞:进程在某个等待事件而不能继续执行,阻塞状态的进程通常组织成队列,进程在内存。

如果被细化,则分为五个状态:新建,执行,就绪,阻塞,终止。有时候,为了有效的利用处理器,有的操作系统采用了对换技术(swapping),将进程从内存换到磁盘中,进程的状态变为挂起。
进程挂起的主要原因:
1、 进程全部阻塞,处理机空闲
2、 系统负荷过重,内存紧张 
3、 操作系统的需要
4、 终端用户的请求
5、 父进程的需求

六、线程的状态

  1. 新建(New):当线程对象被创建时,它处于新建状态。

  2. 就绪(Ready):当线程已经准备好执行,但还没有得到 CPU 时间片时,它处于就绪状态。

  3. 运行(Running):当线程获得 CPU 时间片并正在执行时,它处于运行状态。

  4. 阻塞(Blocked):当线程因为某些原因(如等待 I/O 操作、等待某个资源等)而暂停执行时,它处于阻塞状态。

  5. 等待(Waiting):当线程因为某些原因(如等待某个条件满足、等待某个事件发生等)而暂停执行时,它处于等待状态。

  6. 终止(Terminated):当线程执行完毕或者因为某些因(如异常、错误等)而被终止时,它处于终止状态。

参考:

C++ 并发编程(从C++11到C++17)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值