本节重点:
1.编程语言的作用及与操作系统和硬件的关系:
Python是编程语言,简之,Python即语言。
语言有汉语,外语,是人与人之间沟通交流的介质,编程语言即人与计算机之间的语言,目的是为了让计算机了解程序员想要表达的内容;
用户程序操作最终体现在硬件上,但是假如每个用户程序的基础都是先写操作硬件的编程,然后再写程序功能,写一个,两个可以,以后每次写程序都是先写操作硬件的代码,然后再写程序的代码岂不是一直在做重复的工作,所以这时候就需要有操作系统了,操作系统操作硬件,对硬件拥有所有权限,用户程序再控制操作系统,这样就省去了重复的工作。
2.cup-->内存-->硬盘
cup相当于人体的大脑,作运算的工作;
内存相当于人的临时记忆,负责临时存储的作用;
硬盘相当于笔记本,作永久存储的作用;
整个运行的过程是,把程序从硬盘中取出,放在内存中运行,然后把关键数据输入到cpu中运算。
3.cpu与寄存器,内核态与用户态及如何切换
cpu:它从内存中取指令->解码->执行,然后再取指->解码->执行下一条指令,周而复始,直至整个程序被执行完成。
每个cpu都有一套可执行的专门指令集,任何软件的执行最终都要转化成cpu的指令去执行。所以Pentium(英特尔第五代x86架构的微处理器)不能执行SPARC(另外一种处理器)的程序。这就好比不同的人脑,对于大多数人类来说,人脑的结构一样,所以别人会的东西你也都可以会,但对于爱因斯坦的脑子来说,它会的你肯定不会。
因访问内存以得到指令或数据的时间比cpu执行指令花费的时间要长得多,所以,所有CPU内部都有一些用来保存关键变量和临时数据的寄存器,这样通常在cpu的指令集中专门提供一些指令,用来将一个字(可以理解为数据)从内存调入寄存器,以及将一个字从寄存器存入内存。cpu其他的指令集可以把来自寄存器、内存的操作数据组合,或者用两者产生一个结果,比如将两个字相加并把结果存在寄存器或内存中。
寄存器分为4种:通用寄存器,程序计数器,堆栈指针,程序状态字寄存器(Program StatusWord,PSW)。
本节主要讲解了PSW,这个寄存器包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户通常读入整个PSW,但是只对其中少量的字段写入。在系统调用和I/O中,PSW非常非常非常非常非常非常重要。
用户态:用户程序在用户态下运行,仅仅只能执行cpu整个指令集的一个子集,该子集中不包含操作硬件功能的部分,因此,一般情况下,在用户态中有关I/O和内存保护(操作系统占用的内存是受保护的,不能被别的程序占用),当然,在用户态下,将PSW中的模式设置成内核态也是禁止的。
内核态:当cpu在内核态运行时,cpu可以执行指令集中所有的指令,很明显,所有的指令中包含了使用硬件的所有功能,(操作系统在内核态下运行,从而可以访问整个硬件)。
当软件在操作系统中打开,此时处于用户态,无法操作系统,假如软件需要从硬盘中需要读取某段数据,需要操作硬件,此时软件控制操作系统此时处于用户态,当操作系统收到软件指令,操作硬盘,此时切换为内核态,然后把文件读入内存中,供软件使用,此时cpu恢复为用户态,cpu是不断处于内核态与用户态切换的过程的。
4.存储器系列,L1缓存,L2缓存,内存(RAM),EEPROM和闪存,CMOS与BIOS电池
存储器系列:存储器按照典型访问时间,存储容量分为5个梯度,从高到低排列,寄存器,高速缓存,内存,硬盘,磁带。
寄存器,1ns,<1K
高速缓存,2ns,4M
内存,10ns,512-2048MB
硬盘,10ms,200-1000GB
磁带,100s,400-800GB
L1缓存即为寄存器,L2缓存即为高速缓存,最常用的高速缓存行放置在cpu内部或者非常接近cpu的高速缓存中。
内存,通常称为随机访问存储RAM,容量一直在不断攀升,所有不能在高速缓存中找到的,都会到主存中找,主存是易失性存储,断电后数据全部消失。
除了主存RAM之外,许多计算机已经在使用少量的非易失性随机访问存储如ROM(Read Only Memory,ROM),在电源切断之后,非易失性存储的内容并不会丢失,ROM只读存储器在工厂中就被编程完毕,然后再也不能修改。ROM速度快且便宜,在有些计算机中,用于启动计算机的引导加载模块就存放在ROM中,另外一些I/O卡也采用ROM处理底层设备的控制。
EEPROM(Electrically Erasable PROM,电可擦除可编程ROM)和闪存(flash memory)也是非易失性的,但是与ROM相反,他们可以擦除和重写。不过重写时花费的时间比写入RAM要多。在便携式电子设备中中,闪存通常作为存储媒介。闪存是数码相机中的胶卷,是便携式音译播放器的磁盘,还应用于固态硬盘。闪存在速度上介于RAM和磁盘之间,但与磁盘不同的是,闪存擦除的次数过多,就被磨损了。
还有一类存储器就是CMOS,它是易失性的,许多计算机利用CMOS存储器来保持当前时间和日期。CMOS存储器和递增时间的电路由一小块电池驱动,所以,即使计算机没有加电,时间也仍然可以正确地更新,除此之外CMOS还可以保存配置的参数,比如,哪一个是启动磁盘等,之所以采用CMOS是因为它耗电非常少,一块工厂原装电池(BIOS电池)往往能使用若干年,但是当电池失效时,相关的配置和时间等都将丢失。
5.磁盘结构,平均寻道时间,平均延迟时间,虚拟内存与MMU
磁盘低速的原因是因为它一种机械装置,在磁盘中有一个或多个金属盘片,它们以5400,7200或10800rpm(RPM =revolutions per minute 每分钟多少转 )的速度旋转。从边缘开始有一个机械臂悬在盘面上,这类似于老式黑胶唱片机上的拾音臂。信息卸载磁盘上的一些列的同心圆上,是一连串的2进制位(称为bit位),为了统计方法,8个bit称为一个字节bytes,1024bytes=1k,1024k=1M,1024M=1G,所以我们平时所说的磁盘容量最终指的就是磁盘能写多少个2进制位。
每个磁头可以读取一段换新区域,称为磁道
把一个戈丁手臂位置上所以的磁道合起来,组成一个柱面
每个磁道划成若干扇区,扇区典型的值是512字节
数据都存放于一段一段的扇区,即磁道这个圆圈的一小段圆圈,从磁盘读取一段数据需要经历寻道时间和延迟时间
平均寻道时间
机械手臂从一个柱面随机移动到相邻的柱面的时间成为寻到时间,找到了磁道就以为着招到了数据所在的那个圈圈,但是还不知道数据具体这个圆圈的具体位置
平均延迟时间
机械臂到达正确的磁道之后还必须等待旋转到数据所在的扇区下,这段时间成为延迟时间
虚拟内存与MMU
虚拟内存使电脑能运行大于真实内存的程序,虚拟内存一般设置为真实内存的1-1.5倍,其工作原理是在真实内存上运行重要的数据,暂时不需要的先放在硬盘的某处,这里即称为虚拟内存,在linux中成为swap,这种机制的核心在于快速地映射内存地址,由cpu中的一个部件负责,成为存储器管理单元(Memory Management Unit MMU)。
6.磁带
磁带价格便宜,容量大,多作为备份用,并且易于搬运。
7.设备驱动与控制器
设备驱动:举例内存插入主板,下面有一块芯片,控制内存,但是光有芯片不行,系统需要操控内存,但是光写让自己得硬件可以理解的程序不行,操作系统不能理解这段程序的话,操作系统不能操作内存,所以需要设备厂商写设备驱动,已操作硬件。
控制器:是查找主板上的一块芯片或一组芯片(硬盘,网卡,声卡等都需要插到一个口上,这个口连的便是控制器),控制器负责控制连接的设备,它从操作系统接收命令,比如读硬盘数据,然后就对硬盘设备发起读请求来读出内容。
8.总线与南桥和北桥
CPU、内存以及I/O设备都由一条系统总线(bus)连接起来并通过总线与其他设备通信
北桥即PCI桥:连接高速设备
南桥即ISA桥:连接慢速设备
9.操作系统的启动流程
1.计算机加电
2.BIOS开始运行,检测硬件
3.BIOS读取CMOS中参数,选择启动设备
4.从启动盘第一个扇区(MBR主引导记录),扇区为512字节,前446位引导信息,后64为分区信息,后2位为标志位。
5.根据分区信息读入bootloader启动装载模块,启动操作系统。
6.然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表),穿件需要的进程,并在每个终端上启动登录程序或GUI。
10.应用程序的启动流程
应用软件在操作系统启动后启动,双击应用图标,发送给操作系统指令,然后软件文件会从硬盘中调用到内存中,cpu调用运行。