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

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

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

一: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%的时间。
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第1张图片
  • 层次结构实现原理:在cpu与志村之间增加一层速度快(容量小的)Cache(缓存),解决主存速度不足的问题

操作系统基本知识

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

一: 相关基本概念

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

二:相关系统

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

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

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

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

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

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

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

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

  • 由来:
(1)内核态: 专门用来运行内核态相关的程序
  • 内核空间:存放的是内核代码和数据

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

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

  • 支撑功能
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第12张图片

  • 资源管理能功能
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第13张图片

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

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

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

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

  • 外围设备的中断:一般是指磁盘,网卡,键盘等。**举例说明:**例如cpu需要读取磁盘上的数据, cpu和磁盘的速度差别很大,发出读写信号后,cpu是不可能去等磁盘读取数据完成的,这是就会出现一个叫做DMA的设备,出现在两者之间。cpu在发送了读取信号后就去干别的事情了,等到dma设备读取完成后,发送中断信号,这是CPU才会从用户态切换到内核态来处理DMA的数据。
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第14张图片

四: 并行与并发

  • 并发:是指具有同时处理多个任务的能力。(同一时间间隔发生)
  • 并行:是指真正可以在同一时间,处理多个任务的能力。(同一时间发生)
  • 并发系统:既有并行,也有并发,一般通常叫做并发系统。
操作系统中的并行与并发
  • 单核cpu:中只能够并发的执行,也就是同一时间只能执行一个任务,串行执行。
  • 多核CPU:例如四核cpu。拥有四个核心。可以真正的同时执行四个程序。四核之间任务并行执行,每个核里又是很多任务并发执行!
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第15张图片
  • 分时系统: 给任务分配时间片,一段时间内轮流执行。

五:同步,异步

  • 一个函数,调用另一个函数,可能要等另一个函数准备好数据。调用方一直等待对方准备数据,就是同步。
  • 异步, 被调用函数,直接返回,告诉调用函数,你先去忙其他的事吧,等我准备好再通知你,然后继续准备数据。准被完成后,在告诉调用函数去读取数据。调用函数不需要等待。
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第16张图片
  • 同步和异步,强调的是消息通信机制!
  • 阻塞和非阻塞:强调的是程序在等待调用结果时的状态。(例如I/O模型中的阻塞和非阻塞)

六:操作系统进程

  • 目的:多道程序环境下,使程序能够并发执行。隔离资源,运行环境,提升资源利用率。
  • 进程是系统进行资源分配和调度的基本单位。
  • 组成:程序段,相关数据段和PCB三部分构成进程实体(又称进程映像)。
  • 进程的状态转换,请参考上面二的介绍。
  • PCB(进程控制数据块):属于操作系统内核的一种数据结构,用来描述和控制进程运行的通用数据结构。包括:进程标识符(用户程序起的进程名字),内部标识符(进程号),处理机状态,进程调度信息,进程控制信息等

    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第17张图片
  • 进程用户空间也保存着一些信息:
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第18张图片
进程调度算法
  • 非抢占式调度, 当前进程主动方放弃CPU
  • 抢占式调度: 当前进程被动放弃CPU,允许终端当前执行的进程(进程拥有优先级)
    就绪队列:
  • 先来先服务算法:谁先来先服务谁,知道运行好了,自动退出再换下一个。
  • 短作业优先算法:预估进程剩余所需运行时间,时间短的优先调度,要求就绪队列规模较小。时间估算也不一定准
  • 最高响应比算法:
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第19张图片
    等等还有很多,比如有时间片轮转,优先级调度算法。
用户级线程:
  • 切换成本低,与内核线程之间是多对一的。由用户自行调度,内核无法干涉。

  • 内核线程阻塞,所有线程无法运行
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第20张图片

  • 组合方式线程:管理工作既发生在内核态也发生在用户态。多对多,不会因为内核线程的阻塞,导致所有用户态线程不能执行。
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第21张图片

常见的编程语言的线程模型
  • C/C++语言:使用原生的操作系统线程
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第22张图片

  • java和上面的一样,用户态,内核态1对1.
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第23张图片

  • javascript:主要运行在浏览器的,单线程语言。 可以通过async等关键字实现用户态的线程,一对多
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第24张图片

  • go语言: 典型的组合方式,线程调度模型:G-P-M。G代表协程,用户级线程,M内核级线程,P就是G和M之间的调度对象,用来调节G 和 M之间的关系。
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第25张图片

  • python: 组合方式的实现方式
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第26张图片

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

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

  • 可以对这些问题进行考究:下面是里面的图片
    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第28张图片


    并发编程基础:计算机组成原理及操作系统相关基础知识总结_第29张图片
  • 后面关于书中介绍的线程的创建等,就不去截图了。
进程与线程的上下文切换
  • 什么是上下文:cpu切换执行任务时,需要得到的信息。 就两个人聊天,突然加进来另外一个人,他中途到来,不知道我们上文说了什么,所以也听不懂我们后面要说啥。
寄存器级别上下文:
  • 保存在CPU核心里面的
用户程序级别上下文
  • 主要保存在主存中,和当前运行的进程,用户级的数据,包括程序的逻辑等。
系统级别的上下文

协程

协程就是用户级的线程。
  • 平时所说的16核32线程,指的是内核线程。

你可能感兴趣的:(python,操作系统)