程序员自我修养--链接、装载与库

第一部分

 问题:

对于一个C程序而言,要清楚以下几个问题:

1、程序为什么要被编译器编译了之后才可以运行?

2、编译器在把C语言程序转换成可以执行的机器码的过程中做了什么,怎么做的?

3.最后编译出来的可执行文件里面是什么?除了机器码还有什么?他们怎么存放的,怎么组织的?

4、#include<stdio.h> 是什么意思?

5、不同的编译器(Microsoft VC、GCC)和不同的硬件平台(x86、SPARC、MIPS、ARM),以及不同的操作系统(windows、linux等),最终编译出来的结果一样吗?为什么?

6、hello world程序是怎么运行起来的?操作系统是怎么装在它的?它从哪里开始执行,到哪儿结束?main函数之前发生了什么?main函数结束以后又发生了什么?

7、如果没有操作系统,hello world可以运行吗?如果要在一台没有操作系统的机器上运行hello world需要什么?应该怎么实现?

8、printf是怎么实现的?它为什么可以有不定数量的参数?为什么它能够在终端上输出字符串?

9、hello world程序在运行是,他在内存中是什么样子的?

 

对于系统开发者来说,有三个部件最值得关注:中央处理器CPU、内存和I/O控制芯片,这三个不见是计算机的核心。

人们在制造CPU的工艺方面已经达到了物理极限,CPU的频率被现在的4GHz限制。因此,人们从另外一个角度来提高CPU的速度,就是增加CPU的计算机,其中最常见的是对称多处理器(SMP)。增加cpu就可以提高运行速度,但也并非如此,比如生孩子。

 

 

系统软件可以分成两块,一块是平台性的,比如操作系统内核。驱动程序、运行库,另外一块是用于程序开发的,比如编译器、汇编器、连接器等开发工具和开发库。

 

 每个层次之间都需要相互通信,必要有一个通信的协议,称为接口。接口的下面那层是接口的提供者,由它定义接口:接口上面那层是接口的使用者,它使用该接口来实现所需要的功能。每个中间层都是对它下面的那层的包装和扩展。

在软件体系中,位于最上层的是应用程序,比如网络浏览器等。开发工具与应用程序时属于同一个层次的,使用同一个接口,操作系统应用程序编程接口。

运行库使用操作系统提供的系统调用接口,系统调用接口在实现中以软件终端的方式提供。

分时系统:可以同时运行多道程序,每个程序运行一段时间以后都主动让出CPU给其他程序。但如果一个程序在进行一个很耗时的计算,霸占CPU不放,操作系统也没办法。

多任务系统:操作系统接管所有的硬件资源。所有应用程序都以进程的方式运行在比操作系统权限更低的级别,每个进程都有自己的独立的地址空间,使得进程之间的地址空间相互隔离。CPU由操作系统同一进行分配,每个进程根据进程优先级的高低都有机会得到CPU,如果运行时间超出了一定的时间,操作系统会暂停该进程,将CPU资源分配给其他等待运行的进程。这种分配方式叫做抢占式。

硬盘结构:

硬盘基本存储单位为扇区,每个扇区一般为512字节。一个硬盘有多个盘片,每个盘片分两面,每面按照同心圆划分为若干个磁道,每个刺刀划分为若干个扇区。

posted @   放弃吧  阅读(214)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示