1.1 信息就是位+上下文
程序员通过编辑器创建并保存的文本文件hello.c是以字节序列的方式储存在文件中(源文件也叫源程序),大部分现代计算机系统都使用ASCII标准来表示文本字符,像hello.c这样只由ASCII字符构成的文件称为文本文件,所有其他文件都称为二进制文件,
ASCII表
https://baike.baidu.com/item/ASCII/309296?fr=aladdin
unicode,utf-16,utf-8概念区分
http://blog.sina.com.cn/s/blog_a475ac530102wl4g.html
系统中所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一段比特表示的。区分不同数据对象的唯一方法是读到这些数据对象时的上下文。
1.2 程序被其他程序翻译成不同的格式
在Unix系统中,从源文件到可执行目标文件的转化是由编译器驱动程序GCC完成的,
linux> gcc -o hello.c
这个翻译过程分为四个阶段,执行这四个阶段的程序(预处理器、编译器、汇编器和链接器)一起构成了编译系统。
1.3 了解编译系统如何工作是大有益处的
优化程序性能
理解链接时出现的错误
避免安全漏洞
1.4 处理器读并解释储存在内存中的指令
现在,hello.c源程序已经被编译系统翻译成了可执行目标文件hello,并被存放在磁盘上,要想在Unix上运行该可执行文件,需要将它的文件名输入到称为shell的应用程序中:
linux> ./hello
hello, world
linux>
1.4.1 系统的硬件组成
(1)总线
贯穿整个系统的一组电子管道,携带信息字节(定长的字节块也就是字)并负责在各个部件间传递。
(2)I/O设备
I/O(输入/输出)设备是系统与外部世界的联系通道。如输入的键盘和鼠标,输出的显示器,以及磁盘驱动器(磁盘),最开始,可执行程序hello就存放在磁盘上。
每个I/O设备都通过一个控制器或适配器与I/O总线相连。
(3)主存
是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。
从物理上来说,主存是由一组动态随机存取存储器(DRAM)芯片组成的;从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引,从零开始)。
(4)处理器
中央处理单元(CPU),简称处理器,是解释(或执行)存储在主存中指令的引擎。
处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。任何时刻,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。
1.5 高速缓存至关重要
较大的存储设备要比较小的存储设备运行的慢而快速设备的造价远高于同类的低速设备,处理器从寄存器文件中读数据比从主存中读取几乎要快100倍,针对这种处理器与主存之间的差异,有了更小更快的存储设备,叫高速缓存处理器(cache),位于处理器芯片上,用一种叫静态随机访问处理器(SRAM)实现的,能够利用高速缓存将程序性能提高一个数量级。
1.6 存储器设备形成层次结构
主要思想是上一层的存储器作为低一层存储器的高速缓存。
1.7 操作系统管理硬件
文件是对I/O设备的抽象表示,虚拟内存是对主存和磁盘I/O设备的抽象表示,进程是对处理器、主存和I/O设备的抽象表示。
1.7.1 进程
进程是操作系统对一个正在运行的程序的一种抽象,传统系统在一个时刻只能执行一个程序,而多核处理器同时能执行多个程序。无论是在单核还是多核系统中,通过处理器在进程中切换来实现并发运行,操作系统实现这种交错执行的机制称为上下文切换。
从一个进程到另一个进程的转换是由操作系统内核管理的,内核不是一个独立的进程,它是系统管理全部进程所用代码和数据结构的集合。
1.7.2 线程
一个进程可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。
1.7.3 虚拟内存
虚拟内存为每个进程提供一个假象,即每个进程都在独占的使用主存,每个进程看到的内存都是一致的,称为虚拟地址空间。
1.7.4 文件
文件就是字节序列,每个I/O设备甚至是网络,都可以看成是文件。
1.8 系统之间利用网络通信
从单一的系统来看,网络可视为一个I/O设备。
1.9.1 Amdahl定律
主要思想是当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度。
1.9.2 并发和并行
并发指一个同时具有多个活动的系统,并行指用并发来使一个系统运行的更快。
并行可以在计算机系统的多个抽象层次上运用。
(1)线程级并发
(2)指令级并行
(3)单指令、多数据并行
1.9.3 计算机系统中抽象的重要性
原文地址:https://www.cnblogs.com/yuki67/p/10199620.html