计算机基础

1.1 编程语言的作用及与操作系统和硬件的关系

1.1.1 编程语言的作用

编程语言,是事物与事物的沟通介质。想与计算机工作,必须与其沟通,所以需要学习编程语言

1.1.2 操作系统和硬件的关系

一套完整的计算机系统分为:计算机硬件,软件系统(程序员开发的就是软件),如下图。

 

操作系统和硬件的关系如下图:

 

操作系统就是处于用户与计算机系统硬件之间的用于传递信息的系统程序软件。

操作系统一方面接管了主板对于系统资源的管理,加入了自己的中间层——驱动程序,另一方面又充分发挥了人机交互的接口——gui界面,成为了计算机必不可少的组成部分。

1.1.2.1 硬件介绍

CPU(中央处理器)---------负责运算、控制

内存---------负责临时存储

硬盘---------负责永久存储

输入设备----------负责接收外部的信息传给CPU

输出设备----------负责经过处理后输出的结果

 

以上所有的硬件设备都是通过总线连接,如下图所示

 

 

一、CPU与寄存器
1、寄存器

因访问内存以得到指令或数据的时间比cpu执行指令花费的时间要长得多,所以,所有CPU内部都有一些用来保存关键变量和临时数据的寄存器

①分类

1、通用寄存器

2、程序计数器

3、堆栈指针

4、程序状态字寄存器(Program Status Word,PSW):包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户通常读入整个PSW,但是只对其中少量的字段写入。在系统调用和I/O中,PSW非常非常非常非常非常非常重要

2、CPU

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

1)、CPU的处理流程

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

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

 

 

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

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

 

 

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

指令-->内存,然后CPU读取内存并计算,返还值给内存,之后写入硬盘

2)、CPU的2种工作模式-----内核态和用户态

通常,PSW中有一个二进制位控制这两种模式。CPU的2种工作状态是不断切换的(ps: 0 1)

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

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

简单来说:

内核态:获取所有CPU指令集

用户态:获取部分CPU指令集(子集),不能操作底层硬件

内核态与用户态切换  

  用户态下工作的软件不能操作硬件,但是我们的软件比如暴风影音,一定会有操作硬件的需求,比如从磁盘上读一个电影文件,那就必须经历从用户态切换到内核态的过程,为此,用户程序必须使用系统调用(system call),系统调用陷入内核并调用操作系统,TRAP指令把用户态切换成内核态,并启用操作系统从而获得服务。

  把的系统调用看成一个特别的的过程调用指令就可以了,该指令具有从用户态切换到内核态的特别能力。

 

总结:

1、CPU同一时间只能做一件事

2、CPU会从内存中取出指令然后解码执行

3、内核态与用户态的概念及转换关系

二、存储器

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

 

 

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

1、寄存器即L1缓存:

用与cpu相同材质制造,与cpu一样快,因而cpu访问它无时延,典型容量是:在32位cpu中为32*32,在64位cpu中为64*64,在两种情况下容量均<1KB。

2、高速缓存即L2缓存:

主要由硬件控制高速缓存的存取,内存中有高速缓存行按照0~64字节为行0,64~127为行1。最常用的高速缓存行放置在cpu内部或者非常接近cpu的高速缓存中。当某个程序需要读一个存储字时,高速缓存硬件检查所需要的高速缓存行是否在高速缓存中。如果是,则称为高速缓存命中,缓存满足了请求,就不需要通过总线把访问请求送往主存(内存),这毕竟是慢的。高速缓存的命中通常需要两个时钟周期。高速缓存为命中,就必须访问内存,这需要付出大量的时间代价。由于高速缓存价格昂贵,所以其大小有限,有些机器具有两级甚至三级高速缓存,每一级高速缓存比前一级慢但是容易大。

  缓存在计算机科学的许多领域中起着重要的作用,并不仅仅只是RAM(随机存取存储器)的缓存行。只要存在大量的资源可以划分为小的部分,那么这些资源中的某些部分肯定会比其他部分更频发地得到使用,此时用缓存可以带来性能上的提升。一个典型的例子就是操作系统一直在使用缓存,比如,多数操作系统在内存中保留频繁使用的文件(的一部分),以避免从磁盘中重复地调用这些文件,类似的/root/a/b/c/d/e/f/a.txt的长路径名转换成该文件所在的磁盘地址的结果然后放入缓存,可以避免重复寻找地址,还有一个web页面的url地址转换为网络地址(IP)地址后,这个转换结果也可以缓存起来供将来使用。

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

3、内存(主存):

存储器系统的主力,主存通常称为随机访问存储RAM,就是我们通常所说的内存,容量一直在不断攀升,所有不能再高速缓存中找到的,都会到主存中找,主存是易失性存储,断电后数据全部消失

除了主存RAM之外,许多计算机已经在使用少量的非易失性随机访问存储如ROMRead Only Memory,ROM),在电源切断之后,非易失性存储的内容并不会丢失,ROM只读存储器在工厂中就被编程完毕,然后再也不能修改。ROM速度快且便宜,在有些计算机中,用于启动计算机的引导加载模块就存放在ROM中,另外一些I/O卡也采用ROM处理底层设备的控制。

EEPROM(Electrically Erasable PROM,电可擦除可编程ROM)和闪存(flash memory)也是非易失性的,但是与ROM相反,他们可以擦除和重写。不过重写时花费的时间比写入RAM要多。在便携式电子设备中中,闪存通常作为存储媒介。闪存是数码相机中的胶卷,是便携式音译播放器的磁盘,还应用于固态硬盘。闪存在速度上介于RAM和磁盘之间,但与磁盘不同的是,闪存擦除的次数过多,就被磨损了。

 

还有一类存储器就是CMOS,它是易失性的,许多计算机利用CMOS存储器来保持当前时间和日期。CMOS存储器和递增时间的电路由一小块电池驱动,所以,即使计算机没有加电,时间也仍然可以正确地更新,除此之外CMOS还可以保存配置的参数,比如,哪一个是启动磁盘等,之所以采用CMOS是因为它耗电非常少,一块工厂原装电池往往能使用若干年,但是当电池失效时,相关的配置和时间等都将丢失

三、磁盘
①磁盘结构

1、 磁道:盘片表面以盘片中心为圆心,用于记录数据的不同半径的圆形磁化轨迹就称为磁道,道看起来是一个平面圆周形。

柱面:磁盘中,不同的盘片(或盘面)相同半径的磁道轨迹从上倒下所组成的圆柱型区域就称为柱面,柱面看起来是一个圆柱体。

扇区:盘面由圆心向四周画直线,不同的磁道被直线分成许多扇形(弧形)的区域,每个弧形的区域叫做扇区

2、 磁盘的容量计算

计算方法一:

存储容量=磁头数*磁道数(柱面数)*每磁道的扇区数*每扇区的字节数

计算方法二:

存储容量=柱面大小(每磁道的扇区数*每扇区的字节数*磁头数)*柱面数(磁道数)

一块磁盘的磁道数和柱面数的数量永远是相等的。

3、 磁盘读写数据的原理。

a.磁盘是按照柱面为单位读写数据的,即先读取同一个盘面的某一个磁道,读完之后,如果数据没有读完,磁头也不会切换其他的磁道,而是选择切换磁头,读取下一个盘面相同半径的磁道,知道所有盘面相同半径的磁道读取完之后,如果数据还没有读写完成,才会切换其他不同半径的磁道,这个切换磁道的过程称为寻道。

b.不同磁头间的切换是电子切换,而不同磁道间的切换需要磁头做径向运动,这个径向运动需要步进电机调节,这个动作是机械切换。

寻道:机械切换。

磁头寻道是机械运动,切换磁头是电子切换。

②平均寻道时间

机械手臂从一个柱面随机移动到相邻的柱面的时间成为寻道时间,找到了磁道就找到了数据所在的那个圈圈,但是还不知道数据具体这个圆圈的具体位置

③平均延迟时间

机械臂到达正确的磁道之后还必须等待旋转到数据所在的扇区下,这段时间成为延迟时间

④虚拟内存与MMU

许多计算机支持虚拟内存机制,该机制使计算机可以运行大于物理内存的程序,方法是将正在使用的程序放入内存取执行,而暂时不需要执行的程序放到磁盘的某块地方,这块地方成为虚拟内存,在linux中成为swap,这种机制的核心在于快速地映射内存地址,由cpu中的一个部件负责,成为存储器管理单元(Memory Management Unit MMU)

 

PS:从一个程序切换到另外一个程序,成为上下文切换(context switch),缓存和MMU的出现提升了系统的性能,尤其是上下文切换

四、磁带

在价钱相同的情况下比硬盘拥有更高的存储容量,虽然速度低于磁盘,但是因其大容量,在地震水灾火灾时可移动性强等特性,常被用来做备份。(常见于大型数据库系统中)。

五、设备控制器和设备本身

I/O设备一般包括两个部分:设备控制器和设备本身

控制器:是查找主板上的一块芯片或一组芯片(硬盘,网卡,声卡等都需要插到一个口上,这个口连的便是控制器),控制器负责控制连接的设备,它从操作系统接收命令,比如读硬盘数据,然后就对硬盘设备发起读请求来读出内容。

 

控制器的功能:通常情况下对设备的控制是非常复杂和具体的,控制器的任务就是为操作系统屏蔽这些复杂而具体的工作,提供给操作系统一个简单而清晰的接口。

 

设备本身:有相对简单的接口且标准的,这样大家都可以为其编写驱动程序了。要想调用设备,必须根据该接口编写复杂而具体的程序,于是有了控制器提供设备驱动接口给操作系统。必须把设备驱动程序安装到操作系统中。

六、总线与南桥北桥

随着处理器和存储器速度越来越快,单总线很难处理总线的交通流量了,于是出现了下图的多总线模式,他们处理I/O设备及cpu到存储器的速度都更快。

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

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

 

 

1.1.2.2 操作系统的启动流程

在计算机的主板上有一个基本的输入输出程序(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

 

1.1.2.3 应用程序的启动流程

1、用户打开程序

 

2、系统把程序代码段和数据段送入计算机的内存

 

3、控制器从存储器中取指令

 

4、控制器分析,执行指令,为取下一条指令做准备

 

5、取下一条指令,分析执行,如此重复操作,直至执行完程序中全部指令,便可获得全部指令

 

 

附录:

二进制的换算方法例题:

二进制的换算

1010101

1*2^6+1*2^4+1*2^2+1*2^0=64+16+4+1=85