当前位置:主页 > 查看内容

并发编程基础:计算机组成原理及操作系统相关基础知识总结

发布时间:2021-08-06 00:00| 位朋友查看

简介:大部分教程知识点记录于慕课网的视频教程。 计算机组成原理基本知识 一CUP Core 核心既CPU的内核cpu中间的核心芯片单晶硅制成。cpu可分为单核和多核cpu。 每一个核都是独立的运算单元可以完成独立的计算接收指令处理数据等。 单核cup cpu只有一个用来处理数……

大部分教程知识点记录于慕课网的视频教程。

计算机组成原理基本知识:

一:CUP

  • Core:核心,既CPU的内核,cpu中间的核心芯片,单晶硅制成。cpu可分为单核和多核cpu。 每一个核都是独立的运算单元,可以完成独立的计算,接收指令,处理数据等。
  • 单核cup: cpu只有一个用来处理数据的核心。
  • 多核cpu:cpu中有多个进行处理数据的核心。另外,cpu核数和性能的关系是呈 线性增长的
  • 赫兹(HZ):代表cpu的频率。cpu是以高低电平的转换来工作的,听过一个频率的概念,来表示cpu的性能。例如 2GHZ表示,每秒进行高低电平切换20亿次
  • 目标:要学会充分理解和利用cpu的多核性能,需要懂得怎样去使用,什么样的场景下去使用,怎么样去利用cpu性能。
  • (1)CPU的功能
  • 控制程序的顺序运行,程序实际上就是串行的一系列有序的指令。
  • 产生完成每一条指令所需的控制指令。(译码器)
  • 对各种操作加以时间上的控制。(时序发生器)
  • 对数据进行逻辑运算和逻辑加工。(运算器)

(1)cpu内核的主要组成

控制器:协调和控制计算机运行。
  • 程序计数器:主要用来存储下一套指令的运算地址。cpu运行时,就是不断在程序计数器中取出指令,并执行。
  • 时序发生器:主要负责发出信号的脉冲,产生频率稳定的电信号,每个步骤都有时间的限制,时间的限制就是通过电信号的频率来进行控制的。
  • 指令译码器:负责把指令转换为相关的电信号的译码器件。
  • 其他各种寄存器:暂时的存储一些数据。
(2)运算器:数据的运算加工。
  • 数据缓冲器:包括数据输入缓冲,输出缓冲,负责数据的暂时缓冲。
  • 通用寄存器:
  • ALU:负责计算的元器件。
  • 状态字寄存器等:负责进行计算状态的保存。
(2)高速缓存:
  • 处于存储器的部分,后面介绍。

二:存储器

(1)存储器的存次结构
  • 1.缓存: 上面提到的高速缓存等,速度最快,价格高。
  • 2.主存:主要存储, 内存条,即时存储,断电数据丢失。速度始终,价格适中。
  • 3.辅存:磁盘,SSD等。断点依然可以保存数据。速度低,价格低。
  • 出现层次性结构的原因:局部性原理。 是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。就是2-8定律,20的存储区域,将会占用CPU访问的80%的时间。
    在这里插入图片描述
  • 层次结构实现原理:在cpu与志村之间增加一层速度快(容量小的)Cache(缓存),解决主存速度不足的问题

操作系统基本知识

  • 一和二是 B站上的网课学习内容笔记。可以直接跳到三。

一: 相关基本概念

  • job(作业):是指,计算机用户在一次上机过程中眼球计算机系统为其所做工作的合集;作业中每项相对独立的工作称为:作业步
  • Thread(线程):程序的一次相对独立的运行过程(动态过程),是系统调度的最小单位。
  • 进程:是系统资源分配的最小单位,也就是说,进程是系统中拥有资源的最小实体。一个进程可以包括多个线程,线程被调度,使用进程的资源。
  • Virtual Memory(虚拟存储):是进程的逻辑地址空间把实际的内存空间进行虚拟扩大。 也就是把部分外存空间,(运用某种手段或算法)虚拟为内存使用,让用户感觉 内存空间变大了
  • File(文件):命名了的字节流(对一团字节流进行命名,就可以说这团字节流是你的一个文件)

二:相关系统

  • 单道批处理系统:外存上是一批作业在排队(批),内存上只有一个作业执行(单道)
    在这里插入图片描述
  • Monitor早期的在内存中的操作系统,来实现将一个作业从 外存调度到内存进行执行(通过算法,决定将那个作业调用到内存)。
  • 过渡(单到多道):浪费资源,当执行io等操作时,cpu只能等待io结束,才能接着执行,利用率低下。
  • 多道批处理
    在这里插入图片描述
  • 系统允许多个任务进入内存(1.就涉及到内存划分,多个任务如何进入到内存),在内存还是要排队(等cpu资源)
  • 总结: 外存中作业配对等待进入内存,多个任务进入内存,还要排队等待 cpu执行它。
(1)多道程序中遇到的问题:
  • 同步(协调)也叫进程同步:例如:计算进程a,打印进程b,打印进程b需要等计算进程a计算出来结果,通知b后,才能打印。

在这里插入图片描述

  • 互斥:比如打印机,只允许一个进程使用完了,才能另一个使用
  • 不确定性:不受环境配置影响,执行结果是确定的,不能是可变的。
  • 死锁:竞争资源,卡死。
(2)操作系统分层结构风格

在这里插入图片描述

  • 就像是计算机网络上面的 OSI7层结构。 每一层向上层提供服务,又隐藏自己,就好像直接是 网络层到网络层传输,忽视下层。 操作系统,我们在操作系统的平台开发,也是使用操作系统的提供接口,但不在乎这些接口,只管自己这层对软件的开发,下层是透明的。
  • Liunx:是一个分块的操作系统。(因为有众多人分块的实现各个部分功能)
  • 模式:简单地说,就是程序运行过程中使用的,由硬件体系结构提供的CPU特权模式。
    在这里插入图片描述
    在这里插入图片描述
  • 用户态,内核态:用户使用 用户模式(核外子系统),调用核心子系统,但是 核心子系统,不会去调用你写的程序。
进程
  • 进程的构成:程序+数据+PCB(进程控制块,系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程。使并发执行的每一个程序(含数据)都能独立的运行)
  • 目的:使程序可以并发的执行。但是会出现资源竞争等问题,需要合理解决。
  • 进程状态之间的转换:
    在这里插入图片描述
  • 交换技术:(在linux磁盘分区时,有这样的分区)
    在这里插入图片描述
  • 程序的挂起状态: 我猜测虚拟机的挂起就是这样的状态。 挂起就是运用到 交换技术,将程序和数据从内存转移到外存中去。
    在这里插入图片描述

三: 操作系统的基本功能:

(1)操作统一管理计算机不同的资源:
  • 根据上节的计算机组成内容,可以抽象出很多不同的资源。
  • 1.处理器资源
  • 2.IO设备资源
  • 3.存储器资源
  • 4.文件资源
  • 管理方式:驱动,比方说使用网卡等,都需要安装驱动,是一种贴近硬件的一种程序,是集成在操作系统内部的,内核态中的。
(2)实现对操作系统资源的抽象
  • 1.有了操作系统,用户在编程的时候就不需要面向硬件接口进行编程(面向硬件编程是相关驱动的工作), 开发人员编写程序,一般都是在操作系统之上进行编程的,使用的计算机资源,都是经过操作系统抽象出来的。
  • 举例子:IO设备管理软件,虚拟设备。开发者再使用IO设备的时候,写的其实是虚拟的设备,实际的设备是由驱动去完成的,接口是由驱动或者是操作系统提供给我们的文件管理软件(也称为文件系统):读或者写一个文件的时候,我们不需要知道文件的具体位置,操作系统会提供给我们一个接口,和一个文件的句柄(可以称之为虚拟的文件)。在程序里只需要对这个虚拟的文件进行读或者写,在硬件的层面,就会自懂的帮我们完成硬件的保存和读取。从程序开发者的角度。这些硬件资源都被操作系统所抽象出来了,实现了对计算机资源的抽象,我们实际上操作的都是对计算机资源的一个抽象,并不是实际的操作底层的硬件。
(3)操作系统提供了用户与计算机之间的接口
  • 操作系统提供了 系统调用,命令行,图形窗口三种形式的接口调用。
    在这里插入图片描述
  • 系统调动: 是比较专业的接口,需要有一定的开发基础。比如平时的创建进程(pthread),打开文件,网络发送(socket),都是系统调用。使用操作系统给开发人员提供的接口。

四: 操作系统的用户态与内核态

  • 由来:
    在这里插入图片描述
(1)内核态: 专门用来运行内核态相关的程序
  • 内核空间:存放的是内核代码和数据

  • 进程执行操作系统内核的代码

  • cpu可以访问内存所有数据,包括外围设备

  • 支撑功能
    在这里插入图片描述

  • 资源管理能功能
    在这里插入图片描述

(2)用户态:用来运行用户自己编写的一些程序。
  • 用户空间: 存放的是用户程序的代码和数据

  • 进程在执行用户自己的代码(非系统调用之类的函数)

  • CPU只可以访问有限的内存,不允许访问外设。

  • 用户态切换到内核态的三种方法:系统调用,异常中断,外围设备的中断。

  • 外围设备的中断:一般是指磁盘,网卡,键盘等。**举例说明:**例如cpu需要读取磁盘上的数据, cpu和磁盘的速度差别很大,发出读写信号后,cpu是不可能去等磁盘读取数据完成的,这是就会出现一个叫做DMA的设备,出现在两者之间。cpu在发送了读取信号后就去干别的事情了,等到dma设备读取完成后,发送中断信号,这是CPU才会从用户态切换到内核态来处理DMA的数据。
    在这里插入图片描述

四: 并行与并发

  • 并发:是指具有同时处理多个任务的能力。(同一时间间隔发生)
  • 并行:是指真正可以在同一时间,处理多个任务的能力。(同一时间发生)
  • 并发系统:既有并行,也有并发,一般通常叫做并发系统。
操作系统中的并行与并发
  • 单核cpu:中只能够并发的执行,也就是同一时间只能执行一个任务,串行执行。
  • 多核CPU:例如四核cpu。拥有四个核心。可以真正的同时执行四个程序。四核之间任务并行执行,每个核里又是很多任务并发执行!
    在这里插入图片描述
  • 分时系统: 给任务分配时间片,一段时间内轮流执行。

五:同步,异步

  • 一个函数,调用另一个函数,可能要等另一个函数准备好数据。调用方一直等待对方准备数据,就是同步。
  • 异步, 被调用函数,直接返回,告诉调用函数,你先去忙其他的事吧,等我准备好再通知你,然后继续准备数据。准被完成后,在告诉调用函数去读取数据。调用函数不需要等待。
    在这里插入图片描述
  • 同步和异步,强调的是消息通信机制!
  • 阻塞和非阻塞:强调的是程序在等待调用结果时的状态。(例如I/O模型中的阻塞和非阻塞)

六:操作系统进程

  • 目的:多道程序环境下,使程序能够并发执行。隔离资源,运行环境,提升资源利用率。
  • 进程是系统进行资源分配和调度的基本单位。
  • 组成:程序段,相关数据段和PCB三部分构成进程实体(又称进程映像)。
  • 进程的状态转换,请参考上面二的介绍。
    在这里插入图片描述
  • PCB(进程控制数据块):属于操作系统内核的一种数据结构,用来描述和控制进程运行的通用数据结构。包括:进程标识符(用户程序起的进程名字),内部标识符(进程号),处理机状态,进程调度信息,进程控制信息等
    在这里插入图片描述
    在这里插入图片描述
  • 进程用户空间也保存着一些信息:
    在这里插入图片描述
进程调度算法
  • 非抢占式调度, 当前进程主动方放弃CPU
  • 抢占式调度: 当前进程被动放弃CPU,允许终端当前执行的进程(进程拥有优先级)
    就绪队列:
  • 先来先服务算法:谁先来先服务谁,知道运行好了,自动退出再换下一个。
  • 短作业优先算法:预估进程剩余所需运行时间,时间短的优先调度,要求就绪队列规模较小。时间估算也不一定准
  • 最高响应比算法:
    在这里插入图片描述
    等等还有很多,比如有时间片轮转,优先级调度算法。
用户级线程:
  • 切换成本低,与内核线程之间是多对一的。由用户自行调度,内核无法干涉。

  • 内核线程阻塞,所有线程无法运行
    在这里插入图片描述

  • 组合方式线程:管理工作既发生在内核态也发生在用户态。多对多,不会因为内核线程的阻塞,导致所有用户态线程不能执行。
    在这里插入图片描述

常见的编程语言的线程模型
  • C/C++语言:使用原生的操作系统线程
    在这里插入图片描述

  • java和上面的一样,用户态,内核态1对1.
    在这里插入图片描述

  • javascript:主要运行在浏览器的,单线程语言。 可以通过async等关键字实现用户态的线程,一对多
    在这里插入图片描述

  • go语言: 典型的组合方式,线程调度模型:G-P-M。G代表协程,用户级线程,M内核级线程,P就是G和M之间的调度对象,用来调节G 和 M之间的关系。
    在这里插入图片描述

  • python: 组合方式的实现方式
    在这里插入图片描述

补充探究的内容:用户态线程,内核态线程

在这里插入图片描述

  • 可以对这些问题进行考究:下面是里面的图片
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 后面关于书中介绍的线程的创建等,就不去截图了。
进程与线程的上下文切换
  • 什么是上下文:cpu切换执行任务时,需要得到的信息。 就两个人聊天,突然加进来另外一个人,他中途到来,不知道我们上文说了什么,所以也听不懂我们后面要说啥。
寄存器级别上下文:
  • 保存在CPU核心里面的
用户程序级别上下文
  • 主要保存在主存中,和当前运行的进程,用户级的数据,包括程序的逻辑等。
系统级别的上下文

协程

协程就是用户级的线程。
  • 平时所说的16核32线程,指的是内核线程。
;原文链接:https://blog.csdn.net/pythonstrat/article/details/115794933
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐