GVKun编程网logo

重学计算机组成原理(九)- 动态链接(动态链接的原理)

15

本文将带您了解关于重学计算机组成原理的新内容,同时我们还将为您解释九-动态链接的相关知识,另外,我们还将为您提供关于知乎热议:程序员为啥要学计算机组成原理?、计算机组成原理(二)——计算机的基本组成、

本文将带您了解关于重学计算机组成原理的新内容,同时我们还将为您解释九- 动态链接的相关知识,另外,我们还将为您提供关于知乎热议:程序员为啥要学计算机组成原理?、计算机组成原理(二)——计算机的基本组成、计算机组成原理(上)第 1 章 计算机系统概论、计算机组成原理(上)第3章 测试的实用信息。

本文目录一览:

重学计算机组成原理(九)- 动态链接(动态链接的原理)

重学计算机组成原理(九)- 动态链接(动态链接的原理)

把对应的不同文件内的代码段,合并到一起,成为最后的可执行文件

链接的方式,让我们在写代码的时候做到了“复用”。

同样的功能代码只要写一次,然后提供给很多不同的程序进行链接就行了。

“链接”其实有点儿像我们日常生活中的标准化、模块化生产。

有一个可以生产标准螺帽的生产线,就可生产很多不同的螺帽。

只要需要螺帽,都可以通过链接的方式,去复制一个出来,放到需要的地方

但是,如果我们有很多个程序都要通过装载器装载到内存里面,那里面链接好的同样的功能代码,也都需要再装载一遍,再占一遍内存空间。

这就好比,假设每个人都有骑自行车的需要,那我们给每个人都生产一辆自行车带在身边,固然大家都有自行车用了,但是马路上肯定会特别拥挤。

1 链接可以分动、静,共享运行省内存

我们上一节解决程序装载到内存的时候,讲了很多方法。说起来,最根本的问题其实就是内存空间不够用

如果能够让同样功能的代码,在不同的程序里面,不需要各占一份内存空间,那该有多好啊!

就好比,现在马路上的共享单车,我们并不需要给每个人都造一辆自行车,只要马路上有这些单车,谁需要的时候,直接通过手机扫码,都可以解锁骑行。

这个思路就引入一种新的链接方法,叫作动态链接(Dynamic Link)

相应的,我们之前说的合并代码段的方法,就是静态链接(Static Link)

在动态链接的过程中,我们想要“链接”的,不是存储在硬盘上的目标文件代码,而是加载到内存中的共享库(Shared Libraries)

这个加载到内存中的共享库会被很多个程序的指令调用到。

  • 在Windows下,这些共享库文件就是.dll文件,也就是Dynamic-Link Libary(DLL,动态链接库) 用了“动态链接”的意思

  • 在Linux下,这些共享库文件就是.so文件,也就是Shared Object(一般我们也称之为动态链接库)。用了“共享”的意思

正好覆盖了两方面的含义。

2 地址无关很重要,相对地址解烦恼

要在程序运行的时候共享代码,这些机器码必须“地址无关

也就是说,我们编译出来的共享库文件的指令代码,是地址无关码(Position-Independent Code)

换句话说就是,这段代码,无论加载在哪个内存地址,都能够正常执行

如果还不明白,我给你举一个生活中的例子 如果我们有一个骑自行车的程序,要“前进500米,左转进入天安门广场,再前进500米”。它在500米之后要到天安门广场了,这就是地址相关的。如果程序是“前进500米,左转,再前进500米”,无论你在哪里都可以骑车走这1000米,没有具体地点的限制,这就是地址无关的。

大部分函数库其实都可以做到地址无关,因为它们都接受特定的输入,进行确定的操作,然后给出返回结果就好了。

无论是实现一个向量加法,还是实现一个打印的函数,这些代码逻辑和输入的数据在内存里面的位置并不重要。

而常见的地址相关的代码,比如绝对地址代码(Absolute Code)、利用重定位表的代码等等,都是地址相关的代码

回想一下我们之前讲过的重定位表。在程序链接的时候,我们就把函数调用后要跳转访问的地址确定下来了,这意味着,如果这个函数加载到一个不同的内存地址,跳转就会失败。

对于所有动态链接共享库的程序来讲,虽然我们的共享库用的都是同一段物理内存地址,但是在不同的应用程序里,它所在的虚拟内存地址是不同的。

没办法、也不应该要求动态链接同一个共享库的不同程序,必须把这个共享库所使用的虚拟内存地址变成一致。

如果这样的话,我们写的程序就必须明确地知道内部的内存地址分配。

那么问题来了,我们要怎么样才能做到,动态共享库编译出来的代码指令,都是地址无关码呢?

动态代码库内部的变量和函数调用都很容易解决,我们只需要使用相对地址(Relative Address)

各种指令中使用到的内存地址,给出的不是一个绝对的地址空间,而是一个相对于当前指令偏移量的内存地址

因为 整个共享库是放在一段连续的虚拟内存地址中的,无论装载到哪一段地址,不同指令之间的相对地址都是不变的

3 动态链接的解决方案

PLT和GOT

要实现动态链接共享库,也并不困难,和前面的静态链接里的符号表和重定向表类似

拿出一小段代码来看一看。

  • lib.h 定义了动态链接库的一个函数 show_me_the_money 

  • lib.c 包含了lib.h的实际实现 

  • show_me_poor.c 调用了 lib 里面的函数 

  • 把 lib.c 编译成了一个动态链接库,也就是 .so 文件 

  • 最终生成文件集 

在编译的过程中,指定了一个 -fPIC 的参数

其实就是Position Independent Code意,也就是要把这个编译成一个地址无关代码

然后,我们再通过gcc编译 show_me_poor 动态链接了 lib.so 的可执行文件

  • 在这些操作都完成了之后,我们把 show_me_poor 这个文件通过objdump出来看一下

我们还是只关心整个可执行文件中的一小部分内容

  • 在main函数调用show_me_the_money的函数的时候,对应的代码是这样的: 

这里后面有一个@plt的关键字,代表了我们需要从PLT,也就是程序链接表(Procedure Link Table)里面找要调用的函数。对应的地址呢,则是400580这个地址。

那当我们把目光挪到上面的 400580 这个地址,你又会看到里面进行了一次跳转,

  • 这个跳转指定的跳转地址,你可以在后面的注释里面可以看到: 这里的 GLOBAL_OFFSET_TABLE,就是我接下来要说的全局偏移表。

在动态链接对应的共享库,我们在共享库的data section里面,保存了一张全局偏移表(GOT,Global Offset Table)

虽然共享库的代码部分的物理内存是共享的,但是数据部分是各个动态链接它的应用程序里面各加载一份的。

所有需要引用当前共享库外部的地址的指令,都会查询GOT,来找到当前运行程序的虚拟内存里的对应位置

而GOT表里的数据,则是在我们加载一个个共享库的时候写进去的。

不同的进程,调用同样的 lib.so,各自GOT里面指向最终加载的动态链接库里面的虚拟内存地址是不同的。

这样,虽然不同的程序调用的同样的动态库,各自的内存地址是独立的,调用的又都是同一个动态库,但是不需要去修改动态库里面的代码所使用的地址,

而是各个程序各自维护好自己的GOT,能够找到对应的动态库就好了

GOT表位于共享库自己的数据段里

GOT表在内存里和对应的代码段位置之间的偏移量,始终是确定的

这样,共享库就是地址无关的代码,对应的各个程序只需在物理内存里加载同一份代码

而我们又要通过各个可执行程序在加载时,生成的各不相同的GOT表,找到它需要调用到的外部变量和函数的地址

这是一个典型的、不修改代码,而是通过修改“地址数据”来进行关联的办法

它有点像我们在C语言里面用函数指针来调用对应的函数,并不是通过预先已经确定好的函数名称来调用,而是利用当时它在内存里面的动态地址来调用。

4 总结

终于在静态链接和程序装载后,利用动态链接把我们的内存利用到了极致

同样功能的代码生成的共享库,我们只要在内存里面保留一份就好了

这样

  • 不仅能够做到代码在开发阶段的复用

  • 也能做到代码在运行阶段的复用。

实际上,在进行Linux程序开发,一直会用到各种各样的动态链接库。

C语言的标准库就在1MB以上。

撰写任何一个程序可能都需要用到这个库,常见的Linux服务器里,/usr/bin下面就有上千个可执行文件。

如果每一个都把标准库静态链接进来的,几GB乃至几十GB的磁盘空间一下子就用出去了。如果我们服务端的多进程应用要开上千个进程,几GB的内存空间也会一下子就用出去了。这个问题在过去计算机的内存较少的时候更加显著。

通过动态链接这个方式,可以说彻底解决了这个问题。

就像共享单车一样,如果仔细经营,是一个很有社会价值的事情,但是如果粗暴地把它变成无限制地复制生产,给每个人造一辆,只会在系统内制造大量无用的垃圾。

已经把程序怎么从源代码变成指令、数据,并装载到内存里面,由CPU一条条执行下去的过程讲完了。希望你能有所收获,对于一个程序是怎么跑起来的,有了一个初步的认识。

5 推荐阅读

想要更加深入地了解动态链接,推荐你可以读一读《程序员的自我修养:链接、装载和库》的第7章

里面深入地讲解了,动态链接里程序内的数据布局和对应数据的加载关系。

参考

  • 深入浅出计算机组成原理


















本文分享自微信公众号 - JavaEdge(Java-Edge)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

知乎热议:程序员为啥要学计算机组成原理?

知乎热议:程序员为啥要学计算机组成原理?

最近逛知乎,看到一个很有意思的帖子。我想这可能是很多人的心声。



下面的观点也挺鲜明的:这是科班与培训班的区别


只能说,太真实了。我上学的时候,就没学好组成原理。后来到工作中就发现,增删改查还可以,遇到点底层问题就懵逼,而那些基本功好的科班生,学新东西都很快,升职加薪更是轻轻松松。


我想,这也是一个人能否去大厂的一个区别。毕竟大厂都很看重基本功,尤其想做一名优秀的工程师,如果都不了解计算机是怎么工作的,程序在计算机中怎么运作的,那怎么行得通呢?


像我经常会收到一些粉丝的反馈:说升小领导接触更多项目后,感觉自己底层原理很弱,在编程的时候总有空中楼阁的感觉;有的说工作多年,竟然看不懂科班出身同事实现的数据序列化协议,太尴尬了;还有人日常搬运代码,遇到些网络或者数据库里的乱码、强制类型转换等等大坑,就懵逼了。


说白了,就是基本功出了问题。这也是为什么,很多人在工作两年后,反而回去补组成原理这些专业课知识。 


而且,计算机领域的学科渗透和交叉很厉害,学点底层的东西,有一门精通,你找工作就很占优势。


作为计算机入门和底层知识的第一课,组成原理其重要程度,就和数据结构与算法一样,都是程序员必修的“硬核内功”。

要知道,它可以直接解决你在并发编程、性能优化中经常遇到的一些困惑,比如 CPU Cache 的原理是什么,CPU 和 I/O 之间是如何通信的,虚拟内存是要解决什么问题。可以说,你基本可以掌握计算机的全貌了。

 

我曾经下苦功,想好好啃啃组成原理,但概念多,太抽象,难理解,不好学以致用。资料我也看过不少,说句不好意思的,我大部分买来的书,都是前面 10 页已经发黄了,后面 500 页从来没有打开过。

 

只啃原理不行的,还是要与实际代码工作相结合,在这我分享一份,之前收藏的学习资料 —— 「组成原理全景图」,把零散的概念系统地整理在一起,建议收藏:

 

这张思维导图,出自徐文浩的专栏《深入浅出计算机组成原理》,这课可以说是我在极客时间学习,收获最大的课之一了,他用工作实际场景 + 软件开发案例,讲了 30+ 组成原理的核心知识,教你真正看懂、学会、记住,从源头理解软、硬件的共同之处,洞悉性能问题的本质。


除了理论讲的透彻,最重要的,还结合工业界的应用,要知道徐文浩老师在创业,随手就是各种实践案例,简直是一个宝藏老师,宝藏课程,口碑那么好,群众的眼睛是雪亮的,我目前 2 刷完毕,真是常看常新,时时有收获。

 

这个专栏已经快将近 2W 订阅了。今晚这个专栏要涨价到 ¥129 了,现在到手只需要 ¥69 。感兴趣的小伙伴可以先扫码免费试读。


秒杀 + 口令「yuanli666」
到手   ¥69 今晚24:00  后涨至¥129


我来介绍下徐文浩, BotHub.AI 创始人,从 7 岁开始接触代码,近 30 年的码龄。写过各种大型企业软件,从零开始搭建支撑每天百亿流量的广告算法系统,提升了十倍以上的广告收入和 ROI,工业界的牛人了。

 

现在专栏已经更新完毕,一共 62 讲。跟着读下来,最大的感触是,这个老师太会讲了,要知道越是底层的东西,越不好讲透,能把这么枯燥无聊的原理,讲得明明白白,讲述中还充满了魔力,又吸引着我去深挖下去。

 

比如,特色之一:图文并茂,配合给大家讲解复杂问题,简洁又清晰。

 

一图胜千言,理论看不懂,拆开了揉碎了,总能明白吧。

 

比如,专栏特色之二:每个章节都会留个符合内容的思考题,徐文浩老师经常在评论里解答,这种耐心、负责的分享精神,真的很难得了。

 

我的建议,光读文章可不够,还得多看看下面的思考题,更精彩,而且往往能有新的启发。

 

 

关于组成原理对程序员的作用,我再来引用一下 Rust 大神张汉东在知乎上的回答:




大家都知道,计算机考研统考有 门核心基础课程:数据结构与算法、操作系统,计算机网络,以及组成原理,等你做了多年研发以后,会发现,原来这么多年就是围绕这 4 门课程打转。

 

关于基本功的重要性,我觉得怎么强调都不过分,记得《倚天屠龙记》里,张无忌几个时辰,就把别人几十年没有练成的乾坤大挪移学会了,最根本的原因,是他有“九阳神功”练就的内功底子。

 

同样的,深入学习这门“底层知识”,就是在练扎马步、核心肌肉力量,提升你自己的“根骨”和“资质”,从而拔高你发展的上限

 

下面是专栏的目录,看着感觉很不错,理论和实践相结合。

 


都说大学玩游戏,工作来补课,出来混迟早要还的。


所以还是那句话:种一棵树最好的时间是十年前,其次是现在,抓住机会。


我同样也给大家争取到了福利优惠

原价 ¥99,秒杀 ¥79

叠加优惠口令「yuanli666」

到手 ¥69,相当于半价了

今晚 24:00 涨到 ¥129 啦


扫码查看详情

点击「阅读全文」,2 杯奶茶的价格,补补基本功。今晚24:00就涨价了。

本文分享自微信公众号 - dotNET跨平台(opendotnet)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

计算机组成原理(二)——计算机的基本组成

计算机组成原理(二)——计算机的基本组成

计算机的基本组成

冯·诺依曼计算机结构图

  冯·诺依曼计算机以运算器为中心。

 

冯·诺依曼计算机特点

  1.计算机由运算器、控制器、存储器、输入设备和输出设备五大部件组成。

  2.指令和数据以同等地位存放在存储器中,并可按地址寻访。

  3.指令和数据均用二进制数表示。

  4.指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的地址。

  5.指令在存储器中按顺序存放。通常,指令是顺序执行的,在特定条件下,可根据运算结果或根据特定的条件改变执行顺序。

  6.机器以运算器为中心,输入输出设备与存储器之间的数据传输通过运算器完成。

存储程序概念

  冯·诺依曼模型要求程序必须存储在内存中,现代计算机的存储单元用来存储程序及其响应数据,这就意味着数据和程序应该具有相同的格式,这是因为它们都存储在存储器中。

  实际上它们都是以二进制形式存储在内存中的。

 

现代计算机结构图

  现代计算机已在冯·诺依曼体系结构的基础上转化为以存储器为中心

  各部件的功能

    计算机的5大部件在控制器的指挥下,有条不紊的完成各项任务。

      1. 运算器用来完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器中。

      2.存储器用来存放数据和程序。

      3.控制器用来控制、指挥程序和数据的输入、运行以及处理运算结果。

      4.输入设备用来将人们熟悉的信息形式转换为机器能识别的信息形式。

      5.输出设备可将机器运算结果转换为人们熟悉的信息形式。

  现代计算机已将运算器和控制器集成为CPU

    由于运算器和控制器在逻辑关系和电路结构上联系紧密,在大规模集成电路技术成熟后,将运算器和控制器集成在同一个芯片上,合称为中央处理器(CPU, Central Processing Unit)

    此外,CPU中还有一些寄存器组。即CPU由运算器控制器寄存器组构成。

现代计算机硬件简化组成框图

    由于运算器和控制器被集成为CPU,所以可认为现代计算机由三大部分组成:CPUI/O设备(Input/Output Equipment)主存储器(MM, Main Memory)。

    算术逻辑单元 (ALU, Arithmetic Logic Unit) 用来完成算术运算和逻辑运算。

    控制单元(CU, Control Unit)用来解释存储器中的指令,并发出各种操作指令来执行指令。

 

 

存储器的基本组成 

    这里讨论的是主存,即内存。

    主存储器包括存储体、MARMDR、各种逻辑部件及控制电路。

  存储器内部结构说明

    一个主存储器(内存条)由多个存储体组成,一个存储体中有许多存储单元,一个存储单元中有若干个(8、16、32个等)存储元件

    每个存储元件能存储一个二进制数 “0” 或 “1”;

  存储字 存储字长

    • 存储字:一个存储单元存储的二进制代码;
    • 存储字长:一个存储单元存储的二进制代码的位数;存储字长可以是8位、16位、32位等。

      一个存储字可以表示一个二进制数、十进制数、十六进制数、一串字符、ASCII码、一条指令等。

      如:存储字0011011001111101,表示16位的二进制数,表示十进制数13949,表示十六进制数367DH,表示两个ASCII码“6”和“}”,表示某条指令。

      指令与数据保存在存储器中;

  按地址寻访

    • 按地址寻访:赋予每个存储单元一个地址号,按存储单元的地址号实现对存储字的存(写入)、取(读出)。

        如,将编写好的程序的各条指令预先存入各存储单元,当运行程序时,只要给出程序首条指令在主存中的首地址,然后采用程序计数器加1的方法,自动形成下一条指令所在存储单元的地址,机器便可自动完成整个程序的运行。

        又如,当需要重复使用某个数据或某条指令时,只要指出其相应的存储单元地址号即可,不必占用更多的存储单元重复存放同一数据或同一指令,从而提高存储空间利用率。

  两个寄存器

    MAR(Memory Address Register), 存储器地址寄存器。

    • 作用:存放存储单元的地址(编号)。
    • MAR 的位数与存储单元的个数对应。如,若存储单元有1024=210个,则MAR有10位。
    • MAR 反映存储单元的个数。

    MDR(Memory Data Register),存储器数据寄存器。

    • 作用:存放准备存入存储单元的数据,或存放从存储单元中取出准备送往 CPU 的数据。
    • MDR 的位数等于存储字长。
    • MDR 反映存储字长,及单个存储单元的长度。

 运算器的基本组成

    运算器功能:执行各种算术运算和逻辑运算操作的部件。  

    运算器的基本操作包括加、减、乘、除四则运算;与、或、非、异或等逻辑运算;以及移位、比较和传送等操作。

 

累加器

ACC

(Accumulator)

MQ

(Multiplier-Quotient Register)

乘商寄存器

X

操作数寄存器

加法

被加数

——

加数

减法

被减数

——

减数

乘法

乘积高位

乘数

被乘数

乘积低位

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

控制器的基本组成

    控制器的功能:解释指令,保证指令的按序执行。

  PC:程序计数器 (Program Counter)。

  IR:指令寄存器 (Instruction Register)。

  完成一条指令过程中控制器发挥的作用:

  1.取指令:命令存储器读出一条指令。

    动作部件:程序计数器PC。

    存放当前将要执行指令的地址,具有计数功能(PC)+1→PC,即可形成下一条指令地址。PC与主存的存储器地址寄存器MAR之间有一条直接通路。

    PC→MAR→M→MDR→IR

    动作部件:指令寄存器IR。

    存放当前将要执行的指令;将IR中指令的操作码送至CU,用来分析;将IR中指令的地址码送至存储器的MAR,作为操作数的地址。

    OP(IR):IR中指令的操作码。OP(IR)→CU

    AD(IR):IR中的指令地址码。AD(IR)→MAR

  2.分析(解释)指令:分析该指令要完成那些操作,明确操作数的地址。

    动作部件:控制单元CU。

    分析当前指令所需要完成的操作。

  3.执行指令:根据操作数所在的地址和指令的操作码完成某种操作。

    动作部件:控制单元CU。

    发出各种微操作命令序列,控制所有被控对象完成动作。

 

计算机组成原理(上)第 1 章 计算机系统概论

计算机组成原理(上)第 1 章 计算机系统概论

1、单选(1分)
以小规模集成电路为主要器件的是__B_

A.第二代计算机
B.第三代计算机
C.第一代计算机
D.第四代计算机

2、单选(1分)
现代的计算机结构与典型的冯·诺依曼计算机结构的区别是现代计算机已转化为以_D__为中心

A.运算器
B.控制器
C.外围设备
D.存储器

3、单选(1分)
存放在存储器中的数据按照_B__访问

A.哈希
B.地址
C.指针
D.索引

4、单选(1分)
现代计算机由CPU、I/O设备及_B__组成。

A.外部设备
B.主存储器
C.主机
D.硬盘

5、单选(1分)
主存储器又称__D_

A.辅存
B.硬盘
C.控制器
D.内存

6、单选(1分)
计算机系统是一个由硬件,软件组成的多级层次结构,它在各个层次上可以抽象为不同的机器,通常可抽象为微程序机器M0(微指令系统)、传统机器M1(机器语言机器)、虚拟机器M2(操作系统机器)、虚拟机器M3(汇编语言机器)、虚拟机器M4(高级语言机器),
在这里插入图片描述

其中微程序机器M0(微指令系统)的执行的功能是:_D__

A.用汇编程序翻译成机器语言程序
B.用机器语言解释操作系统
C.用微程序解释机器指令
D.由硬件直接执行微指令

7、单选(1分)
以下被誉为计算机的中枢神经,由它来指挥各部件协调工作的是__D

A.运算器
B.存储器
C.无正确答案
D.控制器

8、单选(1分)
以下语言中哪一种在计算机上执行最快?B

A.JAVA
B.汇编语言
C.python
D.C++

9、单选(1分)
冯诺依曼机工作方式的基本特点是?A

A.无正确答案
B.存储器按内容选择地址
C.堆栈操作
D.多指令流多数据流

10、多选(2分)
以下哪些术语是用来评价CPU的性能_ACD_

A.CPI
B.MDR
C.FLOPS
D.MIPS

11、多选(2分)
下列哪些是计算机组成讨论的问题?BCD

A.如何设计算法
B.如何实现乘法指令
C.如何取指令
D.如何分析指令

12、多选(2分)
1945年,数学家冯·诺依曼提出了“存储程序”的概念,以此概念为基础的各类计算机统称为冯·诺依曼机。下面关于典型的冯·诺依曼机特点说法正确的是(多选):ABCD

A.指令在存储器内按顺序存放
B.指令和数据均用二进制数表示
C.计算机由运算器、存储器、控制器、输入设备和输出设备五大部件组成。
D.指令由操作码和地址组成,操作码用来表示操作性质,地址码用来表示操作数在存储器中的位置


1、单选(1分)
以小规模集成电路为主要器件的是_C__

A.第二代计算机
B.第四代计算机
C.第三代计算机
D.第一代计算机

2、单选(1分)
下列语句中,表述错误的是_A__

A.1 MB = 1024 Kb
B.1 KB = 1024 * 8 b
C.1 MB = 1024 * 1024 B
D.1 KB = 1024 B

3、单选(1分)
已知一个主存储器的MDR为32位,MAR为16位,则该主存储器的大小是__D_

A.2^32 * 4b
B.2^32 * 4B
C.2^16 * 4b
D.2^16 * 4B

4、单选(1分)
可以直接在机器上运行的语言为__C_

A.汇编语言
B.C语言
C.机器语言
D.Java语言

5、单选(1分)
现代计算机由CPU、I/O设备及_C__组成。

A.外部设备
B.主存储器
C.硬盘
D.主机

6、单选(1分)
将高级语言程序翻译成机器语言程序需借助于__D__

A.编辑程序
B.连接程序
C.汇编程序
D.编译程序

7、单选(1分)
计算机系统中的存储系统是指_C___

A.主存
B.RAM存储器
C.主存和辅存
D. ROM存储器

8、单选(1分)
计算机系统中有很多条指令,不同指令主机完成一条指令的过程也不尽相同,以下是某指令的执行过程.
在这里插入图片描述

上述框图中,是指令_C___的执行过程。

A.乘法指令
B.加法指令
C.取数指令
D.存数指令

9、单选(1分)
对于32位的计算机,一个字节由几位组成?C

A.16
B.8
C.32
D.无正确答案

10、多选(2分)
存放在寄存器ACC中的操作数有__AC_

A.被加数及和
B.乘数及乘积高位
C.被除数及余数
D.商

11、多选(2分)
控制器的组成部分有_ABC__

A.控制单元
B.程序计数器
C.指令寄存器
D.地址寄存器

12、多选(2分)
计算机硬件的主要指标包括(多选)ABD

A.机器字长
B.存储容量
C.总线宽度
D.运算速度

计算机组成原理(上)第3章 测试

计算机组成原理(上)第3章 测试

1、单选(1分)
下列不属于系统总线的为___

A.片内总线
B.地址总线
C.控制总线
D.数据总线

正确答案:A你选对了

解析:  A、系统总线是指CPU、主存、I/O设备各大部件之间的信息传输线。按系统总线传输信息的不同,又可分为三类;数据总线、地址总线和控制总线。

2、单选(1分)
DMA总线用于___之间交换信息

A. I/O设备间
B.主存与I/O设备
C. CPU与主存
D.CPU与I/O设备

正确答案:B你选对了

解析:  B、DMA总线用于高速I/O设备与主存之间直接交换信息

3、单选(1分)
在计算机的总线中,不同信号在同一条信号线上分时传输的方式称为___

A.并行或串行传输
B.并行传输
C.总线复用
D.串行传输

正确答案:C你选对了

解析:  C、总线复用,指的是数据和地址在同一个总线上传输的方式。既同一条信号线上分时传输不同的信号。

4、单选(1分)
总线是连接多个模块的信息传输线,是各部件共享的传输介质。因此在某一时刻允许有___个部件向总线发送信息。

A.三个
B.一个
C.多个
D.两个

正确答案:B你错选为C

解析:  B、在总线上,某一时刻只允许一个部件向总线发送信息,但多个部件可以同时从总线上接收相同的信息。

5、单选(1分)
以下几种总线判优控制方式中,响应速度快,优先次序控制灵活,但控制线数量多,总线控制更为复杂的是___

A.计时器定时查询方式
B.都可以
C.链式查询方式
D.独立请求方式

正确答案:D你错选为B

解析:  D、链式查询方式和计时器定时查询方式其优先次序是固定的,设计时可以更改,设计完成后则不能更改。独立请求方式使用排队电路来判优,可通过编程来改变优先次序。

6、单选(1分)
在三种集中式总线控制中, 方式对电路故障最敏感。

A.独立请求
B.链式查询
C.都一样
D.计数器式定时查询

正确答案:B你错选为C

解析:  B、链式查询只需要很少几根线就能按一定优先次序实现总线控制,但是所有设备使用一套BR和BG,因此对电路故障很敏感。

7、单选(1分)
总线通信控制主要解决通信双方如何获知传输开始和传输结束,以及通信双方如何协调如何配合。
通常有四种方式:同步通信、异步通信、半同步通信和分离式通信。
同步通信中,通信双方由统一时标控制数据传送。下图表示了某输入设备向CPU传输数据的同步通信过程。
图中总线传输周期是连接在总线上的两个部件完成一次完整且可靠地信息传输时间,它包含4个时钟周期T1 、T2 、T3 、T4 。在上图所示读命令中,T3时钟周期执行的操作是____
在这里插入图片描述

A.从模块提供数据
B.主模块发读命令
C.主模块撤销读命令,从模块撤销数据
D.主模块发出地址

正确答案:A你选对了

解析:  A、同步通信在系统总线设计时,对T1 、T2 、T3 、T4都有明确、唯一的规定。
对于读命令,其传输周期如下:
T1 主模块发出地址。 
T2 主模块发读命令 
T3 从模块提供数据  
T4 主模块撤销读命令,从模块撤销数据

8、单选(1分)
总线通信控制主要解决通信双方如何获知传输开始和传输结束,以及通信双方如何协调如何配合。通常有四种方式:同步通信、异步通信、半同步通信和分离式通信。在异步通信中,应答方式又可分为不互锁、半互锁和全互锁三种类型。下图表示了异步通信中请求与应答的互锁关系,下列说法正确的是____
在这里插入图片描述

A.(1)是不互锁 (2)是全互锁 (3)是半互锁
B.(1)是不互锁 (2)是半互锁 (3)是全互锁
C.(1)是全互锁 (2)是不互锁 (3)是是半互锁
D.(1)是半互锁 (2)是不互锁 (3)是全互锁

正确答案:B你选对了
9、单选(1分)
总线宽度又成总线位宽,它是总线上同时能够传输的数据位数,通常是指____的根数

A.地址总线
B.数据总线+控制总线+地址总线
C.数据总线
D.控制总线

正确答案:C你选对了
10、多选(2分)
总线特性包括___

A.功能特性
B.控制特性
C.机械特性
D.信号特性

正确答案:A、C你选对了
11、多选(2分)
下列选项中的英文缩写均为总线标准的是___

A.CPI
B.ISA
C.PCI
D.MIPS

正确答案:B、C你选对了
12、多选(2分)
控制总线中常见的控制信号包括___

A.总线请求
B.存储器写
C.时钟
D.传输响应

正确答案:A、B、C、D你选对了


1、单选(1分)
下列不属于系统总线的为___

A.数据总线
B.片内总线
C.控制总线
D.地址总线

正确答案:B你选对了

解析:  B、系统总线是指CPU、主存、I/O设备各大部件之间的信息传输线。按系统总线传输信息的不同,又可分为三类;数据总线、地址总线和控制总线。

2、单选(1分)
DMA总线用于___之间交换信息

A.CPU与I/O设备
B.主存与I/O设备
C. CPU与主存
D. I/O设备间

正确答案:B你选对了

解析:  B、DMA总线用于高速I/O设备与主存之间直接交换信息

3、单选(1分)
在计算机的总线中,不同信号在同一条信号线上分时传输的方式称为___

A.并行或串行传输
B.串行传输
C.总线复用
D.并行传输

正确答案:C你选对了

解析:  C、总线复用,指的是数据和地址在同一个总线上传输的方式。既同一条信号线上分时传输不同的信号。

4、单选(1分)
衡量总线本身所能达到最高传输速率的重要指标是___

A.信号线数
B.总线宽度
C.总线带宽
D.总线复用

正确答案:C你选对了

解析:  C、总线性能包括总线宽度、总线带宽、时钟同步/异步、总线复用、信号线数、总线控制方式及负载能力等。其中总线带宽衡量总线本身所能达到的最高传输速率。

5、单选(1分)
在异步串行传输系统中,假设每秒传输120个数据帧,其字符格式规定包含1个起始位,7个数据位,1个奇偶校验位,1个终止位,则波特率为___。

A.600bps
B.800bps
C.1200bps
D.900bps

正确答案:C你选对了

解析:  C、一帧包含1+7+1+1=10位 故波特率为10*120=1200bps

6、单选(1分)
在异步传输系统中,若字符格式为:1位起始位、8位数据位、1位奇偶校验位、1位终止位,假设波特率为1200bps,则比特率为 .

A.872.72bps
B.981.81bps
C.1200bps
D.1320bps

正确答案:A你选对了

解析:  A、有效数据为为8位,则比特率为1200*8/11=872.72bps

7、单选(1分)
总线复用方式可以___。

A.增加总线的功能
B.提高总线的传输带宽
C.实现并行传输
D.减少总线中信号线的数量

正确答案:D你错选为B

解析:  D、总线复用就是为了减少总线的数量而提出的。

8、单选(1分)
总线上连接着各类设备,按其对总线有无控制能力可分为主设备和从设备两种。若多个主设备同时要使用总线时,就由总线控制器的判优、仲裁逻辑按照一定的优先等级顺序确定哪个主设备能使用总线。

总线判优控制可分集中式和分布式两种,常见的集中控制优先权仲裁方式有三种:链式查询方式、计数器定时查询、独立请求方式。以下为______总线判优方式的接线图:
在这里插入图片描述

A.某种分布式判优
B.链式查询方式
C.计数器定时查询
D.独立请求方式

正确答案:D你选对了
9、单选(1分)
总线宽度又成总线位宽,它是总线上同时能够传输的数据位数,通常是指____的根数

A.地址总线
B.数据总线+控制总线+地址总线
C.控制总线
D.数据总线

正确答案:D你选对了
10、多选(2分)
系统总线是连接计算机内各大部件的信息传输线,该总线按传输内容的不同又分为___

A.地址总线
B.传输总线
C.控制总线
D.数据总线

正确答案:A、C、D你选对了
11、多选(2分)
下列选项中的英文缩写均为总线标准的是___

A.ISA
B.CPI
C.PCI
D.USB

正确答案:A、C、D你选对了
12、多选(2分)
控制总线中常见的控制信号包括___

A.存储器写
B.复位
C.总线请求
D.中断请求
正确答案:A、B、C、D你选对了

关于重学计算机组成原理九- 动态链接的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于知乎热议:程序员为啥要学计算机组成原理?、计算机组成原理(二)——计算机的基本组成、计算机组成原理(上)第 1 章 计算机系统概论、计算机组成原理(上)第3章 测试等相关知识的信息别忘了在本站进行查找喔。

本文标签:

上一篇计算机书籍推荐(计算机书籍推荐排行榜)

下一篇基于案例讲解Storm实时流计算(storm 流计算)