计算机组成原理学习笔记

[TOC]

计算机组成原理学习笔记

冯诺依曼体系:

WX20200422-231345@2x

  • 必须有一个存储器
  • 必须有一个控制器
  • 必须有一个运算器
  • 必须有输入设备
  • 必须有输出设备

WX20200422-231641@2x

控制器和存储器也就是 CPU

WX20200422-231753@2x

如何解决冯诺依曼瓶颈:

WX20200422-231945@2x

这边的存储器主要指的是围绕着 CPU 的高速设备,而这边的存储器主要是指内存和CPU寄存器

WX20200422-232026@2x

程序翻译与程序解释:

假设 L1 是更高级的语言, L0 是低级的语言

WX20200422-232604@2x

计算机的计算单位:

容量单位:

WX20200422-233753@2x

WX20200422-234110@2x

为什么使用 1000 而不是 1024 ,因为使用人类比较容易理解的方式。

速度单位:

WX20200422-234316@2x

WX20200422-234551@2x

比如蝴蝶的翅膀一秒钟振动 15次,就是 15Hz/s 。

WX20200422-234738@2x

所以对 CPU 的描述就是每秒高低电频变化的速度

计算机字符与编码集

ASCII码:

WX20200423-120258@2x

​ 33 + 95 = 128 = 2^7 所以是 7 个 bits

WX20200423-120338@2x

Extended ASCII码:

用 8 个 bits 表示

WX20200423-120616@2x

字符编码集国际化:

WX20200423-120716@2x

中文编码集:

GB2312:不符合国际的标准

WX20200423-122020@2x

GBK:作为 GB2312 的拓展

WX20200423-121956@2x

Unicode:兼容全球的字符集

WX20200423-124848@2x

计算机组成

计算机的总线:

解决不同设备之间的通信问题

WX20200423-213223@2x

WX20200423-213328@2x

总线分类:

WX20200423-213409@2x

WX20200423-213432@2x

WX20200423-213720@2x

WX20200423-213753@2x

WX20200423-213909@2x

总线仲裁方法:

WX20200423-214048@2x

计算机的输入输出设备

输入输出设备

字符输入设备:键盘

图形输入设备:鼠标、扫描仪等

图像输出设备: 显示器、投影仪等

计算机存储器

WX20200423-220714@2x

WX20200423-220750@2x

计算机的主存储器与辅助存储器

WX20200423-221606@2x

WX20200423-222443@2x

计算机高速缓存

它位于 CPU 与 主存之间,用来解决它们之间读写速度不匹配的问题

WX20200423-225041@2x

字与字块

WX20200423-233246@2x

WX20200423-233325@2x

WX20200513-131244@2x

字的寻址,字的地址包含两部分

  • 前 m 位指定字块的地址
  • 后 b 位指定字在字块中的地址

WX20200423-233909@2x

高速缓存数据结构与主存类型,但是容量小于主存,具有缓存速度快等优点

WX20200513-131846@2x

进制运算基础

  • 计算机喜欢二进制,但是二进制表达太长了,所以使用大进制位来解决问题,例如8进制和16进制
二进制运算基础

10进制转换2进制

WX20200505-221224@2x

2进制转换10进制

WX20200505-221128@2x

2进制小数转换10进制

WX20200505-222424@2x

x 的 负a 次方 = x 的 a 次方分之 1

10进制小数转二进制

WX20200505-223019@2x

有符号数与无符号数

源码表示法
  • 使用0表示正数,使用1表示负数
  • 规定符号位位于第一位
补码表示法

如何计算补码,n = 4

WX20200505-225007@2x

反码表示法

WX20200505-231758@2x

反码补码都根据 n 来隔开符号位与数据位

源码补码反码之间的关系

WX20200505-232618@2x

小数的补码

WX20200506-225454@2x

定点数和浮点数

定点数:小数点固定在某个位置的数称之为定点数

  • 符号位与数值位之间
  • 符号位与数值位之后

浮点数:

表示格式

N = S ✖️ r^j

S:尾数 r:基数 j:阶码

WX20200506-234207@2x

浮点数的运算

操作系统

什么是操作系统

  • 管理计算机硬件和软件资源的计算机程序
  • 管理配置内存、决定资源供需顺序、控制输入输出设备等
  • 操作系统提供让用户和系统交互的操作界面

为什么需要它

  • 我们不可能直接操作计算机硬件
  • 设备种类繁多复杂,需要统一界面
  • 操作系统操作简易,实现了对底层的抽象,无需用户直接操作底层

相关概念

  • 并行与并发

    并行:在同一个时刻发生(双处理器,每个时刻都有两个程序在执行)

    并发:在一个时间间隔之间发生(单处理器,每次只能处理一个)

WX20200509-003032@2x

  • 共享性

    操作系统的资源可供多个并发程序共同使用

互斥共享形式:资源被程序A占用,其他使用只能等待,只有进程A结束,其他才可以使用

什么是进程

为什么需要进程

  • 进程是系统进行资源分配和调度的基本单位
  • 进程作为程序独立运行的载体保障程序正常执行
  • 进程的存在使操作系统资源的利用率大幅提升

进程的实体

WX20200510-004726@2x

标识符:唯一的标识符,进程的id,用于区别其他进程

状态:标记进程的状态运行态、阻塞状态

优先级

程序计数器:指向即将被执行的下一条指令地址

内存指针:指向程序代码或进程数据的指针

上下文数据:进程执行时候处理器存储的数据

IO状态信息:存储的是被进程 IO 操作所占用的文件列表

记账信息:使用处理器时间、时钟数总和等

进程与线程

一个进程可以有一个或多个线程,进程的线程共享进程资源

  • 进程是系统进行资源分配和调度的基本单位
  • 线程是操作系统进行运行调度的最小单位

WX20200510-005839@2x

进程的五状态

  • 就绪状态

    • 当进程被分配到除CPU意外所有必要的资源后
    • 只要再获得CPU的使用权,就可以立即执行
    • 其他资源都准备好,只差CPU的状态为就绪状态

    在系统中多个处于就绪状态的进程,通常排成一个队列,称为就绪队列

    WX20200510-010349@2x

  • 执行状态
    • 进程获得 CPU,其程序正在执行称为执行状态
    • 在单处理机中,某一时刻只能有一个进程处于执行状态
  • 阻塞状态

    • 进程因某种原因如:其他设备未就绪而无法继续执行(比如要使用打印,因为它是外部设备可能没准备好,就阻塞了)
    • 从而放弃CPU的状态称为阻塞状态

    多个阻塞进程也会组成阻塞队列

WX20200510-091759@2x

上面 3 个状态是如何切换

  1. 当进程除了 CPU 以外都准备好之后就进入就绪状态
  2. 当进程调度发生的时候,就进入执行状态
  3. 当执行的进程 CPU 用完了(分配给某个进程的执行时间),就会切换为就绪状态
  4. 当执行状态发生 IO 请求,有可能变为阻塞状态
  5. 阻塞状态 IO 完成,会进入就绪状态

WX20200510-092607@2x

  • 创建状态
    • 创建完成
  • 终止状态
    • 进程执行完毕

进程类型

  • 类型

    • 前台进程就是具有终端,能跟用户交互的进程(例如:shell,可以通过 ctrl+c 停止)
    • 后台进程基本不和用户交互,优先级比前台进程低
    • 守护进程是特殊的后台进程,一般在系统启动的时候就启动了
  • 进程的标记

    • 进程 id:是进程唯一的id,每个进程拥有不同的id,它是一个非负整数,最大值由操作系统限定

    • 进程的状态标记

      WX20200511-084820@2x

      操作Linux进程的命令

      ps:列出当前进程 。(ps -aux –sort=-pcpu)打出进程详细信息按照cpu使用频率排序

      top:查看系统所有进程状态

      kill:退出进程。(kill -9 进程号)表示无条件停止

进程调度

进程调度是指计算机通过决策决定哪个就绪进程可以获得CPU使用权

进程调度有 2 个过程

  • 保留进程信息,请出旧进程
  • 选择新进程,准备运行环境并分配CPU

WX20200515-000532@2x

就绪队列排队机制:将就绪进程按照一定的方式排成队列,以便调度程序可以最快找到就绪进程

选择运行进程的委派机制:调度程序以一定的策略选择进程,并将CPU分配给它

新老进程的上下文切换机制:保存当前进程的上下文信息,装入委派执行进程的运行上下文

非抢占式调度:

  • 处理器一旦分配给某个进程,就让进程一直使用下去
  • 调用程序不以任何原因抢占正在被使用的处理器
  • 知道进程完成工作或因为IO阻塞才会让出处理器

抢占式调度:

  • 允许调度程序以一定的策略暂停当前运行的进程
  • 保留好旧进程的上下文信息,分配处理器给新进程

调度策略

  • 先来先服务算法
  • 短进程优先调度算法
  • 高优先权优先调度算法
  • 时间片轮转调度算法(分配一个时间片执行,时间片用完,就重新进入就绪队列)

死锁

产生的原因

  • 竞争资源
  • 调度顺序不当

产生的条件(只需要破坏其中一个条件,就能避免死锁产生)

  • 互斥条件
    • 进程对资源使用是排它性的
    • 某资源只能由一个进程使用,其他需要等待
  • 请求保持条件

    • 进程至少保持一个资源,又提出新的资源请求
    • 新资源被占用,请求被阻塞
    • 被阻塞的进程不释放自己保持的资源
  • 不可剥夺条件

    • 进程获得的资源未完成之前不能被剥夺
    • 只能自己释放
  • 环路等待条件

避免死锁条件(满足其中一个即可)

  • 破坏请求保持条件:系统运行进程之前,一次性申请所有需要的资源,保证运行期间不会提出资源请求
  • 破坏不可剥夺条件:当进程请求资源得不到满足时,释放占有的资源
  • 破坏环路等待条件:按照顺序申请资源,避免环路

存储管理之内存分配与回收

为什么需要存储管理,早起计算机编程不需要过多的存储管理,但是计算机和程序变得复杂,存储管理也变得必要。它的目的是确保计算机有足够的内存处理数据,确保程序可以从可用内存中获取一部分内存使用。确保程序可以归还使用后的内存供其他程序使用

  • 内存分配

    • 单一连续分配:

      • 单一连续分配是最简单的内存分配方法
      • 只能在单用户、单进程的操作系统中使用
    • 固定分区分配

      • 固定分区分配是支持多道程序的最简单存储分配方式
      • 内存空间被划分为若干固定大小的区域
      • 每个分区只提供给一个程序使用,互不干扰
    • 动态分区分配

      • 根据进程实际需要,动态分配内存空间

      • 动态分配算法:

        • 首次适应算法,每次从头部开始寻找适合的内存区,如果没找到就分配失败(缺点是每次都从头开始)

          WX20200512-001939@2x

        • 最佳适应算法,空闲区链表按照容量大小排序,遍历空闲区链表找到最佳的合适空闲区(可以快速的找到需要的内存区域)

  • 内存回收(使用空闲链表节点)

    WX20200512-002246@2x

    • 第一种情况:只需要把空闲区1的容量增大为空闲区即可
    • 第二种情况:将回收区与空闲区合并,新的空闲区使用回收区的地址
    • 第三种情况:将空闲区1、2和回收区合并,新的空闲区使用空闲区1的地址
    • 第四种情况:将回收区插入节点

存储管理之段页式存储管理 6-10

什么是内存碎片?

当页面大小小于节点2-3,就会存在内存碎片

WX20200512-130640@2x