CSAPP-计算机漫游

一.编译系统的工作流程:

test.cpp 

#include <iostream>
using namespace std;
int main()
{
//hahha
cout<<"hello world"<<endl;
return 0;
}

直接生成可执行程序test

g++ -o test test.cpp

深入解析生成可执行程序test的过程

1.g++ -E test.cpp > test.i

这一步生成test.i进行预处理,做了宏的替换,注释的消除,可看见//hahha不见了

2.g++ -S test.cpp

这一步生成test.s,表示生成汇编指令

3.g++ -c test.cpp 

这一步生成test.o,将汇编语言变成二进制机器代码,生成目标文件,也就是二进制文件

利用反汇编工具查看这个机器代码的汇编代码:

objdump -d test_data.o

 

4.g++ test.o -o test

链接目标代码生成可执行程序test

上述编译过程产生了下面的文件

二.CPU结构

中央处理单元(Central Processing Unit , CPU),也称处理器,包含 PC ( 程序计数
器:Program Count )、寄存器堆(Register file)、ALU(算数/逻辑计算单元:Arithmatic/logic Unit)三个部分.

程序计数器 PC:是一个 4 字节或是 8 字节的存储空间,里面存放的是某一条指令的地址。从系统上电的那一瞬间,直到系统断电,处理器就不断地在执行PC 指向的指令,然后更新 PC,使其指向下一条要执行的指令(注意:这个下一条指令与刚刚执行的指令不一定是相邻的)。


寄存器:可以理解为一个临时存放数据的空间。例如计算两个变量 a+b 的和,处理器从内存中读取 a 的值暂存在寄存器 X 中,读取 B 的值暂存在寄存器 Y中,这个操作会覆盖寄存器中原来的数值,处理器完成加载的操作后,ALU(Arithmatic/logic Unit)会从复制寄存器 X 和 Y 中保存的数值,然后进行算术运算,得到的结果会保存到寄存器 X 或者寄存器 Y 中,此时寄存器中原来的数值会被新的数值覆盖。


算数/逻辑计算单元 ALU:计算速度极快,且专攻算数与逻辑的计算,计算机核心部分.

主存(Main Memory),也称为内存、运行内存,处理器在执行程序时,内存主要存放程序指令以及数据。从物理上讲,内存是由随机动态存储器芯片组成;从逻辑上讲,内存可以看成一个从零开始的大数组,每个字节都有相应地址.

内存和处理器之间通过总线来进行数据传递。实际上,总线贯穿了整个计算机系统,它负责将信息从一个部件传递到另外一个部件。通常总线被设计成传送固定长度的字节块,也就是字(word),至于这个字到底是多少个字节,各个系统中是不一样的,32 位的机器,一个字长是 4 个字节;而 64 位的机器,一个字长是 8 个字节.

三.存储设备的层次结构

对于处理器而言,从磁盘上读取一个字所花费的时间开销比从内存中读取的开销大1000 万倍。寄存器文件的只能存储几百个字节的信息,而内存的可以存放几十亿的字节信息(GB 级),从寄存器文件读取数据比从内存读取差不多要快 100 倍。
随着半导体技术的发展,处理器与内存之间的差距还在持续增大,针对处理器和内存之间的差异,系统设计人员在寄存器文件和内存之间引入了高速缓存(cache),比较新的,处理能力比较强的处理器,一般有三级高速缓存,分别为 L1 cache ,L2cache 以及 L3 cache。

L1 cache 的访问速度与访问寄存器文件几乎一样快,容量大小为数万字节(KB 级别);L2 cache 的访问速度是 L1 cache 的五分之一,容量大小为数十万到数百万字节之间;L3 cache 的容量更大,同样访问速度与 L2 cache 相比也更慢。 

四.操作系统作用

操作系统看成是应用程序和硬件之间的中间层,所有的应用程序对硬件的操作必须通过操作系统来完成。

 这样设计的目的主要有两个:
1 防止硬件被失控的应用程序滥用;
2 操作系统提供统一的机制来控制这些复杂的底层硬件

为了实现上述的功能,操作系统引入了几个抽象的概念。例如:文件是对 IO 设备的抽象;虚拟内存是对内存和磁盘 IO 的抽象;进程是对处理器、内存以及 IO 设备的抽象。 

虚拟内存
操作系统为每个进程提供了一个假象,就是每个进程都在独自占用整个内存空间,每个进程看到的内存都是一样的,我们称之为虚拟地址空间 .

虚拟地址空间分布: Linux 的虚拟地址空间,从下往上看,地址是增大的。最下面是 0 地址。

代码区:存储代码的二进制, 特点是只读 共享.

全局区: 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量,常量等。其生命周期由操作系统控制.

堆区由程序员控制;类实例化之前是不占用堆和栈的,当实例化以后,采用不同方式就可以占用不用内存分区.

栈区由系统控制,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。存放函数的参数值,局部变量等。

Kernel Memory:内核保留的区域,应用程序代码不能读写这个区域的数据.

 所有的 IO 设备,包括键盘,磁盘,显示器,甚至网络,这些都可以看成文件,
系统中所有的输入和输出都可以通过读写文件来完成.

五.多核处理器结构

参考:

【合集】CSAPP-深入理解计算机系统_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

报告:下一代技术革命“AI”来袭

来源&#xff1a;199IT互联网数据中心摘要&#xff1a;Rolandberger发布了新报告“下一代技术革命‘AI’来袭”&#xff0c;分析了人们是否准备好迎接下一代技术革命。快进到2017年&#xff0c;我们正处于人工智能&#xff08;AI&#xff09;革命的风口浪尖。它会影响经济、工业…

CSAPP--信息的表示与处理

虚拟地址空间: 大多数 Intel 兼容机采用小端模式,IBM 和 Sun 公司的机器大多数机器采用大端法。 对于很多新的处理器,支持双端法,可以配置成大端或者小端运行。例如基于 ARM 架构的处理器,支持双端法,但是 Android 系统和 iOS 系统却只能运行在小端模式. 下面是代码测试,获取1…

各国自动驾驶政策概况及特征

来源&#xff1a;中国信息通信研究院CAICT摘要&#xff1a;主要国家自动驾驶技术的研发、测试、法规、政策等方面的储备和进展。近年来&#xff0c;美、欧、日等发达国家和地区将自动驾驶技术作为交通未来发展的重要方向&#xff0c;在技术研发、道路测试、标准法规、政策等方面…

CSAPP--整数的表示

一.非负数与负数编码以及最值 非负数编码: 负数编码&#xff08;采用补码即原码取反1&#xff09;: 故对于四位补码&#xff0c;最大值为7,最小值为-8 所以各类型负数/非负数范围: 不同字节无符号最大值 不同字节有符号最大值 不同字节有符号最小值 例子1:有符号强制转换无…

一文看懂全球半导体格局

来源&#xff1a;华泰证券中国半导体产业链渐趋完善&#xff0c;产业生态体系逐步成形目前我国垂直分工模式的芯片产业链初步搭建成形&#xff0c;产业上中下游已然打通&#xff0c;涌现出一批实力较强的代表性本土企业。集成电路是基础性、先导性产业&#xff0c;涉及国家信息…

【转载】徐小平techCrunch演讲:创业者要找到跟你同生共死的伙伴!

本文转载自微信&#xff0c; 地址&#xff1a;http://mp.weixin.qq.com/s?__bizMjM5NDk5MTA0MQ&mid200587915&idx1&sn05dde952f177c88dfb05a3d35f7fe36f&scene1&fromsinglemessage&isappinstalled0#rd “我经常说两句话。不要用兄弟情谊来追求共同利益…

牛顿差值多项式

实验题目&#xff1a;Newton插值多项式相关知识&#xff1a; 通过n1个节点的次数不超过n的Newton插值多项式为&#xff1a; x 0 10 20 30 40 50 60 70 80 90 100 110 120 y 5 1 7.5 3 4.5 8.8 15.5 6.5 -5 -10 -2 4.5 7 #include <iostream>…

Easyspy网络检测系统

Easyspy是一款网络入侵检测和流量实时监控软件。作为一个入侵检测系统&#xff0c;用来快速发现并定位诸如ARP攻击、DOS/DDOS、分片IP报文攻击等恶意攻击行为&#xff0c;帮助发现潜在的安全隐患。Easyspy又是一款Sniffer软件&#xff0c;用来进行故障诊断&#xff0c;快速排查…

复杂性研究简介——从西蒙到霍兰

来源&#xff1a;信息系统论坛摘要&#xff1a;复杂性研究&#xff08;Complexity Study&#xff09;是上世纪末以来逐步兴起的一股思潮。本文将基于我们自己的认识过程&#xff0c;对于这个值得关注的领域进行简要的介绍&#xff0c;希望能够引起更多朋友的关注。重点是对于赫…

CSAPP--整数的运算

一.无符号数加法运算 二.有符号数加法运算 三.无符号数乘法 截断w位也就是对2^w取模 四.有符号数&#xff08;补码表示&#xff09;乘法 换算成补码在进行乘法运算 参考&#xff1a; 【合集】CSAPP-深入理解计算机系统_哔哩哔哩_bilibili

验证occ和vtk整合工作的demo

在编译occ通过过后&#xff0c;我需要验证occ是否能够正常结合vtk进行开发工作 使用CMake进行环境变量设置&#xff1a; CMakeList.txt PROJECT (IGESReader)#VTK Part: FIND_PACKAGE(VTK) IF (VTK_FOUND)INCLUDE(${VTK_USE_FILE}) ELSE(VTK_FOUND)MESSAGE(FATAL_ERROR"Ca…

CSAPP--浮点数

一.定点表示小数 缺点:表示不了很大的数 二.IEEE关于浮点数表示法 float32:符号位1位&#xff0c;阶码字段:8位,小数点为23位 float64:符号位1位&#xff0c;阶码字段:11位,小数点为52位 三.浮点数的数值类型 1.规格化值 2.非规格值 3.特殊值 而阶码的值决定其属于那一类…

干货|一文看懂美国共享出行3大领域8大头部玩家

来源&#xff1a;42号车库摘要&#xff1a;年初某机构统计的滴滴、Uber、Lyft、Grab和Go-jek全球五大共享出行服务平台的总估值1290亿美元。12月中旬&#xff0c;Uber、Lyft先后宣布即将于2019年IPO。其中&#xff0c;Uber的估值高达1000-1200亿美元&#xff0c;接近年初某机构…

《C++ Primer 4th》读书笔记 第7章-函数

原创文章&#xff0c;转载请注明出处&#xff1a;http://www.cnblogs.com/DayByDay/p/3912413.html 转载于:https://www.cnblogs.com/DayByDay/p/3912413.html

MSE与FC作用

一.MSE作用 在做super resolution的时候&#xff0c;如果用MSE&#xff0c;做出来的图片会非常的模糊&#xff0c;就是因为MSE是基于高斯分布假设&#xff0c;最后的结果会尽可能地靠近高斯分布最高的地方&#xff0c;使得结果不会太sharp。 二.FC作用 转载: 为什么回归问题用…

爆发的电池储能市场真相!年销量将超260亿美元

来源&#xff1a;智东西摘要&#xff1a;全面分析在集成领域以及其他形式的电池解决方案的开发和部署方面所取得的进展 。电池储能是非常灵活的&#xff0c;它可以进行快速部署&#xff0c; 且具有多种应用。 同时它能够产生大量价值流——更不用说电池价格比预期中下降得还要快…

刚刚!刘永坦院士和钱七虎院士荣获2018年度国家最高科技奖

来源&#xff1a; 青塔人才 摘要&#xff1a;今天上午&#xff0c;2018年度国家科学技术奖励大会在北京隆重召开。2018年国家科学技术奖共评选出278个项目和7名科技专家&#xff0c;合计285项&#xff08;人&#xff09;&#xff0c;国家最高科学技术奖颁予刘永坦院士和钱七虎院…

好用工具推荐

一.函数画图软件 图形计算器 二.流程图 Flowchart Maker & Online Diagram Software 可以画完就存在github里面 三.linux手册 Linux命令大全(手册) – 真正好用的Linux命令在线查询网站 四.在线工具百宝箱 在线工具 - 你的工具箱

光子人工智能芯片助“中国芯”换道超车

来源&#xff1a;新京报摘要&#xff1a;算力是传统芯片1000倍&#xff0c;功耗仅为其百分之一&#xff1b;未来可应用于自动驾驶、智能机器人、无人机等领域。光子人工智能芯片。光子芯片的计算速度为电子芯片的1000倍&#xff0c;但功耗仅为其百分之一。算力是传统电子人工智…

sublime text3安装插件 emmet

转载自&#xff1a;http://9iphp.com/web/html/1260.html Sublime Text常用插件总结及Package Control安装方法 2015/01/09 | HTML/CSS,Linux | 8 条评论 | (2评) | 评分 Sublime Text 是一个代码编辑器&#xff0c;具有漂亮的用户界面和强大的功能&#xff0c;并且它还是…