计算机操作系统

  • 操作系统(Operating System,OS):是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务

冯诺依曼体系

现代计算机之父冯诺伊曼最先提出程序存储的思想,并将其运用在计算机的设计之中,该思想约定了用二进制进行计算和存储,还定义计算机基本结构为 5 个部分,分别是中央处理器(CPU)、内存、输入设备、输出设备、总线

cpu

CPU (Central Processing Unit)中央处理器,类比人脑,作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。

cpu处理过程

例:程序编译的过程:用高级语言编写的程序——>程序编译后转换成机器语言的 exe 文件(二进制可执行文件)——>程序运行时,在内存中生成 exe 副本——>cpu解释并执行程序内容 (cpu负责解释和运行最终转换成机器语言的内容)

cpu物理构成

  • 控制单元:从内存中提取指令并解码执行
  • 算数逻辑单元:处理算数和逻辑运算

CPU 是计算机的大脑,由许多晶体管组成的电子部件。接收数据输入,执行指令并处理信息。它与输入/输出(I / O)设备进行通信,这些设备向 CPU 发送数据和从 CPU 接收数据。

cpu功能构成

CPU 的内部由寄存器、控制器、运算器和时钟四部分组成,各部分之间通过电信号连通。

  • 寄存器:是中央处理器内的组成部分。它们可以用来暂存指令、数据和地址。可以将其看作是内存的一种。根据种类的不同,一个 CPU 内部会有 20 - 100个寄存器。
  • 控制器:负责把内存上的指令、数据读入寄存器,并根据指令的结果控制计算机
  • 运算器:负责运算从内存中读入寄存器的数据
  • 时钟: 负责发出 CPU 开始计时的时钟信号
寄存器种类 功能
累加寄存器 存储运行的数据和运算后的数据。
标志寄存器 用于反应处理器的状态和运算结果的某些特征以及控制指令的执行。
程序计数器 程序计数器是用于存放下一条指令所在单元的地址的地方。
基址寄存器 存储数据内存的起始位置
变址寄存器 存储基址寄存器的相对地址
通用寄存器 存储任意数据
指令寄存器 储存正在被运行的指令
栈寄存器 存储栈区域的起始位置

程序计数器、累加寄存器、标志寄存器、指令寄存器和栈寄存器 只有一个,其他寄存器一般有多个。

内存

  • 内存(Memory)是程序与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,内存又被称为主存,其作用是存放 CPU 中的运算数据,以及与硬盘等外部存储设备交换的数据。计算机在运行中,CPU 就会把需要运算的数据调到主存中进行运算,当运算完成后CPU再将结果传送出来,主存的运行也决定了计算机的稳定运行。

内存的结构

内存的内部是由各种 IC 电路组成的,主要分为三种存储器

  • 随机存储器(RAM):内存中最重要的一种,表示既可以从中读取数据,也可以写入数据。当机器关闭时,内存中的信息会丢失。
  • 只读存储器(ROM):一般只能用于数据的读取,不能写入数据,但是当机器停电时,这些数据不会丢失。
  • 高速缓存(Cache):Cache 分为一级缓存(L1 Cache)、二级缓存(L2 Cache)、三级缓存(L3 Cache)这些数据,它位于内存和 CPU 之间,是一个读写速度比内存更快的存储器。当 CPU 向内存写入数据时,这些数据也会被写入高速缓存中。当 CPU 需要读取数据时,会直接从高速缓存中直接读取,当需要的数据在Cache中没有,CPU会再去读取内存中的数据。

存储器

  • 代码跟数据在RAM跟ROM中是线性存储, 数据存储的单位是一个二进制位。最小的存储单位是字节。
磁盘
  • 计算机最主要的存储部件是内存和磁盘。磁盘中存储的程序必须加载到内存中才能运行
磁盘的物理结构
  • 磁盘是通过其物理表面划分成多个空间来使用的。划分的方式有两种:可变长方式(将物理结构划分成长度可变的空间)和 扇区方式(将磁盘结构划分为固定长度的空间)。一般 Windows 所使用的硬盘和软盘都是使用扇区,在扇区中,把磁盘表面分成若干个同心圆的空间就是 磁道,把磁道按照固定大小的存储空间划分而成的就是 扇区。
磁盘的构造
  • 磁盘缓存:指把从磁盘中读出的数据存储到内存的方式,提高了了磁盘访问的速度。
  • 虚拟内存是内存和磁盘交互的第二个媒介。虚拟内存是假想的内存(实际上是磁盘)。
文件存储
  • 文件是将数据存储在磁盘等存储媒介的一种形式。程序文件中最基本的存储数据单位是字节(B = Byte )。文件就是字节数据的集合 。

I/O设备

  • 输入设备向计算机输入数据,计算机经过计算后,把数据输出给输出设备。比如键盘按键时需要和 CPU 进行交互,这时就需要用到控制总线。

总线

总线是用于 CPU 和内存以及其他设备之间的通信,主要有以下三种:

  • 地址总线:用于指定 CPU 将要操作的内存地址。
  • 数据总线:用于读写内存的数据。
  • 控制总线:用于发送和接收信号,比如中断、设备复位等信号,CPU 收到信号后响应,这时也需要控制总线。

操作系统环境

程序中包含着运行环境(运行环境 = 操作系统 + 硬件),操作系统又可以被称为软件,它是由一系列的指令组成的。

  • 操作系统版本:应用程序运行在何种系统环境,即Windows 、Linux 等 。
  • 处理器:处理器指的就是 CPU,电脑的计算能力,通俗来讲就是每秒钟能处理的指令数。
  • 显卡:图形处理器(Graphic Processing Unit,GPU),显卡承担图形的输出任务。
  • 内存:内存即主存,应用程序在运行时能够动态分析指令的这部分存储空间,它的大小也能决定你电脑的运行速度。
  • 存储空间:存储空间指的就是应用程序安装所占用的磁盘空间。

API

  • 应用程序接口(英语:Application Programming Interface,简称:API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定。由于近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。

  • 应用程序向系统传递指令的途径称为 API(Application Programming Interface)。Windows 以及 Linux 操作系统的 API,提供了任何应用程序都可以利用的函数组合。不同操作系统的 API 是有差异的。键盘输入、鼠标输入、显示器输出、文件输入和输出等同外围设备进行交互的功能,都是通过 API 提供的。

Windows操作系统

Windows特征

  • Windows 操作系统有32位和64位两个版本 (xx位操作系统表示的是处理效率最高的数据大小)
  • 通过 API函数集成来提供系统调用(API 通过多个dll文件来提供,各个 API 的实体都是用 C 语言编写的函数。)
  • 提供了采用图形用户界面的用户界面
  • 通过WYSIWYG 实现打印输出,WYSIWYG 其实就是 What You See Is What You Get ,值得是显示器上显示的图形和文本都是可以原样输出到打印机打印的。
  • 提供多任务功能,即能够同时开启多个任务。(通时钟分割技术来实现多任务功能的。时钟分割指的是短时间间隔内,多个程序切换运行的方式。在用户看来,就好像是多个程序在同时运行,其底层是 CPU 时间切片,这也是多线程多任务的核心)
  • 提供网络功能和数据库功能
  • 通过即插即用实现设备驱动的自设定

DOS命令基础

基本命令

1
2
3
color f0 # 改变字体颜色
color ? # 帮助
cls # 清屏

目录相关

1
2
3
4
5
6
7
8
9
dir c: # 浏览c盘内容
dir 指定路径
dir /a # 查看所有内容包括隐藏内容
d: # 切换分区
cd .. # 退出一级目录
cd 文件夹名 # 进入文件夹
cd \ # 退至根目录
md 文件夹名 # 创建文件夹
rd 文件夹名 # 删除文件夹

文件相关命令

1
2
3
4
5
echo >文件名.扩展名   # 创建文件
echo 字符串>文件名.扩展名 # 创建带有内容的文件
type 文件名.扩展名 # 查看文件
del *.txt # 删除所有带txt文件
attrib +h 文件全名/文件夹全名 # 隐藏

复制和移动

1
2
3
4
5
copy [路径\]源文件名 目标路径[\新文件全名]   # 复制
move [路径\] 源文件名 目标路径[\新文件全名] # 移动
ren 源文件名 新文件名 # 重命名
assoc.txt=exefile # 修改文件属性
assoc.txtfile # 恢复文件属性

关机和重启

1
2
3
4
shutdown -s -t -时间秒  # 定时关机
shutdown -r -t -时间秒 # 定时重启
shutdown -a # 取消定时重启
shutdown -s -f -t -时间秒 # 强制关机

linux操作系统

Linux基础

linux简介

  • Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
  • 目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian (本文基于Centos)
  • 优点:
  1. 稳定安全:  Linux系统在设计的时候就是针对多用户环境的,采取了许多安全技术措施,其中有对读、写进行权限控制、审计跟踪、核心授权等技术,作为一个普通用户,通常只能读写自己的文件, 不会影响系统。
  2. 安装便利:软件安装均通过yum源命令安装。(yum就像一个仓库,包含软件包,只有版本区别,无正版盗版之分)
  3. 开源:linux系统所有组件的源代码都是开源的。
  4. linux软件资源消耗小

linux终端命令

终端命令格式

1
command [-options] [parameeter]  # 命令名+选项+参数

查阅命令信息

1
command -help  # 显示该命令的帮助信息
  • -man 查阅command命令使用手册

常用linux命令

1
2
3
4
5
6
7
8
9
10
11
list  # list的缩写  查看当前文件夹(目录)
pwd # print work directory 查看当前所在文件夹
cd [文件名] # change directory 切换文件夹
touch [文件名] # touch 新建不存在文件
mkdir [文件名] # make directory 新建文件夹
rm [文件名] # remove 删除文件
clear # clear 清屏
find - name "" # 按名字查找文件,""可放文件部分名称,其余*代替
mv 源文件\目录 目标目录 # move 移动文件
cat [文件名] # 命令窗口输出文件内容
vi [文件名] # 打开并浏览文件
  • ctrl + shift + = 放大终端字体(shift+=即为加号,去键盘按一下就明白了)
  • ctrl + - 缩小终端
  • 敲出命令,文件或目录的前几个字母,Tab 自动补全(没有歧义的情况下)

解压与安装

  • 压缩文件(linux中压缩包多为tar格式,相当于windows中的zip)
1
2
3
tar -zcvf 打包文件.tar.gz 被压缩的文件/路径...  # 压缩文件
tar -zxvf 打包文件.tar.gz # 解压缩文件 # 解压缩文件
tar -zxvf 打包文件.tar.gz -C 目标路径 # 解压缩到指定路径
  • 软件安装
1
2
3
4
yum -y install [安装包名]  # 下载并安装一个rpm包
yum update [package] # 更新一个rpm包
yum remove [package] # 删除一个rpm包
yum list # 列出当前系统中安装的所有包

一般需要什么安装直接网上搜索,或者官网均已提供安装命令

系统命令

1
2
3
4
su  # 切换到root权限
shutdown -h now # 立即关机
shutdown -r now # 立即重启
passwd # 修改密码

shell与终端(BASH)

  • Shell是Linux系统的核心组成组件,广义上作为操作系统和用户的接口、
  • 接收并解析用户输入的指令,并交由内核执行
  • 终端类似一个调用Shell程序的窗口,每个启动的终端都调用Shell程序
  • 常见的 Shell包括bash、zsh、fish …
1
2
echo $SHELL  # 查看当前shell
bash # 进入子shell进程
  • .bash 结合了ksh、csh的某些特性,同时兼容sh

  • 每开启一个终端(创建Bash进程)都拥有自己的环境变量(终端会话共享的全局存储)

  • 环境变量中可能隐藏机密信息(/etc/environment、/etc/profile、/etc/zsh/zshenv..)

  • 查看指定环境变量

1
2
3
4
echo $PATH
echo $USER
echo $SHELL
echo "$$" # 显示当前shell实例的PID
  • exporet定义全集变量
1
2
a = 1.1.1.1  # 定义本地变量
export b=1.1.1.1 # 定义全局变量

Linux进阶

Linux是一个全面的生态圈,主流的it技术都是基于Linux平台开发。

  • 数据库软件,mysql,mariadb,postgresql
  • web server ,nginx
  • 大数据,hadoop,spark
  • 消息队列,kafka
  • 虚拟化技术 kvm
  • 容器技术 docker,k8s

ls 选项

1
2
3
4
5
6
7
8
9
ls 选项 目录/文件
-a :列出目录下的所有文件,包括以 . 开头的隐含文件。
-d :将目录像文件一样显示,而不是显示其他文件。
-i :输出文件的i节点的索引信息。
-k :以k字节的形式表示文件的大小。
-l :列出文件的详细信息。
-n :用数字的UID,GID代替名称。
-F : 在每个文件名后面附上一个字符以说明该文件的类型,“*”表示可执行的普通文本

touch选项

1
2
3
4
5
6
7
touch 选项 文件名
-a 仅改变指定文件的存取时间。
-c 或–no-creat 不创建任何文件。
-m 仅改变指定文件的修改时间。
-d 使用指定的日期时间,而非现在的时间。
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。

cp命令

1
2
3
4
5
6
cp 选项 源文件/目录 目标文件/目录
-f –force 强行复制文件或目录,不论文件或目录是否已经存在。
-d 复制时保留文件链接。
-i –interactive覆盖文件之前先询问用户。
-r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理。
-R 或–recursive递归处理,将指定目录下的文件及子目录一并处理。

Linux注意事项

  1. Linux严格区分大小写
  2. Linux中的所有内容以文件形式保存,包括硬件
  3. Linux不靠扩展名区分文件类型
  4. Linux所有存储设备都必须挂在后才能使用

Linux磁盘分区

硬件 设备文件名
IDE硬盘 /dev/hd[a-d]
SCSI/SATA/USB硬盘 /dev/sd[a-p]
光驱 /dev/cdrom或/dev/hdc
软盘 /dev/fd[0-1]
打印机 /dev/lp[0-2]或/dev/usb/lp[0-15]
鼠标 /dev/mouse
  • 主分区:最多只能有4个
  • 扩展分区
  • 逻辑分区
  • Linux各目录的作用

VMware三种网络模式

VMnet0: 用于桥接模式下的虚拟交换机

VMnet1: 用于仅主机模式下的虚拟交换机

VMnet8: 用于NAT模式下的虚拟交换机

桥接模式: 将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连连接在这个交换机的一个接口上,物理主机也同样插在这个交换机中,所有桥接下的网卡可以相互访问而不干扰。

桥接模式下,虚拟机ip地址于主机在同一网段,联网后,网关与DNS与主机网卡一致。

NAT模式: 主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起俩姐在VMnet8啥办法。VMnet网卡实现了主机与虚拟机之间的通信。

NAT模式下,虚拟机和主机不在同一网段下,主机是虚拟机的“上级”。(桥接模式下虚拟机与主机可能会导致ip资源紧缺)

仅主机模式: 仅主机模式可以看作是NAT模式去除了虚拟NAT设备,然后使用VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的。Host-Only模式将虚拟机与外网隔开,使虚拟机成为一个独立的系统,只与主机相互通讯。

vi与vim

vim的三种模式

  • 命令模式:不能对文本直接编辑,可使用快捷键进行增删改查(打开后的默认模式)
  • 编辑模式:可直接对文本进行编辑(命令模式下输入i(输入模式),a(输入模式光标前移一位))
  • 末行模式:在末行输入命令进行操作(输入 : 或 / 或 ? )

1.命令模式(command mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

2.插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

3.底行模式(last line mode)

将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。

打开

vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首

编辑

i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行
编辑结束,按Esc返回命令模式

基本查找

/text  查找text,按n健查找下一个,按N健查找前一个。
?text  查找text,反向查找,按n健查找下一个,按N健查找前一个。
查找很长的词,如果一个词很长,键入麻烦,可以将光标移动到该词上,按*或#键即可以该单词进行搜索,相当于/搜索。而#命令相当于?搜索。

删除

删除当前行 dd
删除2行 2dd

拷贝和粘贴

yy 拷贝当前行
nyy 拷贝当前后开始的n行,比如2yy拷贝当前行及其下一行。
p 在当前光标后粘贴

区块拷贝

  1. 将光标移动到要复制的文本开始的地方,按 v进入可视模式。
  2. 将光标移动到要复制的文本的结束的地方,按y复制。此时vim会自动将光标定位到选中文本的开始的地方,并退出可视模式。
  3. 我移动光标到文本结束的地方,按 p粘贴。

退出命令

:wq 保存并退出
:q! 强制退出并忽略所有更改
:e! 放弃所有修改,并打开原来文件
:w保存修改

显示行号

1
2
3
set number

set nu

输入:n,代表跳转到第n行,如:100,就跳转到第100行。

撤销操作

1
u

vim与vi的区别

vim是vi的延申 vim编辑源码会高亮 vim的命令对vi是完全兼容的

vi编辑器是Linux系统下的标准(文本)编辑器(windows中的notepad),vim可以看作是vi的升级版。vi用于文本编辑,vim更适用于coding

安装Centos后,默认是安装了vi编辑器的,但没有安装vim,用以下命令安装

1
yum -y install yum*

vim常用命令总结

1
vim [filename] # 打开文件,若文件不存在则自动新建
  • 移动光标:h,j,k,l(上,下,左,右)
  • ctrl+b:向后一页,ctrl+f:向前一页
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
yy   # 拷贝当前行
p # 粘贴
3yy # 拷贝当前行向下的3行
dd # 删除
3dd # 删除当前行向下的5行
/hello + 回车 # 查找关键词hello 输入n可跳转到下一个关键字
G # 跳转到末行
gg # 跳转到首行
u # 撤销
:set nu # 设置行号
:set noun # 取消行号
:5 # 光标到第5行
:q # 离开vi
:q! # 退出不保存
:wq # 保存后退出
:w # 保存编辑的内容
:w! # 强制写入该文件