从hello world程序认识系统如何运行程序

本文详细介绍了从源程序到可执行文件的过程,包括GCC编译器的四个阶段,以及程序在Unix系统中的运行。讲解了硬件组件如总线、主存和处理器的工作原理,强调了操作系统在管理进程、内存和I/O设备中的作用。此外,还阐述了虚拟内存、文件系统和进程抽象如何支持跨平台兼容性和并发执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#include <stdio.h>

int main()

{
      printf("hello, world ");

return 0;

}

hello 程序的生命周期是从一个源程序(或者说源文件)开始的,即程序员通过编辑器创 建并保存的文本文件,文件名是hello.c。源程序实际上就是一个由值0和1组成的位(又称 为比特)序列,8 个位被组织成一组,称为字节。每个字节表示程序中的某些文本字符,现代计算机系统都使用 ASCII 标准来表示文本字符,只由 ASCII 字符构成的文件称为文本文件,所有其他文件都称为二进制文件。hello.c的表示方法说明了一个基本思想:系统中所有的信息—— 包括磁盘文件、内 存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。

GCC编译器驱动程序读取源程序文件hello.c,并把它翻译成一个可执行目标文件hello的四个阶段,之后被放在磁盘上。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA77ya5aSn5oao55qE5YK76LGG6Iq94pic,size_20,color_FFFFFF,t_70,g_se,x_16

 

在Unix系统上运行该文件,需要将它的文件名输入到称为shell的应用程序中,shell将加载并运行hello程序,然后等待程序终止,当我们敲击回车键时,shell程序收到了终止命令。

系统的硬件组成

总线:贯穿整个系统的一组电子管道,负责携带信息字节在各个部件间传递。

I/O设备:系统与外部世界的联系通道,每个I/O设备都通过一个控制器或适配器与I/O总线相连,用于访问设备。

主寸:
主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从 物理上来说,主存是由一组动态随机存取存储器(DRAM)芯片组成的。从逻辑上来说,存储 器是一个线性的字节数组。

处理器:
中央处理单元(CPU),简称处理器,是解释(或执行)存储在主存中指令的引擎。处理 器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。xCPU 在指令的要求下可能会执行加载,存储,操作,跳转等操作。

数据串“hello, World/n”开始时在磁盘上,然后被复制到主存,最后从主存上复制到显示设备,为了快速完成,应尽可能快地完成这些复制操作,同时,针对处理器和主存之间的差异,设计者采用了高速缓存储存器,存放处理器近期可能会需要的信息。其实这里 shell 加载和运行 hello 程序时,以及 hello 程序输
出自己的消息时,shell 和 hello 程序都没有 直接访问键盘、显示器、磁盘或者主存,而是依靠操作系统提供服务,操作系统有两个基本功能:(1)防止硬 件被失控的应用程序滥用;(2)向应用程序 提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。操作系统通基本的抽象概念(进程 、虚拟、内存和文件)来实现这两个功能。进程是操作系统对一个正在运行的程序的一种抽象,在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件。一个 CPU 看上去都像是在并发地执行多个进程,这是通过处理器在进程间切换来实现的。操作系统保持跟踪进程运行所需的所有状态信息,就像读文章兼顾上下文,包括很多信息。假设两个并发的进程:shell 进程和 hello 进程。最开始,只有 shell 进程在运行,即等待命令行上的输人。当我们让它运行 hello 程序时,shell 通过调用一个专门的函数,即系统调用,来执行我们的请求,系统调用会将控制权传递给操作系统。操作系统保存 shell 进程的上下文,创建一个新的 hello 进程及其上下文,然后将控制权传给新的 hello 进程。hello 进程终止后,操作系统恢复 shell 进程的上下文,并将控制权传回给它,shell 进程会继续等待下一个命令行输人,俩个进程的转换由操作系统内核管理。在现代系统中,一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。虚拟内存使每个进程都在独占地使用主存,每个进程看到的内存都是一致的,称为虚拟地址空间,虚拟内存运作基本思想是把一个进程虚拟内存的内容存储在磁盘上,然后用主存作为磁盘的高速缓。图所示的是 Linux 进程的虚拟地址空间。watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDvvJrlpKfmhqjnmoTlgrvosYboir3imJw,size_20,color_FFFFFF,t_70,g_se,x_16

 同一个程序可以在使用不同磁盘技术的不同系统上运行是因为文件向应用程序提供了一个系统的视图,来看待系统中含有的各种I/O设备。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值