(一)计算机基本组成

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangshangchunjiezi/article/details/82531055

一、计算机5大组成
运算器:运算
控制器:控制运算器到哪取数据
存储器(内存):存储数据。编址存储设备:平面编址
输入设备
输出设备
简单来说:运算器从存储器取数据,进行运算,然后将结果放到存储器中
CPU的核心组件:运算器、控制器、寄存器。
有寄存器的原因:比如在加法计算中,是按位运算的,所以若32位就需要32根线,若还有被加数,则线的数目越多,此时就想一根线可以做多种工作,所以就有了线路复用。用控制位来作为是加数还是被加数,此时就有一个问题,它必须得有记忆,否则加数传到运算器后,再传被加数,原有的就没有了,所以就有了寄存器,来暂存数据。

  • 加电自检(Power-OnSelf-Test):是计算机BIOS的一个功能,在引导后会运行,针对计算机硬件如CPU 、主板、存储器等进行检查,结果会显示在固件可以控制的输出接口,像显示屏、LED、打印机等设备上。
  • **轮询Poll:**CPU定时发出询问,依序询问每一个周边设备是否需要其服务,有即服务,服务结束后再询问下一个周边,接着不断周而复始。(比如:每隔1ms就询问一次键盘,是否有按下)。这种方式不会错过任何事件,但是若用户开机后一直没有按键盘,则会浪费资源。
  • 中断(interrupt):是计算机运行过程中,出现某些意外情况需要主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。(比如:当用户敲击键盘时的电信号,会发到CPU,由此引发中断)外围设备就是通过中断与CPU进行交互的。
  • 如何知道中断是谁引起的?
    需要控制芯片,叫可编程中断控制器,有多个针脚。它一头与CPU相连,一头与设备相连,从而知道是谁引起的中断,进而处理。
  • 北桥:用来处理高速信号,通常处理CPU 、RAM、AGP端口或PCI Express和南桥芯片之间的通信。
  • 南桥:其数据处理量不算大(比如用户敲击键盘),通过一定的方式与北桥相连。
  • 一级缓存、二级缓存出现的原因: CPU处理速度快,向存储器请求数据,但是存储器输出数据比较慢,根据短板原理,进行折中,CPU的速度匹配上存储器速度,导致CPU的效率不能完全发挥。此时,可以利用缓存,速度快,但是缓存是非常昂贵的,所以存储量很小。若想缓存有用,就基于一种原理:程序局部性原理。
  • 程序局部性原理:时间局部性:刚刚访问的数据还可能访问。空间局部性:访问数据附近的数据很可能访问。则可以先放入缓存中。
  • 程序移植性:在一种计算机上的软件转置到其他计算机上的能力。
    机器语言:与计算机硬件直接工作的语言,二进制。汇编语言—>编译器
    高级语言:—>汇编语言—>机器语言。
    不同公司的硬件很可能不同,若想让高级语言在不同平台上运行,就需要在高级语言与硬件间有个接口(API),只要符合这个接口,就可以与不同的硬件打交道。不同硬件:用汇编写成的不同的能实现相同功能的程序。
    API:application program interface 应用编程接口
  • **硬件架构:**CPU芯片的不同系列。比如ARM(产品:安卓、ios)、x86、

  • ①早期,先编写好程序,然后转换为二进制代码,进行计算,此时的问题是运算很快,输入输出很慢;
    ②后来,出现磁带,将编的程序放到磁带上,出现的问题是磁带是顺序存储,此时其中一台计算机写程序放入磁带、另一台计算机进行计算,此时叫做脱机批处理系统。(计算机一次完整的处理过程叫做作业job,早期是单作业,一个磁带只能处理一个作业,后来,为了快速处理多个作业,减少磁带拆卸次数,出现批处理将多个作业,用分隔符将不同的作业区分开。)此时,每次执行还是单作业,因为内存只有一个,内存被一个作业全部占有,因为CPU处理速度很快,当处理完一个作业后,就得等待慢速的io将作业传入CPU,CPU性能浪费;
    ③多任务系统:作业完成需要CPU 、Memory。此时引入进程。将CPU分片,每个任务执行一段时间。内存引入分段,,每次执行一段。不同主机的内存是不同的,比如512M、4G内存,此时引入虚拟地址空间(并不等于虚拟内存)。此时,就有一个问题,谁控制进程执行分片时间,而不是让他一直执行呢?就是操作系统,操作系统负责进程的调度。
    比如32位:最多使用4G物理内存,因为2^32 ,这是由于总线宽度决定的。
    所以操作系统,不完成具体的工作,是协调各种设备运行的通用软件。

  • 有了操作系统后,所有程序调用底层硬件,都要经过操作系统,系统调用system call。将底层调用做成更高级的,叫做库。比如用c语言开发系统,需要用到求平方根的函数,此时直接用现成的函数(方法在库中)直接调用即可,没必要自己写如何求平方根,使开发更简单。
    库的好处:能够重复使用,避免了相同功能多次重写的麻烦。库不能直接执行,只能被调用(理解:就是上述的求平方根函数,自己不能执行,程序调用才能执行)。所以,还有个库调用(Libraray call)
    存在两种调用:system call 和library call

  • 所以现在的结构就是软件–>库—>操作系统(Kernel)—>硬件。比如word,为什么双击就能打开,程序运行还需要个shell(外壳),即人机交互接口。
    操作系统包含许多功能等,可以用Kernel比较好。Kernel(操作系统核心):负责管理硬件资源,将硬件资源虚拟成其他样子,提供给上层运行的应用程序。

  • 所以现在能解决:在Linux上的能运行的程序,在Windows上可以运行吗?
    若库调用和系统调用相同,则能够运行,否则不能运行。

  • 在操作启动后,软件程序不一定运行,只是具备了运行条件。在操作系统启动后,就启动的程序,叫做服务。比如操作系统为了完整的运行能力等方面,称为后台服务。还有就是根据用户自定义,来自动启动。比如,用户在word中,按了键盘中Ctrl+C,根据之前知识,是先给CPU(它并不知道此敲击是什么意思)、然后交给kernel(CPU通知内核进行处理),kernel是操作系统的核心,操作系统负责程序的调度等,它知道是哪个进程。

  • 存储器:BIOS、kernel space、其他程序共享部分。此时有个问题–碎片。

  • shell:图形界面shell(GUI)、(CLI)

  • 内核功能:进程管理、内存管理、文件管理、网络管理、硬件驱动、安全机制

猜你喜欢

转载自blog.csdn.net/jiangshangchunjiezi/article/details/82531055