计算机概论

2023-05-16

最近要学习Linux系统,所以顺道将计算机的前世今生也学习了,下面做个读书笔记增强记忆。

一、计算机的组成

1. 计算机硬件的五大单元

  从外观看来,计算机主要分为三部分:

  1. 输入单元:包括键盘、鼠标、触控板等;
  2. CPU:含有算术逻辑、控制、记忆等单元;
  3. 输出单元:包括屏幕、打印机等。

  使用计算机时,我们主要通过输入设备(如鼠标与键盘)来将一些数据输入到主机里面,然后再经过主机的处理,将结果传输到输出设备(如屏幕)。显然,重点在于主机。我们拆开机箱,会发现主机里面最重要的就是一块主板,上面安插了CPU以及内存,还有一些适配卡而已。

  所以,计算机的重点在于CPU。CPU是一个具有特定功能的芯片,里面含有微指令集。如果不知道微指令集是什么,请去学习计算机组成原理。所以说,如果我们想要让主机进行什么特异的功能,就得参考CPU是否有相关内置的微指令集。由于CPU的工作主要在于管理和运算,因此在CPU内又可以分为两个主要的单元——算术逻辑单元和控制单元。算术逻辑单元主要负责程序运算与逻辑判断;控制单元主要协调各组件与各单元间的工作。

  既然CPU的重点是进行运算与判断,那么要被运算与判断的数据是从哪里来的?CPU读取的数据都是从内存读取来的,而内存内的数据则是从输入单元传输进来的。CPU处理完毕的数据也必须要先写回内存中,最后数据才从内存传输到输出单元。

  综上,我们可以知道计算机的组成单元为:输入单元、输出单元、CPU内部的控制单元、算术逻辑单元与内存。

2. CPU

  如上所述,CPU内部含有若干小指令集,它们的设计又被分为两种设计理念——RISC(精简指令集系统)和CISC。

  【RISC】

  • 这种CPU的设计中,微指令集较为精简,每个指令的执行时间都很短,完成的操作也很单纯,指令的执行性能较佳。但要做复杂的事情,就要由多个指令来完成。
  • 常见的RISC微指令集CPU主要有:Sun公司的SPARC系列、IBM公司的Power Architecture(包括PowerPC)系列与ARM系列等。
  • 在应用方面,SPARC架构的计算机常用于学术领域的大型工作站中,包括银行金融体系的主要服务器也都有这类的计算机架构;至于PowerPC架构,Sony公司出产的PS3就是使用PowerPC架构的Cell处理器;而ARM架构的CPU是目前世界上适用范围最广的,主要包括手机、PDA、导航系统、网络设备(交换机、路由器)等。

  【CISC】

  • 在CISC的微指令集中,每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。因为指令执行较为复杂,所以每条指令花费的时间较长,但每条个别指令可以处理的工作较为丰富。
  • 常见的CISC微指令集CPU主要有:AMD、Intel、VIA等x86架构的CPU。
  • 由于AMD、Intel、VIA所开发出的x86架构CPU被大量使用于个人计算机用途上面,因此个人计算机常被称为x86架构的计算机。

补充:为何称为x86架构呢?因为最早的那个Intel发展出来的CPU代号称为8086,后来依此架构又开发出80286、80386等,因此这种架构的CPU就被称为x86架构了。

在2003年以前有Intel所开发的x86架构CPU由8位升级到16、32位,后来AMD依此架构修改新一代的CPU为64位,为了区别两者的不同,因此64位的个人计算机CPU又被统称为x86_64的架构!

3. 接口设备

  单有CPU并无法运作计算机,所以计算机还需要其他的接口设备才能够实际运行。除了前面稍微提到的输入/输出设备以及CPU与内存之外,最重要的接口设备就是主板!主板负责将所有的设备连接在一起,让所有的设备能够进行协调与通信。而主板上最重要的组件就是主板芯片组,它可以将所有的设备汇集在一起。

  其他重要的设备还有:

  • 存储设备:包括硬盘、软盘、光盘、磁带等。
  • 显示设备:显卡对于玩3D游戏来说是非常重要的,它与显示的精度、色彩与分辨率都有关系。
  • 网络设备:没有网络就活不下去,所以网卡对于计算机来说也是相当重要。

4. 运作流程(各组件的关系)

  我们假设计算机是一个人体,那么每个组件对应哪个地方呢?

  • CPU(大脑):每个人会做的事情都不一样(微指令集的区别),但主要都是通过大脑来进行判断与控制身体各部分的活动。
  • 内存(大脑中的记录区块):在实际活动过程中,我们的大脑能够将外界的互动暂时记录起来,提供CPU来进行判断。
  • 硬盘(大脑中的记忆区块):将重要的数据记录起来,以便未来再次使用这些重要的经验。
  • 主板(神经系统):好像人类的神经一样,将所有重要的组件连接起来,包括手脚的活动都是大脑发布命令后,通过神经(主板)传输给手脚来进行活动。
  • 各项接口设备(人体与外界通信的手、脚、皮肤、眼睛等):就好像手脚一样,是人体与外界互动的关键部位。
  • 显卡(脑袋中的影像):将来自眼睛的刺激转成映像后在脑袋中呈现,所以显卡所产生的数据来源也是CPU控制的。

  类似于人体中最重要的地方是大脑,计算机中最重要的就是CPU和内存。而CPU的数据通通来自于内存,如果要由过去的经验来判断事情时,也要将经验(硬盘)挪到目前的记忆(内存)当中,再交由CPU来判断,这一点很关键。

5. 计算机上面常用的计算单位(大小、速度等)

  计算机的运算能力是由速度来决定的,而存放在计算机存储设备当中的数据大小也是有单位的。

  【大小单位】

  • 计算机依据有没有通电来记录信息,所以理论上它只认识0与1而已。0/1的单位我们称为bit。但bit实在太小了,并且在存储数据时每份简单的数据都会使用到8个bit的大小来记录,因此定义出Byte这个单位,它们的关系为1Byte = 8bit 。由于Byte仍然很小,所以后来出现了一些常见的简化单位表示法,例如K代表1024,M代表1024K等。但要注意这些单位在不同的进制位下有不同的数值表示,下面我们列出常见的单位与进制位对应表:
进位制KMGTP
二进制10241024K1024M1024G1024T
十进制10001000K1000M1000G1000T

  

 

 

 

  一般说来,文件大小使用的是二进制的方式,所以1GB的文件大小实际上是:1024x1024x1024B这么大。速度单位则常使用十进制,例如1Ghz就是1000x1000x1000Hz的意思。

  【速度单位】

  • CPU的运算速度常使用MHz或者是GHz之类的单位,这个Hz其实就是秒分之一。而在网络传输方面,由于网络使用的是bit为单位,因此网络常使用的单位为Mbit/s,即每秒多少Mbit。举例来说,大家常听到的8M/1M ADSL传输速度,如果转成文件容量的Byte时,其实理论最大传输值为:1MB/s/125KB/s的上传/下载速度。

提示:假设你购买的电脑的硬盘容量为500GB,但当你格式化完毕后却只剩下460GB左右的空间,这是什么原因呢?

因为一般硬盘制造商会使用十进制的单位,所以500GB代表为500x1000x1000x1000B之意。转成文件的大小单位时使用二进制(1024为底),所以就成为466GB左右的空间了。

硬盘厂商并非要钻这个空子,只是因为硬盘的最小物理量为512bytes,最小的组成单位为扇区(sector),通常硬盘容量的计算采用“多少个sector”,所以才会使用十进制来处理的。

 

二、个人计算机架构与接口设备

  我们常说的计算机通常指的就是x86的个人计算机架构,因此我们有必要了解一下这个架构的各个组件。

  两大主流x86开发商(Intel、AMD)的CPU架构并不兼容,而且设计理念也有所区别,所以两大主流CPU所需要的主板芯片组设计也就不太相同。

  我们知道,主板上最重要的就是芯片组,而芯片组通常又分为两个桥接器来控制各组件的通信,分别是:

  • 北桥负责连接速度较快的CPU、内存与显卡等组件;
  • 南桥负责连接速度较慢的周边接口,包括硬盘、USB、网卡等。

我们将以Intel的主板架构为例说明各组件。主板上的主要组件是CPU、内存、磁盘设备、总线芯片组(南桥/北桥)、显卡接口(PCI-Express)与其他适配卡(PCI)。

1. CPU

  • 由于CPU负责大量运算,因此CPU通常是具有相当高发热量的组件,所以经常在CPU上面安插一个风扇来主动散热。
  • 单核CPU只有一个运算单元,所谓的多核则是在一个CPU封装当中嵌入了两个以上的运算内核,简单地说,就是一个实际的CPU外壳中含有两个以上的CPU单元。
  • CPU的频率是CPU每秒钟可以进行的工作次数。于是有频率越高的CPU在单位时间内可以做更多的事情。

举例来说,若一个CPU的频率为3.0GHz,即表示这个CPU在一秒内可以进行3.0x109次工作,每次工作都可以进行少数的指令运行之意。

注意:不同的CPU之间不能单纯以频率来判断运算性能,这是因为每个CPU的微指令集不相同,架构也不一样,每次频率能够进行的工作指令数也不同,所以频率目前仅能比较同款CPU的速度。

提示:CPU内部含有微指令集,不同的微指令集会导致CPU工作效率的优劣。

【外频与倍频】

  我们前面提过主板上各个组件都是通过北桥和南桥连接在一起。于是,若其中某个组件速度特别慢,则会使其他的组件也受到影响。所以CPU与外部各组件的速度理论上应该要一致才好,但是因为CPU需要较强大的运算能力,因为很多判断和数据都是在CPU内处理的,因此CPU开发商就在CPU内再加上一个加速功能,所以CPU有所谓的外频与倍频。

  外频是CPU与外部组件进行数据传输/运算时的速度;倍频则是CPU内部用来加速工作的一个倍数,两者相乘才是CPU的频率。

  例如,我们上个例子中的频率为3.0GHz的CPU,它的外频是333MHz,因此倍频就是9倍(3.0G=333Mx9,其中1G=1000M)。

  超频:将CPU的倍频或者是外频通过主板的设定功能更改成较高频率的一种方式。但因为CPU的倍频通常在出厂时已经被锁定而无法修改,因此较常被超频的为外频。

  例如,若我们将上个例子中的CPU的外频从333MHz调整为400MHz,如此一来整个主板的各个组件的运行频率可能会被增加成原本的1.333倍,虽然CPU可能到达3.6GHz,但却因为频率并非正常速度,故可能会造成死机等问题。

【32位与64位】

  前面我们谈到CPU运算的数据都是由内存提供的,内存与CPU的通信速度靠的是外部频率,那么每次工作可以传送的数据量有多大呢?

  那就是总线的功能了。一般主板芯片组分为北桥与南桥,北桥的总线被称为系统总线,因为是内存传输的主要信道,所以速度较快;南桥就是所谓的输入输出(I/O)总线,主要用于“联系”硬盘、USB、网卡等接口设备。

  • 我们称北桥所支持的频率为前端总线速度(FSB),而每次传送的位数则是总线宽度。于是,所谓的总线频宽就是“FSB x 总线宽度”,亦即每秒钟可以传送的最大数据量。
  • 目前常见的总线宽度有32/64位(bit)。于是,若某个CPU的前端总线最高速度可达1600MHz,并且内存与北桥的频宽为12.8GB/s,即是1600MHz x 64bit = 1600MHz x 8Bytes = 12800MB/s = 12.8GB/s。
  • 与总线宽度相似,CPU每次能够处理的数据量称为字组大小。字组大小依据CPU的设计而有32位与64位。我们现在所称的计算机是32位或64位主要是依据CPU解析的字组大小而来的。早期的32位CPU中,因为CPU每次能够解析的数据量有限,因此由内存传来的数据量就有所限制了。这也导致32位的CPU最多只能支持4GB的内存。

提示:字组大小与总线宽度可以不相同。例如,32位的CPU可以搭配64位的总线宽度。

2. 内存

  我们知道CPU所使用的数据都是来自于内存,不论是软件程序还是数据,都必须要读入内存后CPU才能利用。个人计算机的内存主要组件为动态随机访问内存(DRAM),随机访问内存只有在通电时才能记录与使用,断电后数据就消失了。

  • DRAM根据技术的更新又分好几代,而使用上较广泛的有所谓的SDRAM与DDR SDRAM两种。DDR是双倍数据传送速度,它可以在一次工作周期中进行两次数据的传送,感觉上就是CPU的倍频。所以传输效率方面比SDRAM还要好。新一代的PC大多使用DDR内存了。下表列出了SDRAM与DDR SDRAM的型号与频率及频宽之间的关系:
SDRAM/DDR型号数据宽度(bit)外频(MHz)频率(MHz)频宽
SDRAMPC10064100100800MB/s
SDRAMPC133641331331064MB/s
DDRDDR266641332662.1GB/s
DDRDDR400642004003.2GB/s
DDRDDRII800644008006.4GB/s

  DDR SDRAM又依据技术的发展,有DDR,DDR,DDRII,DDRIII等。

  • 内存除了频率/频宽与型号需要考虑之外,容量也是很重要的。因为所有的数据都得要加载到内存当中才能够被CPU读取,如果内存容量不够大的话将会导致某些大容量数据无法被完整加载,此时已存在内存当中但暂时没有被使用的数据必须要先被释放,使得可用内存容量大于该数据,那份新数据才能够被加载。通常内存越大表示系统越快,这是因为系统不用常常释放一些内存内部的数据。对服务器而言,内存的容量有时比CPU的速度还重要。

【双通道设计】

  • 由于所有的数据都必须要存放在内存中,所以内存的数据宽度当然是越大越好。但传统的总线宽度一般大约仅达64位,为了要加大这个宽度,芯片组厂商就将两个内存汇整在一起。于是,如果一条内存可达64位,两条内存就可以达到128位了,这就是双通道的设计理念。
  • 要启用双通道内存功能,我们必须要安插两支(或4条)内存,这两条内存最好型号是一致的,因为启动双通道内存功能时,数据是同步写入/读出这一对内存中,如此才能够提升整体的频宽!

【CPU与内存的关系】

  • 因为技术方面的提升,这两者的频率速度不会相同,但外频则应该是一致的。

【DRAM与SRAM】

  • 除了内存外,我们应该要知道计算机中还有许多“存储”存在。最为我们所知的就是CPU内部的第二层高速缓存。
  • CPU的数据都是由内存提供的,但内存的数据毕竟得经由北桥送到CPU内。如果某些很常用的程序或数据可以放置到CPU内部的话,那么CPU数据的读取就不需要通过北桥了。这将大大提升计算机性能。
  • 因为第二层缓存集成到CPU内部,因此它的速度必须要与CPU频率相同。而使用DRAM是无法达到这个频率速度的,此时就需要静态随机访问内存(SRAM)。
  • SRAM在设计上使用的晶体管数量较多,价格较高,且不易做成大容量,不过由于其速度快,因此集成到CPU内成为高速缓存以加快数据的访问是个不错的方式。

【只读存储器ROM】

  • 主板上面的组件是非常多的,而每个组件的参数又具有可调整性。举例来说,CPU与内存的频率是可调整的;而主板上面如果有内置的网卡或者是显卡时,该功能是否要启动与该功能的各项参数被记录到主板上面的一个称谓CMOS的芯片上,这个芯片需要借着额外的电源来发挥记录功能,这也是为什么主板上面会有一个电池的缘故。
  • 那CMOS内的数据如何读取与更新呢?我们在开机的时候可以按下del按键来进入一个名位BIOS的界面。BIOS是一套程序,这套程序是写死到主板上面的一个内存芯片中,这个内存芯片在没有通电时也能够将数据记录下来,那就是只读存储器ROM。ROM与DRAM不同,它是一种非挥发性的内存。此外,BIOS对于计算机来说是非常重要的,因为它是系统在开机的时候首先会去读取的一个小程序!因为它控制着开机时各项硬件参数的取得。
  • BIOS对于计算机系统是非常重要的,因为它掌握了系统硬件的详细信息与开机设备的选择等。但是计算机发展的速度太快了,因此BIOS程序代码也可能需要做适度的修改才行,但是BIOS原本使用的是无法改写的ROM,为此现在的BIOS通常是写入闪存或EEPROM中。

3. 主板

  上面的组件都是安插在主板上面的。而主板上面负责通信各个组件的就是芯片组,而且芯片组一般分为南桥和北桥。北桥负责CPU/RAM/VGA等的连接,南桥则负责PCI接口与速度较慢的I/O设备。

  由于芯片组负责所有设备的通信,所以芯片组(尤其是北桥)也是一个会散发出高热量的组件。因此,我们常在这组芯片上面外接一些小风扇或散热片。

【芯片组功能】

  虽然主板负责各个计算机组件之间的通信,但是计算机组件实在太多了,有I/O设备及不同的存储设备等,那么主板芯片组怎么知道如何负责通信呢?

  这时就需要用到所谓的I/O地址与IRQ。

  • I/O地址有点类似每个设备的门牌号码,每个设备都有它自己的地址。
  • 如果将I/O地址想成是各设备的门牌号码的话,那么IRQ就可以想成是各个门牌连接到邮件中心(CPU)的专门路径。各设备可以通过IRQ中断信道来告知CPU该设备的工作情况,以方便CPU进行工作分配的任务。

【CMOS与BIOS】

  • CMOS:主要的功能为记录主板上面的重要参数,包括系统时间、CPU电压与频率、各项设备的I/O地址与IRQ等,由于这些数据的记录要花费电力,所以主板上面才有电池。
  • BIOS:写入到主板上某一块闪存或EEPROM的程序,它可以在开机的时候执行,以加载CMOS当中的参数,并尝试调用存储设备中的开机程序,进一步进入操作系统当中。BIOS程序也可以修改CMOS中的数据,每种主板调用BIOS设定程序的按键都不同,一般个人计算机是使用Del按键进入BIOS设置界面。

【连接接口设备】

  • USB接口:支持即插即用。
  • 声音输入、输出与麦克风:一些圆形的插孔,当主板上面内置音效芯片时,才会有这三个东西。
  • RJ-45接口:要有内置网络芯片。

 

三、数据表示方式

  事实上,计算机只认识0与1,记录的数据也只能是0与1,所以计算机常用的数据是二进制的。但是我们人类常用的数值运算是十进制,文字方面则有非常多的语言(比如英文、简体中文、繁体中文、日文等)。那么计算机如何记录与显示这些数值/文字呢?这需要通过一系列的转换,下面我们就来谈谈数值与文字的编码系统。

1. 数字系统

  早期的计算机使用的是利用通电与否的特性的真空管,如果通电就是1,没有通电就是0,后来沿用至今,我们称这种只有0/1的环境为二进制,英文称为Binary。

  所谓的十进制指的是逢十进一位,因此在个位数归为零而十位数写成1。所以所谓的二进制,就是逢二就进一位的意思。

  二进制是计算机基础中的基础。我们通过这些数字的转换系统便可以将我们输入的十进制数转成计算机认识的二进制数,于是计算机便可以完成相应的计算。

2. 文字编码系统

  既然计算机只记录0/1而已,甚至记录的数据都是使用byte/bit等单位来记录的,那么文字该如何记录啊?

  事实上,文本文件也是被记录为0与1而已,而这个文件的内容要被取出来查阅时,必须要经过一个编码系统的处理才行。

  所谓的“编码系统”可以想成是一个“字码对照表”,它的概念如下图所示:

  当我们要写入文件的文字数据时,该文字数据会由编码对照表将该文字转成数字后,再存入文件当中。同样,当我们要将文件内容的数据读出时,也会经过编码对照表将该数字转成对应的文字后再显示到屏幕上。现在你知道为何浏览器上面如果编码写错时会出现乱码了吗?这是因为编码对照表写错,导致对照的文字产生误差之故。

  常用的英文编码表为ASCII系统,这个编码系统中,每个符号(英文、数字或符号等)都会占用1B的记录,因此总共会有28=256种变化。

  常用的中文编码系统是big5(简体则是gb2312)编码表,每个中文字会占用2B,理论上最多可以有216=65536,即最多可达6万多个中文字。

  补充:因为big5编码系统并非将所有的位都拿来运用成为对照,所以并非可显示这么多的中文字码的。目前big5仅定义了一万三千多个中文字,许多繁体中文利用big5是无法成功显示的,所以才会有造字程序之说。big5码的中文编码对于某些数据库系统来说是很有问题的,某些字码如“许、盖、功”等字,由于这几个字的内部编码会被误判为单/双引号,写入时还不成问题,在读出数据的对照表时,经常就会变成乱码。不只中文字,其他非英语系国家也常常会有这样的问题出现。为了解决这个问题,国际组织ISO/IEC制定了Unicode编码系统,即我们常常称呼的UTF8或统一码。因为这个编码系统打破了所有国家的不同编码,因此目前应用较多。

 

四、软件程序运行

  没有软件的运行,计算机的功能就无从发挥了,就好像没有了灵魂的躯体。

  软件分为两大类:系统软件和应用程序。

1. 机器程序与编译程序

  计算机只认识0和1,而且计算机最重要的运算与逻辑判断是在CPU内部,而CPU其实是具有微指令集的,所以我们需要CPU帮忙工作时,就得要参考微指令集的内容。之后我们就编写让CPU读得懂的指令码给CPU执行,这样就能够让CPU运行了。

  不过上述流程有几个麻烦的地方:

  • 需要了解机器语言:机器只认识0与1,因此你必须要学习直接写给机器看的语言。
  • 需要了解所有硬件的相关功能函数:程序必须要写给机器看,所以我们就得要参考机器本身的功能,然后针对改功能去编写程序代码。例如,要让DVD影片能够放映,我们就得要参考DVD光驱的硬件信息才行。
  • 程序不具有可移植性:每个CPU都有独特的微指令集,同样,每个硬件都有其功能函数。因此,我们为A计算机写的程序,理论上是没有办法在B计算机上运行的。而且程序代码的修改非常困难。
  • 程序具有专一性:因为这样的程序必须要针对硬件功能函数来编写,如果已经开发了一支浏览器程序,想要再开发文件管理程序时,还是得从头再参考硬件的功能函数来继续编写,每天都在和“硬件”挑战。为了解决这个问题,计算机科学家设计出一种让人类看得懂的程序语言,然后创造一种“编译器”来将这些人类能够写的程序语言转译成为机器能看得懂的机器码。如此一来,我们修改与编写程序就变得容易多了!目前常见的编译器有C,C++,Java,Fortran等。

下图就是机器语言与高级程序语言的对比: 

  我们可以看出高级程序语言的程序代码是很容易查看的。图中已经将程序代码(英文)写成中文,这样更容易理解。所以这样已经将程序的修改问题处理完毕了,剩下来的问题是在这样的环境下面我们还得要考虑整体的硬件系统来设计程序。

  例如,当我们要将运行的数据写入内存中,我们就得要自行分配一个内存块出来让自己的数据能够填上去,所以我们还得要了解到内存的地址是如何定位的。

  为了要克服硬件方面老是需要重复编写句柄的问题,多以就有操作系统(Operating System, OS)了!

2. 操作系统

  如上所述,在早期想要让计算机执行程序就得要参考一堆硬件功能函数,并且要学习机器语言才能够编写程序。同时每次写程序时都必须要重新改写,因为硬件与软件功能不见得一致。

  那么,如果我能够将所有的硬件都驱动,并且提供一个开发软件的参考接口来给工程师开发软件的话,那开发软件不就变得非常简单了?那就是操作系统。

【操作系统内核】

  • 操作系统其实也是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。我们刚才谈到计算机没有软件的话只是一堆废铁,那么操作系统的功能就是让CPU可以判断逻辑与运算数值,让内存可以开始加载/读出数据与程序代码,让硬盘可以开始被访问,让网卡可以开始传输数据,让所有周边可以开始运转等。总之,硬件的所有操作都必须要通过这个操作系统来完成。
  • 上述的功能就是操作系统的内核了!计算机能不能做到某些事情,都与内核有关。只有内核提供了相关功能,计算机系统才能帮我们完成。例如,若我们的内核不支持TCP/IP协议,那么无论我们购买了什么样的网卡,这个内核都无法提供网络功能。
  • 但是用户单有内核也不知道能做啥事,因为内核主要在于管控硬件与提供相关的能力(例如网络功能),这些管理的操作是非常重要的,如果用户能够直接使用到内核的话,万一用户不小心将内核程序停止或破坏,将会导致整个系统的崩溃。因此内核程序所放置到内存当中的区块是受保护的,并且开机后就一直常驻在内存当中。

所以整个系统只有内核的话,我们就只能看着已经准备好运行的计算机系统,但无法操作它!这时候就需要软件的帮忙了!

【系统调用】

  • 既然我们的硬件都是由内核管理,那么如果我们想要开发软件的话,自然就得要去参考这个内核的相关功能。如此一来,就是从原本的参考硬件函数变成参考内核功能。
  • 为了解决这个问题,操作系统常常会提供一整组的开发接口给工程师来开发软件。工程师只要遵守该开发接口就很容易开发软件了。举例来说,我们学习C程序语言只要参考C程序语言的函数即可,不需要再去考虑其他内核的相关功能,因为内核的系统调用接口会主动将C程序语言的相关语法转成内核可以理解的任务函数,那内核自然就能够顺利运行该程序了!
  • 如果我们将整个计算机系统的相关软/硬件绘制成图的话,它的关系将如下所示:

  • 计算机系统主要由硬件构成,然后内核程序主要在于管理硬件,提供合理的计算机系统资源分配(包括CPU资源、内存使用资源等),因此只要硬件不同(如x86架构与RISC架构的CPU),内核就得要进行修改才行。而由于内核只会进行计算机系统的资源分配,所以在上面还需要有应用程序的提供,用户才能够操作系统的。
  • 为了保护内核,并且让程序员比较容易开发软件,因此操作系统除了内核程序之外,通常还会提供一整组开发接口,那就是系统调用层。软件开发工程师只要遵循公认的系统调用参数来开发软件,该软件就能够在该内核上面运行。所以我们可以发现,软件与内核有比较大的关系,而与硬件的关系不大。硬件也与内核有比较大的关系。至于与用户有关的,那就是应用程序啦!

在定义上,只要能够让计算机硬件正确无误地运行,那就算是操作系统了。所以说,操作系统其实就是内核与其提供的接口工具,不过就如同上面讲的,因为内核缺乏了与用户通信的亲和接口,所以,目前一般我们提到的“操作系统”都会包含内核与相关的用户应用软件。

  简单地说,上面的图示可以带给我们下面的概念:

  (1)操作系统的内核层直接参考硬件规格写成,所以同一个操作系统程序不能够在不一样的硬件架构下运行。举例来说,个人计算机版的Windows XP不能直接在RISC架构的计算机下运行。所以你知道为何Windows又分为32位及64位了吧?因为32/64位的CPU指令集不太相同,所以当然要设计不同的操作系统版本了。

  (2)操作系统只是在管理整个硬件资源,包括CPU、内存、输入输出设备及系统文件。如果没有其他的应用程序辅助,操作系统只能让计算机主机准备妥当而已!并无法运行其他功能。所以你现在知道为何Windows上面要实现网页影像的运行还需要类似Photoshop之类的软件安装了吧?

  (3)应用程序的开发都是参考操作系统提供的开发接口,所以该应用程序只能在该操作系统上面运行而已,不可以在其他操作系统上面运行的。现在你知道为何去购买在线游戏的光盘时,光盘上面会明白地写着该软件适合用于哪一种操作系统上了吧?也该知道某些游戏为何不能够在Linux上面安装了吧?

【内核功能】

  既然内核主要是负责整个计算机系统相关的资源分配与管理,那我们知道其实整部计算机系统最重要的就是CPU与内存,因此,内核至少有以下功能:

  • 系统调用接口:这是为了方便程序员可以轻易地通过与内核的通信,将硬件的资源进一步利用,于是需要有这个简易的接口来方便程序开发者。
  • 程序管理:我们肯定听过“多任务环境”,一部计算机可能同时间有很多的工作在等待CPU运算处理,内核这个时候必须要能够控制这些工作,让CPU的资源做有效的分配才行。另外,良好的CPU调度机制(即CPU先运行哪个工作的排列顺序)将会有效加快整体系统性能。
  • 内存管理:控制整个系统的内存管理,这个内存控制是非常重要的,因为系统所有的程序代码与数据都必须要先存放在内存当中。通常内核会提供虚拟内存的功能,当内存不足时可以提供内存交换的功能。
  • 文件系统管理:文件系统的管理,例如数据的输入/输出(I/O)等的工作。还有不同文件格式的支持等,如果内核不认识某个文件系统,那我们将无法使用该文件格式的文件。
  • 设备驱动:正如上面提到的,硬件的管理是内核的主要工作之一,当然,设备的驱动程序就是内核需要做的事情。好在目前都有所谓的“可加载模块”功能,可以将驱动程序编辑成模块,就不需要重新的编译内核。

补充:事实上,驱动程序的提供应该是硬件厂商的事情!硬件厂商要推出硬件时,应该要自行参考操作系统的驱动程序开发接口,开发完毕后将该驱动程序连同硬件一同贩卖给用户才对。举例来说,当你购买显卡时,显卡包装盒都会附上一张光盘,让你可以在进入Windows之后进行驱动程序的安装。

【操作系统与驱动程序】

  老实说,驱动程序可以说是操作系统里面相当重要的一环了。不过,硬件可是持续在进步当中的,包括主板、显卡、硬盘等。那么比较晚推出的较新的硬件,例如显卡,我们的操作系统当然就不认识。那操作系统将该如何驱动这块新的显卡?为了解决这个问题,操作系统通常会提供一个开发接口给硬件开发商,让他们可以根据这个接口设计可以驱动他们硬件的驱动程序。如此一来,只要用户安装驱动程序后,自然就可以在他们的操作系统上面驱动这块显卡了,如下图所示:

由上图我们可以得出几个小重点:

  • 操作系统必须要能够驱动硬件,如此应用程序才能够使用该硬件功能;
  • 一般来说,操作系统会提供开发接口,让开发商制作他们的驱动程序;
  • 要是用新硬件功能,必须要安装厂商提供的驱动程序才行;
  • 驱动程序是由厂商提供的,与操作系统开发者无关。

  所以,如果我们想要在某个操作系统上面安装一张新的显卡,那么请要求该厂商提供适当的驱动程序。为什么要强调“适当的驱动程序”呢?因为驱动程序仍然是依据操作系统而开发的,所以,给Windows用的驱动程序当然不能使用于Linux的环境下了。

3. 应用程序

  应用程序是参考操作系统提供的开发接口所开发出来的软件,这些软件可以让用户操作,以达到某些计算机的功能利用。举例来说,Office软件主要是用来让用户办公用的。

  需要注意的是,应用程序是与操作系统有关系的,如同上面的图示当中的说明。因此,如果我们想要购买新软件,就务必要参考软件上面的说明,看看该软件是否能够支持我们的操作系统。

  我们以微软公司的两个产品Windows XP和Office 2007来说明一下应用程序与操作系统的区别:

  • Windows XP是一套操作系统,它必须先安装到个人计算机上面,否则计算机无法开机运行;
  • Windows 98与Windows XP是两套不同的操作系统,所以能在Windows 98上安装的软件不见得可在Windows XP上安装;
  • Windows XP安装好后,就只能拥有很少的功能,并没有办公室软件;
  • Office 2007是一套应用程序,在安装前必须要了解它能在哪些操作系统上面运行。

 

五、温故知新

  • 计算机的定义为:接受用户输入指令与数据,经由中央处理器的数据域逻辑单元运算处理后,以产生或存储成有用的信息。
  • 计算机的五大单元:输入单元、输出单元、CPU内部的控制单元、算术逻辑与内存。
  • 数据会流进/流出内存是CPU所发布的控制命令,而CPU实际要处理的数据则完全来自于内存。
  • CPU依设计理念主要分为:精简指令集(RISC)和复杂指令集(CISC)系统。
  • 关于CPU的频率部分,外频指的是CPU与外部组件进行数据传输时的速度,倍频则是CPU内部用来加速工作性能的一个倍数,两者相乘才是CPU的频率速度。
  • 一般主板芯片组分为北桥和南桥,北桥的总线称为系统总线,因为是内存传输的主要信道,所以速度较快。南桥就是所谓的输入/输出(I/O)总线,主要在于连系硬盘、USB、网卡等接口设备。
  • 北桥所支持的频率我们称为前端总线速度(FSB),而每次传送的位数则是总线宽度。
  • CPU每次能够处理的数据量称为字组大小,字组大小依据CPU的设计而有32位与64位之分。我们现在所称的计算机是32或64位主要是依据这个CPU解析的字组大小而来的!
  • 个人计算机的内存主要组件为动态随机访问内存(DRAM),至于CPU内部的第二层缓存则使用静态随机访问内存(SRAM)。
  • BIOS是一套程序,这套程序是写死到主板上面的一个内存芯片中,这个内存芯片在没有通电时也能将数据记录下来,那就是只读存储器(ROM)。
  • 显卡的规格有PCI/AGP/PCle,目前的主流为PCle接口。
  • 硬盘是由盘片、机械手臂、磁头与主轴马达所组成的,其中盘片的组成为扇区、磁道与柱面。
  • 操作系统也是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。
  • 计算机主要以二进制作为单位,常用的磁盘容量为Byte,其单位换算为1Byte = 8bit。
  • 操作系统仅在于驱动与管理硬件,而要使用硬件时,就得需要通过应用软件或者是shell的功能,来调用操作系统操纵硬件工作。目前,操作系统除了上述功能外,通常已经包含了日常工作所需要的应用软件在内了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机概论 的相关文章

随机推荐

  • 基数排序

    基数排序 一 什么是基数排序二 基数排序的代码实现三 总结 一 什么是基数排序 基数排序属于非比较类排序 非比较类排序包括计数排序 基数排序 桶排序 基数排序是由计数排序改善而来的 xff0c 基数排序将整数或者字符串切分不同的数字或字符
  • win11怎么取消显示更多选项

    1 点击Windows键 xff0c 输入cmd xff0c 然后选择以管理员运行cmd xff0c 最后敲入下面命令 reg add HKCU Software Classes CLSID 86ca1aa0 34aa 4e8b a509
  • Docaker部署Nginx配置多个域名

    1 拉取nginx镜像 sudo docker pull nginx 2 映射端口指定配置文件和前端目录 sudo docker run d p 9524 9524 p 9525 9525 p 10080 10080 restart alw
  • 硬件消抖——开关并联电容的那点事儿

    硬件消抖 开关并电容的那点事儿 一年前做过的小脚丫的消抖实验和不消抖实验的区别 xff0c 开关如果不消抖 xff0c 产生的毛刺和电平变化确实给开关带来了不良影响 xff0c 比如按键不灵 xff0c 需要按暂停或者切换的时候要反复按多次
  • 微信电脑版登录不了了,怎么办?不显示二维码

    今天微信开发者工具不显示二维码 xff0c 很尬 xff0c 找了好了方法 xff0c 最满意的一个如下 xff0c 如果解决了 xff0c 记得给我点赞 电脑上无法登录微信的解决方法 xff1a 1 先退出电脑微信登录页面 2 按Win
  • eclipse集成git关联到gitee同步代码

    eclipse集成git关联到gitee同步代码 1 注册gitee2 eclipse集成git3 eclipse配置git4 gitee配置用户ssh公钥5 本地新建项目提交到本地git仓库6 本地git仓库提交到远程gitee仓库7 修
  • JavaEE互联网轻量级框架整合开发-1入门和技术基础-JDK代理

    JDK代理 1 定义接口 public interface HelloYuan public void sayHelloYuan 2 实现接口 public class HelloYuanImpl implements HelloYuan
  • 阿里巴巴代码规范4点

    阿里巴巴代码规范 一 安全规约 前端 后端接口进行权限和角色校验展示敏感数据时需脱敏 xff08 用户个人手机号码 xff1a 137 3927 xff09 SQL注入问题 xff08 字符串拼接访问数据库 xff09 xff0c 表示先编
  • Cannot read property ‘appendChild‘ of null错误

    记前端Js报错 xff0c Cannot read property appendChild of null 页面由上至下执行 xff0c 提示获取不到插入的节点 将js代码放到body中的最后面
  • The new driver class is `com.mysql.cj.jdbc.Driver‘.

    记一次数据库连接数据库报错 报错提示 xff1a Loading class com mysql jdbc Driver 39 This is deprecated The new driver class iscom mysql cj j
  • Consider defining a bean of type ‘com.project.springboot.mapper.UserMapper‘ in your configuration.

    新建springboot项目启动时出现报错 xff1a Consider defining a bean of type com project springboot mapper UserMapper in your configurat
  • 面试官:如何优化sql

    在面试的环节中 xff0c 面试官问到 xff1a 你是如何设计你的表结构的 xff0c 画一下E R图 xff1f 接着又继续深挖 xff0c 如果有慢查询 xff0c 你是如何优化你的sql的 xff1f 今天 xff0c 我就来和大家
  • PageNotFound.noHandlerFound No mapping found for HTTP request with URI

    学习SpringMVC接收参数 xff0c 不小心配置xml文件包名出错 浏览器访问出现以下报错 xff0c 后端提示 xff1a org span class token punctuation span springframework
  • The driver has not received any packets from the server

    idea启动本地项目提示报错 The driver has not received any packets from the server xff0c 可能是数据库Mysql服务被停止 解决办法 xff1a 1 打开计算机的任务管理器 2
  • [Vue-Treeselect Warning] Detected duplicate presence of node id

    只能说出现这个问题的小伙伴们 xff0c 和曾经的我一样 xff0c 给自己挖了一个巨坑 问题点 xff1a 不影响任何业务需求或者操作 xff0c 但是在控制台出现了以上截图报错 xff08 找到问题的我不顾上班时间 xff0c 愤怒写下
  • vmware-horizon-client安装失败无反应

    公司周日下午5点说开始远程办公 xff0c 让我们装上vmware horizon client开始居家办公啦 xff0c 但是捏 xff0c 我昨天光是安装就傻了 xff0c 整一晚上 xff0c 点击安装软件exe xff08 下面截图
  • springboot搭建web项目

    记录在本地搭建的springboot web项目 1 file gt New gt Project 2 选择Spring Initializr gt next 3 选择对应构建 开发语言 打包方式 JDK版本等内容 4 选择需要添加的依赖
  • SyntaxError: Unexpected token ‘.‘

    开发时vscode弹出插件更新 手一抖安装了插件vue Language Featues xff08 Volar xff09 本来正常运行的代码报错 xff1a SyntaxError Unexpected token span class
  • java项目调用SAP函数报错

    公司内部新增一个java项目调用SAP系统中的函数 调试时出现如下问题 xff08 xff09 问题一 xff1a com sap conn jco JCoException span class token punctuation spa
  • 计算机概论

    最近要学习Linux系统 xff0c 所以顺道将计算机的前世今生也学习了 xff0c 下面做个读书笔记增强记忆 一 计算机的组成 1 计算机硬件的五大单元 从外观看来 xff0c 计算机主要分为三部分 xff1a 输入单元 xff1a 包括