【读书笔记】CSAPP第一章

本文详细介绍了计算机中信息的表示方式,从位和上下文的角度解析程序的构成。程序经过预处理、编译、汇编和链接成为可执行文件。处理器执行指令,其中操作系统扮演关键角色,管理硬件资源,通过进程、虚拟内存和文件抽象实现资源控制。进程和线程是执行单元,虚拟内存提供每个进程独立的内存视图,文件则作为IO设备的抽象。操作系统通过上下文切换实现多进程并发执行。
摘要由CSDN通过智能技术生成


信息就是位+上下文

在计算机中所有的信息都是0和1组成的位串,为方便表示将8位称为一个字节。我们作为程序员在计算机中编写的程序就是由字符所组成的文本文件,根据编码不同,在存储时每个字符对应一个字节或多个字节的整数,即01序列,比如在ASCII编码下每个字符对应一个字节。

根据读取到这些01序列的上下文不同,这些数据可能是一个整数、浮点数、字符或是机器指令。


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

为了使程序(比如hello.c)能够被CPU执行,需要将信息——也就是每行语句,转化为机器指令并打包为可执行文件:

预处理:对.c文件进行预处理,比如#include<stdio.h>对内容插入到文本中,形成.i文件
编译:将.i文件翻译成.s汇编语言文件,即将高级语言代码翻译为汇编语言指令(为不同高级语言的不同编译器提供了通用的输出语言)

以上文件为文本编码存储

汇编:将.s文件的汇编指令翻译成机器指令,并打包成.o文件(可重定位目标程序relocatable object program)
由于此时文件存储的是指令编码,而非文本编码,因此使用文本编辑器打开会显示乱码
链接:C库中函数如printf在库中以printf.o目标文件存储,在链接阶段链接器负责将这些.o文件进行合并,生成最终可执行文件

以上文件为指令编码存储


处理器执行指令

引入了计算机体系架构的组成概念:总线、IO、内存、CPU,本章中内容较浅只是直觉上的感受,具体内容在第五、六章。

在计算机执行程序过程中,会花费大量时间用于寄存器、IO、存储器间的数据搬移,为减少访问速度的开销,引入了高速缓存存储器(cache memory)的概念,在高速与低速设备(如寄存器与内存)之间,暂时存储近期可能需要的信息。类似的,我们进而有了关于存储器层次结构的抽象(第六章)


操作系统管理硬件

操作系统的两个基本功能:
(1)防止硬件被失控的应用程序滥用
(2)向应用程序提供简单一致的机制来控制不同的硬件设备
操作系统通过几个抽象概念:进程、虚拟内存、文件来实现以上两个功能。其中文件是对IO设备的抽象表示,虚拟内存是对内存和IO设备的抽象表示,进程是对CPU、内存和IO设备的抽象表示。

进程

进程是操作系统对正在运行的程序的抽象。站在某一正在运行进程的视角,我最得CPU皇上恩宠24小时寸步不离,宫内所有内存和IO设备都归我独有,只要我不说停就不算完事。然而实际上这个进程只是后宫其中一个妃子,而CPU对所有的进程都是并发执行的,即不同进程的指令可以是交错执行的,操作系统通过上下文切换来实现这种机制。所谓上下文就是进程运行所需的所有状态信息,直觉上可以理解为游戏存档,不同存档就是不同的上下文。进程间的切换是由操作系统内核(kernel)管理的。内核不是进程,是系统管理的全部进程所用代码和数据结构的集合

线程是进程的执行单元,每个线程都运行在进程的上下文中,共享同样的代码和全局数据。也就是线程是程序的一条执行路径。

虚拟内存

虚拟内存是操作系统为进程提供的抽象,每个进程所看到的内存都是一致的,称为虚拟地址空间(第九章)

文件

文件是操作系统向应用程序提供的统一视图,不管你IO设备是啥,需要用什么样的磁盘技术进行处理,都可以看作是文件。文件就是字节序列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值