首页 > 其他分享 >架构知识点(二)

架构知识点(二)

时间:2024-08-04 15:27:34浏览次数:13  
标签:知识点 架构 调度 指令 处理器 寄存器 ALU 分支

轮询调度(Round Robin Scheduling)是一种时间片轮转调度算法,主要用于多任务系统中。其基本思想是将所有任务排成一个队列,每次调度时,系统会从队列中取出下一个任务执行,直到任务完成或达到其时间片限制。当任务的时间片用完后,该任务会被放回队列的末尾,等待下一次调度。

轮询调度的特点:

  1. 公平性:每个任务在相同时间内都有机会被调度执行。
  2. 简单性:调度算法简单,易于实现。
  3. 响应性:任务响应时间可预测,适合实时系统。
  4. 时间片:时间片的大小会影响调度的公平性和响应时间。

轮询调度的工作原理:

  1. 任务队列:所有任务被组织成一个循环队列。
  2. 时间片:每个任务被分配一个固定的时间片。
  3. 调度顺序:调度器按照队列的顺序,依次为每个任务分配时间片,直到任务完成或时间片用尽。
  4. 循环调度:当一个任务的时间片用尽后,它会被放回队列的末尾,等待下一次调度。

轮询调度的实现:

  • 初始化:将所有任务添加到任务队列。
  • 调度:系统从队列中取出第一个任务,为其分配时间片,并开始执行。
  • 时间片管理:在任务执行期间,系统会监控时间片的使用情况。一旦时间片用尽,任务会被放回队列末尾。
  • 循环调度:系统继续从队列中取出下一个任务,重复上述过程。

轮询调度的适用场景:

  • 多任务系统:适合需要同时处理多个任务的系统。
  • 实时系统:适合需要快速响应的实时系统。
  • 公平性要求:适合需要保证每个任务都有公平调度机会的系统。

轮询调度通过时间片的分配,确保每个任务在相同时间内都有相同的调度机会,从而实现调度的公平性。然而,时间片的大小需要根据系统的具体需求进行调整,以平衡任务的响应时间和系统的整体性能。

存储器(Memory)和寄存器(Register)是计算机系统中用于存储数据的两种基本组件,它们在功能和用途上有一些关键的区别:

  1. 存储容量

    • 存储器:通常具有较大的存储容量,可以存储大量的数据和程序。
    • 寄存器:存储容量较小,通常只能存储少量的数据或指令。
  2. 访问速度

    • 存储器:访问速度相对较慢,因为数据存储在外部设备上,需要通过总线传输。
    • 寄存器:访问速度非常快,因为它们通常集成在处理器内部,与处理器的执行单元直接相连。
  3. 成本

    • 存储器:成本相对较低,因为它们使用非易失性存储技术,如硬盘或闪存。
    • 寄存器:成本较高,因为它们使用高速的易失性存储技术,如静态随机存取存储器(SRAM)。
  4. 数据持久性

    • 存储器:数据在断电后依然可以保留,因此是非易失性的。
    • 寄存器:数据在断电后会丢失,因此是易失性的。
  5. 用途

    • 存储器:用于存储程序和数据,是计算机系统的主要存储设备。
    • 寄存器:用于存储处理器当前正在处理的数据和指令,是处理器内部的快速存储设备。
  6. 组织方式

    • 存储器:通常按照字节或字进行组织,具有统一的地址空间。
    • 寄存器:通常按照位或字进行组织,每个寄存器具有唯一的名称和功能。
  7. 可访问性

    • 存储器:可以通过程序代码直接访问,但访问速度较慢。
    • 寄存器:只能通过处理器指令访问,访问速度非常快。
  8. 数量

    • 存储器:数量众多,可以扩展到数GB甚至TB。
    • 寄存器:数量有限,通常只有几十到几百个。
  9. 功耗

    • 存储器:功耗相对较高,尤其是对于非易失性存储器。
    • 寄存器:功耗较低,因为它们是处理器内部的高速存储设备。

总的来说,存储器和寄存器在计算机系统中扮演着不同的角色,存储器主要用于存储大量数据和程序,而寄存器则用于快速处理和存储处理器当前正在使用的指令和数据。

好的,让我们用一个形象化的比喻来解释ALU的功能。

想象一下,ALU就像是一个多功能的厨房。在这个厨房里,你可以做各种烹饪和处理食物的工作,就像ALU可以执行各种算术和逻辑运算一样。

  1. 算术运算

    • 想象你在做数学作业,需要计算一些数字。ALU就像你的计算器,可以帮你做加法、减法、乘法和除法。比如,你可以用它来计算“5加3等于多少”或者“20除以4等于多少”。
  2. 逻辑运算

    • 这就像是你在玩一个逻辑游戏,需要根据一些规则来判断结果。ALU可以帮你做这些逻辑判断,比如:
      • AND(与):就像你和朋友都同意去看电影,只有当你们俩都同意时,才会去。
      • OR(或):就像你和朋友决定去看电影或者去公园,只要你们中有一个人想去,就会去。
      • NOT(非):就像你决定不去看电影,这实际上是对“去看电影”这个决定的否定。
  3. 比较运算

    • 这就像是你在比较两个水果的大小,看看哪个更大。ALU可以帮你比较两个数字,告诉你哪个更大,或者它们是否相等。
  4. 数据类型

    • 就像厨房里可以处理各种食材一样,ALU可以处理不同类型的数据,比如整数、浮点数,甚至是更复杂的数据类型。
  5. 指令集

    • 这就像是你的食谱书,告诉你需要哪些材料和步骤来完成一道菜。ALU的操作也是由处理器的指令集定义的,每个指令告诉ALU需要执行什么样的操作。
  6. 流水线操作

    • 想象一下在餐厅的厨房里,厨师们同时在准备多道菜。ALU在现代处理器中也像这样工作,可以同时处理多个运算,提高效率。
  7. 性能影响

    • 就像厨房的工作效率直接影响到餐厅的服务质量一样,ALU的性能也直接影响到处理器的整体性能。
  8. 集成度

    • 就像现代厨房里所有的设备都是精心设计和布局的一样,ALU和其他处理器组件(如控制单元、寄存器等)也集成在一起,形成一个高效的工作系统。

通过这个比喻,你可以看到ALU就像是一个多功能的厨房,能够处理各种“食材”(数据),并根据“食谱”(指令)来完成各种“烹饪”(运算)任务。这样,整个计算机系统就能高效地运行各种程序和任务。

在计算机体系结构中,lw 是一个常见的汇编语言指令,代表 "load word"。其主要功能是从内存中加载一个词(word,通常是32位或64位,取决于具体的体系结构)到寄存器中。

以下是一些关于 lw 指令的详细说明:

  1. 功能

    • lw 指令用于将内存中的数据加载到寄存器中。在许多处理器架构中,一个 "word" 通常指的是32位的数据。
  2. 语法

    • 典型的语法格式是:lw register, offset(base_register)
    • 其中 register 是目标寄存器,offset 是内存地址的偏移量,base_register 是基址寄存器,其值加上偏移量 offset 形成实际的内存地址。
  3. 用途

    • 这种指令在汇编语言程序中非常常用,用于读取内存中的数据,并将它们存储在寄存器中,以便后续的计算或处理。
  4. 体系结构

    • lw 指令在许多处理器架构中都有使用,尤其是在RISC(Reduced Instruction Set Computer)架构中,如MIPS和ARM(在ARM中,相应的指令可能是 ldr)。
  5. 示例

    • 假设我们有一个基址寄存器 $a0,其值为0x1000,我们想从这个地址开始的内存中加载一个word到寄存器 $t0。指令可能如下:
      lw $t0, 4($a0)
      
      这条指令将从地址0x1004的内存中加载一个word到寄存器 $t0
  6. 影响

    • 执行 lw 指令后,目标寄存器将包含从内存加载的数据,而基址寄存器的值通常不变。
  7. 异常情况

    • 如果内存地址无效或对内存的访问超出了允许的范围,可能会引发异常或错误。

lw 指令是处理器执行内存访问操作的基础,是汇编语言编程中非常基本和重要的指令之一。

在处理器的上下文中,"分支"(Branch)是指程序执行流程中的一个跳转点,它改变了程序执行的顺序。通常,程序的执行是按照代码存储的线性顺序进行的,但分支指令允许程序跳到非相邻的代码位置执行。这就像在阅读一本书时,你可以选择跳过某些章节,跳到另一个章节继续阅读。

分支的基本概念

  1. 无条件分支

    • 无条件分支是直接跳转到程序中的另一个部分执行。这类似于直接翻到书中的某个章节开始阅读。
    • 常见的无条件分支指令有:jmp(跳转),call(调用函数)。
  2. 条件分支

    • 条件分支是依据特定的条件来决定是否跳转。这类似于你根据书中的一些提示来决定是否跳到特定的章节阅读。
    • 常见的条件分支指令包括:if(如果),else(否则),goto(转到),以及处理器中的beq(分支如果相等),bne(分支如果不相等)等。

分支预测

在现代处理器中,为了提高执行效率,处理器会尝试预测分支指令的执行结果,即预测程序将会如何跳转。这样做的原因是因为分支指令执行涉及内存访问和处理器状态的更改,可能会延迟流水线的执行。处理器通常使用以下一些技术来预测分支:

  1. 静态预测

    • 假设所有分支都按照预期执行,例如总是预测为“不跳转”。
  2. 动态预测

    • 使用历史数据来预测分支的行为。例如,如果一个分支在过去多次被跳过,处理器可能会预测它在未来也会被跳过。
  3. 局部历史预测

    • 考虑最近的分支指令的历史来做出预测,而不仅仅是当前分支。
  4. 全局历史预测

    • 考虑整个程序执行过程中的分支历史来做出预测。
  5. 混合预测

    • 结合多种预测技术来提高预测的准确性。

分支预测的影响

准确的分支预测可以显著提高处理器效率,因为它可以减少因等待分支结果而产生的延迟。然而,预测错误可能会引起控制冒险,导致流水线中的指令需要重新调度,从而降低效率。

形象化解释

将程序比作一条高速公路,分支就像是高速公路上的岔道口。处理器就像汽车,需要在岔道口决定是继续沿着主路行驶,还是转向岔道。分支预测就像是司机根据车速、路线和经验来预测是否需要转弯。如果预测正确,汽车可以顺利通过岔道口,继续高速行驶;如果预测错误,可能需要减速或停车,重新选择路线。

通过这种方式,理解分支及其在处理器中的作用就像理解驾驶时的路线选择一样直观。

标签:知识点,架构,调度,指令,处理器,寄存器,ALU,分支
From: https://www.cnblogs.com/jzzg/p/18341788

相关文章

  • 【Linux】网络架构探秘:网络层功能、IP协议详解及路由过程指南
    文章目录前言:1.网络层是干什么的?2.IP协议2.1理论铺垫2.2IP协议的头格式2.3网段划分(重点)2.3.1分类划分法:2.3.2子网掩码:2.3.3为什么要经行子网划分?2.4特殊的IP地址2.5IP地址的数量限制2.6私有IP地址和公网IP地址3.路由过程总结:前言:在当今数字化时代......
  • 第6天:信息打点-Web 架构篇&域名&语言&中间件&数据库&系统&源码获取
    #知识点:1、打点-Web架构-语言&中间件&数据库&系统等操作系统:有些漏洞出现的系统不一样、便于知道哪些漏洞可以在目标上攻击Windows&linux开发语言:漏洞的开发语言中间件容器IIS&Apache&Nginx&Tomcat&Weblogic&jboosASP&PHP&Java&python&JavaScript等2、打点-Web源码-......
  • 【香橙派系列教程】(四)基于ARM-Linux架构的语音控制刷抖音项目
    【四】基于ARM-Linux架构的语音控制刷抖音项目文章目录【四】基于ARM-Linux架构的语音控制刷抖音项目1.语音模块配置1.创建产品2.引脚配置3.词条定义4.添加控制5.发布版本6.烧录固件2.编程实现语音和开发板通信3.手机接入Linux热拔插1.dmesg命令2.adb调试踩坑问题3.总......
  • MCAL 架构
    目录一、MCAL架构简介二、Microncontroller驱动组2.1MCU驱动2.2WDG驱动2.3GPT模式三、Memory驱动组3.1FLS驱动3.2 EEP驱动四、Communication驱动组4.1SPI驱动4.2LIN驱动4.3CAN驱动4.4FlexRay驱动(FR驱动)4.5以太网驱动(ETH驱动)五、I/O驱动组5.1PORT......
  • 计算机网络知识点汇总第一章:概述
    目录一.网络二.终端三.广域网四.局域网五.互联网的发展六.www和浏览器七.互联网的应用八.互联网的组成九.互联网的核心部分分组交换报文交换十.计算机网络的定义十一.计算机网络的分类十二.性能指标 十三.五层结构的职能十五.协议的封装和解封装十六.实体......
  • 2024年暑假关于线段树和树状数组的小知识点
    1.线段树的树形结构使得存储其的数组应开4N,其中N为元素个数2.多用宏定义使代码更简单3.树状数组求逆序对一般会写成add(a[i],1);quiry(a[i]-1);这会导致当元素值域包含0时传入-1导致死循环,可以在quiry函数判断合法性;一种比较好的写法是干脆add时add(a[i]+1,1),然后直接查......
  • OSPF知识点大全,网络工程师快速收藏!
    OSPF概述与基本原理OSPF(OpenShortestPathFirst)是一个内部网关协议(IGP),用于在单一自治系统(AS)内交换路由信息。它是一个基于链路状态的协议,由IETF开发和维护,首次定义在RFC1131中,后来在RFC2328中得到扩展。OSPF采用Dijkstra的SPF算法来计算最短路径,以保证数据包能够通过最......
  • Python知识点
    目录1、数据类型2、变量3、列表4、集合5、字典6、注释7、基本功能8、条件语句9、循环语句10、函数11、异常处理12、字符串操作13、正则表达式1、数据类型数据类型是可以存储在变量中的数据规范。解释器根据变量的类型为变量分配内存。下面是Python中的各种......
  • 第五章 向量运算(知识点及笔记)
    以下是第五章(向量运算)的知识点,笔记也给大家整理好了......
  • 使用线程池你应该知道的知识点
    多线程编程是每一个开发必知必会的技能,在实际项目中,为了避免频繁创建和销毁线程,我们通常使用池化的思想,用线程池进行多线程开发。线程池在开发中使用频率非常高,也包含不少知识点,是一个高频面试题,本篇总结线程池的使用经验和需要注意的问题,更好的应对日常开发和面试。如有更多知......