操作系统之进程和线程(一)

本文详细解释了操作系统中的核心概念——进程与线程。进程是正在运行程序的抽象,而线程则是进程内的单一顺序控制流程。文章还探讨了进程与线程之间的区别,以及它们在不同操作系统中的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程

进程是操作系统中最核心的概念,是对正在运行程序的一个抽象。

在进程模型中,计算机上所有可运行的软件,通常也包括操纵系统,被组织成若干顺序进程,简称进程。而为了实现这进程模型,操作系统维护着一张表格(一个数据结构),即进程表。每个进程占用一个表项,该表项包含了进程的状态的重要信息,比如程序计数器,堆栈指针,内存分配状态,所打开文件的状态,账号和调度信息,以及其他进程运行态转换或阻塞态时必须保存的信息,从而保证该进程随后能再次启动,就像从未中断过一样

进程与程序的区别

例如:当你去做饭时,你拿着食谱,原料。此时,你根据手中的食谱做菜,每当执行下一步时,你都可能用到原料。

在这个例子中,你本人相当于计算机里的CPU,而食谱相当于程序,原料相当于数据,而完成这一切所组成的总和叫做进程。

进程中的层次结构

  • UNIX(及其他类似的系统)
    存在父子进程,子进程只有一个父进程,它们共同组成一个进程的层次结构

  • Windows
    没有进程层次的概念,所有进程都是地位相同的。唯一类似于进程的按时是在创建进程的时候,父进程会得到一个句柄,该句柄口语控制子进程。

进程的状态

每个进程都是一个独立的个体,存在三种状态:运行,就绪和阻塞。并且这三种状态都能够进行转换。

  • 运行态 – 该时刻进程时间占用CPU
  • 就绪态 – 可运行,单位其他进程正在运行而暂时停止
  • 阻塞态 – 除非某种外部事件发生,否则进程不能运行

进程中的状态转换

线程

线程也叫作“迷你进程”。

线程是程序中一个单一的顺序控制流程。在传统操作系统中,每个进程有一个地址空间和一个控制线程。不过,经常存在同一个地址空间中准并行运行多个控制线程的情况。

线程概念试图实现的是:共享一组资源的多个线程的执行能力,以便这些线程可以为完成某一任务而共同工作。

由于线程比进程更轻量级,所以它的创建比进程更容易,也更容易撤销。这也是需要多线程的理由之一。

线程模型

进程模型基于两种独立的概念:资源分组处理和执行

进程拥有一个执行的线程,通常简写为线程。在线程中有一个程序计数器,用来记录接着要执行哪一条指令。线程拥有寄存器,用来保存线程当前的工作变量。线程还拥有一个堆栈,用来记录执行历史,其中每一帧保存了一个已调用的但是还没有从中返回的过程。

多线程的伪并行

通过在多个进程之间来回切换,系统制造了不同的顺序进程并行运行的假象。多线程的工作方式也是类似的。CPU在线程之间的快速切换,制造了线程并行运行的假象。

进程中的不同线程不像不同进程之间那样存在很大的独立性。所有的线程都有完全一样的地址空间(进程间都有各自的地址空间),这意味着它们也共享同样的全局变量。并且线程之间是没有保护的。

线程实现

多数计算机有两种运行模式:内核态和用户态

内核态和用户态

因此实现线程包的两种主要方法:在用户空间中和在内核中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值