进程和线程详解

目录

前言:

操作系统定位

并发

并行

并发

进程

描述

PCB

管理

内存管理

进程间通信

线程

小结


前言:

    当一个程序运行起来时,操作系统要为之分配一些资源,这样的运行起来的程序称之为一个进程。为了有效解决并发编程,多进程会对于系统的开销比较大,由之提出了多线程。

    进程包含线程,一个进程可有多个线程。多个线程是共享一块资源的,这样就可以大量减少系统的开销。

操作系统定位

    应用程序 --> 系统调用 --> 操作系统内核 --> 驱动程序 --> 硬件设备

    注意:系统调用会为应用程序提供api,操作系统的核心功能对上和对下进行管理。

并发

    由于cpu的资源有限,需要把多个进程进行合理的分配。让有限的资源可以执行多个进程。

并行

    微观上同一时刻,两个核心上的进程就是同时执行的。

并发

    微观上同一时刻,一个核心只能运行一个进程,但它对于进程间的切换是足够快的。

进程

    一个运行起来的程序称为一个进程,没运行起来就不算。每个进程都会对应一些资源,进程是重要的“系统资源”,由操作系统负责管理。以组织和描述的方式进行管理。

描述

    使用c语言中的结构体对进程的属性进行描述,每个这样的结构体称为“进程控制块”,简称:PCB。

PCB

1)pid

    进程的身份标识符,不同的进程有不同的pid(唯一的数字)。

2)内存指针

    指向了这个进程使用的内存空间。

3)文件描述符

    硬盘上的文件,等其他资源。

4)进程调度相关属性(这里写一些重要的属性)

   1. 进程的状态

       就绪状态,运行状态,阻塞状态(进程正在其他地方运行)

   2.优先级

       对进程划分优先级,先执行哪个再执行哪个。

   4.上下文

       操作系统再对进程进行切换的时候,记录进程的中间状态。下一次进程执行的时候就可以恢复原来的状态。中间状态的数据是存储在寄存器上的,例如函数的返回值。

   5.记账信息

       操作系统统计每个进程在cpu上占用的时间和执行指令的条数,根据这个来决定下个阶段该如何调度。

管理

    通过一个双向链表对进程管理起来,把每个进程的pcb通过双向链表连接起来(这里不是一个单纯的双向链表)

内存管理

    如果有一个进程对内存的使用越界了,刚好影响到了另一个进程的内存空间,那么就有可能导致两个进程都崩溃。所以提出了虚拟内存的方法。

    针对进程使用的内存空间,进行隔离。代码里也不在使用物理内存,而使用虚拟内存。由操作系统专门的硬件设备负责虚拟内存到物理内存的转换。

 注意:操作系统中硬件设备一旦发现进程1的内存越界,就会反馈一个错误,使其进程崩溃。这样就不会影响其他进程了。

进程间通信

    这样对进程隔离起来,但是进程间需要数据交互。实现的核心思想:对进程间提供一个公共可以访问的空间,基于这个公共空间实现数据交互。

    这里列举一些主流操作系统提供的进程间通信机制:管理,共享内存,文件,网络,信号量,信号。

线程

    进程对于系统资源的开销比较大,因此提出了多线程,共用一个进程的资源。

    一个进程包含多个线程,多线程对一个进程间的资源进行共享(内存,文件描述符表等),这样就节省了资源,但是会引发线程安全问题。

    线程安全,多个线程争取同一块资源,一个进程间某个线程抛异常可能导致整个进程的崩溃。

注意:

   1)每个线程都对应不同的pcb,当pcb被cpu调度时,这个线程就启动了。

   2)操作系统调度时,是以线程为单位的。

   3)一个进程里面的线程,pid,内存指针,文件描述符表都是相同的。

   4)线程之间是同时进行的,我们看起来貌似没有规则。其实在操作系统内核中,是有一定的规律(取决于操作系统调度器策略的实现)。

   5)进程专门负责资源分配,线程接管和调度一切相关内容。

小结:

    这块的内容我们需要理解,这样会加深我们对其的记忆。

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小太空人w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值