我是靠谱客的博主 尊敬网络,最近开发中收集的这篇文章主要介绍计算机体系结构知识汇总一、处理器体系结构二、处理器实现三、中断、陷入及异常四、处理器性能与流水线处理器设计五、处理器调度六、内存管理技术七、输入输出与稳定存储八、文件系统,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 一、处理器体系结构
    • 相关定义
    • 基地址+偏移量的寻址模式
    • 函数调用需要处理的问题
    • 帧指针引入的目的
    • LC-2200指令集指令格式
  • 二、处理器实现
    • 数据通路原理
    • 基于总线的设计
    • 数据通路设计
    • 控制单元设计
    • 基于ROM和状态寄存器的控制单元
  • 三、中断、陷入及异常
    • Handler的寻址和索引
    • 改进的中断Handler
    • 中断处理的完整流程(从外部INT置位到开始Handler流程)
    • 进入INT宏状态的操作
    • 为了处理不连续性,体系结构改进汇
  • 四、处理器性能与流水线处理器设计
    • 简单的指令流水线的问题
    • 指令流水线的数据通路元件
    • 三种冒险
  • 五、处理器调度
    • 调度基础
    • 非抢占式调度
    • 轮转调度算法
  • 六、内存管理技术
    • 静态重定位
    • 动态重定位
    • 变长分区
    • 缩并
    • 分页的硬件支持
  • 七、输入输出与稳定存储
    • 内存映射I/O
    • 程控 I/O(PIO)
    • DMA
    • I/O总线与设备驱动的演化
  • 八、文件系统
    • Linux命令
    • 磁盘可能出现的延迟:
    • 空闲链表
    • 文件分配表FAT
    • 索引分配
    • 多级索引分配

一、处理器体系结构

相关定义

处理器到底是什么:程序员眼中的计算机组织方法
体系结构要素:指令集和操作数的组织方式(内存、寄存器)
指令集就是计算机体系结构开的处方,指定计算机需要的能力。指令集应该对机器语言程序员可见。指令集是区分不同处理器的关键标志。
操作数是参加某种功能操作的数据。
双操作数:利用两个操作数进行工作来产生一个结果。
三操作数:两个源操作数和一个目的操作数。
ALU:算术/逻辑单元,进行ADD、SUB、AND、OR等运算、
寄存器(Register):在处理器内部,靠近ALU,速度极快,成本昂贵。
操作数的可寻址性:内存内容增加->内存地址长度增加->一条指令可能无法存放多个内存地址。
地址线对内存空间的寻址:10根寻1K,20根寻1M,30根寻1G。
可寻址性指的是在内存中可以单独指定的最低精度的操作数。如果是字节寻址,那么单独寻址的最低精度是字节。
数值精度与空间、时间优化的关系:数据变量的数值精度越小,所占用的内存空间就越小。对于精度需求较低的算术/逻辑运算,在处理器和内存之间来回传送数据也会有一定的时间优势。
大端:字的高位在字地址上
小端:字的低位在字地址上
在这里插入图片描述
活动记录:栈中与当前执行过程有关的一部分区域。
LC-2200指令集:32位,基于寄存器、小端、固定长度的指令集。有16个通用寄存器和独立的程序计数器。所有地址都是字地址,适用于所有高级语言的功能需求。

基地址+偏移量的寻址模式

ld rdest, offset(rbase)
ld r2, 3(r1)
•语句语义
– rbase内的地址与offset相加,生成新的有效地址
– 取出新的有效地址的内容,放入rdest
• 注释写法
r2←M[(r1) + 3]

函数调用需要处理的问题

保存caller调用者的状态:当调用者调用被调用者时,他自身的某些结果正存储在寄存器中。由于不知道被调用者需要使用哪些寄存器,谨慎的做法是把在过程调用之前先将他们保存起来,在返回时再恢复。将调用点的状态存入栈中,返回时恢复。
参数传递:用处理器的寄存器来实现参数传递。
记住返回地址:JAL rtarget rlink(rtarget用来记录被调用者的起始地址,rlink记录返回地址)J rlink就返回了。
把控制权交给被调用者:在JAL时就把控制权交给了被调用者。
为被调用者的局部变量分配空间:使用栈为局部变量分配空间。
返回值:使用编译器为寄存器的返回值保存。
返回调用点:用J rlink返回调用点。

帧指针引入的目的

函数调用过程中,栈指针的位置可能会发生变化。在栈帧中所有元素的访问都基于栈指针,如果栈指帧的位置发生了变化,则所有元素的访问都会发生变化,最好能够在每个栈中标定一个固定的位置,用来访问其他元素。把这个固定地址存储在寄存器中,就是帧指针。函数调用时,不仅要保存caller的s寄存器组,还要保存caller的帧指针。

LC-2200指令集指令格式

R型指令(Register) add,nand
在这里插入图片描述
I型指令(Immediate) addi,lw,sw,beq
在这里插入图片描述
J型指令(Jump) jalr
在这里插入图片描述
O型指令 halt 中断
在这里插入图片描述

二、处理器实现

双端口寄存器(DPRF):地址线6位,数据线32位,控制线1位。
在这里插入图片描述

数据通路原理

PC:提供指令的位置
内存:提供指令的内容
IR:暂存取出来的指令
双端口寄存器:提供两路数据
ALU:对数据进行运算
运算结果写入寄存器堆

基于总线的设计

两点之间必须经过导线的联通才能传递信息
导线很昂贵->共享导线
单总线设计:同一时刻只有一个元件能写,但是多个元件可读。
三态缓冲器(驱动器):0、1、高阻状态
在这里插入图片描述

数据通路设计

处理器(CPU)包含两个主要部分:数据通路(data path):所有的逻辑资源 控制逻辑(control unit):为数据通路提供控制信号
在这里插入图片描述

控制单元设计

控制单元的本质:FSM(有限自动机)
FSM工作原理:输入和当前状态->输出和新状态
当前状态存储在哪里?状态寄存器
输出和新状态的信息来自哪里?查找表格
表格里的内容会变吗?设计好了就不会变
表格存储在哪里?非易失性存储(ROM)

基于ROM和状态寄存器的控制单元

当前状态:状态存储器
状态存储器->ROM索引
ROM输出状态1->多组控制信号
控制信号驱动数据通路工作
ROM输出2->下一状态
转移至下一状态
在这里插入图片描述
箭头左部驱动信号,箭头右部加载信号。
在这里插入图片描述
用到的信号填1,没用到的填0.
在这里插入图片描述

三、中断、陷入及异常

中断: 一般指外部I/O设备引起的不连续性。与系统的正常运行是异步的。
陷入:程序正常运行过程中发生的操作系统调用 Linux用户模式、程序栈 -> 内核模式特权指令、内核栈,也叫软件中断
异常: 一般由于程序执行错误导致 某些编程语言的异常机制,允许错误传播
在这里插入图片描述

Handler的寻址和索引

中断向量表(IVT):固定大小的handler地址表,存在内存某处,由操作系统维护的数据结构。
每种不连续性都有唯一编号(中断向量),作为其索引。
中断:外部设备产生中断对应的唯一编号
陷入和异常:硬件内部产生对应的唯一编号,存入异常/陷入寄存
器 (ETR)
在这里插入图片描述

改进的中断Handler

(PC-> k 0 , 进 入 H a n d l e r 时 , 中 断 被 禁 止 ) 在 栈 上 保 存 k0,进入Handler时,中断被禁止) 在栈上保存 k0Handlerk0
允许中断
保存处理器寄存器内容
执行设备代码
恢复处理器寄存器内容
禁止中断
从栈上恢复$k0
$k0->PC (打开中断,完成跳转)

中断处理的完整流程(从外部INT置位到开始Handler流程)

外部设备置位INT线;
处理器在当前指令周期完成之后,检查INT线;
如果发现有外部中断请求,处理器进入INT宏状态,并置位INTA线;
外部设备收到INTA信号之后,将自己在IVT中的中断向量放到数据线上;
处理器收到中断向量后,在IVT中进行查找,找到其对应的Handler地址,设为0x5000;
处理器将当前PC值存入$k0,然后将0x5000写入PC,开始中断Handler流程。

进入INT宏状态的操作

$k0 <– PC;
由于收到INT信号,置位INTA信号;
从数据线上收取外部设备的中断向量;
从IVT中查找对应的Handler地址A;
PC <- A;
将当前mode存入系统栈;
mode = kernel ;
禁止中断;

为了处理不连续性,体系结构改进汇

一个中断向量表IVT,存储各个Handler的内存地址;
一个异常/陷入寄存器(ETR),包含内部E、T值;
接收外部中断值的硬件机制;
用户/内核模式,以及相应的处理器mode位;
与mode位相关的用户/内核栈;
一种硬件机制:在$k0中保存PC,并能从IVT中检索Handler地址;
3条新指令:禁止中断、运行中断、中断返回

四、处理器性能与流水线处理器设计

衡量程序性能的两个重要的指标
空间指标:程序的代码和数据需要多少内存空间?(内存印迹,memory footprint)
时间指标:程序执行需要多少时间?
处理器的两种设计思路
CISC:一条指令,多种操作,内存印迹小
RISC:与CISC互相影响
程序的内存印迹与执行时间没有直接关系
CPI:关注的是单条指令需要的时间,概念Latency(延时)
概念吞吐量 Throughput,关注的是单位时间内执行的指令数目
单位:IPC
解决问题的两个视角:
减少单条指令需要的时间
增加单位时间内执行的指令数目(技术:流水线)

简单的指令流水线的问题

不同的执行阶段可能会用到相同的数据通路资源
结构性冒险
解决办法:增加相应的硬件资源
各个阶段的工作量不一致
解决办法:将周期长的步骤进行切分
加入Buffer的意义:让各个阶段互相独立。解耦

指令流水线的数据通路元件

双ALU、I-MEM、D-MEM、寄存器堆读写冲突处理(后)
MEM读写速度慢,解决方法:缓存机制
每个指令周期:5,全局等效CPI:1

三种冒险

结构性冒险、数据冒险、控制冒险
降低流水线的效率
流水线是同步的,指令无法传递至下一个阶段就会发送“气泡”
“气泡”即NOP空指令
编译器编译后的程序,未加优化时可能出现CPI不高,但是执行时
间很长的情况(三种冒险)

五、处理器调度

**什么是操作系统?**一个为执行用户程序提供资源的程序。
**什么是资源?**处理器、内存、IO
**如何创建一个程序?**从问题描述到内存印迹。
在这里插入图片描述

调度基础

有两种主要的调度类型:抢占式调度、非抢占式调度
基本的调度步骤
获得处理器控制权
当前运行的进程的状态保存
选择一个新进程运行
把新选择的进程分发到处理器上运行
运行中的进程的状态是指什么?
PC
寄存器值
程序在内存中的位置
处理器利用率:处理器繁忙的时间比例
吞吐量:单位时间内完成的作业个数
平均周转时间: 作业进入和离开系统所花的平均时间
平均等待时间:作业在系统中需要等待的平均时间
响应时间:系统需要响应用户的时间
饥饿:一个作业一直没有进展(响应时间无限大)
护送效应:防止长时间运行的作业完全占据CPU的使用。

非抢占式调度

进程在CPU上一旦运行,就不受调度器控制。
收回调度权:
进程终止
等待
阻塞式系统调用
三种主要算法:FCFS、SJF、priority

轮转调度算法

五个过程:
分发器
定时器中断处理程序
I/O请求陷入
I/O完成陷入
进程终止陷入
在这里插入图片描述

程序三种方式放弃处理器
I/O请求
结束运行
用完分配时间

六、内存管理技术

静态重定位

在链接器生成可执行文件时,确定进程的内存上下限。
体系结构提供上下限寄存器,PCB负责操作。
分发器分发进程时,设置PCB中上下限寄存器的值,不再更改。
进程替换(swap),进程出入内存使用同样的内存位置。
缺点:原内存空间一旦被占用,被替换出去的进程就无法再被加载。
静态重命名:进程加载时改变内存位置的技术,加载器将修改原程序中所有与内存地址相关的语句。

动态重定位

体系结构提供:基址寄存器和限长寄存器。
只要能满足进程的内存大小需求,就可以将可执行程序放到内存里的任何位置。
偏移操作在进程加载入内存时发生。
进程被替换出内存之后,不一定返回到之前的地址。

变长分区

最佳适应
使用大小最合适的内存分区
内部碎片较少,但是搜索时间较长
首次适应
使用第一个大小合适的内存分区
内部碎片偏多,但是搜索速度快
索引方式:按起始地址索引(便于合并),按分区大小索引(便于分配)

缩并

外部碎片超出极限后可以使用缩并技术。代价高昂。

分页的硬件支持

CPU中需要增加一个寄存器:页表基址寄存器 PTBR(Page Table Base Register),存储当前进程的页表的基地址。
PTBR的作用:将虚拟页号翻译成物理页号
页表存在于内核内存空间,每个进程都拥有自己的PTBR,指向自己的页表数据结构。
CPU每次内存请求,实际上要访问几次内存?
第一次:访问当前进程的页表;第二次:访问实际物理内存地址。
效率不高。可以采用缓存机制,加快访问速度

七、输入输出与稳定存储

内存映射I/O

目的:让设备控制器内的寄存器对CPU可见
将外部设备的寄存器,融入到内存地址空间中去。

程控 I/O(PIO)

键盘处理输入具体怎么完成?
– 新字符:存入数据寄存器,设置就绪位
– CPU读取寄存器内容,清除就绪位
CPU读取键盘输入的过程

  1. CPU检查就绪位
  2. 如果没有就绪,返回步骤1
  3. 读取数据寄存器的值(自动清除就绪位)
  4. 将读入的字符存入内存
  5. 返回步骤1

DMA

工作机制:内存缓冲区<->设备
计数寄存器:N个字节
内存缓冲区地址:内存地址M开始
设备地址寄存器:内存地址D – 命令寄存器:写入
状态寄存器Go:置位
所有操作通过CPU写寄存器完成
存在与CPU争夺总线使用权的情况

I/O总线与设备驱动的演化

即插即用总线,解决第三方配件与计算机系统的连接问题。
并行总线:PCI(简单,带宽大,距离近,抗干扰差)
串行总线:USB(体积小,便宜,线少,抗干扰强,速度越来越快) PCIe,小型化,速度更快的PCI。显卡、SSD。
设备驱动:用时加载。

八、文件系统

文件的属性叫做元数据(meta data)
元数据需要占用额外的存储空间
可以在文件系统层面创建别名
ln foo bar(硬链接)
ln –s fox box(软连接)
权限的作用:用来指明谁可以访问文件,以及具体能做什么。
在这里插入图片描述

Linux命令

更改所有者(管理员权限):chown rama x
更改组(所有者、管理员):chgrp cs2200 foo

磁盘可能出现的延迟:

寻找指定柱面的时间
将磁盘的读写头旋转到特定扇区的旋转延迟
磁盘控制器缓冲区的传输时间
控制器缓冲区与系统内存之间的DMA传输时间

空闲链表

包含可用磁盘块的空闲链表
最先适配和最佳适配策略
每个文件对应单一节点,可能存在外部碎片和内部碎片问题
需要周期性缩并磁盘
改进:溢出区域,用于存放越界的大文件

文件分配表FAT

将磁盘分区,每个分区都有FAT
一个特殊的目录,包含了每个文件 到FAT索引的映射关系;-1代表文
件的最后一个磁盘块
比链接分配的故障几率更小
逻辑分区的存在,限制了磁盘空间的使用效率。

索引分配

为每个文件分配一个索引磁盘块,包含文件所有数据块地址的固定大小的数据结构。
把FAT中每个文件的关联节点提取出来,形成一个新表叫索引节点,i-node。
一个特殊目录包含所有文件名到i-node的映射关系。
用位矢量来维护空闲列表。
优点:随机访问效果更好,因为i-node用一个精简的数据结构聚集了一个文件的所有磁盘块。
缺点:每个i-node的大小固定,存在最大文件限制。
i-node中数据块指针的个数,决定了文件的最大尺寸。

多级索引分配

目的:解决文件大小限制问题
索引节点指向第二层表,第二层表指向数据块
此方法可以再进行多级扩展。
问题:即使访问小文件,也需 要跨多级列表,效率低

最后

以上就是尊敬网络为你收集整理的计算机体系结构知识汇总一、处理器体系结构二、处理器实现三、中断、陷入及异常四、处理器性能与流水线处理器设计五、处理器调度六、内存管理技术七、输入输出与稳定存储八、文件系统的全部内容,希望文章能够帮你解决计算机体系结构知识汇总一、处理器体系结构二、处理器实现三、中断、陷入及异常四、处理器性能与流水线处理器设计五、处理器调度六、内存管理技术七、输入输出与稳定存储八、文件系统所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部