1、为啥要学习编程语言
现在一般学习的编程语言例如Python,是一种程序员和操作系统之间的交流介质,编程语言可以编写程序,程序运行在操作系统上面。然而程序员编程的本质是想直接和计算机进行交流,实现控制计算机的目的。想要让计算机为你工作,就需要掌握编程语言,了解操作系统和计算机的组成结构以及工作原理等。
2、计算机的组成结构
上图为计算机的硬件组成,可以形象的类比为人类:
cpu是人的大脑,负责运算
内存是人的记忆,负责临时存储
硬盘是人的笔记本,负责永久存储
输入设备是耳朵或眼睛,负责接收外部的信息传给cpu
输出设备是你的表情,负责经过处理后输出的结果
以上所有的设备都通过总线连接,总线相当于人的神经
1、处理器
处理器的工作流程为,从内存中取指令>>解码>>执行,周而复始,知道程序被执行完成。
每一种架构处理器都有专门的指令集,所以一种指令集不能用于另一种架构的指令集。
处理器的执行速度远快于内存读取指令的速度,为了减小这个速度差,处理器内部都会有寄存器来保存关键变量和临时数据。
寄存器也就是L1缓存,解决CPU、内存、硬盘之间的速度差 ,优点速度快,缺点临时存储空间小。
1.1 寄存器
四种寄存器:通用寄存器,程序计数器,堆栈指针,程序状态字寄存器(最重要)
*程序状态字寄存器(Program Status Word,PSW),这个寄存器包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户通常读入整个PSW,但是只对其中少量的字段写入。在系统调用和I/O中,PSW非常重要。
1.2 内核态与用户态:
内核态:当cpu在内核态运行时,cpu可以执行指令集中所有的指令,很明显,所有的指令中包含了使用硬件的所有功能,(操作系统在内核态下运行,从而可以访问整个硬件)
用户态:用户程序在用户态下运行,仅仅只能执行cpu整个指令集的一个子集,该子集中不包含操作硬件功能的部分,因此,一般情况下,在用户态中有关I/O和内存保护(操作系统占用的内存是受保护的,不能被别的程序占用),当然,在用户态下,将PSW中的模式设置成内核态也是禁止的。
应用软件工作在CPU的用户态,操作系统可调用硬件工作在CPU 的内核态,这两种状态工作中不断切换。在时间多路复用的CPU中,操作系统会经常中止正在运行的某个程序并启动(或再次启动)另一个程序。每次停止一个运行着的程序时,操作系统必须保存所有的寄存器,这样在稍后该程序被再次运行时,可以把这些寄存器重新装入。
1.3 处理器设计演变
最开始取值、解码、执行这三个过程是同时进行的,这意味着任何一个过程完成都需要等待其余两个过程执行完毕,时间浪费。后来被设计成了流水线式的设计,即执行指令n时,可以对指令n+1解码,并且可以读取指令n+2,完全是一套流水线。超变量cpu,比流水线更加先进,有多个执行单元,可以同时负责不同的事情,比如看片的同时,听歌,打游戏。两个或更多的指令被同时取出、解码并装入一个保持缓冲区中,直至它们都执行完毕。只有有一个执行单元空闲,就检查保持缓冲区是否还有可处理的指令。
这种设计存在一种缺陷,即程序的指令经常不按照顺序执行,在多数情况下,硬件负责保证这种运算结果与顺序执行的指令时的结果相同。
1.4 多线程和多核芯片
多线程:一个cpu中的处理逻辑增多,intel公司首次提出,称为多线程(multithreading)或超线程(hyperthreading),对用户来说一个有两个线程的cpu就相当于两个cpu,我们后面要学习的进程和线程的知识就起源于这里,进程是资源单位而线程才是cpu的执行单位。多线程运行cpu保持两个不同的线程状态,可以在纳秒级的时间内来回切换,速度快到你看到的结果是并发的,伪并行的,然而多线程不提供真正的并行处理,一个cpu同一时刻只能处理一个进程(一个进程中至少一个线程)
多核芯:除了多线程,还出现了傲寒2个或者4个完整处理器的cpu芯片,如下图。要使用这类多核芯片肯定需要有多处理操作系统。
2、存储器
存储器的分层结构
2.1 寄存器即L1缓存
用与cpu相同材质制造,与cpu一样快,因而cpu访问它无时延,典型容量是:在32位cpu中为32*32,在64位cpu中为64*64,在两种情况下容量均<1KB。
2.2 高速缓存为L2缓存
第一级缓存称为L1总是在CPU中,通常用来将已经解码的指令调入cpu的执行引擎。另外往往设计有二级缓存L2,用来存放近来经常使用的内存字。L1与L2的差别在于对cpu对L1的访问无时间延迟,而对L2的访问则有1-2个时钟周期(即1-2ns)的延迟。
2.3 内存
内存(RAM)是存储系统的主力,目前容量一般为8G以上,特点是易失性,断电后数据全部消失。
2.4 非易失性随机访问存储(ROM)的特点是断电后存储内容不会消失,只能读取不能写入,速度快而且便宜,在有些计算机中,用于启动计算机的引导加载模块就存放在ROM中,另外一些I/O卡也采用ROM处理底层设备的控制。
2.5 EEPROM(Electrically Erasable PROM,电可擦除可编程ROM)和闪存(flash memory)也是非易失性的,特点是可写入,但是写入速度比内存慢比磁盘速度快,擦除写入次数过多会有磨损。闪存可用于替代磁盘,应用广泛。
2.6 CMOS,存储特点是有易失性,常用于计算机中存储时间日期以及配置信息,耗电少,电池可供电很久,所以常配电池工作。
3、磁盘
3.1 磁盘主要由盘片,机械臂组成,工作过程中盘片告诉转动,机械臂控制磁头基础盘片读取或写入数据。
3.2 扇区是磁头在磁道上可读取的一段区域,扇区是磁盘级别的最小读写单位:512Bytes,操作系统级别的最小读写单位是:1block=8*512Bytes,操作系统级别的最小读写单位是:1block。
3.3 如图,每个扇区垂直面上可读取到的磁盘区域为柱面,在windows系统中,划分磁盘分区可以说是以柱面为单位。
3.4 平均寻道时间是机械臂从一个柱面随机转到另一个柱面寻找磁道的时间,跟磁盘转速有关,平均延迟时间是找到磁道后找到数据的时间,也跟磁盘转速有关。
3.5 虚拟内存:许多计算机支持虚拟内存机制,该机制使计算机可以运行大于物理内存的程序,方法是将正在使用的程序放入内存取执行,而暂时不需要执行的程序放到磁盘的某块地方,这块地方成为虚拟内存,在linux中成为swap,这种机制的核心在于快速地映射内存地址,由cpu中的一个部件负责,成为存储器管理单元(Memory Management Unit MMU)
4、磁带
在价钱相同的情况下比硬盘拥有更高的存储容量,虽然速度低于磁盘,但是因其大容量,在地震水灾火灾时可移动性强等特性,常被用来做备份。(常见于大型数据库系统中)
5、I/O设备
I/O设备一般包括两个部分:设备控制器和设备本身。
控制器:是查找主板上的一块芯片或一组芯片(硬盘,网卡,声卡等都需要插到一个口上,这个口连的便是控制器),控制器负责控制连接的设备,它从操作系统接收命令,比如读硬盘数据,然后就对硬盘设备发起读请求来读出内容。
控制器的功能:通常情况下对设备的控制是非常复杂和具体的,控制器的任务就是为操作系统屏蔽这些复杂而具体的工作,提供给操作系统一个简单而清晰的接口
设备本身:有相对简单的接口且标准的,这样大家都可以为其编写驱动程序了。要想调用设备,必须根据该接口编写复杂而具体的程序,于是有了控制器提供设备驱动接口给操作系统。必须把设备驱动程序安装到操作系统中。
6、总线
北桥即PCI桥:连接高速设备
南桥即ISA桥:连接慢速设备
7、计算机的启动过程
BIOS:在计算机的主板上有一个基本的输入输出程序(Basic Input Output system)
BIOS就相当于一个小的操作系统,它有底层的I/O软件,包括读键盘,写屏幕,进行磁盘I/O,该程序存放于一非易失性闪存RAM中。
启动流程
1.计算机加电
2.BIOS开始运行,检测硬件:cpu、内存、硬盘等
3.BIOS读取CMOS存储器中的参数,选择启动设备
4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)
5.根据分区信息读入bootloader启动装载模块,启动操作系统
6.然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表),穿件需要的进程,并在每个终端上启动登录程序或GUI
参考:http://www.cnblogs.com/linhaifeng/p/6523843.html
egon写的已经太好了,so按照自己的思路写+摘录,方便自己查阅,感谢!