现代计算机设备的组成部分:运算器、控制器、存储器、输入设备、输出设备
CPU
bus:总线
memory: 编址存储设备
read ahead 高速缓存
IO: 与外部部件交互
    磁盘 网卡
虚拟机:虚拟计算机
CPU:运算器、控制器
    CPU指令,指令集;
        特权指令:OS运行特权指令;
        普通指令:
    程序员:
OS: Operating System
    软件程序
    通用目的
        硬件驱动
        进程管理
        内存管理
        网络管理
        安全管理
System Call 系统调用
编程层次:
    硬件规格:hardware specifiacation
    系统调用:
    库调用:  library call
UI: user interface 用户接口
    GUI: Graphic User Interface 图形用户接口
    CLI: Command Line Interface 命令行接口
ABI: Application Binary Interface      应用二进制接口
API:Application Programming Interface 用用程序接口
CPU架构类型:
    x86
    x64
    arm
m68000, m68k
power
powerpc
ultrasparc
alpha
安腾
Windows
Linux:
    Linus –> Linux
GNU/Linux
Unix:
    System (Bell Lab)
        AIX (IBM)
        Solaris (SUN)
        HP-UX (HP)
    BSD: (BSRG)Berkeley System Distribution  伯克利软件套件
        NetBSD
        OpenBSD
        FreeBSD
MIT:Richard Stallman
    GNU: GNU is Not Unix;
        GPL:General Public License
CPU, memory, I/O
程序运行模式:
    用户空间:user space, us
    内核空间:system space
POS: Portable Operating System 可移植操作系统
    POSIX
API: 编程接口;
运行程序格式:
    Windows: EXE, dll(dynamic link library 动态链接库文件)
    Linux: ELF, so(shared object 共享对象)
程序:指令+数据
    指令:只读
    数据:读写
程序:算法+数据结构
库调用,系统调用:允许被调用的程序;
malloc(), free()
编程语言:
    汇编语言:微码编程
        系统中某些与硬件相关的特有代码、驱动程序开发;
    高级语言C, C++:
        系统级应用、驱动程序
    高级应用java, python, php:
        应用程序
    unix-like
LSB: Linux Standard Base Linux标准库
程序包管理器:
    rpm:
        RHEL, Fedora, S.u.S.E, CentOS
    dpt:
        Debian, Ubuntu
自由软件:
    自由使用;自由学习和修改;自由分发;自由创建衍生版;
Linux的哲学思想:
    1、一切皆文件;
        把几乎所有资源,包括硬件设备都组织为文件格式;
    2、由众多单一目的小程序组成;一个程序只实现一个功能,而且要做好;
        组合小程序完成复杂任务;
    3、尽量避免跟用户交互;
        目标:实现脚本编程,以自动完成某些功能;
    4、使用纯文本文件保存配置信息;
        目标:一款使用的文本编程器即能完成系统配置工作;
如何获取CentOS的发行版:
    http://mirrors.aliyun.com
    http://mirrors.sohu.com
    http://mirrors.163.com
登录:
    root/mageedu
# startx &
终端:
    用户与主机交互,必然用到的设备;
物理终端:直接接入本机的显示器和键盘设备;/dev/console
虚拟终端:附加在物理终端之上的以软件方式虚拟实现的终端,CentOS 6默认启动6个虚拟终端
    Ctrl+Alt+F#: [1,6]
    图形终端:附加在物理终端之上的以软件方式虚拟实现的终端,但额外会提供桌面环境;
    设备文件路径:/dev/tty#
模拟终端:
    图形界面下打开的命令行接口,基于ssh协议或telnet协议等远程打开的界面
    设备文件:/dev/pts/#    [0,oo)
查看当前的终端设备:tty
交互式接口:启动终端后,在终端设备附加一个交互式应用程序
    GUI:
        X protocol, window manager, desktop
    Desktop:
        GNOME (C, gtk)
        KDE   (C++, qt)
        XFCE  (轻量级桌面)
CLI:
    shell程序:
        sh (bourn)
        csh 
        tcsh
        ksh (korn)
        bash (bourn again shell), GPL
        zsh 
    显示当前使用的shell:
        # echo ${SHELL}
    显示当前系统使用的所有shell:
        # cat /etc/shells
    命令提示符:prompt
        [root@localhost ~]#
            [root@localhost ~]:PS1
            prompt:
                管理员:#
                普通用户:$
硬件系统主要有五大部分组成:运算器、控制器、存储器、输入设备、输出设备
运算器:负责算术与逻辑运算。与控制器共同组成了中央处理器
控制器:负责发送和接收指令
存储器:用来存储正在进行程序、将要进行程序的数据及刚处理完的数据
输入设备:用来进行输入的设备
输出设备:用来进行输出的设备
硬件是基础,硬件需要通过系统软件控制来启动硬件,并让各个硬件之间相互协同工作,在系统软件的基础上是用户,用户操控的是系统软件,并在系统软件的基础上安装相应的应用软件,来完成用户所需要的工作,所以说最底层的是硬件,硬件上一层是系统软件,系统软件上一层是应用软件,而最上层的则是用户
计算机的工作原理
算机的工作过程,就是执行程序的过程。怎样组织存储程序,涉及到计算机体系结构问题。
现在的计算机都是基于“程序存储”概念设计末造出来的。
了解了“程序存储”,再去理解计算机工作过程变得十分容易。如果想让计算机工作,就得先把程序编出来,然后通过输入设备送到存储器保存起来,即程序存储。
根据冯·诺依的设计,计算机应能自动执行程序,而执行程序又归结为逐条执行指令。执行。执行一条指令可分为以下4个基本操作
- 取出指令:从存储器某个地址中取出要执行的指令送到CPU内部的指令寄存器暂存。
- 分析指令:把保存在指令寄存器中的指令送到指令译码器,译出该指令对应的微操作。
- 执行指令:根据指令译码,向各个部件发岀相应控制信号,完成指令規定的各种操作
- 为执行下一条指令作好准备,即取出下一条指令地址
计算机使用二进制的原因
技术实现简单
简化运算规则
适合逻辑运算
易于进行转换
抗干扰能力强
机器数和真值
一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1
因为第一位是符号位,所以机器数的形式值就一等于真正的数值,将带符号位的机器数对应的真正数值称为机器数的真值(10000011的真值是-3,而不是131)
但是机器不是这么区分一个数的正负的,人可以直接看到第一位是1还是0来区分,机器如果直接判断会增加电路的复杂程度,所以人们就将符号位也参与运算,这样根据1-1=1+(-1),只保留加法,于是有了原码、反码和补码
原码:符号位加上真值的绝对值,即用第一位表示符号,其余位表示值
-1 >> 1000 0001
1  >> 0000 0001
[-127,127]
反码:
正数的补码是基本身
负数和补码是在其原码的基础上,符号位不变,其余各个位数取反
1  >> 0000 0001
-1 >> 1111 1110
补码:
正数的补码是基本身
负数的补码是在其原码的基础上,符号位不变,其余各个位数取反,最后加1(即反码+1)
1  >> 0000 0001
-1 >> 1111 1111
在计算机系统中,数值一律使用补码来表示、存储
因为这样减法可按加法来处理,0000 0001 + 1111 1111 = 0000 0000 ,进位舍去
其实可以这样推导:
为了实现一个正数i加上一个数等于0 ,所以用0-i,比如i等于0000 0001,那么0-i就是1111 1111, 我们知道0-1=-1, 所以 -1的补码就是1111 1111 ,以此类推,一个负数的补码就是0-对应正数的补码。
二进制
| 十进制 | 二进制 | |
|---|---|---|
| 基本数字 | 10个,0-9 | 2个,0、1 | 
| 进位规则 | 十进一 | 二进一 | 
111001:2^5+2^4+2^3+2^0=57
二进制:计算机内部用二进制,运算简单,简化了计算机结构
八进制:标志的开头用0表示,用0-7的数字表示
十六进制:标志的开头用0x表示,用0-9、A、B、C、D、E、F表示
运算符
| 运算符 | 运算 | 示例 | ||
|---|---|---|---|---|
| & | 与运算 | 6 & 3 = 2 | ||
| ` | ` | 或运算 | `6 | 3 =7` | 
| ^ | 异或运算 | 6 ^ 3 = 5 | ||
| ~ | 反码 | ~6 = -7 | ||
| << | 左移 | 3<<2 = 12 | ||
| >> | 右移 | 3>>1 = 1 | ||
| >>> | 无符号右移 | 3>>>1 = 1 | 
按位与&
两位全为1,结果才为1
按位与&的特殊用法:
- 清零,如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都是零的数值相与,结果为零。10101110 & 00000000 = 00000000
- 取一个数中指定位:找一个数,对应x要取的位,该数的对应位为1,其余位为零,此数与x进行“与运算”可以得到x中的指定位。10101110 & 00001111 = 00001110取后四位
按位或|
只要有一个为1,结果就为1
按位或|特殊用法:
常用来对一个数据的某些位设置为1:找到一个数,对应x要设置1的位,该数的对应位为1,其余位为零。此数与x相或可使x中的某些位置1。10100000 | 00001111 = 10101111 后四位置一
异或^特殊用法:
两位值不同则该位结果为1,否则为0
- 使特定位翻转:特定位异或1。10101110 ^ 00001111 = 10100001后四位翻转
- 与0相异或,保留原值。10101110 ^ 00000000 = 10101110
- 两个变量交换值- 借助第三个变量来实现 C=A;A=B;B=C;
- 利用加减法实现两个变量的交换 A=A+B;B=A-B;A=A-B
- 异或运算,一个数异或本身等于0和异或运算符合交换律 A=A^B;B=A^B;A=A^B
 
取反与运算~
对一个二进制数按位取反,即将0变为1,1变0
左移<<
将一个运算对象的各二进制位全部左移若干位,左边的二进制位丢弃,右边补0
右移>>
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。操作数每右移一位,相当于该数除以2
无符号右移运算>>>
各个位向右移指定的位数。右移后左边空出的位用零来填充。移除右边的位被丢弃。
负数以其正数的补码形式表示
反码加1称为补码
32位整数,最高位为1,就是负数
负数 左移或者右移
