计算机基础之计算机硬件系统

一.计算机硬件系统概述

所谓计算机硬件系统,就是指构成计算机看得见的,摸得着的实际物理设备。

常见的计算机硬件组成主要由下图各部件组成:

现代计算机的结构更复杂,包括多重总线。

简单打个比方,方便大家理解计算机各部件的主要功能:

cpu是人的大脑,负责运算;

内存是人的记忆,负责临时存储;

硬盘是人的笔记本,负责永久存储;

输入设备是耳朵或眼睛,负责接收外部的信息传给cpu;

输出设备是你的表情,负责经过处理后输出的结果;

以上所有的设备都通过总线连接,总线相当于人的神经。

二.编程语言的作用及与操作系统和硬件的关系

编程语言就是程序员与计算机沟通的介质,通过编程语言可以使得计算机能够根据程序员的指令一步一步去工作,完成某种特定的任务。

程序员用编程语言写程序,最终开发出的结果就是一个软件,软件不能直接操作硬件,必须运行在操作系统之上,操作系统是用来管理计算机硬件设备的。操作系统是电脑的软件基础。它和电脑的硬件组成了系统。使电脑能够为人类工作。

三.应用程序、操作系统、硬件之间的关系

  应用程序的功能执行需要通过操作硬件之间的相互配合才能得以实现,但是应用程序不能直接操作硬件,只能通过调用操作系统,让应用程序的功能通过操作系统来操作相应的硬件才能得以实现其功能。

四.CPU、内存、磁盘之间的关系

 1.CPU即中央处理器, CPU从内存或缓存中取出指令,放入指令寄存器,并对指令译码分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。

    2.但是,CPU并不能直接调用存储在硬盘上的系统、程序和数据,必须首先将硬盘的有关内容存储在内存中,这样才能被CPU读取运行。因而,内存(即物理内存,是相对于硬盘这个“外存”而言)作为硬盘和CPU的“中转站”,对电脑运行速度有较大影响。

    3.当运行数据超出物理内存容纳限度的时候,部分数据就会自行“溢出”,这时系统就会将硬盘上的部分空间模拟成内存——虚拟内存,并将暂时不运行的程序或不使用的数据存放到这部分空间之中,等待需要的时候方便及时调用。

    4.由于内存是带电存储的(一旦断电数据就会消失),而且容量有限,所以要长时间储存程序或数据就需要使用硬盘(外存储器)。硬盘也会影响系统速度,因为系统从硬盘中读取数据并通过总线存入内存的速度也会影响系统运行的快慢。

五. CPU与寄存器,内核态与用户态及如何切换

  因CPU访问内存以得到指令或数据的时间比cpu执行指令花费的时间要长得多,所以,所有CPU内部都有一些用来保存关键变量和临时数据的寄存器。

  寄存器是用与cpu相同材质制造,与cpu一样快,因而cpu访问它无时延。用来避免内存速率比CPU慢几个数量级的瓶颈问题。

寄存器的分类:

     a.通用寄存器:用来保存变量和临时结果

     b.程序计数器:保存了将要取出的下一条指令的内存地址。在指令取出后,程序计算器就被更新以便执行后期的指令。

     c.堆栈指针: 指向内存中当前栈的顶端。该栈包含已经进入但是还没有退出的每个过程中的一个框架。在一个过程的堆栈框架中保存了有关的输入参数、局部变量以及那些没有保存在寄存器中的临时变量。   

     d.程序状态字寄存器(Program Status Word,PSW): 这个寄存器包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户通常读入整个PSW,但是只对其中少量的字段写入。在系统调用和I/O中,PSW非常重要。

内核态与用户态

  除了在嵌入式系统中的非常简答的CPU之外,多数CPU都有两种模式,即内核态与用户态。通常,PSW中有一个二进制位控制这两种模式。

内核态:运行操作系统内核,可以操作硬件,可以获取所有CPU的指令集。(操作系统在内核态下运行,从而可以访问整个硬件)

用户态:运行应用程序,不可以操作硬件,可以获取所有CPU的指令集的一个子集,该子集不包括操作硬件的的指令集。(应用程序在用户态下运行)

内核态与用户态切换

   所有用户程序都是运行在用户态的,但是有时候程序确实需要做一些内核态的事情,例如从硬盘读取数据, 或者从键盘获取输入等。 而唯一可以做这些事情的就是操作系统, 所以此时用户程序就需要使用系统调用,操作系统请求以程序的名义来执行这些操作,此时就会从用户态切换到内核态。

六.存储器系列,L1缓存,L2缓存,内存(RAM),EEPROM和闪存,CMOS与BIOS电池

存储器包括:寄存器,高速缓存、内存、磁盘、磁带。

L1缓存即寄存器:

用与cpu相同材质制造,与cpu一样快,因而cpu访问它无时延,典型容量是:在32位cpu中为32*32,在64位cpu中为64*64,在两种情况下容量均<1KB。

L2缓存即高速缓存:

主要由硬件控制高速缓存的存取,内存中有高速缓存行按照0~64字节为行0,64~127为行1。。。最常用的高速缓存行放置在cpu内部或者非常接近cpu的高速缓存中。L1与L2的差别在于对cpu对L1的访问无时间延迟,而对L2的访问则有1-2个时钟周期(即1-2ns)的延迟。

内存:

常称为随机访问存储RAM,所有的程序都是在内存中运行的,计算机在运行中,操作系统也会在内存中运行。所有不能再高速缓存中找到的,都会到主存中找,主存是易失性存储,断电后数据全部消失,除了主存RAM之外,许多计算机已经在使用少量的非易失性随机访问存储如ROM(Read Only Memory,ROM),在电源切断之后,非易失性存储的内容并不会丢失,ROM只读存储器在工厂中就被编程完毕,然后再也不能修改。ROM速度快且便宜,在有些计算机中,用于启动计算机的引导加载模块就存放在ROM中,另外一些I/O卡也采用ROM处理底层设备的控制。

内存的速度会慢于L1和L2缓存,CPU访问的先后顺序是先访问L1缓存吗,然后访问L2缓存,再访问内存,最后访问硬盘。

EEPROM闪存都是一种储存器,可以擦除和重写,但是重写的速度介于内存和磁盘之间。被应用于便携式电子设备的存储媒介,磁盘,固态硬盘等,都是应用闪存。

CMOS也是一类存储介质,它是易失性的,断电既消失,但是因为它的耗电亮很小,所以采用它来保存一些系统的参数配置,一块电池能使用若干年。

七.磁盘结构,平均寻道时间,平均延迟时间,虚拟内存与MMU

磁盘低速的原因是因为它一种机械装置,在磁盘中有一个或多个金属盘片,它们以5400,7200或10800rpm(RPM =revolutions per minute 每分钟多少转 )的速度旋转。

信息写在磁盘上的一些列的同心圆上,是一连串的2进制位(称为bit位),为了统计方法,8个bit称为一个字节bytes,1024bytes=1k,1024k=1M,1024M=1G,所以我们平时所说的磁盘容量最终指的就是磁盘能写多少个2进制位。

每个磁头可以读取一段换新区域,称为磁道

把一个戈丁手臂位置上所以的磁道合起来,组成一个柱面

每个磁道划成若干扇区,扇区典型的值是512字节

数据都存放于一段一段的扇区,即磁道这个圆圈的一小段圆圈,从磁盘读取一段数据需要经历寻道时间和延迟时间

平均寻道时间

机械手臂从一个柱面随机移动到相邻的柱面的时间称为寻道时间,找到了磁道就以为着招到了数据所在的那个圈圈,但是还不知道数据具体这个圆圈的具体位置。

平均延迟时间

机械臂到达正确的磁道之后还必须等待旋转到数据所在的扇区下,这段时间称为延迟时间。

虚拟内存:

许多计算机支持虚拟内存机制,该机制使计算机可以运行大于物理内存的程序,方法是将正在使用的程序放入内存取执行,而暂时不需要执行的程序放到磁盘的某块地方,这块地方成为虚拟内存,在linux中成为swap,这种机制的核心在于快速地映射内存地址,由cpu中的一个部件负责,成为存储器管理单元(Memory Management Unit, MMU)

PS:从一个程序切换到另外一个程序,成为上下文切换(context switch),缓存和MMU的出现提升了系统的性能,尤其是上下文切换

八.磁带

在价钱相同的情况下比硬盘拥有更高的存储容量,虽然速度低于磁盘,但是因其大容量,在地震水灾火灾时可移动性强等特性,常被用来做备份。(常见于大型数据库系统中)

九. 设备驱动与控制器

1. 控制器:是插在主板上的一块芯片或一组芯片(硬盘,网卡,声卡等都需要插到一个口上,这个口连的便是控制器),控制器负责控制连接的设备,它从操作系统接收命令,比如读硬盘数据,然后就对硬盘设备发起读请求来读出内容。控制器的任务就是为操作系统屏蔽这些复杂而具体的工作,提供给操作系统一个简单而清晰的接口。

2. 设备驱动:要想调用设备,必须根据该接口编写复杂而具体的程序,于是有了控制器提供设备驱动接口给操作系统。必须把设备驱动程序安装到操作系统中。设备驱动是操作系统和输入输出设备间的粘合剂。驱动负责将操作系统的请求传输,转化为特定物理设备控制器能够理解的命令。

十. 总线与南桥和北桥

1.总线将计算机内部各部件连接,并且实现了计算机各功能部件之间的信息传输。

2.南桥即ISA桥:连接慢速设备,硬盘,显示器等设备。

3.北桥即PCI桥:连接高速设备,CPU,内存等设备。

十一. 操作系统的启动流程

在计算机的主板上有一个基本的输入输出程序(Basic  Input Output system)

BIOS就相当于一个小的操作系统,它有底层的I/O软件,包括读键盘,写屏幕,进行磁盘I/O,该程序存放于一非易失性闪存RAM中。

1.计算机加电

2.BIOS开始运行,检测硬件:cpu、内存、硬盘等

3.BIOS读取CMOS存储器中的参数,选择启动设备

4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)

5.根据分区信息读入bootloader(grub),选择内核(kernel),找到内核后将内核代码读到内存里,然后CPU加载运行,启动操作系统

6.然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户安装设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表),创建需要的进程,并在每个终端上启动登录程序或GUI

十二.应用程序的启动流程

前提:应用程序是运行与操作系统之上

举例:启动暴风影音

双击快捷方式-->告诉操作系统一个文件路径-->操作系统从硬盘读取文件内容到内存中-->CPU从内存读取数据执行

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT技术精选文摘

MongoDB和数据流:使用MongoDB作为Kafka消费者

数据流 在当今的数据环境中,没有一个系统可以提供所有必需的观点来提供真正的洞察力。从数据中获取完整含义需要混合来自多个来源的大量信息。 与此同时,我们不耐烦地...

4986
来自专栏腾讯Bugly的专栏

手Q Android缓存监控与优化实践

死锁问题对产品的影响是巨大的,那么是否会有效的方法能够监控Android应用的死锁呢?

71512
来自专栏FreeBuf

我们来“劫持”个GitHub自定义域名玩吧!

作为一个国内外项目都不怎么挖的我,比较喜欢拿自己正在使用的服务入手挖洞,毕竟拥有需求又了解业务才能长期跟进,更好的去发现各种流程上出现的毛病。

1623
来自专栏编程坑太多

『高级篇』docker之了解kubernetes(31)

PS:(梳理概念)pod里面包括N个容器,service里面包括pod,Deployment可能包括service或者是pod。

1364
来自专栏JAVA高级架构

微服务架构组件分析

服务描述:服务调用首先解决的问题就是服务如何对外描述。 常用的服务描述方式包括 RESTful API、XML 配置以及 IDL 文件三种。

1204
来自专栏企鹅号快讯

分布式金融系统调优实践

引言: 某银行采用分布式架构对其核心产品系统进行重构,重构后该系统由多个技术模块和业务模块组成,存在联机交易、异步消息、自动任务、批量等交易形态。各模块之间交互...

2288
来自专栏進无尽的文章

基础篇-服务器工作实现的浅析

对于一个前端开发的人员来说,了解服务器的基础知识,个人觉得是非常必要的,于是就有一个这篇侧重于Java的服务器相关知识的文章,只是简单介绍对于我也是一个拓展。

1182
来自专栏ThoughtWorks

DocBook 让文档版本化

image.png #ThoughtWorkers好声音# 第十六期(图片:网络) 你们都知道ThoughtWorks曾经是扛敏捷的大旗的,你们也都知道敏捷是...

3166
来自专栏数据和云

【推荐】 RAC 性能优化全攻略与经典案例剖析

ORACLE RAC凭借其卓越的容错能力和可扩展性以及对应用透明的切换能力引领了数据库高可用架构的潮流,但在实际的生产环境中,出现的性能问题非常多,对数据库的稳...

3187
来自专栏用户2442861的专栏

高性能网络编程5--IO复用与并发编程

对于服务器的并发处理能力,我们需要的是:每一毫秒服务器都能及时处理这一毫秒内收到的数百个不同TCP连接上的报文,与此同时,可能服务器上还有数以十万计的最近几秒...

931

扫码关注云+社区