进程和线程

这一篇作为介绍操作系统的第一篇博客,那么就从进程和线程这一不能忽略的重要主题开始吧

进程

进程的定义

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

进程的组成

  • 程序代码
  • 程序处理的数据
  • 程序计数器中的值,指示下一条将要运行的指令
  • 一组通用寄存器的当前值,堆和栈
  • 一组系统资源(如打开的文件)

总之,进程包含了正在运行的一个程序的所有状态信息

进程的特点

  • 动态性,可动态的创建、结束进程
  • 并发性,进程可以被独立调度并占用CPU运行,也就是说CPU可以从一个进程切换到另一个进程运行,虚存的页表记录了每个进程占用的内存资源,可以防止一个进程访问另一个进程的内存空间(保护措施之一,还有其他的措施)
  • 独立性,不同进程的工作互不影响
  • 制约性,因访问共享数据/资源或进程间同步而产生制约

进程控制结构

  • 描述进程的数据结构:进程控制块(Process Control Block,PCB)
  • OS为每一个进程维护一个PCB,用来保存与该进程有关的各种状态信息
  • PCB是OS管理控制进程运行所用的信息集合,OS用PCB来描述进程的基本情况以及运行变化的过程,PCB是进程存在的唯一标识

OS使用PCB管理和控制进程

  • 进程的创建(为该进程生成一个PCB)
  • 进程的终止(回收终止进程的PCB)
  • 进程的组织管理(通过对PCB的组织管理来实现)

PCB含有三大类信息

  • 进程标识信息,如本进程的标识,本进程的产生标识(父进程标识),用户标识
  • CPU状态信息保护区,保存进程的运行现场信息,如用户可见寄存器(用户程序可以使用的数据、地址等寄存器)、控制和状态寄存器(程序计数器PC,程序状态字PSW)和栈指针(过程调用/系统调用/中断处理和返回时需要用到它)
  • 进程控制信息,如调度和状态信息(用于操作系统调度进程并占用CPU执行)、进程间通信(为支持进程间的与通信相关的各种标识、信号、信件等)、存储管理信息(包含有指向本进程映像存储空间的数据结构)、进程所用资源(说明由进程打开、使用的系统资源,比如打开的文件等)和有关数据结构连接信息(进程可以连接到一个进程队列中,或连接到相关的其他进程的PCB)

PCB的组织方式

  • 链表,同一状态的进程其PCB成一链表,各个状态对应多个不同的链表(各状态的进程形成不同的链表:就绪链表、阻塞链表等)
  • 索引表,同一状态的进程归入一个index表(由index指向PCB),多个状态对应多个不同的索引表(各状态的进程形成不同的索引表:就绪索引表、阻塞索引表)
线程
  • 创建进程时,分配资源,建立PCB;撤销进程时,回收资源,撤销PCB;进程切换时,保存当前进程的状态,可以看出OS维护进程开销比较大,所以提出了比进程更小的能独立运行的基本单位线程(Thread),与进程一样线程也有其数据结构线程控制块(Thread Control Block,TCB)
  • 线程之间可以并发执行,同一进程的不同线程之间共享相同的地址空间(线程 = 进程 - 共享资源)
  • 一个线程崩溃,会导致其所属的进程的所有线程崩溃

线程是进程当中一条执行流程,可以从两个方面来重新理解进程

  • 从资源组合的角度,进程把一组相关的资源组合起来,构成了一个资源平台(环境),包括地址空间(代码段、数据段)、打开的文件等各种资源
  • 从运行的角度,代码在这个资源平台上的一条执行流程(线程)
进程和线程的区别和联系
  • 进程是资源分配的单位,线程是CPU调度的单位
  • 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈
  • 线程同样具有就绪、阻塞和执行三种基本状态,同样具有状态之间的转换关系
  • 线程能减少并发执行的时间和空间开销,线程的创建时间比进程短、线程的终止时间比进程短、同一进程内的线程切换时间比进程短、由于同一进程的各线程间共享内存和文件资源,可直接进行不通过内核的通信

如有侵权,请联系删除,如有错误,欢迎大家指正,谢谢

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux中的进程线程有以下几个区别: 1. 数据结构:在Linux中,线程是通过进程模拟出来的,没有真正意义上的线程数据结构。而在Windows中,操作系统线程创建了thread_struct数据结构,因此有真正意义上的线程。 2. 执行流:在Linux中,每个线程实体对应着操作系统下的一条执行流,通过PCB(task_struct)来模拟。而用户态下创建的线程是通过线程库(pthread_struct)来进行管理。 3. 标识作用:在Linux中,轻量级进程ID(tid)对不同的线程起标识作用,操作系统在进行调度时使用tid。而进程ID(pid)对不同的进程起标识作用。在只有一个线程进程中,tid的值等于pid的值。 4. 线程私有部分:线程私有部分包括运行时栈、一组寄存器/硬件上下文/任务状态段等。 5. 多线程提高效率:多线程能够提高效率的原因是多核和单核环境下的不同。在多核环境下,多线程可以将庞大的任务分成若干份,并交给不同的线程进行处理,同时执行不同步骤的代码,从而提高效率。而在单核环境下,多线程并发执行,使用线程切换来提高整体代码的运行效率。 6. 进程线程的区别:进程是程序运行的实例,是系统分配资源的基本单位,拥有独立的地址空间;线程进程中的一条执行流,是CPU调度的基本单位,共享同一地址空间。创建和撤销进程的开销大于线程,不同进程间不会互相影响,而一个线程挂掉可以将整个进程挂掉。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值