Linux系统学习笔记:运行程序
来源:互联网 发布:软件产品与软件服务 编辑:程序博客网 时间:2024/06/06 02:37
Contents
- 编译系统
- 运行程序
- 操作系统
编译系统
在Linux系统上,程序由编译系统从源文件转化为可执行目标文件。编译系统包括四部分:预处理器、编译器、汇编器和链接器。程序源文件首先由预处理器( cpp )修改(输出 .i 文件),然后由编译器( cc1 )翻译成汇编程序( .s 文件),接下来汇编器( as )将它翻译打包为可重定位目标程序( .o 文件),最后由链接器( ld )并入库函数所在的预编译目标文件得到可执行文件,后两个文件是二进制的。
了解编译系统的好处是可以:优化程序性能,理解链接时出现的错误,避免安全漏洞。
后面的讨论基于gcc 4.4.5编译环境。使用 gcc 的 -v 选项可以查看程序编译的整个过程。
在shell中执行可执行程序时,shell调用操作系统中的加载器函数,它复制可执行文件中的代码和数据到存储器,然后将控制转移到程序的开头。
运行程序
为了理解程序运行时计算机做了什么,有必要了解一下计算机的硬件组成。下图给出了计算机的一个硬件组成抽象。
总线是贯穿整个系统的一组电子管道,它携带信息字节并负责在各部件之间传递,一般传递的信息被设计成定长的字节块,称为字(注意不是编程中的字的概念)。
I/O设备是系统和外界联系的通道,图上包括键盘、鼠标、显示器和磁盘。I/O设备通过控制器(主板上的芯片组)或适配器(板卡)和I/O总线连接起来。
主存储器在执行程序时用来存放程序和程序处理的数据,它是一个临时存储设备,由一组DRAM(动态随机访问存储器)组成,物理上一般是内存。
处理器是解释(执行)存储在主存中指令的引擎。处理器的核心是程序计数器,它是个字长大小的存储设备。寄存器堆是个小存储设备,由一些字长大小的寄存器组成。ALU计算新的数据和地址值。CPU执行的操作主要有:
- 加载,主存到寄存器。
- 存储,寄存器到主存。
- 更新,将两个寄存器的内容放到ALU中,相加,然后结果保存到一个寄存器中。
- I/O读,I/O设备到寄存器。
- I/O写,寄存器到I/O设备。
- 跳转,从指令中抽取一个字存到PC中。
执行程序时,典型地先从键盘输入,到达寄存器堆,然后存储在主存中;接下来利用DMA技术(直接存储器访问技术)从磁盘将可执行文件读到主存中;最后主存中程序的输出加载到寄存器,再发送到显示器上。
处理器和主存之间存在巨大的速度差距,为解决这一矛盾,在计算机中设计了高速缓存存储器L1和L2,它们是用一种SRAM(静态随机访问存储器)的技术实现的。寄存器是L1的高速缓存,L1是L2的高速缓存,L2是主存的高速缓存,主存是磁盘的高速缓存,磁盘可能还是一些网络存储的高速缓存。从寄存器到磁盘,存储量更大、更便宜,但同时也更慢。
操作系统
程序并不会直接访问硬件,而依靠操作系统的服务。操作系统为应用程序提供了统一的接口,同时也防止了对硬件的滥用。
进程是操作系统对运行程序的一种抽象,操作系统保存进程运行所需的状态信息,称为上下文。系统上可以同时运行多个进程,称为并发运行,实际上进程的指令是交错执行的,即上下文切换。
现代系统中,进程由多个称为线程的执行单元组成,线程运行在进程的上下文中,共享同样的代码和全局数据。
虚拟存储器是为每个进程提供的存储的抽象,使每个进程看到的存储器是一致的,称为虚拟地址空间。基本思想是把进程的虚拟存储器的内容存储在磁盘上,然后用主存作为磁盘的高速缓存。
文件就是字节序列,因此I/O设备都可以看作文件。文件的概念使程序可以统一地对待系统中的各种I/O设备。
- Linux系统学习笔记:运行程序
- Linux系统学习笔记:运行系统
- linux 学习笔记 后台进程运行程序
- linux学习笔记 后台进程运行程序
- Linux进程线程学习笔记:运行新程序
- Linux学习笔记2:程序运行与系统管理命令
- Linux系统学习笔记:程序的机器级表示
- Linux学习笔记(三):系统运行级与运行级的切换
- Linux系统学习笔记
- Linux 系统学习笔记
- Linux系统 学习笔记
- 学习笔记--Linux系统
- Linux 系统下运行 Windows程序
- linux系统运行java swing 程序
- Linux系统程序自动运行三法
- Linux系统-shell脚本运行程序
- Linux系统-程序运行CPU核心绑定
- linux系统后台运行java程序
- 经验分享:移动客户端设计开发经验-设计篇
- C++:private继承与public继承
- VC如何正确的删除C++封装的句柄。。。
- NYOJ 308题 Substring
- 寻找最长递增子序列
- Linux系统学习笔记:运行程序
- 【C++沉思录】strcpy的实现
- 精 挑 细 选
- liunx学习笔记之--档案与文件系统的压缩与打包
- CSS之Position详解
- hdu4433 locker 密码锁(枚举)
- Windows Phone 设置全屏&&设置竖屏坐标系
- Linux系统学习笔记:信息的表示
- c语言和vc对文件的操作的异同