本文主要是介绍CSAPP:第1章 计算机系统漫游,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1.1 information=bit+context
- 1.2 程序翻译
- 1.3 了解编译的好处
- 1.4 CPU如何读取+解释命令
- 1.5 讲述Cache的重要性
- 1.6 存储设备的层次结构
- 1.7 进程、线程、虚拟内存的概念
- 1.8 系统之间网络通信
- 1.9 重要主题
- 1.10 小结
1.1 information=bit+context
- 1.1主要传达的意思是所谓信息就是特定二进制(位)的排列组合(上下文),因此构成了不同的信息。
- 另外,aside中提了一嘴C语言的起源,总的来说,C之所以可以成功,主要因为以下几个优势
- C一开始就作为Unix的系统语言被开发出来的
- C小、简单、易于移植
- C是为实践目的设计的——other people found that they could write programs they wanted,也就是说C比较通用
1.2 程序翻译
-
1.2 主要讲述程序编译过程
-
围绕这一句命令开始讲述
linux>gcc -o hello hello.c
,主要分为四个步骤
- 1、预处理
- hello.c–>hello.i
- 主要工作是将# include 后<> 文件的内容插入到当前文件中,形成一个.i文件
- 2、编译
- hello.i–>hello.s
- 这个工作是由编译器(CCL)完成的,其中hello.s是一个汇编程序
- 3、汇编
- hello.s–>hello.o
- 这个工作是由汇编器(as) 完成的,其中hello.o是指令集文件(二进制文件,打开是乱码)
- 这里需要注意一点的是,汇编是从汇编语言到机器指令,编译才是从高级语言到汇编语言
- 4、链接
- hello.o–>hello
- 这个阶段是由链接器(ld)完成的,功能是将本文件和库函数(用到的)预编译的.o文件合并到一起,最终得到的是可执行文件(实际上还是二进制)
- 1、预处理
1.3 了解编译的好处
- 优化程序新能(3、5、6)
- 理解链接时出现的错误(7)
- 避免安全漏洞(3)
1.4 CPU如何读取+解释命令
- 主要讲了这么几件事
- 1、描述shell执行的过程,这个就是命令行的机制,一般符合我们的直觉——即等待-〉输入-〉执行循环
- 2、描述硬件的组成,这里是计算机的多总线(3总线)结构的模型,如下所示
- 3、如何运行Hello
- 命令行读取与分析
- 文件读取
- 执行+显示
- 3、如何运行Hello
1.5 讲述Cache的重要性
- 是常见的Cache-主存-辅存三级结构,不同的是,Cache分为三级Cache
1.6 存储设备的层次结构
- 基本同1.5,放张图
1.7 进程、线程、虚拟内存的概念
-
1、进程
- 进程是OS对一个正在运行程序的抽象
- 进程转换有内核(kernel)管理的,内核不是一个独立的进程,而是系统管理全部进程所用代码和数据的集合。
-
2、线程
- 更容易共享数据(同一进程下)
- 高效
-
3、虚拟内存
- 即虚拟地址空间——每个进程都独占主存的假象
- 程序代码数据
- 堆——运行时堆,用于存放数据,类似malloc free是对此处操作
- 共享库——放类似C语言标准库
- 栈——用户栈,实现函数调用,动态伸缩
- 内核虚拟内存——为内核保留
- 即虚拟地址空间——每个进程都独占主存的假象
-
4、文件=字节序列
1.8 系统之间网络通信
- 介绍了telnet机制
1.9 重要主题
- Amdahl定律(有两道简单习题)
- 这个公式讲的是,加速(减速)后的时间= 部分原时间+部分加速后的时间,最后记一下加速比的公式是old/new即可
- 并发和并行的概念(区分)
- 所谓并发=同一段时间同时运行——单CPU进程/线程快速切换,看起来好像同时运行
- 超线程——同时多线程,允许一个CPU同时控制多个流
- 指令级并行
- 多指流水线技术,其中现代的多为超标量流水线
- 单指令、多数据并行(SIMD)
- 运行一条指令产生多个可并行的操作
- 抽象的重要性
1.10 小结
- 上述总结
这篇关于CSAPP:第1章 计算机系统漫游的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!