进制
windows : calc 计算器
linux : bc 计算器
十六进制:0-9 A-F
八进制是一种以8为基数的计数法,采用0,1,2,3,4,5,6,7
2^0=1=1
2^1=2=10
2^3=8=1000
2^4=16=10000
2^5=32
2^6=64
2^7=128=10000000
2^8=256=100000000
2^9=512
2^10=1024=
2^11=2048
2^12=4096
计算机的构造
主板;mainboard ,连接计算机的各个硬件在一起
冯诺依曼
PC服务器常见的三种外型
塔式服务器
刀片式服务器
机架式服务器
按照统一标准设计,配合机柜统一使用,便于统计管理,高密度,节省空间,常用U为单位,
1U=1.75英寸=44.45毫米,机箱尺寸比较小巧,在机柜中可以同时放置多台服务器
机架式服务器的宽度为19英寸(48.26cm),厚度通常有1U,2U,3U,4U,5U,7U几种标准的
服务器
机柜的尺寸也是采用通用的工业标准,如:宽度600mm,深度1000mm,高2000mm(42U)
现阶段是最主流的的服务器
CPU
- CPU:Central Processing Unit,即中央处理器。由控制器和运算器构成,是整个计算机系统中最重要
的部分
-
CPU 架构:
CISC:Complex Instruction Set Computer,复杂指令集
RISC:Reduced Instruction Set Computer,精减指令集,就是说指令相对比较少
-
CPU****类型
X86:CISC
ARM:Acorn RISC Machine 高通,华为麒麟
RISC-V 阿里玄铁910
MIPS 龙芯
Power:IBM
Powerpc:apple,ibm,moto
Ultrasparc :Sun
Alpha:HP
安腾:compaq
-
服务器CPU公司
Intel:
Xeon 至强
Itanium 安腾
AMD: Althlon MP
IBM: Power
CPU主频:主频是CPU的时钟频率(CPU Clock Speed),是CPU运算时的工作的频率(1秒内发生的同步
脉冲数)的简称。单位是Hz。一般说来,主频越高,CPU的速度越快,由于内部结构不同,并非所有的
时钟频率相同的CPU的性能都一样
外频:系统总线的工作频率, CPU与外部(主板芯片组)交换数据、指令的工作时钟频率
倍频:倍频则是指CPU外频与主频相差的倍数
三者关系是:主频=外频x倍频
高速缓存(cache):高速交换的存储器。CPU缓存分为一级,二级,三级缓存,即L1,L2,L3(缓存可以将数据缓存在CPU中,比内存快很多)
内存总线速度(Memory-Bus Speed):一般等同于CPU的外频,指CPU与二级(L2)高速缓存和内存之间
的通信速度
地址总线宽度:决定了CPU可以访问的物理地址空间
硬盘不一定是必须的设备。他是外存
机械硬盘HDD(Hard Disk Drive)
固态硬盘SSD(Solid State Drives )
常见的磁盘接口种类
IDE:Integrated Drive Electronics,电子集成[驱动器,早期家用电脑常用接口
SCSI:Small Computer System Interface,小型计算机系统接口,早期的服务器常用接口
SATA:Serial ATA (Advanced Technology Attachment 高技术配置),家用电脑常用的接口
SAS:Serial Attached SCSI,是目前服务器上主流的接口
光纤通道:Fiber Channe,高性能服务器上采用的接口
M.2 :固态硬盘接口,性能更强
并发和多线程
并发和多线程
CPU的速度超级快,不能老是让它闲着,要充分地压榨它!这里有两个强劲的理由:
1. 人类需要多个程序“同时”运行,我们要把CPU的时间进行分片,让各个程序在CPU上轮转,造成一
种多个程序同时在运行的假象,即并发。 2. 当CPU遇到IO操作(硬盘,网络)时,不能坐在那里干等“几个月”甚至“几年”,在等待的时候,一
定要切换,去执行别的程序。
说起来简单,但是程序的切换需要保存程序执行的现场,以便以后恢复执行,于是需要一个数据结构来
表示,这就是进程了。如果一个进程只有一个“执行流”, 如果进程去等待硬盘的操作,那这个程序就会
被阻塞,无法响应用户的输入了,所以必须得有多个“执行流”,即多线程
缓存
需要持久化的数据一定要保存到硬盘中,但是硬盘超级慢,支持不了大量的并发访问,那怎么办呢?
可以把最常访问的热点数据放到CPU的缓存中嘛, 其实CPU也是这么做的,但是CPU的L1, L2, L3级缓
存实在是太小, 根本满足不了需求。于是只好退而求其次,把热点数据放到速度稍慢的内存中,于是应
用程序的缓存就出现了。缓存虽然是解决了问题,但是也带来了更多的问题,例如:缓存数据和数据库
数据怎么保持一致性?
缓存如果崩溃了该怎么处理?数据在一台机器的内存放不下了,要分布到多个机器上,怎么搞分布式
啊,用什么算法?.....
异步
对于Tomcat这样的应用服务器,对于每个请求都要用一个线程来处理,如果现在有一万个请求进来,
Tomcat会建立1万个线程来处理吗? 不会的,因为线程多了开销会很大 ,线程切换起来也很慢,所以
它只好用个线程池来复用线程。现在假设线程池中有一千个可用线程(已经非常多了),它们都被派去
访问硬盘,数据库,或者发起网络调用,这是非常慢的操作,导致这一千个线程都在等待结果的返回
(阻塞了),那剩下的九千个请求就没法处理了,对吧?所以后来人们就发明了新的处理办法,仅使用
几个线程(例如和CPU核心数量一样),让他们疯狂运行,遇到I/O操作,程序就注册一个钩子函数放
在那里,然后线程就去处理别的请求,等到I/O操作完成了,系统会给这个线程发送一个事件, 线程就
回过头来调用之前的钩子函数(也叫回调函数)来处理。
这就是异步,非阻塞的处理方式。nginx,Node.js等采用的都是类似的思想
单线程
Redis使用单线程的方式来处理请求的,为什么用单线程就可以呢? 它为什么不像Tomcat那样使用多线
程和线程池呢?因为它面对的仅仅是内存,内存的速度在计算机的体系中仅次于CPU,比那些网络操作
不知道要快到哪里去了所以这个唯一的线程就可以快速地执行内存的读写操作,完成从许多网络过来的
缓存请求了。单线程还有个巨大的优势,没有竞争,不需要加锁!
操作系统
主要功能:
硬件驱动
进程管理
内存管理
网络管理
安全管理
文件管理
OS分类:
服务器OS:CentOS,Ubuntu,Windows Server,AIX
桌面OS:Windows 10,Mac OS,Fedora
移动设备OS:Andriod,IOS,AliOS,HarmonyOS
interface接口
接口:interface,来源于电气工程学科,指的是插座与插头的连接口,起到将电与电器连接起为的功
能。后来延伸到软件工程里指软件包向外提供的功能模块的函数接口。所以接口是用来连接两个东西、
信号转换和屏蔽细节
操作系统通过接口的方式,建立了用户与计算机硬件的沟通方式。用户通过调用操作系统的接口来使用
计算机的各种计算服务。
为操作系统一般会提供两个重要的接口,来满足用户的一些一般性的使用需求:
#命令行接口:实际是一个叫shell的终端程序提供的功能,该程序底层的实质还是调用一些操作系统提供的函数
#窗口界面接口:窗口界面通过编写的窗口程序接收来自操作系统消息队列的一些鼠标、键盘动作,进而做出一些响应
ABI
不同的操作系统的ABI接口不一样,就像不同国家的电源接口不一样
Application Binary Interface,应用程序二进制接口,ABI描述了应用程序与OS之间的底层接口,允许编
译好的目标代码在使用兼容ABI的系统中无需改动就能运行
运行程序格式:
Windows: PE(portable executable)格式, .dll(dynamic link library),.lib
Linux: ELF(Executable and Linking Format)格式, .so(shared object), .a
例如:
[root@centos7 ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aaf05615b6c91d3cbb076af81aeff531c5d7dfd9, stripped
API
Application Programming Interface,应用程序开发接口,API定义了源代码和库之间的接口,因此同
样的源代码可以在支持这个API的任何系统中编译
POSIX: Portable Operating System Interface(英文首写多个X) 可移植的操作系统接口
IEEE在操作系统上定义的一系列API标准
POSIX兼容的程序可在其它POSIX操作系统编译执行
用户和内核空间
做软件开发还是要利用别人提供的库才行的
进程占用内存中的一部分空间的分为两部分:一部分是用户空间,一部分是内核空间
**用户空间:**User space
用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃,内核也不受影响
只能执行简单的运算,不能直接调用系统资源,必须通过系统接口( system call),才能向内核发
出指令
内核空间:****Kernel space是 Linux 内核的运行空间
可以执行任意命令,调用系统的一切资源。 上下文切换
str = "www.magedu.com" // 用户空间
x = x + 100 // 用户空间
file.write(str) // 切换到内核空间
y = x + 200 // 切换回用户空间
说明:第一行和第二行都是简单的赋值运算,在 User space 执行。第三行需要写入文件,就要切换到
Kernel space,因为用户不能直接写文件,必须通过内核安排。第四行又是赋值运算,就切换回 User
space
编程语言
低级语言:计算机能理解的语言,二进制
机器语言:0和1
汇编语言:和机器语言一一对应,与硬件相关的特有代码、驱动程序开发
中级语言:C 语言,系统级应用、驱动程序
高级语言: java,python,go,php,Objective-C,C#,易语言(中文),应用级程序开发,人类
语言实现
操作系统演变
单用户系统:一次只能支持一个用户程序的运行。向用户提供联机交互式的工作环境,如:DOS
批处理系统:用户将一批作业提交给操作系统后就不再交互,由操作系统控制自动运行,提高系统
运行效率
多道程序系统:程序控制 CPU 处理顺序
分时系统:提高系统利用率,操作系统控制 CPU 处理顺序,多个人共用一台计算机
个人计算机:每人用户对应一个系统,廉价,方便,易用
分布式计算:每个用户对应多个系统,云计算,大数据处理
服务器三大操作系统
Windows:
Linux:GNU/Linux
Unix:1969年 Ken Thompson
System: Bell Lab
AIX (IBM)
Solaris (SUN)
HP-UX (HP)
BSD: (BSRG)Berkeley System Distribution
NetBSD
OpenBSD
FreeBSD
[root@centos7 ~]# uname -r
3.10.0-1160.el7.x86_64
wang@ubuntu:~$ uname -r
4.15.0-143-generic
开源 Open Source
软件和源代码提供给所有人,自由分发软件和源代码,free 自由,不是免费的意思
能够修改和创建衍生作品
软件分类:
商业:收费,源码也不公开
共享:免费使用,但源码不公开
自由:源代码公开
开源协议
世界上的开源许可证,大概有上百种
Linux哲学思想
一切都是一个文件(包括硬件),这样的好处就是统一了接口, (Windows一切都是图形,图形界面就是界面太多)
小型,单一用途的程序
链接程序,共同完成复杂的任务
避免令人困惑的用户界面
配置数据存储在文本中
获取发行版
#CentOS
https://wiki.centos.org/Download http://mirrors.aliyun.com http://mirrors.sohu.com http://mirrors.163.com https://mirrors.tuna.tsinghua.edu.cn/centos/
#Ubuntu http://cdimage.ubuntu.com/releases/ server版 http://releases.ubuntu.com/ desktop版
安装 Linux 系统
/boot 一个分区
swap 一个分区
/data 一个分区
/
Ubuntu安装
swap 使用的逻辑分区 逻辑分区不等价于逻辑卷
linux里面的图形界面只是他的一个软件而已 但是图形界面却是windows的一部分