《深入学习计算机系统(C语言)》学习进程之开篇第一章计算机系统漫游

1.1  信息就是位 + 上下文

程序的生命周期从源程序开始——这是一个有着某种扩展名(比如C源程序的文件扩展名为.c,java源程序的文件扩展名为.java,c++源程序的扩展名为.cpp等等)的文本文件。这些文本文件由一个个文本字符构成,而每个文本字符又由8个bit来构成。

数据有不同的数据对象,即不同的由bit组成的“实体”。

1.2  程序被其他程序翻译成不同的格式

为了在(操作)系统上运行程序,每条源程序上的语句都被其他程序转化为机器语言指令。然后将这些指令以可执行目标程序的格式打好包以二进制磁盘文件的形式存储

在UNIX系统中,从源文件到目标文件的转化由编译器驱动程序完成。以C源程序为例,这个过程有四个阶段(注意:与C/C++不同,java编译器把java源程序翻译成字节码(class文件),运行该文件时首先会运行JVM,然后class文件被加载到JVM上运行。而编译和连接一个C/C++程序时,所获得的可执行二进制文件只能在指定的硬件平台和操作系统上运行,属于“本地”执行程序):

i. C源程序的开头都有预处理命令,此命令告诉预处理器(cpp)读取源程序的头文件并把这些文件直接插入到程序文本中形成新的文本文件,并以 .i 为文件扩展名。

ii. 编译器(ccl)将上一步的文本文件翻译成新的以 .s 为文件扩展名的文本文件,它包含一个汇编语言程序(不同的cpu,与其对应的汇编语言也会有所不同)。

iii.汇编器(as)将上一步的文件翻译成机器语言指令并将其打包成可重定位目标程序,其文件的扩展名为 .o。该文件是二进制文件,字节编码由机器语言来完成,故无法用文本编辑器来正确打开。

iv.若在源程序中有涉及到标准库的函数,则链接器(ld)将这些函数的以 .o 为扩展名的目标文件合并到上一步的文件中,最终,可执行目标文件完成。这种文件可被加载到内存中,由系统执行。

1.3  了解编译系统如何工作是大有益处的

同一个结果,不同的源程序指令会有不同的程序性能。这与机器代码和编译器将各种源程序语句转化为机器代码的方式有关。

1.4  处理器读并解释存储在存储器中的命令

通常我们所说的32位、64位的字长,其实就是总线传送定长的字节块信息的长度。

编译后的可执行文件在未执行前存储在磁盘上。

RAM是主存的主要组成部分。然而RAM又分为两种:SRAM和DRAM。SRAM用传统的触发器门电路(有0和1两个状态)来保存数据,因为是通过通电来保存数据,所以不需要像电容器那样来回刷新,故其速度快,但造价高。DRAM使用电容器,当其充电时状态为1,放电时为0,但因为电容器会随时间而漏掉一部分电,需要周期性地刷新才能保存数据,所以速度稍慢,但价格便宜(此书中主存的RAM指的是DRAM)。     ——资料来源《计算机科学导论》

指令集结构描述的是每条机器代码指令的效果,而微体系结构描述的是处理器是如何被实现的。

1.5  高速缓存至关重要

根据机械原理,较大的存储设备要比较小的存储设备运行得慢,但在造价上两者是相反的。

在运行速度上,磁盘驱动器 > 内存 > 寄存器。

缓存一般内嵌在cpu中,通过存放cpu近期可能会用到的数据来对内存和cpu在处理速度上的差异进折中。其中,一级缓存运行速度可与寄存器相当,而二级缓存通过总线与处理器连接,容量比一级缓存要高出不少,但在运行速度上比一级缓存稍慢。缓存通过SRAM的硬件技术来实现。

1.7  操作系统管理硬件

应用程序对硬件的操作都必须要经过操作系统。OS有两个功能:① 防止硬件被失控的应用程序滥用;② 向应用程序提供简单一致的机制来控制复杂的低级硬件设备。

进程是OS对一个正在运行的程序的抽象。OS可同时执行多个进程,即并发运行,指的是一个进程的指令和另一个进程的指令其实是在交错执行的。而实现这种交错执行的机制称为上下文切换。何为上下文?OS跟踪进程运行时所需的所有状态信息。

单处理器系统只能在同一时刻执行一个进程的代码。在进行上下文切换时,OS保存当前进程的上下文、恢复新进程的上下文,新进程获得控制权后就能在上次停止的地方开始运行。

一个进程由多个线程组成。每个线程都在该进程的上下文下运行,共享同样的代码和全局数据,且多线程之间的数据共享比多进程之间更容易。

无法理解这个章节中所讲到的虚拟存储器的有关内容。估计得在以后的章节中探索了。

文件可囊括计算机系统的所有I/O设备。

1.9  总结

并发:系统可同时执行多个进程。

并行:用并发使系统运行得更快。

多核处理器指的是将多个CPU(“核”)集成到一个集成电路芯片上,每个核都有自己的L1和L2缓存,但是它们共享更高层次的高速缓存以及到主存的接口。

超线程(即同时多线程)是一种允许一个CPU执行多个控制流(即线程)的技术。

指令级并行:处理器可以同时执行多条指令。这就用到了流水线技术,即其将每一条指令所需的活动分成不同的步骤,将CPU里的硬件组织成一系列的阶段,每个阶段执行一个步骤。这些阶段可以并行操作,用来处理不同指令的不同部分。

超标量处理器:执行速率达到一个周期一条指令以上。

单指令、多数据并行(SIMD并行):允许一条指令产生多个可以并行执行的操作,用于提高处理影像、声音和视频数据应用的执行速度。

线程级并发、指令级并行、以及SIMD并行是在不同的抽象层次上对系统并发和并行的阐述。

应用程序接口(API)的概念不仅用在面向对象的编程语言(例如java中类的声明)上,也用在面向过程的语言(例如C语言的函数原型)上。

指令级结构是对实际处理器硬件的抽象。

抽象让底层复杂的硬件执行与源程序的执行模型保持一致。

时间: 2024-10-06 20:15:04

《深入学习计算机系统(C语言)》学习进程之开篇第一章计算机系统漫游的相关文章

iOS学习笔记---c语言学习第七天

结构体 结构体是一种自定义的数据类型 struct 结构体名 { 类型说明符  成员名: … 类型说明符  成员名: }: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { struct teacher{ char name[30]; char sex; int age; char course[30]; }; typedef struct teacher Teacher; Teacher c

html5学习篇:05:论道html电子书-第一章

1.源代码下载地址:http://html5book.xiuyetang.com/ 第一章:列用html5做网站 1.1多数人呢不了解的html5时代的网页设计的10大理由 阴影代码可控.阴影和圆角 动画简单易懂.依赖强大的css3的动画属性,可以高小的开发出各种动画效果.非常的轻松 渐变数值化操作. 字体图片矢量化.css3的网络字体功能 表单验证轻松搞定 数据类型扩大一倍.大量新增的input属性带来的更加友好的用户界面. 音频,视频,无需插件完成. 1.2:一个典型的html5网页 htm

第一章 计算机系统概论

计算机组成原理POCC review 第一章 计算机系统概论 这一章,相信老师都是略讲的,但是很重要. 计算机分类 电子计算机: 1.模拟计算机:数值由连续量表示,运算过程也连续 2.数字计算机: 按位运算,不连续跳动计算 通用计算机:超级计算机.大型机.服务器.PC机.单片机.多核机 计算机发展史 计算机五代变化 电子管 晶体管 中小规模集成电路 大规模(LSI)和超大规模集成电路 巨大规模集成电路 半导体存储器:速度快.容量大.价格低 计算机性能指标: 吞吐量:单位时间处理信息量 响应时间:

深入理解计算机系统读书笔记之第一章:漫游

我是从豆瓣上看到好多人都在推荐这本书,于是就去借来读一读,昨天晚上用了好长时间来读这本书的第一章节,感觉这本书比较符合我(有些基础还不太明白,这本书详细的进行了讲解,很好). 下面写一下我的理解(顺便回顾一下知识) 第一节主要讲的是: A Tour of Computer Systems 以hello.c为例进行讲解,介绍这个程序如何从一个源程序变成可执行程序,再到执行,显示屏上出现“hello,world” ···········································

《深入理解计算机系统》(第三版)第一章 疑问思考

本着不抄书的原则谈谈我学习第一章的收获吧. 通过学习,弄清楚了操作系统的中断机制:是操作系统获得计算机控制权的根本保证.其基本原理是:设备在完成自己的任务后向CPU发出终端,CPU判断优先级,然后确定是否响应.如果响应,则执行中断服务程序,并在中断服务程序执行完后继续执行原来的程序. 在学计算机系统与组成结构的时候一直觉得很抽象,不是不好理解,而是我理解了原理但对于如何根据原理进行实现?所谓抽象,就是在根本上存在但现实中不存在的东西.学习过后感受就是:抽象来源于具体,但又超越具体.操作系统提供的

Python语言和标准库(第一章:做出决策)

1-做出决策 2-函数 3-类与对象 4-组织程序 5-文件和目录 6-Python语言的其他特性 7-创建模块 8-文本处理 第一章:做出决策 本章介绍如何创建可以使用循环重复相同操作的情形,自动逐步遍历列表,元组和字典. 如何使用字典,列表和元组,探究字典中的内容. 使用一场处理编写的程序,以应对可能在程序内部处理的问题. 1.1比较两个值是否相等 在python里,如果每个序列中同一位置的每个元素都相同,那么两个序列相同.字典的比较和序列的一样. 1.2比较两个值是否不同 != 1.3比较

【C/C++学习】C++语言学习积累

1.命名空间 namespace cq{} using namespace cq; 2.使用继承 class Man: public Person { } 3.使用父类的方法 Man::Man(char*name) : Person(name, 12) { cout << "Man name is:" << this->name << " and age is:" <<this->age<< e

[学习总结] python语言学习总结 (一)

用py也很久了,很多东西只知道拿来用,并没有深究,感觉这样是不够的. 我决定写这么一篇总结,把很多遗忘的东西拾起来,把很多没搞懂的东西搞清楚. 1.eval函数 用法:eval(expression, globals=None, locals=None) 解释:将字符串str当成有效的表达式来求值并返回计算结果. 就是可以将字符串转换为表达式来运行,当然可以转换为某个函数执行. python是用命名空间来记录变量的轨迹的,命名空间是一个dictionary,键是变量名,值是变量值. 当一行代码要

深入理解计算机系统,第一章:漫游

计算机系统漫游 1.1 信息就是位+上下文 先看一个简单的Hello World C程序. 1 #include <stdio.h> 2 3 void main() 4 { 5 printf("Hello World!\n"); 6 } 这个程序的源文件是文本格式,以字节序列的方式存储在文件中,由一种叫ASCII码的方式编码.除了文本文件之外的其它文件都是二进制文件. 由HelloWorld程序的存储方式可以猜测,信息,包括磁盘文件.内存中运行的程序.内存中储存的用户数据以