编程语言的作用及与操作系统和硬件的关系
编程语言是人们用来控制计算机进行某项工作
计算机由各种硬件组成,并由用户所安装的操作系统进行控制,通常情况下,操作系统拥有完全的权限,用户在执行操作软件的时候将会限制用户权限,当用户需要调用本身不具备的权限时,像操作系统进行申请,由操作系统进行工作。具体权限能力由系统寄存器中的程序状态寄存器控制。
程序状态字寄存器由0和1用来表示状态
内核态:可以获取CPU全部指令,包括操作底层的硬件
用户态:可以获取CPU部分指令,不包括操作底层的硬件
cpu-》内存-》磁盘
运行速度 CPU > 内存 > 磁盘
CPU:用来进行计算,运行速度最快,cpu本身包含许多指令集;
内存:系统及软件运行时,会先从磁盘中加载在内存中然后交由CPU进行运算(当某些时候,由于内存不够,系统会将硬盘中的部分容量作为内存来使用,这样可以保证软件正常运行,但会降低软件的运行速度),软件运算前,先加载到内存中,主要因为内存的读写速度要远远快于磁盘的读写速度。
磁盘:主要用来存放用户自己的数据以及软件、系统的文件。运行时这些内容将会被读取到内存中。
cpu与寄存器,内核态与用户态及如何切换
寄存器
程序计数器:(CPU切换执行程序时)记录程序执行状态
程序状态字寄存器
由0和1用来表示状态(内核态、用户态)
内核态:可以获取CPU全部指令,包括操作底层的硬件
用户态:可以获取CPU部分指令,不包括操作底层的硬件
存储器系列
L1缓存:集成在CPU内部中,用于CPU在处理数据过程中数据的暂时保存。缓存的容量越大,存储信息越多,可减少CPU与内存之间的数据交换次数,提高CPU的运算效率。
L2缓存:位于CPU与内存之间的临时存储器,容量比内存小但交换速度快,二级缓存容量大小决定了cpu的性能。
内存(RAM):计算机中所有程序的运行都是在内存中进行的,作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。
EEPROM:通常用来写一些不可擦去的内容,如:BIOS临时输入输出系统。
闪存:U盘、CF卡、SM卡、SD/MMC卡、记忆棒、XD卡、MS卡、TF卡、PCIe闪存卡
CMOS:Complementary Metal Oxide Semiconductor 存放时间、开机设置等信息
BIOS:Basic Input Output System 系统固件,用来设置系统开机时的选项,存放于CMOS
BIOS电池:为CMOS供电,如果该电池没电了,那么CMOS中的内容将会清空
磁盘
磁盘结构:
磁头:读写
磁道:二进制
扇区:磁盘级别默认情况为521Bytes,可调节(操作系统一次写入八个扇区(一个Block)
柱面:例如分区
平均寻道时间:硬盘在接收到系统指令后,磁头从开始移动到移动至数据所在的磁道所花费时间的平均值,通常与磁盘的转速有关。
平均延迟时间:找到数据所在磁道后,寻找到数据开头的时间。
虚拟内存:当某些时候,由于内存不够,系统会将硬盘中的部分容量作为内存来使用,这样可以保证软件正常运行,但会降低软件的运行速度。
MMU:Memory Management Unit的缩写,中文名是内存管理单元(通常用来记录虚拟内存读取、运行状态)
磁带:一种保存数据的设备,通常用来备份资料,可移动性强(方便搬运),内存大,但速度慢。
设备驱动与控制器:每一个设备同常需要通过总线链接在主板上,在主板与总线接口的位置通常会有一个控制器(用来控制硬件),硬件应该遵循控制器中的规则。这样的话,大多数厂家在生产硬件的时候只要遵循这个规则就可以被电脑使用,通常驱动会实现硬件及控制器的交互。
总线:用来连接各种机器元件,如主板与键盘、鼠标、cpu等;
南桥:连接运行速度较慢的硬件,如:键盘、鼠标、usb等;
北桥:连接运行速度较快的硬件,如CPU、内存等
操作系统的启动流程
开机执行BIOS(基本输入输出系统)引导程序,这个过程叫做系统自检,标识和配置所有的即插即用设备,并配置DMA通道;完成加电自检,测试内存,端口,键盘,视频适配器,磁盘驱动器等基本设备,以及CD-ROM驱动器;对引导驱动器可引导分区定位:在CMOS(complementary metal oxide semiconductor,互补金属氧化物半导体)中,可以自行设置引导顺序,一般顺序是软驱,磁盘,光驱;加载主引导记录以及引导驱动器的分区表,执行主引导记录MBR,主引导记录在硬盘上找到可引导分区,将其分区引导记录装入内存,并将控制权交给分区引导记录,由分区引导记录定位根目录,然后装入操作系统。
应用程序的启动流程
查找软件存放位置后将数据读取到内存中,如果需要进行对硬件的操作,则需要通过操作系统来完成。
固态硬盘与机械硬盘的工作原理
目前,人们多数使用的是基于Flash闪存的固态盘。相变存储尚在实验室,DRAM固态盘采用常见内存颗粒,数据需要额外的电源才能保存,使用者不多。固态盘常见接口有SATA(普通PC使用的串行ATA接口)、PCI-Express(常见于显卡设备的接口,特点在于高速)等多种。不同的接口,其实都是为了通用、高速的目的。Flash的最小存储单元是晶浮栅晶体管,对应于磁盘中的一个bit的存储单元。磁盘中,利用磁极的不同来标记0,1,当磁头扫过盘面,通过感应电流就可以识别出不同状态,即读取数据;增强磁头的磁性,可以改变盘面记录单元的状态,实现写入数据。固态盘中,在存储单元晶体管的栅(Gate)中,注入不同数量的电子,通过改变栅的导电性能,改变晶体管的导通效果,实现对不同状态的记录和识别。有些晶体管,栅中的电子数目多与少,带来的只有两种导通状态,对应读出的数据就只有0/1;有些晶体管,栅中电子数目不同时,可以读出多种状态,能够对应出00/01/10/11等不同数据。所以,Flash的存储单元可分为SLC(一个萝卜一个坑)和MLC(2个/多个萝卜一个坑)两种。区别在于SLC的状态简单,所以读取很容易,MLC有多种状态,读取时,容易出错,需要校验,速度相对较慢。实际MLC的状态识别过程比上述复杂很多,读取一次MLC的功耗比SLC大很多。由于材料本身的缘故,SLC可以接受10万次级的擦写,而MLC材料只能接受万次级擦写操作,所以MLC的寿命比SLC少很多。但是,也是最重要的,由于MLC中的信息量大,同一个存储单元,信息量是SLC的N倍,所以相同容量的磁盘,MLC类型Flach成本更低,存储单元体积更小,这也导致市面上多数固态盘都采用了MLC型的Flash颗粒。SLC由于其特性,仅在高端的高速存储设备中使用。有了上述介绍,不难理解,固态盘写入,就是改变晶体管里栅中电子数目的过程。读出,就是向晶体管施加电压,获取不同导通状态,对应识别存储数据的过程。Flash颗粒便是大量这种浮栅晶体管的阵列,一般的U盘中会有1-2粒这种Flash颗粒,视容量而定;在SSD硬盘中,常见会有8-16粒Flash颗粒。不过,用户在使用过程中,对器件的负面特性并不需要担心太多,生产厂商已经做出了考虑。如,由于单个存储单元的访问次数有限,如果长期在同一个区域重复读写,会导致该存储区域失效,进而影响整块盘的寿命。于是,业界研究了负载平衡技术,将用户的访问请求均匀分布在所有存储单元中,以延长整个盘寿命。而这个“不要在一只羊身上薅羊毛”的事情,就是固态盘控制器的任务了
寄存器
程序计数器:(CPU切换执行程序时)记录程序执行状态
程序状态字寄存器
由0和1用来表示状态
内核态:可以获取CPU全部指令,包括操作底层的硬件
用户态:可以获取CPU部分指令,不包括操作底层的硬件
BIOS:固件用来设置系统开机时候的指令
CMOS存放时间、开机设置等信息如BIOS中的设置内容
硬盘:
磁头:读写
磁道:二进制
扇区:磁盘级别默认情况为521Bytes,可调节(操作系统一次写入八个扇区(一个Block)
柱面:例如分区
虚拟内存:将硬盘中的容量暂时给内存使用,linux中成为Swap
进程线程是专门针对CPU提出来的单词吗
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
进程和线程的关系:
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
(3)处理机分给线程,即真正在处理机上运行的是线程。
(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
进程与线程的区别:
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
(4) 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。但是进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个进程死掉就等于所有的线程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些
结论:
(1)线程是进程的一部分
(2)CPU调度的是线程
(3)系统为进程分配资源,不对线程分配资源