1.冯诺依曼体系结构介绍
冯诺依曼体系结构如下:
在上图中「输⼊设备」和「输出设备」⼀般被称为计算机的外设,⽽「存储器」在冯 诺依曼体系结构中表示「内存」
输⼊设备⼀般包括:⽹卡、磁盘、键盘、触摸屏等
输出设备⼀般包括:⽹卡、磁盘、⿏标、触摸屏、显示器(⾮触摸屏)等
1.2内存的作⽤
「内存」是中央处理器与计算机其他设备的桥梁,因为CPU的处理速度相当得快,以 ⾄于如果没有「内存」,就会导致类似「磁盘」等外设因为其速度远远⼩于CPU从⽽ 拖慢整机性能
「内存」本质不永久存储任何数据,其速度快于「磁盘」,但慢于CPU,当需要进⾏ 数据的读取时,⾸先数据会从「输⼊设备」上读取数据到内存中,再从「内存」到 CPU进⾏相关处理,如果处理完的数据需要写⼊到输出设备时,此时CPU会将数据写 ⼊「内存」,再从「内存」写⼊到输出设备
1.3内存or磁盘
「内存」虽然速度不快也不慢,但是「内存」并不可以直接替代硬盘的位置,⾸先 CPU也不可以直接从「硬盘」读取数据,其次「内存」中的数据断电后就会消失(属 于易失性存储器,volatile storage),⽽「硬盘」中的数据会在⽣命周期内永 久保存(属于⾮易失性存储器,nonvolatile storage)
1.4计算机中的存储设备
在计算机中,有下⾯的存储⾦字塔结构:
在计算机的存储体系中,存在着不同类型的存储器,它们在速度、价格和数据易失性等方面有着各自的特点。
首先,速度最快且价格最高的存储器是 “寄存器(registers)”,它属于易失性存储器。寄存器是计算机处理器内部用于暂存数据和指令的高速存储单元,其访问速度极快,能够在极短的时间内完成数据的读取和写入操作。然而,由于其制造工艺复杂且容量极小,成本也就相应地非常高。
其次是 “缓存(cache)”,它同样是易失性存储器,但速度和价格都仅次于寄存器。缓存的作用是为了缓解处理器与主内存之间的速度差异,它可以快速地为处理器提供所需的数据,减少处理器等待数据的时间,从而提高计算机的整体性能。
接着是 “内存(main memory)”,也是易失性存储器。内存是计算机中用于存储正在运行的程序和数据的重要部件。虽然它的速度比寄存器和缓存慢,但仍然能够相对快速地与处理器进行数据交互。
在易失性存储器之后,是非易失性存储器。其中,较为常见的是 NVM(Non - volatile Memory)存储器。在现代计算机中,闪存(固态硬盘就属于其中一种)是 NVM 存储器的常见形式。此外,还有电可擦可编程只读存储器(EEPROM)和铁电随机存取存储器(FRAM, Ferroelectric Random Access Memory)等。NVM 存储器的特点是在断电后数据仍然能够保存,这使得它在存储需要长期保存的数据方面具有重要作用。
再往下看,“硬盘(hard - disk drives)” 也是一种非易失性存储器。在相同存储容量的情况下,硬盘的造价通常比 NVM 存储器低,但它的速度相对较慢。硬盘通过磁头在磁盘表面读写数据,其机械结构决定了它的数据访问速度相对较慢。
最后,排在存储体系第三层的是 “光盘(optical disk)” 和 “磁带(magnetic tapes)”。曾经,它们在数据存储和备份方面有着广泛的应用,但随着技术的发展,对它们的需求已经不如过去那么普遍。光盘通过激光在盘片上读写数据,而磁带则通过磁头在磁带上记录数据。它们的存储容量较大,但数据访问速度相对较慢,更适合用于大容量数据的长期存储和备份。
总之,计算机的存储体系是一个多层次、多类型的结构,不同的存储器在速度、价格、容量和数据易失性等方面相互补充,共同满足计算机系统对数据存储和访问的需求。随着技术的不断进步,存储器的性能和特点也在不断发展和变化,以适应日益增长的计算需求和数据存储需求。
1.5⽹卡输出or输⼊设备
从宏观的⻆度来看,许多⼈认为⽹卡是输⼊设备,因为我们需要使⽤⽹卡来接收⽹络 信号(例如Wi-Fi),但其实⽹卡即是输出设备也是输⼊设备
例如:当⼀个⼈通过电脑上的聊天平台软件(例如QQ、微信等)向另⼀个⼈发送消 息,在这⼀过程中⽹卡就扮演着输出和输⼊设备两个⻆⾊
对于发送者来说,发送者在其电脑打开聊天平台软件,该软件的相关代码和数据 就会从「磁盘」加载进⼊「内存」,CPU从「内存」中读取代码转换成指令执⾏ 程序,此时发送者将其想发送的消息输⼊到聊天软件⽂本框后点击发送,此时 CPU会将数据写⼊「内存」,再由「内存」中的软件将发送的消息写⼊到「⽹ 卡」,通过「⽹卡」发送到⽹络。此过程中「⽹卡」就是输出设备
对于接受者来说,当接受者打开聊天平台软件,该软件的相关代码和数据就会从 「磁盘」加载进⼊「内存」,CPU从「内存」中读取代码转换成指令执⾏程序, 「⽹卡」设备从⽹络接收数据,此时「⽹卡」设备就是输⼊设备,「⽹卡」将其 读取到的信息加载到「内存」,由对应的聊天软件接收并由CPU进⾏处理,再发 送给「内存」,由「内存」写⼊显示器显示到接受者的显示器上
通过上⾯的例⼦和介绍,可以基本了解到,计算机中的数据流转实际上是数据在各种 设备间的来回拷⻉,⽽拷⻉的效率基本可以认为就是计算机的效率
2.操作系统基本认知
操作系统本质是通过对计算机硬件的管理从⽽达到⽤户可以更⾼效、便利地使⽤计算 机。⽤户可以通过操作系统提供的接⼝⽅便得操作计算机硬件,例如写⽂档等。
下⾯从两个⽅⾯浅谈⼀下可以⼈机交互的操作系统(不包括嵌⼊式计算机embedded computers的系统)
2.1 系统层面
系统层⾯:从计算机的⻆度来看,操作系统是与硬件联系最紧密的软件,⽽这 其中最重要的就是操作系统内核,计算机在解决⼀个问题时需要⼀些资源,例 如:CPU时间、内存空间、存储空间、I/O设备等,⽽操作系统在这⼀过程中扮 演的⻆⾊更像是⼀个管理者,管理计算机硬件之间的交流和资源
2.2 用户层面
⽤户层⾯:前⾯提到对于⽤户来说,操作系统提供了接⼝便于⽤户操作计算机 硬件。⽤户所看到的计算机可以简单理解为⼀个屏幕、⼀个键盘和⼀个⿏标, 当需要使⽤计算机时,对应的操作使⽤对应的设备即可,此时操作系统对于⽤ 户来说更多得是为了⽤户更好的使⽤体验,所以这⼀层⾯上,⼀款操作系统的 好坏取决于⽤户的使⽤感受
操作系统在整个计算机的组成中所处的位置如下图所示:
下⾯从这两个层⾯切⼊,具体谈操作系统的地位:
2.1.2 系统层面的地位
系统层⾯:操作系统提供⼿段管理计算机硬件
操作系统通过驱动管理硬件:
从系统层⾯,⾸先从对于底层硬件来说,计算机中所有的硬件都需要对应的驱动,⽽ 操作系统管理这些硬件的⽅式就是通过对应的驱动。前⾯提到,操作系统在管理硬件 时更像是⼀个管理者的⻆⾊,那么为了能够管理计算机硬件,操作系统就会做出决策 (类似于⼀个管理者发号施令),通知对应的驱动,驱动根据操作系统的决策执⾏对 相关硬件进⾏管理。
2.1.3.操作系统采用数据结构管理驱动
但是这⼀过程中存在⼀个问题,那就是如果硬件数量⼤,需要的驱动数量也就会变 ⼤,那么操作系统直接对所有驱动进⾏管理就会影响整体的效率,为了解决这个问 题,操作系统采⽤了⼀种抽象的思路,即将同类型的设备进⾏归类,因为同类型的设 备驱动基本上都有某些共同的特点,所以此时可以考虑将共性字段抽取,放在⼀个结 构体中,每⼀个结构体中根据驱动⾃⼰的值填写到对应结构体的字段中,⽽操作系统 只需要使⽤⼀种数据结构,将所有驱动对应的结构体进⾏链接管理即可
例如,假设操作系统使⽤的数据结构是链表,那么操作系统针对于每⼀种功能管理 (例如驱动管理)只需要⼀个头结点,具体类型的驱动对应的结构体依次进⾏链接, 在需要某⼀种驱动时,只需要依次遍历该链表即可拿到对应的驱动进⾏相关的进⾏决 策与操作执⾏
3.先描述,再组织
从上⾯的例⼦可以看出,操作系统要管理⼀种硬件,最优的解决⽅案就是先抽象出该 驱动的特点,将其归类到某⼀种驱动结构体,该结构体再通过相关数据结构的特点进 ⾏链接,最后通过对应的数据结构进⾏管理。这⼀过程也可以被概括为:先描述,再 组织
对于操作系统的其他管理,例如内存管理、进程管理等也是使⽤类似的⽅式
4.数据结构与面向对象的重要性
从这⼀过程也可以看出,之所以要有数据结构,也是为了更好得管理数据,⽽之所以 需要⾯向对象,也是为了抽取零散数据的共性从⽽达到更⽅便的管理
4.2.⽤户层⾯:操作系统提供接⼝⽅便⽤户使⽤
⽤户使⽤操作系统,操作系统必须提供功能,但是操作系统不能完全将⾃⼰暴露给⽤ 户,否则会导致整机出现问题,所以操作系统需要满⾜两个特点:封闭且开放
封闭:表示操作系统的内核对于⽤户来说必须是封闭的
开放:表示操作系统必须提供合适的结构给⽤户使⽤
操作系统具有的部分如下图所示:
前⾯已经提到了内核中操作系统的地位,接下来考虑系统调⽤接⼝
系统调⽤接⼝是操作系统开放性的最根本的体现,因为这个接⼝与操作系统内核最接 近,这种接⼝在使⽤层⾯上也会更加繁琐,学习成本也会更⾼,更加需要使⽤者深⼊ 了解操作系统,⽽为了降低这种学习和使⽤上的成本,系统调⽤接⼝外还有⼀种接⼝ 称为:⽤户操作接⼝,这种接⼝⼀般是对底层系统调⽤接⼝进⾏⼀定的封装,便于使 ⽤者调⽤,例如C语⾔中的 fopen 函数封装了 open 函数等,图形化界⾯也属于⽤户 操作接⼝,因为图形化界⾯本质是操作对应指令,⽽指令被操作系统接收就是执⾏对 应的操作,也就间接调⽤系统接口