linux下,编写和执行一个c程序的完成过程(复习)
2016-06-26 04:15
603 查看
说明:我是个刚入门的菜鸟,写这些博客就是为了复习下老师讲过的内容,认识不深刻,可能不专业,还可能出现一些错误,欢迎大家指出指教~!~!
一、一个hello.c生成hello执行文件的过程:
1、hello.c经过预处理器(cpp)转为hello.i文件(例如读取了stdio.h中的内容);
2、hello.i经过编译器(ccl)转为hello.s文件(生成了汇编代码,不同的语言可能生成相同的汇编代码,如Fortran和c);
3、hello.s经过汇编器(as)转为hello.o文件(可重定位目标文件,二进制形式存在);
4、hello.o(假设调用了printf函数)文件,在链接器(ld)的作用下将hello.o和printf.o文件转为hello(可执行文件);
二、执行一个c程序主要发生了一下过程(即在键盘中输入"./hello"):
1、输入命令后,OS在shell外壳程序创建hello进程,shell程序读取字符串“./hello”中各字符到寄存器,然后存放到主存中;
2、输入“Enter”后载入程序:操作系统根据主存中的“hello”在磁盘中找到hello目标文件,将其包含的指令和数据读到主存;
3、执行指令后,将结果显示到显示器中;
具体过程如下图(来源,课程老师的ppt)
图1
图2
图3
(下面三、四点为上面的一些补充)
三、关于shell的一些说明:
图4
四、虚拟存储器,每个进程看到的是一个一致的、虚拟的存储器—即进程的虚拟地址空间:
一、一个hello.c生成hello执行文件的过程:
1、hello.c经过预处理器(cpp)转为hello.i文件(例如读取了stdio.h中的内容);
2、hello.i经过编译器(ccl)转为hello.s文件(生成了汇编代码,不同的语言可能生成相同的汇编代码,如Fortran和c);
3、hello.s经过汇编器(as)转为hello.o文件(可重定位目标文件,二进制形式存在);
4、hello.o(假设调用了printf函数)文件,在链接器(ld)的作用下将hello.o和printf.o文件转为hello(可执行文件);
二、执行一个c程序主要发生了一下过程(即在键盘中输入"./hello"):
1、输入命令后,OS在shell外壳程序创建hello进程,shell程序读取字符串“./hello”中各字符到寄存器,然后存放到主存中;
2、输入“Enter”后载入程序:操作系统根据主存中的“hello”在磁盘中找到hello目标文件,将其包含的指令和数据读到主存;
3、执行指令后,将结果显示到显示器中;
具体过程如下图(来源,课程老师的ppt)
图1
图2
图3
(下面三、四点为上面的一些补充)
三、关于shell的一些说明:
图4
四、虚拟存储器,每个进程看到的是一个一致的、虚拟的存储器—即进程的虚拟地址空间:
相关文章推荐
- Linux中修改DNS的方式
- [系统操作][Linux]初始化当前Ubuntu为可开发环境
- Fekit mock and base config for linux
- Linux下Git和GitHub使用方法总结
- linux中断
- linux内核同步之每CPU变量、原子操作、内存屏障、自旋锁
- Linux内核驱动之原子变量
- Linux学习之软件包管理--rpm命令管理
- Linux内核中锁机制之完成量、互斥量
- Linux内核中锁机制之信号量、读写信号量
- Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁
- Linux- yum
- Linux内核中锁机制之原子操作、自旋锁
- Linux常用命令
- Linux常用命令总结
- linux arch命令
- Centos 安装 nodejs、npm
- Linux spi驱动(二)
- Linux解决乱码问题以及查看文件编码方式
- Linux学习之软件包管理--简介