一、程序编译的不同阶段。
通常我们是以高级程序开发易于阅读的代码,我们通过语法规则推断代码的具体含义。但是计算机执行代码的时候就需要把代码解析成既定的可执行问题,计算机是如何处理的呢?这里以C语言hello.c文件为例来说明中间过程。
#include <stdio.h> int main() { printf("hello world!\n"); }
先上张图。
C语言源程序----预处理解析头文件和函数 --- 编译器解析成汇编语言 --- 翻译机器语言指令,打包目标程序 ---- 链接ld合并.o文件,得到可执行文件
注意:
1、源程序是ASCII编码的文本文件,文本文件的含义是通过上下文解析的。
2、相同的高级语言源程序会通过不同的编译器解析成不同的汇编语言,也就意味着相同的源文件可以有不同的执行结果。
3、链接阶段是把所有相关的.o合并成可执行文件(包括头文件包含)。
二、系统硬件组成
hello程序的运行过程:
控制台输入./hello , shell(命令行解释器)将程序读入寄存 ---- 寄存器把程序(代码和数据)存放在主存 --- CPU执行程序
--- 寄存器执行主存程序读取数据 ---- 寄存器把结果复制到在显示设备
三、存储器组成
四、操作系统
操作系统提供应用程序和底层硬件的借口适配。
1、防止底层硬件被上层APP滥用。
2、为APP提供简单一致的机制来控制底层硬件。
操作系统提供的几个概念(进程,文件,虚拟存储器)
1)进程 ---- 操作系统对正在执行程序的抽象, 也可以说是正在执行的程序
进程上下文 --- 保存进程执行的所有状态信息,寄存器值和内存内容。
上下文切换 ---- 操作系统把控制权从当前进程转移到新进程。
多进程 --- 操作系统正在执行多个进程,单操作系统当前只有一个进程在执行,多进程是在交替的执行不同的进程来实现。
线程--- 进程的执行单元(运行在进程的上下文中,共享进程的全局数据和代码)
2)虚拟存储器 --- 进程独立的存储空间
3)文件 --字节序列,linux一切设备皆文件(键盘、显示器、磁盘、网络)
未完待续,留待学习补充:
。。。。。。。。
深入理解计算机系统读书笔记一 ---> 计算机基础漫游,布布扣,bubuko.com
原文:http://www.cnblogs.com/daxixi/p/3754078.html