CSAPP: 计算机系统漫游

计算机系统由硬件和系统软件组成。

从 hello.c 开始

来看下面一组代码:

#include<stdio.h>

int main(){
	pritnf("hello, world\n");
	return 0;
}
  1. 我们通过编辑器创造并保存了上述 c 语言文件,其文件名为 hello.c, 文件是由一些字符序列组成的,现代计算机用 ASCII 标准来表示字符,每个字符可以被转化为 8 个位(又称为比特,即 0 或 1 表示的数值,8 个位组成一个字节)。这种存储方式说明了一个基本思想:计算机中所有的信息都是由一串比特组成的
  2. 为了让机器运行 hello.c 文件,计算机需要把 c 语言翻译为计算机可以执行的文件,这个翻译过程可以分为四个阶段,分别是预处理阶段–>编译器–>汇编器–>链接器。预处理阶段根据源文件中 ‘#’ 开头的命令,将 stdio.h 文件中的内容直接插入到程序文本文件,此时得到另外一个 c 程序,通常以 .i 作为文件扩展名;编译器阶段将 .i 文件翻译成汇编语言程序(见下);汇编阶段将生成的汇编程序翻译成机器语言指令,同时将这些指令打包成可重定位目标程序的格式,并以 .o 后缀进行存储;链接阶段将函数,例如将 printf 函数文件整合到 .o 文件中,最终生成可执行文件 hello,被加载到内存中,由系统执行。
main:
	subq $8, %rsp
	movl $.LCO, %edi
	call puts
	movl $0, %eax
	addq $8, %rsp

计算机系统硬件组成

  1. 总线:携带信息字节并负责在各个部件之间传输。通常总线被设计成传输定长的字节块,即字( word), 每个系统中字的长度定义不尽相同。
  2. I/O 设备:系统与外界联系的通道,每个 I/O 设备都通过一个控制器或适配器与 I/O 总线总线相连。
  3. 主存:由 DRAM 组成,是一个临时存储设备。处理器执行程序时,用来存放程序和程序的数据。
  4. 中央处理单元:即 CPU, 用来解释/执行存储在主存中指令的引擎。其核心是一个大小为一个字的寄存器(程序计数器,存储当前机器语言指令的地址)。

hello.c 的运行

在 shell 中输入以下指令:

linux> ./hello	#加载并运行可执行文件
hello,world		#执行结果

存储设备的层次结构

操作系统管理硬件

操作系统的两个基本功能:1. 防止硬件被失控的程序滥用;2. 向应用程序提供简单一致的机制来控制复杂的硬件设备。

进程:操作系统对一个正在运行的程序的一种抽象;
并发运行:多个进程交替执行。
并行运行:多个进程同时执行。
上下文:操作系统保持跟踪进程运行所需要的状态信息,例如 PC、寄存器的当前值,主存的内容等。
上下文切换:切换进程时候,操作系统会保存当前进程的上下文,并恢复新进程的上下文。

线程:一个进程可能存在多个线程,每个线程都存在于进程的上下文中,并共享代码和全局数据。

虚拟内存:
虚拟地址空间:

文件:即字符序列。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值