1.计算机硬件组成
- 存储器:内存和外存,内存基于电工作,存的快,但是断电丢失,外部存储设备基于磁工作,断电不丢失,但是相对的存储速度慢,一般是将计算机外存的数据加载到内存中供计算机使用
- 运算器:进行算数运算和逻辑运算
- 控制器:相当于人的大脑
- 输入设备
- 输出设备
2.计算机软件
分类:系统软件(完成计算机与人之间的交互)、应用软件(满足用户特定需求的应用程序)
操作系统:是一个协调、管理、控制计算机硬件资源与应用软件资源的一个控制程序
-
控制计算机硬件的基本运行
-
把硬件运行的复杂操作封装成简单的功能,给上层的程序使用
文件是操作系统提供给用户的一种虚拟概念
3.计算机体系的三层结构:
- 应用程序
- 操作系统
- 计算机硬件
4.平台与跨平台
硬件+操作系统=平台,应用软件运行在平台之上
软件能否跨平台使用也是衡量应用软件质量的一个重要指标
5.CPU
CPU内部是存在指令集的,应用程序调用指令集去实现对硬件的控制,而CPU内部的指令集分为两种:
- 精简指令集(Reduced Instruction Set Computing,RISC):CPU中微指令集较为精简,每个指令的运行时间都很短,完成的动作也很单纯,指令的执行效能较佳;但是若要做复杂的事情,就要由多个指令来完成。常见的RISC指令集CPU主要例如Sun公司的SPARC系列、IBM公司的Power Architecture(包括PowerPC)系列、与ARM系列等。
- 复杂指令集(Complex Instruction Set Computer,CISC):与RISC不同,在CISC的微指令集中,每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。因此指令执行较为复杂所以每条指令花费的时间较长,但每条个别指令可以处理的工作较为丰富。常见的CISC微指令集CPU主要有AMD、Intel、VIA等的x86架构的CPU。
6.x86-64位的概念
- x86是对CPU型号的一种说明
- 64位是指CPU在内存中一次性取指令的二进制位数是64位的
- CPU具有向下兼容性,就是64位的CPU可以一次性处理的指令的位数可以小于64位,但是不能大于64位
7.寄存器的概念:
因访问内存以得到指令或数据的时间比cpu执行指令花费的时间要长得多,所以,所有CPU内部都有一些用来保存关键变量和临时数据的寄存器,这样通常在cpu的指令集中专门提供一些指令,用来将一个字(可以理解为数据)从内存调入寄存器,以及将一个字从寄存器存入内存。cpu其他的指令集可以把来自寄存器、内存的操作数据组合,或者用两者产生一个结果,比如将两个字相加并把结果存在寄存器或内存中。
寄存器的分类:
1.除了用来保存变量和临时结果的通用寄存器外
2.多数计算机还有一些对程序员可见的专门寄存器,其中之一便是程序计数器(CU),它保存了将要取出的下一条指令的内存地址。在指令取出后,程序计算器就被更新以便执行后期的指令
3.另外一个寄存器便是堆栈指针,它指向内存中当前栈的顶端。该栈包含已经进入但是还没有退出的每个过程中的一个框架。在一个过程的堆栈框架中保存了有关的输入参数、局部变量以及那些没有保存在寄存器中的临时变量
4.最后 一个非常重要的寄存器就是程序状态字寄存器(Program Status Word,PSW),这个寄存器包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户通常读入整个PSW,但是只对其中少量的字段写入。在系统调用和I/O中,PSW非常重要
寄存器的维护:
操作系统必须知晓所有的寄存器。在时间多路复用的CPU中,操作系统会经常中止正在运行的某个程序并启动(或再次启动)另一个程序。每次停止一个运行着的程序时,操作系统必须保存所有的寄存器,这样在稍后该程序被再次运行时,可以把这些寄存器重新装入。
8.内核态与用户态
通常,PSW(Program Status Word),也叫程序状态字、程序状态寄存器,它的里面有一个二进制位控制这两种模式
内核态:当cpu在内核态运行时,cpu可以执行指令集中所有的指令,很明显,所有的指令中包含了使用硬件的所有功能,(操作系统在内核态下运行,从而可以访问整个硬件)
用户态:用户程序在用户态下运行,仅仅只能执行cpu整个指令集的一个子集,该子集中不包含操作硬件功能的部分,因此,一般情况下,在用户态中有关I/O和内存保护(操作系统占用的内存是受保护的,不能被别的程序占用),当然,在用户态下,将PSW中的模式设置成内核态也是禁止的
内核态与用户态切换
用户态下工作的软件不能操作硬件,但是我们的软件比如暴风影音,一定会有操作硬件的需求,比如从磁盘上读一个电影文件,那就必须经历从用户态切换到内核态的过程,为此,用户程序必须使用系统调用(system call),系统调用陷入内核并调用操作系统,TRAP指令把用户态切换成内核态,并启用操作系统从而获得服务
把系统调用看成一个特别的的过程调用指令就可以了,该指令具有从用户态切换到内核态的特别能力
9.多线程与多核芯片介绍
moore定律指出,芯片中的晶体管数量每18个月翻一倍,随着晶体管数量的增多,更强大的功能称为了可能,如
I.第一步增强:在cpu芯片中加入更大的缓存,一级缓存L1,用和cpu相同的材质制成,cpu访问它没有时延
II.第二步增强:一个cpu中的处理逻辑增多,intel公司首次提出,称为多线程(multithreading)或超线程(hyperthreading),对用户来说一个有两个线程的cpu就相当于两个cpu,我们后面要学习的进程和线程的知识就起源于这里,进程是资源单位而线程才是cpu的执行单位。
多线程运行cpu保持两个不同的线程状态,可以在纳秒级的时间内来回切换,速度快到你看到的结果是并发的,伪并行的,然而多线程不提供真正的并行处理,一个cpu同一时刻只能处理一个进程(一个进程中至少一个线程)
III.第三步增强:除了多线程,还出现了包含2个或者4个完整处理器的cpu芯片。要使用这类多核芯片肯定需要有多处理操作系统
2核4线程是指双CPU,每个CPU都是双线程,就是假4核
10.存储器
-
存储器主要负责存取数据,主要有三个指标:价格、容量和存取速度
- 寄存器:L1缓存(第一级别缓存),存储的是少量的,关键的数据,与CPU一样快,因此CPU访问他时无延时,但是空间很小,64位大小是64*64,32位的大小是32乘32,都小于1K
- 高速缓存:L2缓存,存放的是CPU经常使用的数据,CPU取数据的时候,先检查高速缓存中是否有该数据,如果有,称为高速缓存命中,由于高速缓存价格昂贵,所以其大小有限,有些机器具有两级甚至三级高速缓存,每一级高速缓存比前一级慢但是容易大。
- RAM:内存
- ROM:只读内存(read only memory)
- CMOS:断电数据丢失,存取数据慢,但是的耗电量极低,一般用于计算机计时器的存储
-
寄存器、高速缓存、内存、磁盘、磁带,cpu对其访问需要的的时间越来越长,但是存储的容量越来越大(磁带发现的较早,内存相比磁盘要小,现在基本已经淘汰)
-
硬盘:磁道(一圈二进制数据)、柱面、扇区(在硬盘的角度,一次读写的最小单位是扇区,是512B,操作系统一次读写的最小单位是一个block块,即8个扇区)
- 机械硬盘
- 固态硬盘
-
IO延迟:平均寻道时间+平均延迟时间
- 平均寻道时间:机械手臂转到数据所在磁道需要花费的时间(受限于物理工艺水平,目前机械磁盘可以达到的是5ms)
- 平均延迟时间:转半圈需要花费4ms(7200转/min),受限于转速
-
优化程序运行效率的一个核心法则:能从内存取数据就不要在硬盘取数据
-
虚拟内存:许多计算机支持虚拟内存机制,该机制使计算机可以运行大于物理内存的程序,方法是将正在使用的程序放入内存取执行,而暂时不需要执行的程序放到磁盘的某块地方,这块地方成为虚拟内存,在linux中称为swap,这种机制的核心在于快速地映射内存地址,由cpu中的一个部件负责,称为存储器管理单元(Memory Management Unit MMU)
-
从一个程序切换到另外一个程序,称为上下文切换(context switch),缓存和MMU的出现提升了系统的性能,尤其是上下文切换
-
磁带:在价钱相同的情况下比硬盘拥有更高的存储容量,虽然速度低于磁盘,但是因其大容量,在地震水灾火灾时可移动性强等特性,常被用来做备份。(常见于大型数据库系统中)
-
磁带的特点是价格便宜,拆卸简单
-
IO设备:设备控制器(就是一组芯片,设备控制器上面是驱动程序,由驱动程序控制设备控制器进而控制设备本身)+设备本身
-
总线:连接各个功能部件的数据传输线
- PCI桥:也被称为北桥,连接CPU和存储器等高速传输数据的组件
- ISA桥:也成为南桥,主要连接外部设备,USB存储设备等
-
BIOS(basic input output system):存放计算机厂商写死在计算机上的一段核心程序BIOS,被写到ROM中,里面是一些基础的程序,在电脑上开机之后,在ROM中取出BIOS,完成一些简单的IO操作,简单的说,裸机的电脑中BIOS充当操作系统的角色,CMOS充当硬盘的角色,ROM充当内存的角色
-
裸机电脑如何安装操作系统:
-
裸机——》开机——》加载ROM中的BIOS——》加载启动项——》默认在ROM中优先取数据(就是加载BIOS)——》插入外部存储设备——》将其中的操作系统的数据拷贝到本地硬盘中——》关机——》打开BIOS——》将本地硬盘设置为第一加载顺序——》加载其中的数据,这样每次开机的时候就跳过BIOS,直接调用的操作系统的数据了
-
操作系统启动流程:
-
1.计算机加电
2.BIOS开始运行,检测硬件:cpu、内存、硬盘等
3.BIOS读取CMOS存储器中的参数,选择启动设备
4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)
5.根据分区信息读入bootloader启动装载模块,启动操作系统
6.然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表),穿件需要的进程,并在每个终端上启动登录程序或GUI
-
-
应用程序的启动流程:操作系统安装之后才可以安装应用程序
- 双击exe文件,就是告诉操作系统有一个应用程序要执行,提供文件路径
- 操作系统根据文件路径找到EXE文件在硬盘中的位置,将其加载到内存中
- 操作系统控制CPU读取内存中的程序的代码执行,这样应用系统就完成了启动