深入理解计算机系统读书笔记之第一章:漫游
我是从豆瓣上看到好多人都在推荐这本书,于是就去借来读一读,昨天晚上用了好长时间来读这本书的第一章节,感觉这本书比较符合我(有些基础还不太明白,这本书详细的进行了讲解,很好)。
下面写一下我的理解(顺便回顾一下知识)
第一节主要讲的是: A Tour of Computer Systems
以hello.c为例进行讲解,介绍这个程序如何从一个源程序变成可执行程序,再到执行,显示屏上出现“hello,world”
··················································································································································
文章比较有条理,符合人的一般思维。(我觉得既然计算机是人制造的,用来对人的思维计算进行拓展的,那么他的一些操作就应该能用人的一般思路来进行理解)以我的思路来进行回顾一下。
其实这本书的原名叫做:Computer Systems: A Programmer's Perspective(以一个程序猿的角度来进行理解计算机系统)
下面假设自己是一个电脑小白(其实也差不多,嘻嘻,不,比小白强一点的,但是有些概念什么的还是不明白,计算机的工作原理也搞不清楚,但是这一章以一个c源程序的执行过程对对计算机进行了讲解,非常棒,有很大的收获,废话不多说了)Let's begin.
1计算机来说就不用讲了
2计算机中有很多信息吧。那么信息又是什么呢?信息=位+上下文明白电脑是0,1二进制进行存储,计算的。基本存储就是位。但是相同的位又在不同的文件中又不同的含义这又是为什么呢?因为他们有不同的上下文,就是说他们的上下的信息不同,举一个例子来说就像是:文言文中的“其”“之乎者也”等虽然他们是同一个字但是他的上下文不同,所以就有了分别。所以信息就有了区分.
3.理解了信息以后,那么我们就以hello.c文件为例。对他的执行过程进行分析理解。
我们明白hello.c的程序
#include <stdio.h>
main()
{
printf("Hello world!n");
}
这就是hello.c一般这是学习c语言的第一个程序。 这是由c语言写的但是不能 有计算机直接进行执行。c语言这是高级语言,这种语言是给程序猿看的,但是电脑看不懂。所以我们就要来请一个翻译官,让两个文件能进行理解,交流。 “翻译官”就是一个编译系统。那么我们来看一下这个编译系统由哪些部分来组成。 预编译 编译 汇编 链接 预编译这个阶段来说:就是讲#开头的directives来进行处理,(这是系统中原有的)经过这个阶段以后hello.c变成hello.iwenjian 编译:包含一个汇编语言程序,将高级语言写的程序变成由汇编语言写的。hello.i变成hello.s 汇编阶段呢:就是将这个helo.s变成hello.o的程序,这个程序已经是由机器语言,二进制的,用文本编辑器打开会出现乱码 最后一个阶段就是链接:这个阶段呢,就是由于源程序中出现了一些调用库中的函数什么的,但是这个程序中没有所以需要链接形成一个真正的可执行程序。保存到存储器中 4对硬件进行讲解(我们知道了如何生成可执行程序的,而且已经保存到了存储器中那么,计算机是如何进行执行的呢?硬件上对他的执行过程进行讲解喽,,,,) 硬件的话,首先,整体的了解一下这个硬件系统
计算机硬件系统构成
总体上明白了计算机硬件系统的构成以后那么,我们来详细的了解一下具体组成,各个名词的含义。
(1)总线:一个贯穿于整个系统的一条电子通道。主要进行在各个硬件之间传递信息的。我觉得就像是一条条公路,使得各个点之间相连起来,能形成交流,信息的交换。
(2)I/O设备: 输入输出设备。嗯,这个。。。。这个是系统与外界之间的交流的通道。
I/O设备有什么构成呢?由一个控制器或者是一个适配器与I/O总线之间相连起来。那么是控制器,什么是适配器呢?
控制器:I/O设备本身或者是在主板上的一个芯片组
适配器:插在主板上的卡槽上的卡
(3)主存:一个临时存储设备。(DRAM),在执行程序时负责存储程序以及其程序处理的数据。
(4)处理器(CPU):解释/执行存储在主存的指令的引擎的核心。就相当于大脑,对来自各个系统的信息进行分析,发出执行命令,kernel
处理器又能执行些什么操作呢?
加载:对主存中的信息进行加载。从主存中拷贝一个字/字节放到寄存器中,覆盖原来的信息
存储:从寄存器中拷贝一个字/字节放到主存的某个位置,覆盖原来的信息。
更新:拷贝两个寄存器中的内容到ALU,ALU对其进行相加放到一个寄存器中,覆盖原来的信息。
I/O读:从I/O设备中拷贝一个字/字节到寄存器中,覆盖
I/O写:从寄存器中拷贝一个字/字节到I/O设备中,覆盖
转移:从指令中拷贝一个字,拷贝到PC中,覆盖 5.了解了硬件后,那么如何对其进行加速呢? 信息太多,转移速度慢,程序运行时间啊长,等待时间长,所以,我们需要对这个过程进行加速。但是,这个过程中,主要耗费时间的地方在哪里呢?只有明白了这个点才能对其进行加速,效果更明显。 主要的耗费时间点在与:读取信息,就是信息的转移,从一个位置转贷另一位置,比如说从主存到寄存器中。(我们明白:较大的存储设备运行比较小的存储设备运行要慢的多) 如何解决呢?引出来一个概念叫做高速缓存。 磁盘->主存->寄存器 高速缓存
金字塔上越高运行时间越短,越快,但是相应的造价越高。 上面的可以做下面的高级缓存。 7明白了硬件系统后,就应该进行执行了。 执行,又要明白操作系统。要知道程序不能之间控制硬件,中间有操作系统 。操作系统直接控制硬件。 明白一些概念 进程:假象,好像独占处理器,主存和I/O设备,只有这个程序在运行。 实际上数多个程序在执行。并发运行(一个程勋的指令与另一个程序的指令在相互的执行),上下文切换:保存程序运行所需要的全部信息 虚拟存储器:假象,每个进程独占主存。有唯一的地址 文件:字节序列。 8.网络也是一种I/O设备 上面是一台电脑的执行过程,但是没有和其他的电脑进行交流。 ····················································································································· 最后了,终于完成对第一章的回顾了,下面感慨一下: 这一章是从整体上进行讲解。没有详细的讲解。 这种分配非常好。 我们在学习时,首先,我们从整体上,明白一下这个过程,然后我们再来详细的了解各个过程。 嗯哪,花了一上午的时间终于写完了,有成就感!!!! 下午看第二章,待续。。。。。。
- 洛谷P2925 [USACO08DEC]干草出售Hay For Sale
- Numpy 修炼之道 (13)—— 将python函数向量化
- 洛谷P1887 乘积最大3
- 18.CSS
- R语言可视化——ggplot图表系统中的形状
- [机器学习Lesson 1 Introduction] 机器学习的动机与应用
- 洛谷P3377 【模板】左偏树(可并堆)
- Numpy 修炼之道 (12)—— genfromtxt函数
- 19.JavaScript
- 20.DOM
- 洛谷P3273 [SCOI2011]棘手的操作
- [机器学习Lesson 2]代价函数之线性回归算法
- Docker初尝试1.What is Docker?2.Try It3.Use It
- 洛谷P1456 Monkey King
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 发现内网存活主机的各种姿势
- SharedPreferences VS MMKV
- RabbitMQ 最常用的 3 大模式!
- 啥?HashMap 1.8 还有死循环?你逗我呢!
- 他写的东西,你们喜欢么?
- 告诉你一个 AtomicInteger 的惊天大秘密!
- 001--算法之"高手过招"[分治算法专题]
- 快速入门使用tikz绘制深度学习网络图
- 后端服务慢成狗?试试这 7 招!
- 高性能无锁并发框架 Disruptor,太强了!
- Spring Boot 太狠了,一口气发布了 3 个版本!
- 贷款违约预测-Task2 数据分析
- Redis 最牛实践:业务层面和运维层面优化!
- 一个 randomkey 命令导致的 Redis 事故。。
- 分布式锁(数据库、Redis、ZK)拍了拍你