浅析计算机操作系统 之 进程线程

1 冯诺依曼体系结构

硬件组成:冯诺依曼体系结构 / 普林斯顿体系结构

在这里插入图片描述

  • 输入单元:包括键盘,鼠标,扫描仪,写板等
  • 存储器:内存,磁盘
  • 中央处理器(CPU):含有运算器控制器
  • 输出单元:显示器,打印机等

冯诺依曼还提出一个二进制的概念,所有程序最后都会转变成二进制来进行运算。

java程序运行过程:.java源文件----》.class字节码文件-----》机器码(OS)二进制,从而让cpu内核识别

内存 vs 硬盘:

  1. 内存的读写速度要远远大于磁盘,内存读写速度是纳秒级别(10的-9次方),硬盘读写速度是微妙级别(10的-3次方)
  2. 内存的价格远大于硬盘
  3. 内存中的数据不能持久化(当电脑重启之后,数据就没了),而磁盘的数据可以持久化

注意:CPU和输入设备或输出设备之间不能直接进行交互,必须依靠中间的存储部分(内存)

总结:所有设备都只能和内存打交道

2 操作系统(Operator System)

2.1 概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

  1. 内核(进程管理,内存管理,文件管理,驱动管理)
  2. 其他程序(例如函数库,shell程序等等)

2.2 OS定位

在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件

  • 与硬件交互,管理所有的软硬件资源(对内且对下)
  • 为用户程序(应用程序)提供一个良好的执行环境(对外且对上)
    在这里插入图片描述

3 进程

对于操作系统来说,一个任务就是一个进程(Process),也可以说一个应用就是一个进程
在这里插入图片描述

3.1 PID

在这里插入图片描述
.exe为可执行文件
但是 可执行文件(.exe) ≠ 进程

PID是进程的身份ID,每次启动进程时PID都不一样。

进程的本质:一个链表组成的多个PCB(进程管理模块),当我们每次运行一个可执行文件的时候,相当于在内核中,把.exe文件转换成了PCB结构体
在这里插入图片描述
PCB(进程管理模块)结构体内容:

  1. PID(主键ID、身份标识)
  2. 状态信息(就绪、运行、阻塞、终止)
  3. 优先级
  4. 记账信息(防止CPU资源分配不均)
  5. 一组指针(需要使用的资源)
  6. 上下文(当分配到CPU资源时,然后没有CPU资源之后,暂时保存自己当前的状态,等待下一次执行,这个过程就叫做一个上下文)

3.2 时间片

操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务
执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。

任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来

这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切
换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发

3.3 并发并行

CPU有很多个核心,是每个任务占一个CPU核心吗?

不是的,当我们打开很多个任务,数量超过CPU核心数时,我们会发现并没有受到什么影响,说明一个任务占一个CPU核心时错误的。

  • 从表面上看,我们打开这个应用,这个应用是一直在执行的
  • 但是从深层看,事实上是每个CPU核心会以很快的速度来回切换它所执行的应用,所以我们感觉它是在一直执行的,但实际上是操作系统会自动把很多任务轮流调度到每个核心上执行

并发并行概念

  • 并发:多个进程在一个CPU下采用时间片轮转的方式,在一段时间之内,让多个进程都得以推进, 称之为并发(只有一个资源,轮流执行就叫并发运行)
  • 并行:多个进程在多个CPU下分别,同时进行运行,这称之为并行(所有的应用一起运行,就叫并行运行)

并发与并行类似于工厂中的流水线,要扩大产量,1是考虑建造多个工厂,这就是并行,2是考虑每个工厂中新增流水线,这就类似并发

调度器
CPU进行系统调度需要依赖调度器执行,调度器的执行需要依赖进程的状态

3.4 内核态与用户态

一般的操作系统(如Windows、Linux)对执行权限进行分级:用户态和内核态

  • 操作系统内核作为直接控制硬件设备的底层软件,权限最高,称为内核态,或核心态。
  • 用户程序的权限最低,称为用户态

3.5 进程上下文

上下文简单说来就是一个环境,进程在时间片轮转切换时,由于每个进程运行环境不同,就涉及到转换前后的上下文环境的切换

  • 就是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈上的内容。
  • 切换时需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能 够恢复切换时的状态,继续执行

3.6 进程状态

在这里插入图片描述

  • 就绪:进程处于可运行的状态,只是CPU时间片还没有轮转到该进程,则该进程处于就绪状态。
  • 运行:进程处于可运行的状态,且CPU时间片轮转到该进程,该进程正在执行代码,则该进程处于运行 状态。
  • 阻塞:进程不具备运行条件,正在等待某个事件的完成

4 线程

4.1 概念

线程(Thread)是操作系统能够进行运算调度的最小单位,他被包含在进程之中,是进程中的实际运作单位。一条线程是指进程中的一个单一顺序的控制流,一个进程中可以并发多个线程,每条进程并行执行不同的任务,在 Unix System V 及 SunOS 中也被称为轻量进程,但轻量进程更多指内核进程,而把用户线程称为线程。

4.2 线程分类

  • 单线程进程
  • 单进程多线程
  • 多个单线程进程
  • 多个多线程进程

在这里插入图片描述

4.3共享资源

线程间可以共享的资源:

  1. 打开的文件
  2. 内存(对象)

线程间不可共享的资源:

  1. 线程的上下文,状态,优先级,记账信息不共享
  2. 每个线程有一个栈空间不共享

4.4 要点总结

  • 进程是系统分配资源的最小单位
  • 线程是系统调度的最小单位
  • 一个进程内的线程之间是可以共享资源的,进程之间不行
  • 每个进程至少有一个线程存在,即主线程

5 线程 vs 进程

进程比喻成工厂,线程就是工厂中若干个流水线,他们之间的关系为:

  1. 进程是包含线程的
  2. 一个进程中可以包含多个线程
  3. 每个线程都是一个独立的执行流
  4. 同一个进程中的多个线程是共享的一些资源
  5. 一个进程中至少包含一个线程
  6. 线程是依赖进程存在的

注意事项:
一个进程中线程是不是越多越好?

同一时间可以运行线程的 cpu 是固定的,如果超过了最大值,其他的只能排队处理,这样就起不到太多的作用了,并且线程的调度也需要消耗时间,因此并不是线程越多越好。

线程数量和两个因素有关系:

  1. cpu的数量
  2. 任务的类型,计算密集型任务 / IO 密集型任务,如果是密集型任务线程数量约等于 CPU 数量,如果是 IO 密集型任务,原则上是线程数量越多越好
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值