计算机基础——硬件

        硬件

作为一名即将统治世界的程序员,我们可以用我们指间的力量改变世界,但总而言之也要懂一些底层的东西嘛。

  

程序员编程的本质就是让计算机去工作,而编程语言就是程序员与计算机沟通的介质

程序员要想让计算机工作,必须知道计算机能干什么,怎么干的,这也就是我们必须学习计算机基础的原因。

  一套完整的计算机系统分为:计算机硬件,操作系统,软件(程序员开发的就是软件),如下图。因而我们的python编程之路分为计算机硬件基础,操作系统基础,和python编程三部分,就让我们先从计算机硬件学起吧!

  好了不说废话了,一起来学习吧!

  编程语言就是程序员与计算机沟通的介质 应用程序通过操作系统来控制硬件

一台简单的计算机可以抽象成CPU、内存以及I/O设备都由一条系统总线(bus)连接起来并通过总线与其他设备通信

理解各部分功能的一个简单的方法是,把计算机各部分组件往人的身上套,比如

cpu是人的大脑,负责运算

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

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

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

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

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

计算机硬件有处理器、存储器、磁盘、磁带、总线、

处理器

计算机的大脑cpu,他从内存中取指令->解码->执行,然后再取指->解码->执行下一条指令,周而复始,直至整个程序被执行完成。

因为内存访问数据的时间远远大于cpu等待指令的时间,所以所有CPU内部都有一些用来保存关键变量和临时数据的寄存器 对于开发人员来说最后一中寄存器最为重要,这个寄存器包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户通常读入整个PSW,但是只对其中少量的字段写入。在系统调用和I/O中,PSW非常非常非常非常非常非常重要.

处理器的设计和改变

1.最开始取值、解码、执行这三个过程是同时进行的,这意味着任何一个过程完成都需要等待其余两个过程执行完毕,时间浪费

2.后来被设计成了流水线式的设计,即执行指令n时,可以对指令n+1解码,并且可以读取指令n+2,完全是一套流水线。

  

3.超变量cpu,比流水线更加先进,有多个执行单元,可以同时负责不同的事情,比如看片的同时,听歌,打游戏。

两个或更多的指令被同时取出、解码并装入一个保持缓冲区中,直至它们都执行完毕。只有有一个执行单元空闲,就检查保持缓冲区是否还有可处理的指令。

  

这种设计存在一种缺陷,即程序的指令经常不按照顺序执行,在多数情况下,硬件负责保证这种运算结果与顺序执行的指令时的结果相同。

  CPU的两种工作状态

内核态与用户态

内核态

  当cpu在内核态运行时,cpu可以执行指令集中所有的指令,很明显,所有的指令中包含了使用硬件的所有功能,(操作系统在内核态下运行,从而可以访问整个硬件)

用户态

  用户程序在用户态下运行,仅仅只能执行cpu整个指令集的一个子集,该子集中不包含操作硬件功能的部分,因此,一般情况下,在用户态中有关I/O和内存保护(操作系统占用的内存是受保护的,不能被别的程序占用),当然,在用户态下,将PSW中的模式设置成内核态也是禁止的。

用户态与内核态切换

  用户态不能够直接调用硬件来进行操作,但是生活中总会遇到,比如你点开一个播放器他是如何播放的呢?——用户程序当需要调用硬件来使用时,通过特定的指令——系统调用来实现,通过用户态转变成内核态来调用硬件来使用的。

存储器

  多线程和多核芯片

L1

I.第一步增强:在cpu芯片中加入更大的缓存,一级缓存L1,用和cpu相同的材质制成,cpu访问它没有时延

II.第二步增强:一个cpu中的处理逻辑增多,intel公司首次提出,称为多线程(multithreading)或超线程(hyperthreading),对用户来说一个有两个线程的cpu就相当于两个cpu,我们后面要学习的进程和线程的知识就起源于这里,进程是资源单位而线程才是cpu的执行单位。

多线程运行cpu保持两个不同的线程状态,可以在纳秒级的时间内来回切换,速度快到你看到的结果是并发的,伪并行的,然而多线程不提供真正的并行处理,一个cpu同一时刻只能处理一个进程(一个进程中至少一个线程)

III.第三步增强:除了多线程,还出现了傲寒2个或者4个完整处理器的cpu芯片,如下图。要使用这类多核芯片肯定需要有多处理操作系统

                                

                            

                    以上是两家主流cpu

计算机中第二重要的就是存储了,所有人都意淫着存储:速度快(这样cpu的等待存储器的延迟就降低了)+容量大+价钱便宜。然后同时兼备三者是不可能的,所以有了如下的不同的处理方式

存储器系统采用如上图的分层结构,顶层的存储器速度较高,容量较小,与底层的存储器相比每位的成本较高,其差别往往是十亿数量级的

 

  寄存器即L1缓存:

用与cpu相同材质制造,与cpu一样快,但价格高昂,不适合大规模使用

  高速缓存即L2缓存:

高速缓存L2是一种介于寄存器和内存之间的产物,他的速度快于内存慢于寄存器,造价适中。

  缓存是一个好方法,在现代cpu中设计了两个缓存,再看4.1中的两种cpu设计图。第一级缓存称为L1总是在CPU中,通常用来将已经解码的指令调入cpu的执行引擎,对那些频繁使用的数据自,多少芯片还会按照第二L1缓存 。。。另外往往设计有二级缓存L2,用来存放近来经常使用的内存字。L1与L2的差别在于对cpu对L1的访问无时间延迟,而对L2的访问则有1-2个时钟周期(即1-2ns)的延迟。

内存:

内存是计算机必不可少的存储设备,他可以运行大于他的软件,在服务器中通常还有交换分区swap,主存的易失性存储,断电后保存的数据会消失。市面上还有一种内存ROM,是一种只读不易失的,还有EEPROM 电可察rom还有闪存可多次rw的存储设备,还有cmos,纽扣电磁,他是存储主板时间的,一块可用5-6年。

磁盘

                                    

磁盘低速的原因是因为它一种机械装置,在磁盘中有一个或多个金属盘片,它们以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的出现提升了系统的性能,尤其是上下文切换

磁带

磁带是一种大容量存储设备,他价格低廉,存储量大,是一些企业容灾备份的首选,缺点是I/O速度慢。

总线

四小节中的结构在小型计算机中沿用了多年,并也用在早期的IBM PC中。但是随着处理器和存储器速度越来越快,单总线很难处理总线的交通流量了,于是出现了下图的多总线模式,他们处理I/O设备及cpu到存储器的速度都更快。

北桥即PCI桥:连接高速设备

南桥即ISA桥:连接慢速设备

操作系统启动流程

下三层设备启动流程

接通电源。bios运行---硬件加电自检--读取cmos,选择启动项。读入bootloader启动装载模块,启动操作系统。bios--mbr--bootloader--grub--kernel

应用程序启动流程

上三层设备启动流层

  应用层序调用操作系统,操做系统找到层序所在硬盘,加载到内存, cpu用户态,内核态相互转化 调用硬件。

时间: 2024-10-28 10:23:18

计算机基础——硬件的相关文章

计算机基础--硬件重要知识小结

1  计算机硬件介绍 1.1  现代计算机结构体系及组成部分 冯诺依曼结构体系,也就是现在计算机的组成结构 计算机硬件的5个主要部分(运算器,控制器,存储器,输入设备,输出设备) 计算机各组成部件通过总线(bus)链接通信 2  重要组成部件详细介绍 2.1  CPU 运算器+控制器=CPU中央处理器,其工作周期为 取指-解码-执行(n+1,n+2,...流水线),内部结构大致如下: CPU+I/O+主存储器+外部存储,之间的联系特性如下: 2.1.1  CPU指令集分类 所有软件都要经过CPU

计算机基础系列之硬件

一.编程语言的作用及操作系统和硬件的关系   1,编程语言是计算机中的主要算法,一般应用于开发软件:如电脑游戏,手机游戏,网站,各类应用软件等等.   2,操作系统是管理计算机软硬件资源.控制程序运行,为应用软件提供支持的一种系统软件.操作系统可以管理整台计算机的硬件.  3,而编程语言所开发的软件不能直接在硬件上面使用,必须在操作系统的基础上面才能运行,而且软件不能直接向硬件发送命令,必须把命令发给操作系统,操作系统就像是软件和硬件之间的桥梁.     简单的比喻:软件像是人体的感官,操作系统

计算机基础之硬件

对于现在人来说,说到计算机大家都不陌生.一般台式机,大家可以直观看见的有显示器.键盘.鼠标.主机等.下面就说说硬件都有哪些吧? 计算机硬件(Computer hardware)是指计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称.这些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础.简言之,计算机硬件的功能是输入并存储程序和数据,以及执行程序把数据加工成可以利用的形式.从外观上来看,微机由主机箱和外部设备组成.主机箱内主要包括CPU.内存.硬盘.主板.各种扩展卡.

计算机基础知识:硬件

目录 一.为什么要学习计算机基础 二.本文目标 三.计算机的发展历史四.计算机硬件介绍4.1CPU处理器4.2存储器 4.3磁盘 4.4磁带          4.5总线         4.6启动计算机 一.为什么要学习计算机基础 计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备. 程序自动化:可以将预先编好的程序组纳入计算机内存,在程序控制下,计算

Python学习第一天----计算机基础

一.学习计算机基础的目的 再高级的编程语言都是运行在操作系统之上的,而操作系统又是运行在硬件基础之上.所以在开始学习编程之前需要深刻的了解并熟知计算机的基础知识.包括硬件基础及操作系统基础. 二.计算机硬件发展史 计算机的定义:是现代用于高速计算的一种电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能. 发展史: 原型或者说灵感起源于中国 1946年2月14日情人节这天,世界上第一台电子计算机"电子数字积分计算机ENIAC"在美国宾夕法尼亚大学问世. 电子管时代--

计算机基础和操作系统基础小结

一.计算机基础 冯.诺依曼体系: 输入设备.存储器.运算器.控制器.输出设备 冯.诺依曼体系结构是现代计算机的基础,因此被称为计算机之父. 2.计算机发展及应用: 1)第一台计算机1946年诞生于美国,名为ENIAC.重30顿,主要用于计算弹道和氢弹的研制. 2)第一代:电子管计算机,主要采用电子管原件做基本器件.体积大.耗电量大.速度慢.维护困难.价格昂贵.在软件上,通常使用机器语言和汇编语言来编写应用程序.主要用于科学计算. 3)第二代:晶体管计算机.50年代晶体管的出现使计算机生产技术得到

magedu第一天学习(计算机基础部分)

第一部分 1.计算机系统的组成部分 计算机系统是由硬件系统和软件系统组成的. 2.计算机的发展史 1946年第一台计算机ENIAC在美国宾州大学诞生. 电子管时代--->晶体管时代--->集成电路时代--->大规模集成电路时代 3.计算机都遵循冯诺依曼体系结构 运算器.控制器集中在CPU里面(central processing unit) 存储器.输入设备.输出设备 特性:使用二进制 4.摩尔定律 当价格不变时,集成电路上可容纳的元器件的数目,在18-24个月后便会增加一倍,相应的性能

计算机基础之计算机硬件软件数据结构

一切生产工具都是人类器官功能的延伸,智力活动弥补体力劳动的不足:一切交通工具都是腿力的延伸:一切机床都是手力的延伸:望远镜.显微镜.电视 都是眼力的延伸:电话.收音机.通讯卫星都是耳力的延伸:计算机系统便是人类思维器官--大脑的延伸. 第一部分.计算机基础 1.为什么计算机能够进行脑力劳动? 计算机是一种可进行快速运算的可存储设备.存储的程序保证了运算的自动性,从而减轻脑力劳作. 2.计算机发展到今天,跟传统的图灵机相比最大的突破在什么地方?最大的限制又在哪里?你觉得未来计算机发展方向? 传统的

深入理解计算机系统读书笔记一 ---> 计算机基础漫游

一.程序编译的不同阶段. 通常我们是以高级程序开发易于阅读的代码,我们通过语法规则推断代码的具体含义.但是计算机执行代码的时候就需要把代码解析成既定的可执行问题,计算机是如何处理的呢?这里以C语言hello.c文件为例来说明中间过程. #include <stdio.h> int main() { printf("hello world!\n"); } 先上张图. C语言源程序----预处理解析头文件和函数  --- 编译器解析成汇编语言 ---   翻译机器语言指令,打包