现代计算机设备的组成部分:运算器、控制器、存储器、输入设备、输出设备
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,就是负数
负数 左移或者右移