计算机系统漫游
- 考虑到一段c语言程序
#include<stdio.h>
int main()
{
print("Hello World\n");
return 0;
}
计算机系统大部分采用ASCII 标准来表示字符,源程序中的字符可以通过ASCII码来表示。且系统中的数据,文件,程序皆由比特(位)序列表示。
-
源程序通过什么方式可以让计算机执行呢?
编译系统流程图.jpg
- 从图中可以看出第一步预处理器,这步将# 后面的.h 文件进行加载插入合并入程序文本中形成一个以.i 结尾的c程序。
- 编译器将 .i 文件翻译成文件 .s 的文本文件,其中包含的汇编语言程序来解释定义main 函数中的内容.
- 汇编器将.s 文件翻译成机器语言指令,将这些指令打包成 relocatable object program 格式,并存入 一个.o 的文件中,这个文件是一个二进制文件,其中包含main函数的指令编码.
- 链接器将预编译器里的.o 文件与自己编译好的.o 文件进行合并形成 一个 "可执行文件" 加载到内存,进行执行.
- 如何执行编译后的源程序呢?
- 假设上段源程序编译结束后产生hello 文件(可执行目标文件)通过shell命令行解释器:
linux> ./hello
Hello World "此为输出信息“
linux>
-
系统在执行这段命令发生了什么?
系统硬件.png
- 当在键盘上输入./hello 时通过I/O总线将命令传到寄存器中,后放入内存中,输入结束后shell执行指令将hello文件从磁盘复制到主存,处理器进行处理,hello文件中的main指令将会被执行 ---> 将"Hello World\n" 这段字符从主存复制到寄存器然后在复制到显示设备上进行显示.
- 那操作系统起到什么作用呢?
- 在以上执行,输出hello 程序时均是通过操作系统来实现的.即 所有应用程序想要对硬件设备进行操作都必须经过操作系统.
- 操作系统两个功能:
- 防止硬件被失控的程序滥用
- 向应用程序提供简单的机制来控制复杂而又通常大不相同的低级硬件设备.
未完待续.
网友评论