文章目录
1.1 信息就是位+上下文
例如 hello.c 程序以字节的方式存储在文件中。每一个字节都有一个整数值,对应于某些字符。
系统中的所有信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据对象的上下文。
1.2 程序被其他程序翻译成不同的格式
编译hello.c程序
编译过程
1.3了解编译系统如何工作的好处
1.优化系统性能
2.理解链接时出现的错误
3.避免安全漏洞
1.4 处理器读并解释储存在内存中的指令
shell加载运行hello 程序,然后等待程序终止。
hello程序在屏幕上输出 hello ,然后终止。
1.4.1 系统的硬件组成
1.总线
2.IO设备
3.主存
4.处理器(CPU)
1.4.2 运行hello程序
P8 图
1.shell程序将“./hello”读入寄存器,再将它放入到内存中
2.完成输入,将hello文件从磁盘中复制到主存
3.在主存中加载hello程序,将“Hello”从主存复制到寄存器中,再从寄存器文件中复制到显示器设备,最终显示在屏幕上
1.5 高速缓存至关重要
根据机械原理 ,储存越多,运行越慢。处理器读取数据几乎比主存快了100倍,随着半导体技术的进步,差距越来越大。
为了解决这个问题,系统设计者采用了高速缓存处理器,作为暂时的集结区域。大部分的内存操作都能在高速缓存区完成。
1.6 储存设备形成层次结构
存储器层次结构的主要思想是上一层的存储器作为下一层的高速缓存。
1.7 操作系统管理硬件
计算机系统的分层视图
操作系统提供的抽象表示
1.7.1 进程
进程是操作系统对一个正在运行的程序的一种抽象。
无论是在单核还是多核系统中 , 一个 CPU 看上去都像是在并发的执行多个进程,这是通过处理器在进程间切换来实现的。操作系统实现这种交错执行的机制称为上写文切换
如图所示,从一个进程到另一个进程的转换是由操作系统内核管理的。内核是操作系统代码常驻主存的部分
1.7.2 线程
一个进程可以由多个成为现成的执行单元组成。
1.7.3 虚拟内存
虚拟内存提供了一个假象,即每个进程都在独占着主存,每个进程看到的内存地址都是一样的,称为虚拟地址空间;
上图是进程的虚拟地址空间。
每个进程看到的虚拟地址空间由大量准确定义的区构成,每个区都有专门的功能。图中自下而上依次是程序代码和数据、堆、共享库、栈、内核虚拟内存。
1.7.4 文件
文件就是字节序列。每个IO 设备都可以看成文件,系统的所有输入输出都是通过使用一小组称为 UNIX I/O的系统函数调用读写文件实现的。
1.8 系统之间通过网络通信
系统漫游至此,我们一直是把系统视为一个孤立的硬件和软件的集合体。实际上,现代系统经常通过网络和其他系统连接到一起。从一个单独的系统来看,网络可视为一个 I/O 设备,如图 1-14 所示。当系统从主存复制一串字节到网络适配器时,数据流经过网络到达另一台机器,而不是比如说到达本地磁盘驱动器。相似地,系统可以读取从其他机器发送来的数据,并把数据复制到自己的主存。
随着 Internet 这样的全球网络的出现,从一台主机复制信息到另外一台主机已经成为计算机系统最重要的用途之一。比如,像电子邮件、即时通信、万维网、FTP 和 telnet 这样的应用都是基于网络复制信息的功能。 回到 hello 示例,我们可以使用熟悉的 telnet 应用在一个远程主机上运行 hello 程序。假设用本地主机上的 telnet 客户端连接远程主机上的 telnet 服务器。在我们登录到远程主机并运行 shell 后,远端的 shell 就在等待接收输入命令。此后在远端运行 hello 程序包括如图 1-15 所示的五个基本步骤。
当我们在 telnet 客户端键入 “hello” 字符串并敲下回车键后,客户端软件就会将这个字符串发送到 telnet 的服务器。telnet 服务器从网络上接收到这个字符串后,会把它传递给远端 shell 程序。接下来,远端 shell 运行 hello 程序,并将输出行返回给 telnet 服务器。最后,telnet 服务器通过网络把输出串转发给 telnet 客户端,客户端就将输出串输出到我们的本地终端上。 这种客户端和服务器之间交互的类型在所有的网络应用中是非常典型的。在第 11 章中,你将学会如何构造网络应用程序,并利用这些知识创建一个简单的 Web 服务器。
1.9 重要主题
1.9.1 Amdahl 定律
1.9.2 并发(concurrency)和并行(parallellism)
为了获得更强的计算能力,可以有以下三种途径:
1.线程级并发
单处理器系统、多处理器系统、超线程(同时多线程)
2.指令级并行
现代处理器可以同时执行多条指令的属性称为指令级并行,使用时钟周期来处理
流水线的使用:将执行一条指令的活动拆分为多个步骤,将处理器的硬件组成为一系列的阶段,每个阶段执行一个步骤
超标量处理器:可以达到比一个周期一条指令更快的执行效率
3.单指令、多数据并行
允许一条指令产生多个可以并行执行的操作,这种方式称为单指令、多数据,即SIMD并行
扩展与参考
1.9.3 计算机系统中抽象的重要性
计算机系统中的一个重大主题就是提供不同层次的抽象表示,来隐藏实现的复杂性
四个抽象:
文件是对I/O的抽象
虚拟存储器是对程序存储的抽象
进程是对一个正在运行的程序的抽象
虚拟机提供对整个计算机(包括操作系统、处理器和程序)的抽象