CSAPP—学习笔记(1)—计算机概述

· 信息的概念:

· 如图hellow.c文件如下:
在这里插入图片描述
这是一个源程序,实际是由0和1组成的比特序列,8位比特称为一个字节,每个字节表示程序中的某些文本字符。现代计算机系统常用ASCII标准来表示文本字符,hello.c程序的ASCII码表示为:
在这里插入图片描述
注意到:每个文本行都是以一个看不见的‘\n’来结束。hello.c这种由ASCII字符构成的文件称为文本文件,其他所有文件都是二进制文件。
· 那么信息是什么,信息就是一个0\1比特序列,在不同的上下文中有不同的表示。

· 编译系统的组成:

· 编译系统由四个阶段的程序组成,分别是预处理器、编译器、汇编器、链接器。如图:
在这里插入图片描述

· · 预处理阶段:

· · 预处理器会将系统头文件的内容插入到程序文本(.c为扩展名的文件)中,得到了一个以.i为扩展名的文件。

· · 编译阶段:

· · 编译器会将.i文件翻译成文本文件hello.s,它包含了一个汇编语言程序,其中包含了低级机器语言指令。汇编语言为不同的高级语言提供了通用形式。

· · 汇编阶段:

· · 汇编器(as)会将hello.s翻译成机器语指令,把这些指令打包成一种叫可重定位目标程序 (relocatable object program) 的格式。并保存在目标文件hello.o中,hello.o文件是一个二进制文件。

· · 链接阶段:

· · 在这个阶段中,hello.c中可能用到了许多库函数,而库函数会被单独的预编译在另一个目标文件中,所以链接器(ld)就会负责处理这种合并,结果就得到了hello文件,它是一个可执行目标文件,可以被加载在内存中,由系统执行。

· 处理器的工作:

· shell是一个命令行解释器,它会输出一个提示符,然后等待一个输入命令,并执行这个命令。如果该命令行的第一个单词不是一个内置的shell 命令,那么 shell 就会假设这是一个可执行文件的名字,它将加载并运行这个文件。

· · 系统的硬件组成:

· · 总线:贯穿整个系统的一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。总线被设置为传送定长的字节块——字。不同的系统的字不是一样长的,可能是4字节或8字节大小。
· · I/O设备:I/O( 输入/输出)设备是系统与外部世界的联系通道,有:键盘、鼠标、显示器、磁盘驱动器等。每个 I/O 设备都通过一个控制器或适配器与总线相连。控制器是I/O设备本身或系统的主板上的芯片组,而适配器是一块插在主板插槽上的卡,它们的功能都是在I/O总线和I/O设备之间传递信息。
· · 主存:主存是一个临时的储存设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理看来,主存是由一组动态随机存取存储器 (DRAM) 芯片组成的;从逻辑上看,存储
器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引)。
· · 处理器:中央处理单元(CPU),是解释(执行)储存在主存中指令的引擎。处理器的核心是一个大小为一个字的储存设备(寄存器),称为程序计数器(PC),在任何时候,PC总是指向主存中的某条机器指令。
· · CPU根据指令的要求会执行一些操作,这些操作都离不开寄存器文件、算术逻辑单元ALU、主存。寄存器文件是一个小的储存设备,由一些单个字长的寄存器组成,每个寄存器都有唯一的名字。这些操作有:

	加载:从主存复制一个字节或者一个字到寄存器,以覆盖寄存器原来的内容。
	存储:从寄存器复制一个字节或者一个字到主存的某个位置,以覆盖这个位置上原来的内容。
	操作:把两个寄存器的内容复制到 ALU,ALU 对这两个字做算术运算,并将结果存放到一个寄存器中,以覆盖该寄存器中原来的内容。
	跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器 (PC) 中,以覆盖PC 中原来的值。

· 缓存器等级:

· 一个程序的机器指令最初是存放在磁盘上,当程序加载时,它们会被复制到主存;当处理器运行程序时,指令又从主存复制到处理器。
· 而不同缓存器的读取速率是有极大差异的。一个很小很快的储存设备被称为高速缓存储存器(高速缓存、cache),是一个暂时的集结区域,用来存放处理器近期会用到的信息。
· 每个计算机的存储设备都被组织成一个存储器层次结构,其中上一层的存储器作为低一层存储器的高速缓存。如图:
在这里插入图片描述

· 操作系统管理硬件的方式

· 操作系统可以看做是硬件与软件之间的一层软件,所有应用对硬件的操作都是要通过操作系统的。
· 操作系统的两个基本功能: (1) 防止硬
件被失控的应用程序滥用; (2) 向应用程序
提供简单一致的机制来控制复杂而又通常大
不相同的低级硬件设备。操作系统通过几个
基本的抽象概念(进程、虚拟内存和文件)来
实现这两个功能。
· 文件是对I/O设备的抽象,虚拟内存是对主存和磁盘I/O设备的抽象表示,进程是对处理器、主存和I/O设备的抽象表示。

· · 进程

· · 进程是操作系统对一个正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程,而进程看起来都像是在独立地占用硬件。并发运行指一个进程的指令和另一个进程的指令是交错执行的。上下文切换指的是一种处理器在进程之间切换的机制。上下文指的是操作系统所跟踪进程运行所需要的所有状态信息(PC和寄存器中的值、主存中的内容等)。
· · 当从一个进程转到另一个进程时,所转换的操作是由操作系统管理的,内核是操作系统代码经常出现在主存中的部分,内核就是一个系统管理全部进程所用代码和数据的集合,它不是个进程。

· · 线程

· · 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
· · 一个进程是由多个以线程为执行单元组成的,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。
· · 线程也称为轻量级进程,是程序执行的最小单元。和上文中一样的,一个进程可对应多个线程,而一个线程只属于一个进程。

· · 虚拟内存

· · 虚拟内存是一个抽象的概念,它给进程提供了每个进程都在独立地使用主存的假象,每个进程看到的内存都是一致的,都称为虚拟地址空间。如图是一个进程的虚拟地址空间:
在这里插入图片描述
· · 程序代码和数据:对于所有的进程来说,代码都是从一个固定的地址开始的,首先是代码中全局变量相关的数据位置,代码和数据区是直接按照可执行文件的内容进行初始化的,在进程开始运行时就被指定了大小。
· · :代码和数据区后紧随的运行时堆,堆可以在运行时动态的进行扩张和收缩,
· · 共享库:在地址空间内的中间部分是用来存放像C标准库和数学库等这样的共享库的代码和数据的。
· · :位于虚拟地址空间顶部,编译器用它来实现函数调用。用户栈在程序执行期间可以动态地扩展和收缩 特别地,每次我们调用一个函数时,栈就会增长;从一个函数返回时,栈就会收缩。
· · 内核虚拟内存:地址空间顶部为内核保留的部分,不允许应用程序读写这个区域的内容,也不允许直接调用内核代码定义的函数。必须通过内核来执行这些操作。

· · 文件

· · 文件就是一个字节序列,每个I/O设备都可以抽象成文件,系统中所有的输入输出都是通过使用一组系统函数调用读写文件来实现的。

· · 并发和并行

· · 并发 (concurrency) 指一个同时具有多个活动的系统。
· · 并行 (parallelism) 指的是用并发来使一个系统运行得更快。

· · 线程级并发

· · 使用了线程,就可以在一个进程中执行多个控制流。超线程也就是同时多线程,是一种允许一个CPU执行多个控制流的技术,它要求CPU的一些硬件(如PC,寄存器文件等)要有多个备份。

· · 指令级并行

· · 现代处理器同时执行多条指令的属性被称为指令级并行。

· · 单指令、多数据并行

· · 允许一条指令产生多个可以并行执行的操作,这种方式称为单指令、多数据,即 SIMD 并行。

· · 虚拟机:

· · 虚拟机是对整个计算机的抽象,包括操作系统、处理器和程序。如图:
在这里插入图片描述
定义许多的抽象,可以把一个复杂的实现隐藏起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值