计算机系统都有相似的硬件和系统软件组件组成的,他们共同工作来运行应用程序.作为一名程序猿希望深入了解这些组件是如何工作的以及这些组件是如何影响程序的正确性和性能的,以此提高自身技能.完全的理解了这本书内容,那么我们会步上‘大牛’的道路.这是这本书说的,认真学习做笔记,希望自己也能成为大牛.
一个C语言hello.c程序的栗子
#include <stdio.h>
int main ()
{
printf("hello,world\n");
return 0;
}
这个程序的执行的生命周期: 源文件(源程序) -> 编辑器 -> 保存文本文件
hello程序的生命周期是从一个高级C语言程序开始的,因为这种形式能够被人读懂.然而,为了在系统上运行hello.c程序,每个C语句都必须被其他程序转化为一系列的低级机器语言指令.然后这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件形式存放起来.目标程序也称为可执行目标文件.
在unix系统中,从源文件到目标文件过程是由编译器驱动程序完成的:
linux > gcc -o hello hello.c
编译系统的构成: 预处理器、编译器、汇编器和链接器
源程序:是一个由0和1组成的位(又称为比特)序列,8个位被组成一组,称位字节.每个字节表示程序中的某些文本字符(大部分的现代计算机系统都使用ASCII标准来表示文本字符)
了解编译系统如何工作的益处
* 优化程序性能
* 理解链接时出现错误
* 避免安全漏洞
系统的硬件组成
一个典型系统的硬件组成代码执行到显示过程
目标文件代码和数据被加载到主存,处理器执行机器语言指令,将对应的字符串的字节从主存复制到寄存器文件,再从寄存器文件复制到显示设备,最后显示再屏幕上.
了解高速缓冲
我们知道这个hello.c程序的机器指令最初是存放再磁盘上,当程序加载时,他们被复制到主存;当处理器运行程序时,指令又从主存复制带处理器.相似地,数据串"hello,world\n" 开始时再磁盘上,然后被复制到主存,最后从主存上复制到显示设备.从这个角度来看,这些复制就是开销,减慢了程序“真正”的工作.因此,系统设计者的一个主要目标就是使这些复制操作尽可能快地完成.
根据机械原理,较大的存储设备要比较小的存储设备运行得慢,而快速设备的造价远高于同类的低俗设备.
定义:
处理器与主存之间读取速度差异.系统设计者采用了更小更快的存储设备,称为高速缓存存储器(cache memory,简称为cache或高速缓存)
存储设备形成层次结构
不仅可以运用高速缓存提高性能,同时也可以利用存储器层次结构的理解来提高程序性能
image操作系统里的抽象概念
虚拟内容是对主存和磁盘I/O设备的抽象表示,进程则是对处理器、主存和I/O设备的抽象表示.
并发:指一个同时具有多个活动的系统;
并行:用来使一个系统运行更快
网络提供了计算机系统之间通信的手段.从特殊系统的角度来看,网络就是一种I/O设备.
网友评论