计算机基础从入门到放弃
计算机基础
一、编程语言的作用及与操作系统和硬件的关系
语言的存在是为了沟通,在中国用华语,美国用英语,在计算机领域中也不例外,编程语言是让计算机能识别的语言,编程语言也是程序员与计算机沟通的桥梁。
与操作系统之间存在依赖关系,当用编程语言编写完一个软件的时候,却没有操作系统来控制计算机的硬件,那就必须要自己写一个操作系统来控制计算机硬件
当已经在计算机上安装了操作系统了,那么就不需要考虑控制计算机的硬件了,只考虑用户软件与操作系统之间是否兼容。
与硬件的关系,当软件安装到永久保存的硬盘上面,运行软件时,会先从硬盘中找到这个软件的启动文件,然后CPU通过内存来从硬盘中读写程序。
二、应用程序-》操作系统-》硬件
答:用编程语言来编写应用程序的,但计算机的硬件却是按照机器码指令来执行操作的。于是,就出现了这样一个问题:用户如何才能用高级语言来指示一台只能识别
机器码指令的机器来工作。显然,在高级语言程序和机器硬仵之间,必须有一个中介来完成高级语言与低级语言的对接工作,这个中介就是操作系统来控制计算机的硬
件
三、cpu-》内存-》磁盘
磁盘是永久存放数据的地方,cpu是计算机的大脑核心,也是计算机中运行最快的一个,如果说cpu要从磁盘中读取数据来计算的话,会受限于磁盘的I/O速度,cpu那
边的需要等磁盘从中读写然后交给cpu计算,这就需要一个内存来进行从磁盘中提取数据的缓存,cpu就可以直接从内存中读取数据缓存这样的话就会快很多。
四、cpu与寄存器,内核态与用户态及如何切换
cpu是计算机的核心是计算机中运行最快的。
寄存器(L1)跟cpu的材料工艺是一样的所以cpu访问寄存器是无时延的可以达到1ns但存储容量只有1KB
寄存器是用与cpu相同材质制造,与cpu一样快,因而cpu访问它无时延。用来避免内存速率比CPU慢几个数量级的瓶颈问题。
寄存器的分类:
a.通用寄存器:用来保存变量和临时结果
b.程序计数器:保存了将要取出的下一条指令的内存地址。在指令取出后,程序计算器就被更新以便执行后期的指令。
c.堆栈指针: 指向内存中当前栈的顶端。该栈包含已经进入但是还没有退出的每个过程中的一个框架。在一个过程的堆栈框架中保存了有关的输入参数、局部变量以及那些没有保
存在寄存器中的临时变量。
d.程序状态字寄存器(Program Status Word,PSW): 这个寄存器包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户通常读入整
个PSW,但是只对其中少量的字段写入。在系统调用和I/O中,PSW非常重要。
cpu有两种模式内核态和用户态,当cpu在内核态下运行时,可以通过操作系统来控制所有的硬件
当cpu在用户态下运行,通过用户程序来控制,但不能控制硬件。
用户态下工作的软件不能操作硬件,但是我们的软件,一定会有操作硬件的需求,那就必须经历从用户态切换到内核态的过程,为此,用户程序必须使用系统调用(system call),
系统调用陷入内核并调用操作系统,TRAP指令把用户态切换成内核态,并启用操作系统从而获得服务。
五、存储器系列,L1缓存,L2缓存,内存(RAM),EEPROM和闪存,CMOS与BIOS电池
L1缓存(寄存器),与cpu同材质构成,所以数据读写无延迟。读写速度是1ns虽然速度快但容量均<1KB。
L2缓存(高速缓存器)二级缓存就是一级缓存的缓冲器:一级缓存制造成本很高因此它的容量有限,二级缓存的作用就是存储那些CPU处理时需要用到、一级缓存又无法存储的
数据。同样道理,三级缓存和内存可以看作是二级缓存的缓冲器,它们的容量递增,但单位制造成本却递减。需要注意的是,无论是二级缓存、三级缓存还是内存都不能存储处理器
操作的原始指令,这些指令只能存储在CPU的一级指令缓存中,而余下的二级缓存、三级缓存和内存仅用于存储CPU所需数据。intelCPU的L2缓存是一整块的,多核多线程的话会出
现几个cpu抢一块L2缓存,ADM的CPU是把L2缓存分成相同大小的部分到CPU上,各有优劣。
内存(RAM)是系统存储主力,通常都是从硬盘读取数据临时存储以备cpu调用,但是断电后数据将不会保存。
EEPROM(Electrically Erasable PROM,电可擦除可编程ROM)和闪存(flash memory)也是非易失性的,但是与ROM相反,他们可以擦除和重写。不过重写时花费的时间比写入RAM要多,
闪存在便携式电子设备中通常作为存储媒介。
CMOS与BIOS电池:CMOS是易失性的,许多计算机利用CMOS存储器来保持当前时间和日期。CMOS存储器和递增时间的电路由一小块电池驱动,即使电脑是在关机状态没有加
电,时间也仍然可以保持时间的更新,当电脑加电时加载bios会进入cmos查找哪一个时启动磁盘,一块电池能使用五年以上,当电池没电时相关的配置和时间都会丢失。
六、磁盘结构,平均寻道时间,平均延迟时间,虚拟内存与MMU
每个磁头可以读取一段换新区域,称为磁道
把一个戈丁手臂位置上所以的磁道合起来,组成一个柱面
每个磁道划成若干扇区,扇区典型的值是512字节
数据都存放于一段一段的扇区,即磁道这个圆圈的一小段圆圈,从磁盘读取一段数据需要经历寻道时间和延迟时间
平均寻道时间是指当用户发出指令要寻找一个文件时,磁盘磁头开始移动到存储那个文件位置所需要的时间,从指令发出寻址命令到找到目标文件的时间称为寻址时间
平均延迟时间当找到文件的时候,需要磁道转一圈在读取这个数据这个读取时间就是平均延迟时间。
虚拟内存与MMU许多计算机都有虚拟内存机制会让磁盘的某块地方划分为虚拟内存,一般大于内存的1.5倍,让计算机能运行大于内存的应用程序,会把没用的应用程序存放到虚拟内存里面等待处理,为了保障计算机的运行只能牺牲计算机的运行速度
所以会很卡。在linux中成为swap,这种机制的核心在于快速地映射内存地址,由cpu中的一个部件负责,成为存储器管理单元(Memory Management Unit MMU)。
七、磁带
在同等的价格中磁带要比其他的存储设备要低很多且拥有更大的容量,但是读写速度很慢时100s,当机房中出现天灾人祸时,磁盘的可移动性很强,常被用来做数据备份。
八、设备驱动与控制器
控制器是对硬件发起控制命令,负责给系统提供接口,厂商会给设备加上相应驱动来给操作系统来识别
控制器:是查找主板上的一块芯片或一组芯片(硬盘,网卡,声卡等都需要插到一个口上,这个口连的便是控制器),控制器负责控制连接的设备,它从操作系统接收命令,比如读硬盘数据,然后就对硬盘设备发起读请求来读出内容。
控制器的功能:通常情况下对设备的控制是非常复杂和具体的,控制器的任务就是为操作系统屏蔽这些复杂而具体的工作,提供给操作系统一个简单而清晰的接口
设备本身:有相对简单的接口且标准的,这样大家都可以为其编写驱动程序了。要想调用设备,必须根据该接口编写复杂而具体的程序,于是有了控制器提供设备驱动接口给操作系统。必须把设备驱动程序安装到操作系统中。
九、总线与南桥和北桥
总线连接各个硬件设备的线路
北桥(PCI桥)专门连接高速设备
南桥(ISA桥)专门连接慢速设备
十、操作系统的启动流程
windows操作系统
1.计算机加电
2.BIOS开始运行,检测硬件:cpu、内存、硬盘等
3.BIOS读取CMOS存储器中的参数,选择启动设备
4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)
5.根据分区信息读入bootloader启动装载模块,启动操作系统
6.然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表),穿件需要的进程,并在每个终端上启动登录程序或GUI
linux操作系统
1.计算机加电
2.BIOS自检
3.系统引导libo/grub
4.启动内核
5.初始化系统
6.执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统,到此系统算是基本运行起来了,后面需要进行运行级别的确定及相应服务的启动。rc.sysinit所做的事情(不同的Linux发行版,该文件可能有些差异)如下:
7.获取网络环境与主机类型。首先会读取网络环境设置文件"/etc/sysconfig/network",获取主机名称与默认网关等网络环境。
8.测试与载入内存设备/proc及usb设备/sys。除了/proc外,系统会主动检测是否有usb设备,并主动加载usb驱动,尝试载入usb文件系统。
9.决定是否启动SELinux。
10.接口设备的检测与即插即用(pnp)参数的测试。
11.用户自定义模块的加载。用户可以再"/etc/sysconfig/modules/*.modules"加入自定义的模块,此时会加载到系统中。
12.加载核心的相关设置。按"/etc/sysctl.conf"这个文件的设置值配置功能。
13.设置系统时间(clock)。
14.设置终端的控制台的字形。
15.设置raid及LVM等硬盘功能。
16.以方式查看检验磁盘文件系统。
17.进行磁盘配额quota的转换。
18.重新以读取模式载入系统磁盘。
19.启动quota功能。
20.启动系统随机数设备(产生随机数功能)。
21.清除启动过程中的临时文件。
22.将启动信息加载到"/var/log/dmesg"文件中。
十一、应用程序启动流程
当运行应用程序,程序会找到硬盘中相应的启动文件生成进程存储到内存里,然后根据程序运行通过操作系统进行输入输出指令再由CPU完成启动应用。