从Hello world说起

 我来答
青柠姑娘17
2022-06-10 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6189
采纳率:100%
帮助的人:33.5万
展开全部

毫无疑问,“hello world”对于程序员来说如雷贯耳。
但是,细想对于这样一个极其简单的程序又有很多问题模糊不清。例如用C语言编写:

本文集里的文章将围绕以上问题展开。

站在软件开发者的角度,我们需要对于计算机硬件的三个最关键部件有了解:中央处理器CPU、内存和I/O控制芯片。

早期,CPU的核心频率不高,跟内存频率一样,它们都是直接连在同一个 总线 (Bus)上的。由于I/O设备诸如显示设备、键盘、软盘和磁盘等速度与CPU和内存相比还是慢很多,为了协调I/O设备与总线的速度,也为了能够让CPU能够与I/O设备通信,一般每个设备都有一个相应的I/O Controller。如下图所示:

后来,由于CPU核心频率的提升,内存跟不上CPU的速度,于是产生了与内存频率一致的系统总线,而CPU采用倍频的方式与总线通信。

接着,随着图形化的操作系统普及,特别是SD游戏和多媒体的发展,使得图形芯片需要跟CPU和内存之间大量交换数据,为了协调,专门设计了高速的 北桥 (Northbridge,PCI Bridge)芯片,以便他们高效交换数据。

由于北桥运行的速度非常高,所有相对低速的设备如果全都直接连接在北桥上,北桥既须处理高速设备,又须处理低速设备,设计就会十分复杂。于是人们又设计了专门处理低速设备的 南桥 (Southbridge)芯片,磁盘、USB、键盘、鼠标等设备都连接在南桥上,由南桥将它们汇总后连接到北桥上。20世纪90年代的PC机在系统总线上采用的是PCI结构,而在低速设备上采用的ISA总线,,采用PCI/ISA及南北桥设计的硬件构架如下:

位于中间是连接所有高速芯片的北桥,它就像人的心脏,连接并驱动身体的各个部位;它的左边是CPU,负责所有的控制和运算,就像人的大脑。北桥还连接着几个高速部件,包括左边的内存和下面的PCI总线。

PCI的速度最高为133 MHz,它还是不能满足人们的需求,于是人们又发明了AGP、PCI Express等诸多总线结构和相应控制芯片。虽然硬件结构看似越来越复杂,但实际上它还是没有脱离最初的CPU、内存,以及I/O的基本结构。我们从程序开发的角度看待硬件时可以简单地将它看成最初的硬件模型。

人们总是希望计算机越快越好,在过去的50年里,CPU的频率从几十kHz提高到4GHz,整整提高了数十万倍。但自此便再没有质的提高,原因是CPU的制造工艺已经到达物理极限,除非CPU的制造工艺发生本质的突破。

在频率上已经没有提高的余地了,于是从另一方面来提高速度,就是增加CPU的数量。很早以前就出现了一个计算机有多个CPU,其中最常见的一种形式就是 对称多处理器 (SMP,Symmetrical Muti-Processing), 简单地讲就是每个CPU在系统中所处的地位和所发挥的功能都是一样的,是相互对称的。
理论上讲,增加CPU的数量就可以提高运算速度,并且理想情况下,速度的提高与CPU的数量成正比。但实际上并非如此,因为我们的程序并不是都能分解成若干个完全不相干的子问题。就比如一个女人可以花10个月生出一个孩子,但是10个女人并不能在一个月就生出一个孩子一样。
多处理器应用最多的场合也是这些商用的服务器和需要处理大量计算的环境。而在个人电脑中,使用多处理器则是比较奢侈的行为,毕竟多处理器的成本是很高的。

于是处理器的厂商开始考虑将多个处理器“合并在一起打包出售”,这些“被打包”的处理器之间 共享比较昂贵的缓存部件,只保留多个核心 ,并且以一个处理器的外包装进行出售,售价比单核心的处理器只贵了一点,这就是 多核处理器 (Multi-core Processor)的基本想法。多核处理器实际上就是SMP的简化版,当然它们在细节上还有一些差别,但是从程序员的角度来看,它们之间区别很小,逻辑上来看它们是完全相同的。只是多核和SMP在缓存共享等方面有细微的差别,使得程序在优化上可以有针对性地处理。简单地讲,除非想把CPU的每一滴油水都榨干,否则可以把多核和SMP看成同一个概念。

将用于管理计算机本身的软件称为系统软件,以区别普通的应用程序。
系统软件分为两类,一类是平台性的,如操作系统、内核、驱动程序、运行库和数以千计的系统工具,二类是用于程序开发的,比如编译器、汇编器、连接器等开发工具和开发库。
计算机系统软件体系采用层的结构,有一句名言:

这句名言概括了计算机系统软件体系结构的设计要点,整个体系结构从上到下都是严格按照层次结构设计的。

操作系统的一个功能是 提供抽象的接口 ,另外一个主要功能是 管理硬件资源。

计算机硬件的能力是有限的,比如一个CPU一秒钟能够执行的指令条数是1亿条或是1GB的内存能够最多同时存储1GB的数据。无论你是否使用它,资源总是那么多。
一个计算机中的资源主要分CPU、存储器(包括内存和磁盘)和I/O设备,我们分别从这三个方面来看看如何挖掘它们的潜力。

操作系统作为硬件层的上层,它是对硬件的管理和抽象。对于操作系统上面的运行库和应用程序来说,它们希望看到的是一个统一的硬件访问模式。作为应用程序的开发者,我们不希望在开发应用程序的时候直接读写硬件端口、处理硬件中断等这些繁琐的事情。比如我们希望在显示器上画一条直线,对于程序员来说,只要调用一个统一的LineTo()函数,具体的实现方式由操作系统来完成。
当成熟的操作系统出现以后,硬件逐渐被抽象成了一系列概念。在UNIX中,硬件设备的访问形式跟访问普通的文件形式一样。这些繁琐的硬件细节全都交给了操作系统,具体地讲是操作系统中的 硬件驱动 (Device Driver)程序来完成。驱动程序可以看作是操作系统的一部分,它往往跟操作系统内核一起运行在特权级,但它又与操作系统内核之间有一定的独立性,使得驱动程序有比较好的灵活性。

在早期的计算机中,程序是直接运行在物理内存上的,也就是说,程序在运行时所访问的地址都是物理地址。当然,如果一个计算机同时只运行一个程序,那么只要程序要求的内存空间不要超过物理内存的大小,就不会有问题。但事实上为了更有效地利用硬件资源,我们必须同时运行多个程序,正如前面的多道程序、分时系统和多任务中一样,当我们能够同时运行多个程序时,CPU的利用率将会比较高。那么很明显的一个问题是, 如何将计算机上有限的物理内存分配给多个程序使用。
存在的问题有:
地址空间不隔离 : 所有程序都直接访问物理地址,程序所使用的内存空间不是相互隔离的。
内存使用效率低 :由于没有有效的内存管理机制,通常需要一个程序执行时,监控程序就将整个程序装入内存中然后开始执行。
程序运行的地址不确定 :因为程序每次需要装入运行时,我们都需要给它从内存中分配一块足够大的空闲区域,这个空闲区域的位置是不确定的。

虚拟地址空间是指虚拟的、人们想象出来的地址空间,其实它并不存在,每个进程都有自己独立的虚拟空间,而且每个进程只能访问自己的地址空间,这样就有效地做到了进程的隔离。

最开始人们使用的是一种叫做分段(Segmentation)的方法,基本思路是把一段与程序所需要的内存空间大小的虚拟空间映射到某个地址空间。比如程序A需要10 MB内存,那么我们假设有一个地址从0x00000000到0x00A00000的10MB大小的一个假象的空间,也就是虚拟空间,然后我们从实际的物理内存中分配一个相同大小的物理地址,假设是物理地址0x00100000开始到0x00B00000结束的一块空间。然后我们把这两块相同大小的地址空间一一映射,即虚拟空间中的每个字节相对应于物理空间中的每个字节。这个映射过程由软件来设置,比如操作系统来设置这个映射函数,实际的地址转换由硬件完成。
分段的方法基本解决了上面提到的3个问题中的第一个和第三个。首先它做到了地址隔离,因为程序A和程序B被映射到了两块不同的物理空间区域,但是分段的这种方法还是没有解决我们的第二个问题,即内存使用效率的问题。分段对内存区域的映射还是按照程序为单位,如果内存不足,被换入换出到磁盘的都是整个程序,这样势必会造成大量的磁盘访问操作,从而严重影响速度,这种方法还是显得粗糙,粒度比较大。事实上,根据程序的局部性原理,当一个程序在运行时,在某个时间段内,它只是频繁地用到了一小部分数据,也就是说,程序的很多数据其实在一个时间段内都是不会被用到的。人们很自然地想到了更小粒度的内存分割和映射的方法,使得程序的局部性原理得到充分的利用,大大提高了内存的使用率。这种方法就是分页(Paging)。

分页的基本方法是把地址空间人为地等分成固定大小的页,每一页的大小由硬件决定,或硬件支持多种大小的页,由操作系统选择决定页的大小。比如Intel Pentium系列处理器支持4KB或4MB的页大小,那么操作系统可以选择每页大小为4KB,也可以选择每页大小为4MB,但是在同一时刻只能选择一种大小,所以对整个系统来说,页就是固定大小的。目前几乎所有的PC上的操作系统都使用4KB大小的页。我们使用的PC机是32位的虚拟地址空间,也就是4GB,那么按4KB每页分的话,总共有1 048 576个页。物理空间也是同样的分法。

在这一章中,我们对整个计算机的软硬件基本结构进行了回顾,包括CPU与外围部件的连接
方式、SMP与多核、软硬件层次体系结构、如何充分利用CPU及与系统软件十分相关的设备驱
动、操作系统、虚拟空间、物理空间、页映射的基础概念。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式