VMware Workstation的使用:
虚拟机
虚拟计算机
在一个主机上,软件+硬件模拟出的硬件设备,然后在虚拟出来的设备上安装系统,等同于在物理机上的操作!
现代计算机设备的组成部分:
运算器,控制器,存储器,输入设备,输出设备
运算器
用来计算,二进制算数运算和逻辑运算(加减乘除,移位,取模计算),也就是加法器
控制器
控制整个计算各部件之间的协调(运算器和控制器合起来为中央处理器CPU)运算器和控制器bus总线连接
存储器
Memeory:编址存储设备,一个单位为一个字节,一个字节为8位,内存中的每一个存储单位都是有编址的,运算器会从内存中地址中取出来运算!易失性数据!
read ahead:预取过程
I/O
完成与外部部件进行交互的部件,是性能最差的东西! 磁盘、网卡、键鼠、鼠标
主板
将这些部件拼凑在一块儿!
显示设备
最便宜的显示设备
###为什么32的操作系统,只能使用4G内存:
32位的操作系统,地址总线只有32位,那么他可以使用的地址存储单元也就是2^32个,也就是4G内存! 从而可以得知64位可以使用的内存的内存为2^64个,也就是4G个4G的空间!
CPU:
运算器,控制器(CPU内部有众多的电路,晶体管组成) 主要用来做算数运算和移位运算。CPU有很多个针脚,每一个针脚都有特定的功能,比如说某一个针脚用来做加法,某一个做移位计算,某一个或运算等等。 为了让CPU完成我们期望的运算,任何一个所谓的计算芯片,必定有一个最基本的载入(boot)的过程!
CPU指令
多个指令联合起来叫做指令集,不同的厂商生产的CPU的指令集功能不同,一般CPU能运行的都是二进制指令! 当然指令分为特权指令和普通指令,操作系统才有权限调用特权指令,程序只能调用普通指令。
编程语言
语言越接近硬件越低级,越让人看得懂的越高级,程序员使用的高级语言!没个开发出来的程序必须能够让机器看得懂:机器语言—>汇编语言->高级语言,那么高级语言首先要转化成芯片能够支持的汇编语言,然后转化成调用CPU指令的过程!比如说C语言,开发好之后首先就是需要编译,然后将进行汇编过程。 所谓程序:就是让我们想办法调用CPU指令集完成指定工作的过程!
机器结构
不同的机器结构(x86,arm)等,但是对于我们用户提供的都是通用结构软件,这个软件就是操作系统。无论底层多么复杂,我们只需要面向操作系统的接口写程序就可以了!所以操作系统是一个通用软件,是一个将底层所提供的各种计算能力抽象成为一个计算器,将内存抽象成为一个整体(或者简单的划分,如32位操作系统和64位操作系统)!
OS:operation System
软件程序
他是一个软件程序,是处于通用的目的,把底层不同功能的硬件抽象成一个统一的接口(如硬件驱动,进程管理,内存管理,网络管理,安全管理等等) 程序员不会面向硬件写程序,我们是面向操作系统的抽象接口写程序(OS也是一个虚拟机)
System call
操作系统运行起来之后:如果程序要调用特权只能,只能请内核(操作系统)发送请求调用特权指令,这个过程叫系统调用,System call。
操作系统的目的
将底层硬件的功能封装为系统调用实现。这样程序员就不用面向硬件编程,直接面向系统编程,对硬件的使用过程直接使用系统调用sys call实现。
编程层次:
硬件规格:hardware specifiacation 系统调用: 库调用:library call 我们操作系统也是一个很底层的东西,它抽象出来的硬件功能也很多个,程序开发的时候,我们太多个不同的系统调用也会增加了开发的难度,为了解决这个问题,操作系统会再次对这些操作系统级别的这些再次抽象,这个时候称之为库,调用称之为library call,简而言之:将底层的功能整合出来离程序员使用最近的就称之为库,程序员写程序也就简化多了
系统层次:
应用程序 ↓ 库 ↓ 操作系统(内核) ↓ 硬件
程序运行的两种方式
1、开机自动启动运行2、用户通过交互式接口登陆或者连接系统上去,来手动运行程序 用户可以通过交互式接口对系统及其程序进行操作、配置管理 系统的运行独立于用户的交互式接口,接口有无,都不影响系统及其程序的运行,所以交互式接口不是必须的,但是有些程序建立在交互式接口之上的。
用户接口
UI: GUI: Graphic User Interface 图形用户接口 CLI: Command Line Interface 命令行接口#ABI:Application Binary Interface 应用二进制接口 那么Linux和Windows的程序为什么都不能互通呢?因为我们使用的二进制调用接口不同!也就是使用的ABI(Application Binary Interface)不一样。因为我们的程序必须编译,然后汇编成二进制才能执行,这个时候的ABI使用的接口不一样,那就没法执行,如果接口相同,那么就可以互相通用![我们操作系统的库面对的对象不一样]#API:Application Programming Interface 应用编程接口 API:Application Programming Interface应用编程接口(WIN和Linux运行程序格式不一样,编程接口可以一样兼容,在Windows写的程序以兼容格式可以在Linux到可以运行,一旦编译成了二进制,就只能在对应的操作系统上能运行,在什么对象上编译,就只能在那些系统上运行。)
CPU架构类型
##IntelX86 X86_64 安腾CPU##ARMARM(非常奇葩,只设计,不生产,有所谓的三星,高通这样的公司生产)##摩托罗拉M6800(M68K) 摩托罗拉的CPU Power(IBM,世界上第一个多核心CPU,第一个8核,单核心能最强的,功耗大) powerpc(摩托罗拉,苹果,IBM联合设计的CPU),简装的Power#SUNultrasparc(SUN公司的)#HPalpha(HP公司)
常见操作系统
##Windows##Linux##Unix System(Bell lab) AIX(IBM) Solaris(SUN) HP-UX(HP) BSD(Berkeley System Distribution)(BSRG) FreeBSD(能够在PC上运行的贵族操作系统) NetBSD OpenBSD#MIT:Richard Stallman GNU: GNU is Not Unix; GPL:General Public License
Linux发行版
Linux完整的名字叫GNU/Linux,只是我们简称Linux。 无论是GNU还是Linux,内核都是源代码,是C语言开发的,如果软件要运行,就必须编译成二进制才能运行,跨平台运行是个严重的问题,那么久流行将软件编译好之后的二进制可以兼容所有的平台,也就是打包,包括RedHat,Debian,SLS,SUSE这些公司,他们本身都不是Linux的拥有着,他们只是将源代码在通用平台上编译好成二进制可以兼容大部分的平台,这些公司简称发行商(release)
Linux的发行版:
slackware: suse opensusedebian: ubuntu mint redhat: rhel: redhat enterprise linux 每18个月发行一个新版本 CentOS:兼容rhel的格式 fedora:每6个月发行一个新版本 ArchLinux GentooLFS: Linux From scratch
开源协议
GNU: GPLv2, GPLv3, LGPL(lesser) Apache: apache BSD: bsd A: 1000, GPL, B: 20000, 20
问题1:CentOS和Linux是什么关系?CentOS和RHEL是什么关系?
CentOS是Linux的发行版,CentOS是在RHEL基础上改变了logo的发行版
问题2:各种开源协议的具体细节?
GPL, LGPL, Apache, BSD GPL:GPL协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。 LGPL:LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL 允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。 Apache:ApacheLicence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件) 需要满足的条件也和BSD类似: 需要给代码的用户一份Apache Licence 如果你修改了代码,需要再被修改的文件中说明。 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。 BSD:BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。 但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件: 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。 MIT:MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的.
转载于:https://blog.51cto.com/dominicto/1961078