一、操作系统
1.1、操作系统的由来
大前提:我们编程目的就是为了奴役计算机,让计算机硬件自发地运行起来,然而硬件毕竟是”死的“,硬件的运行都是由软件支配。(软件才是支配这些死硬件的灵魂)
假如我们要开发一个应用程序如“暴风音影”
思路是:
1、该软件的一个核心业务就是播放视频,开发者若要编写程序完成播放视频这个业务逻辑。
2、必先涉及到底层硬件硬盘的基本运作(视频文件都是先存放于硬盘中),这意味着开发者在编写业务逻辑代码之前,必须先编写一个控制硬盘基本运行的控制程序。
3、在编写应用程序的业务逻辑前,需要开发者编写出一套完整的控制程序用来控制所有硬件的基本运行(这要求开发者需要详细了解计算机硬件的各种控制细节,例如我们必须把CPU里面所有指令集都掌握一遍),如此,所有的开发者在开发程序时都必须依次开发两种:
#1、编写一套完整的的控制程序,用来控制硬件的基本运行,以及把复杂的硬件的操作封装成简单的接口。
#2、基于控制程序的接口开发包含一系列业务逻辑的程序,为了与控制程序区分,可以称为应用程序,以ATM这款应用程序为例,业务逻辑有提款、转账、查询余额等。
综上,对于不同公司的开发者来说,应用程序的业务逻辑各不相同,但硬件的控制程序都大致相同,为了避免所有程序员做重复劳动,以及不用再耗费精力去了解所有硬件的运行细节,有公司专门跳出来承担起控制程序的开发任务,这里所说的控制程序指的就是操作系统。
操作系统的功能就是帮我们把复杂的硬件的控制封装成简单的接口,对于开发应用程序来说只需要调用操作系统提供给我们的接口即可。
1.2、系统软件与应用软件
硬件以上运行的都是软件,而软件分为两类:
#一、应用软件(例如qq、word、暴风影音,我们学习python就是为了开发应用软件的)
#二、操作系统,操作系统应用软件与硬件之间的一个桥梁,是协调、管理、控制计算机硬件与应用软件资源的控制程序。(某种意义上来说操作系统就是软件)
1.3、计算机系统三层结构
我们开发应用程序本质是在控制硬件,但是我们直接打交道的是操作系统,应用程序都是通过操作系统来间接地操作硬件的,所以一套完整的计算机系统分为三层,如下
二、平台
应用程序都是运行于操作系统之上,而操作系统则是运行于硬件之上的,所以承载应用程序的是一台运行有操作系统的计算机,称之为应用程序的运行平台。
即:平台 == 硬件 + 操作系统
常见的平台有:windows系统+某款硬件、linux系统+某款硬件、ubuntu+某款硬件等
我们在开发应用程序时就需要考虑到应用程序的跨平台性(跨平台性是衡量软件质量高低的标准),如果能开发出一款可以在任意平台运行的应用程序,那对于开发者来说真是极大的福音。而决定应用软件的跨平台性的关键因素往往是编程语言的选择,python恰好是一款跨平台性语言,这也是我们学习它的原因之一。
四、总线
CPU、内存(主存储器)以及其他I/O设备都由一条系统总线(bus)连接起来并通过总线与其他设备通信,现代计算机的结构更复杂,包括多重总线,我们以下图为例来介绍各个部件
如果说CPU是人的大脑,总线就相当于人的神经系统,将大脑的指令通过总线传递给各个部件,调动他们的功能。
上面的图形在小型计算机中沿用了多年,并也用在早期的IBM PC中。但是随着处理器和存储器速度越来越快,单总线很难处理总线的交通流量了,于是出现了下图的多总线模式,他们处理I/O设备及cpu到存储器的速度都更快。
北桥即PCI桥:连接高速设备
南桥即ISA桥:连接慢速设备
主板图解:
五、操作系统的启动(*****)
BIOS介绍:
BIOS:Basic Input Output System
BIOS被写入ROM设备
裸机:
cpu
ROM:充当内存,存放BIOS系统
CMOS:充当硬盘
六、操作系统的启动流程(*****)
1.计算机加电
2.BIOS开始运行,检测硬件:cpu、内存、硬盘等
3.BIOS读取CMOS存储器中的参数,选择启动设备
4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)
5.根据分区信息读入bootloader启动装载模块,启动操作系统
6.然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核
BIOS(从安全层面理解破解密码)
1、存有win10系统的光盘、u盘、移动硬盘:无密码
2、本地硬盘上的win7系统:密码
七、应用程序的启动流程(*****)
1、双击exe快捷方式--》exe文件的绝对路径,就是在告诉操作系统
说:我有一个应用程序要执行,应用程序的文件路径是(exe文件的绝对路径)
2、操作系统会根据文件路径找到exe程序在硬盘的位置,控制其代码从硬盘加载到内存
3、然后控制cpu从内存中读取刚刚读入内存的应用程序的代码执行,应用程序完成启动