1.1信息就是位+上下文
只由ASCLL字符构成的文件称为文本文件,所有其他文件都称为二进制文件。
系统中的所有的信息都由一串比特表示。区分不同数据对象的唯一方法是读到这些数据对象时的上下文。
1.2程序被其他程序翻译成不同的格式
预编译,编译,汇编,链接。
hello.c源程序---预处理--->
hello.i修改后的源程序---编译器--->
hello.s汇编程序---汇编器---->
hello.o可重定位目标程序(二进制)---链接器--->
hello可执行程序(二进制)。
详细过程:
【Linux】编译的四个步骤_编译linux_曦樂~的博客-CSDN博客
1.3了解编译系统如何工作是大有益处的
了解编译系统的好处:1.优化程序性能2.理解链接时出现的错误3.避免安全漏洞。
1.4处理器读并解释储存在内存中的指令
shell命令解释器:输出提示符,等待输入命令行并执行。若命令行第一个单词不是内置的shell命令,shell会假设它是一个可执行文件的名字,加载并执行这个文件。
1.4.1系统的硬件组成
1.总线
贯穿整个系统,携带信息字节并传递。传递定长字,字中的字节数为字长。字长:4个字节(32位),8个字节(64位)。
2.I/O设备
系统与外部世界联系的通道。它们通过控制器或适配器与I/O总线相连。
如:输入设备:键盘、鼠标,输出设备:显示器,存储设备:磁盘。
3.主存
临时存储设备,存放执行的程序和程序处理的数据。由一组动态随机存取存储器(DRAM)芯片组成。是一个线性的字节数组,每个字节都有其唯一的地址。
4.处理器
中央处理单元(CPU)的简称,用于执行(解释)主存中的指令。核心是一个一个字大小的寄存器,PC(程序计数器), PC指向主存中该执行的指令,执行完后PC+1指向下一条该执行的指令。
1.4.2运行hello程序
shell等待输入命令,./hello后将字符读入寄存器->内存;
输入完命令后shell执行指令加载hello文件,文件中的代码和数据:磁盘->主存;
处理器执行main:"hello,world\n"主存->复制到寄存器文件->复制到显示设备;
1.5高速缓存至关重要
高速缓存存储器(高速缓存,cache),存放处理器近期可能会需要的信息。解决处理器快而磁盘->主存->处理器内容多复制速度慢的问题,提升程序的性能。
1.6存储设备形成层次结构
存储设备容量越大,访问速度越慢,每字节的造价越便宜。层次结构使上一层的存储器做低一层存储器的高速缓存,分层提高程序的性能
1.7操作系统管理硬件
操作系统:相当于应用程序和硬件之间插入的一层软件。
两个基本功能:
·1.防止硬件被失控的应用程序滥用;
·2.向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。
提供三个基本的抽象:
1.7.1进程
进程:操作系统对一个正在运行的程序的一种抽象。
并行:多个进程同时运行,每个进程好像独占使用硬件。
并发:进程之间指令交错进行,通过处理器在进程间切换来实现(上下文切换)。
上下文:进程运行所需的所有状态信息。
内核:管理从一个进程到另一个进程的转换。内核时操作系统代码常驻主存的部分,是管理全部进程所用代码和数据结构的集合。
程序需要操作系统的操作->系统调用指令->控制权给内核->内核执行操作->返回应用程序。
1.7.2线程
线程:进程的执行单元。多线程比多进程更容易共享数据,更快更高效。
1.7.3虚拟内存
虚拟地址空间:每个进程看到的内存都是一致的。
【Linux】复制进程、进程地址空间以及写实拷贝_曦樂~的博客-CSDN博客
1.7.4文件
文件就是字节序列,所有设备都可以看成文件。