计算机组件
核心设备
1、加法器: 进行二进制运算(利用针脚的有无电)。采用线路复用(给一个控制位,告诉你什么时候输入的是指令,什么时候是数据,即是什么时候是加数,什么时候是被加数,什么时候是输出结果)。
2、寄存器: 因为加法器的线路复用,被加数是从一个线路进来,加数用从同一个线路进来,被加数就会被覆盖,所以要把加数和被加数都暂时存放在寄存器中,以便于用于计算。
3、控制器:(1)从内存中接收控制指令
(2)控制加法器进行什么运算,控制加法器从内存的哪个地方读取和存放数据。
4、ROM: 开机时,通过硬件逻辑的方式,把ROM里面的信息直接映射到内存最开始的那一段(用于上电自检)。
5、内存: 存放运算数据及控制指令。
I/O设备
1、硬盘(即是输入也是输出设备): 由于内存断电数据就不存在的特性,要求有个永久存放数据的设备。
2、可编程中断控制器: 与cpu的针脚相连。利用interrupt机制让cpu知道是哪一个I/O设备输入的设备。(用中断向量的方式表示不同的设备)。
外注:机制:1、pull(轮循机制):cpu不时地查看
2、interrupt(中断机制):通知,让cpu停下来看看
总线
北桥:高速总线控制器,和cpu相连,和南桥相连。一般连接VGA芯片,内存。
南桥:一般连接I/O设备。
内注:有一些硬件厂商提供I/O设备直接和北桥相连的机器,给一些I/O读写特别高的用户,配置高速I/O设备(固态硬盘)(总线速度快,硬件速度自然也要快)。
缓存
集成在cpu中
寄存器 > 一级缓存 > 二级缓存 > 内存
寄存器可以和cpu相同频率工作,其次是一级缓存,再是二级缓存,再是内存。
利用程序的局部性原理:(1)时间:刚刚访问过的数据,一会又要访问相同的数据。
(2)空间:刚刚访问了的数据,离这个数据非常近的数据马上就要被访问到,已经都放入缓存中,就不用去内存中找了。
所以缓存,提高了计算机的效率。
外注:计算机的调优就是调节内存的数据排列,cpu怎么运行程序。
计算机的速度(HZ)即是运算器(加法器)针脚开关的速度。
操作系统
计算机语言
低级语言:(1)机器语言:(10101010)
(2)微码(汇编语言)(只是把机器语言用单词来表示)
cpu的指令都是通过针脚的有无通电来完成的,所以不同厂家和型号的cpu机器语言都有区别,同样的微码(汇编语言)也都不一样。用它们编辑的程序都是不可移植的。
API:(1)在不同类型的cpu上使用汇编语言开发,而写出来具有相同功能的程序,这个程序是没有执行入口,不能自动运行,给上层程序调用执行(高级语言程序编写就是基于API编写的),这样就可以让程序不用再考虑底层芯片的类型了。所以说API(库)是一种虚拟设备。
(2)用软件的方式,把底层不同类型芯片的相同功能抽象出来,让上层的程序具有相同的环境。
注:越高级的语言编写的程序月浪费性能
操作系统的产生和概念(kernel)
产生:
批处理的系统的cpu利用效率太低了,因为一个一个运行程序(job1$$$job2$$$$job3$$$job4),I/O的速度大大限制了cpu运行的速度。
使用多任务的方式来解决这个问题(kernel就是这个控制软件)。
1.对cpu进行时间切片,由kernel来协调(程序员编写的程序就不用考虑cpu切片方面的问题,和原来一样编写程序)。
2.对内存进行分段,每一段都有自己的编制(0,1,2,3,4),由kernel协调(程序员不用考虑内存分段的问题,和原来一样编写程序)。
3.内存虚拟地址空间(根据自己是多少位系统),让程序有多少G内存,而不根据物理内存,程序员就不用考虑实际内存的物理实际情况了。
定义:
kernel是运行在硬件上,只负责管理硬件资源,不负责具体工作,对cpu进行分片,内存分段,并且它们之间完成协调,还负责程序启动,终止,硬件资源回收,程序的切换。
注:运行中的程序叫做进程。
system calls
系统调用接口(通常称为syscalls),由kernel所提供,是kernel与上层应用程序进行交互通信的唯一接口。任何程序必须通过操作系统才能和硬件打交道。
不同的kernel提供的system calls各不相同。
system call 一个或者多个封装成API(库),即使把相同的功能抽象出来。(结合上面的API概念)。程序程序员可以调用API运行,也可以直接调用system call来编程。
所以如果一个程序是全调用API来编程的,只要不同kernel(操作系统)的API(库)相同,程序(似乎)就可以在不同的kernel(操作系统)上移植。
本文出自 “雨” 博客,谢绝转载!