听课简要知识点记录如下:
1, Cpu(一堆集成电路+指令集)可以从内存中读取的内存地址为:32位CPU只能读取2的32次方的内存地址,总计4G。(32位CPU即32条电路线,传数据是哪根电路有电即为1,没电即为0)
2, 程序的定义:程序==数据+指令(即对于CPU芯片(集成电路)的:cpu都有自己的cpu指令集,这些指令集称为计算机的汇编语言,或称为微码)的集合
3, 内存:一般是编址存储单元
4, CPU内部的缓存:{1,2,3}级缓存的作用:由于CPU的频率比内存快得多,因此如果没有缓存,那么CPU的性能就会被白白浪费掉。
5, OS(Operating System)的作用:将计算机的计算能力抽象成一个个易于使用的功能,供用户使用,这样用户就不用了解底层细节。
6, 操作OS步骤:高级编程语言------》系统调用/库调用
7, 主板芯片组:南桥芯片(传输速度较慢);北桥芯片(传输速度较快)
8, I/O设备(输入输出设备)工作原理:每个IO设备上都有一个寄存器(即独立的暂存空间:IO设备再发数据给cpu前的一个暂存空间,先发数据到暂存空间,再由此发给cpu),cpu为了识别每个io设备,对他们各自的寄存器进行编址(每次计算机一启动,各io设备就会向cpu申请这个编号;例:鼠标申请01,02;硬盘申请03,04;这称为IO PORT,cpu根据这个标号来区别数据的来源)
9, IO中断:cpu如何知道何时某io设备会发数据过去?io中断:(1)io设备通知cpu要发数据过去(2)DMA:直接内存访问;例如:对硬盘:内存中已准备10M空间,你可以发过来。
10, IO数据流:io设备-----》io寄存器----》内存----》cpu
11, 分时OS(multicsOS):cpu分时间片运行,并且引用内存保护机制(MMU:memory management unit,一般由OS实现,MMU是cpu中的一块芯片),由cpu指派内存(内存虚拟):MMU划分内存为N个页面,一个页面包含多个内存单元;程序不能直接访问内存,它想使用的内存,需要向cpu申请,如果cpu发现程序申请的地址与程序无关,则拒绝访问。
########################################################
Unix发展史
开始由汇编写的操作系统---B语言---C语言创造了Unix----minix(4000行代码,3200行C,800行汇编)
Unix两种不同的脚本以及系统管理风格:SystemV;BSD
BSD操作系统家族:openBSD,netBSD
FreeBSD:可运行在(intel,amd)x86平台上
Windows发展史
WindowsNT操作系统(NT:newtechnology)
Linux 0.1 1990(linus)
Mit---Richard Stallman----Gnu---GPL---LGPL
OS(kernel即OS,内核)定义:工作在硬件基础上,将硬件提供的功能抽象化成一个个统一规范的接口(即系统调用system call,linux一共就数百个systemcall)给程序来调用。所有与硬件交互的工作由内核来完成,以避免任意程序来破环硬件、影响其他程序的运行,OS使各个进程互不影响。
内核功能:1.进程管理(跟踪、切换、终止、调度(cpu时间))
2,内存管理:(内核空间,用户空间),内存虚拟化。
3,驱动程序管理,驱动硬件
4,文件系统管理,提供统一文件系统接口(VFS虚拟文件系统)
×目前的linux已经有1000W行代码,但是常用的代码没有多少行。
Process定义:进程是程序一部分代码的执行过程,是OS部分资源的分配,程序是程序员依赖于操作系统的系统调用开发出来的。
库(library)定义:将几个系统调用封装起来,做成更接近用户(程序员)的功能,供程序员调用,程序员可以利用库调用(library call)来开发程序,有时比用系统调用更方便。à但是基于汇编语言,系统调用开发出来的程序往往性能更好。Php,python,java等语言开发应用程序速度较快,因为他们的开发语言库都非常个性化,丰富,但是运行速度较慢。
×Cpu指令集权限(0级别:所有指令,内核工作在这个级别;1,2级别是不用的;3级别:部分指令(不包括特权指令和敏感指令),应用程序工作在这个级别,因此如果应用程序要访问除cpu以外其他硬件必须通过内核来操作(访问内核的系统调用))
进程切换/上下文切换概念(Context Switch):
执行应用程序----需用到cpu特权指令
内核终止应用程序,保留进程现场
内核执行系统调用,并将cpu执行结果返回给应用程序。
应用程序----继续执行
完整的一套linux操作系统
Linux+GNU工具链+glibc(c程序库)
API定义:由库/系统调用提供的编程接口
程序是否可以跨平台(操作系统平台)运行:
1) 程序运行过程:源代码-----编译为2进制程序----由OS运行(用到内核辅助功能,不同OS之间不同,不同os的库不同)---因此在那个OS平台上编译的就只能在那个os平台上运行。
2) 跨OS平台运行的必要条件:库/系统调用在不同的操作系统上是否一致(API),如何保证这一点(需要遵循POSIX规范,只要是遵循POSIX的OS,即api是一致的),如果一致,在其之上开发的程序就一致。
3) 在哪个OS平台上编译的就只能在那个OS平台上运行,因为编译时需要依赖于内核的特性(ABI:application binary interface)进行编译。2个操作系统的API可能兼容,但ABI未必兼容,例:win库文件.dll(dynamiclink library),linux库文件.so(shared object);但两者的代码可以相同,即在linux上开发的可以在win上编译运行,反之亦然(因为API相同)。
4) 主要取决于API是否相同。
CPU架构介绍:
1) X86:8086系列的32位cpu;厂商主要是intel,amd;指令集IA-32
2) X86_64:amd64
3) Iantium:安腾,HP卖给intel的;指令集IA-64
4) Power:IBM(小型机使用)
5) Powerpc:(IBM,apple,motolola联合开发的)
6) M68000/M68K:motolola开发,早期Unix使用。
7) Arm:移动终端使用,arm公司,设计cpu架构,有专利,不生产,收专利费。
8) Sparc:sun公司―openoffice(被Oracle闭源)―libreoffice(开源免费)
9) UltraSparc:sun,用于工作站。
10) Mips:sun,用于嵌入式平台。
程序是否可以跨平台(硬件平台cpu架构)运行:
1) 编译:依赖当前硬件架构进行优化,不同平台(例x86àarm)之上编译的程序(底层cpu指令集不同),不能在对方平台上运行,
2) 交叉编译(crosscompiling):在X86平台上用arm库编译,可以在arm平台上运行。
3) 兼容性:一般来说,高一级版本的cpu可以兼容低级版本cpu的指令集,反之不行,例如在i386平台上编译的程序可以运行在x86_64平台上(!!但只能运行i386的指令集,即虽然运行在高级cpu上,只能使用低级cpu的指令,即相当于只有低级cpu的功能),反之不行。
4) 主要取决于ABI是否相同。
Linux发行版:
由linux发行商将在特定平台上(安装时需要在对应的平台上安装)编译好的二进制程序提供在一张安装光盘中(发行商为了更好的通用性,一定是在非常古老的cpu上测试通过的,所以别人编译好的程序,固然安装方便,但未必能发挥我们自己邮件的性能!!!!)。
Linux架构:应用程序----库----内核----硬件
OS上的人机交互接口:
GUI:gnome,kde,xfce(轻量级)
CLI:BASH,ZSH等等
主要linux发行版
Debian:非营利组织
Ubuntu:易用灵活性好(在server上的稳定性很难和redhat系列相提并论)。----mint
Redhat:商业公司,靠服务收费----CentOS(兼容redhat(重新编译redhat源代码构建的发行版),公益性发行版,可以用yum免费升级软件)----国内较流行红帽系,可以获取的资源也最多。(www.redhat.com/www.centos.com)rhel-6.4采用linux_2.6.32版本内核
Suse:SLES,OPENSUSE
非营利组织:www.kernel.org
Linux著名版本:2.4―2.6---3.10
我们自己编译好以后并压缩的内核一般在2M左右,小一点的内核可以做到小于一兆。