视频内容
1.输入输出控制方式
直接程序控制

中断驱动方式

直接存储器存储方式

总结

总的来说就是
程序查询方式会一直占用CPU,一直让CPU检测当前输入输出设备的状态从而控制输入输出操作,会一直占用CPU从而浪费CPU的时间,只能实现串行操作
而中断驱动方式则是在输入输出操作完成之后,设备会发送一个中断指令给CPU,而CPU就可以与设备进行并行操作,并行操作
最后就是DMA方式,能替代CPU去完成数据传输,大大减少了中断次数,能够让CPU有更多资源和时间去执行其他任务,并行操作
2.操作系统概述
基本概念

就是管理计算机中的软硬件资源
包括进程管理,存储管理,文件管理,设备管理,作业管理等功能
进程管理1

进程是程序在数据集合上运行的过程,
是系统进行【资源分配】的基本单位,
由程序块、PCB、数据块三部分组成。
线程是【调度】的基本单位,依附于进程存在。
进程间相互独立,进程内可多线程并发。
同一进程内的线程共享进程资源(如内存、文件),
但每个线程有自己私有的数据(如栈、寄存器),线程间私有数据不共享。

图中是基本的三态模型,分别为等待,就绪和运行
需要记住就是
运行状态是有CPU和有资源
就绪:只缺CPU 等待
等待:缺其他资源,CPU都不给

接下来是五态模型
其中运行,活跃就绪,活跃阻塞分别对应我们上面三态模型中的运行,就绪和等待
然后这里的挂起动作就类似于暂停
静止就绪由活跃就绪和运行的挂起动作触发,同时也可以由静止阻塞获取其他资源触发
而静止阻塞则由活跃阻塞挂起触发
俩者皆可通过恢复或激活再次回到对应的活跃状态

前驱图的话,其实没太多说的
就是引入了出度入度的概念,比如图中A有一个箭头指向D那就是出度为1,D被三个箭头插了那就是入度为3
左边 = 串行执行(A→B→C→D→E 一个接一个)
右边 = 并发执行(ABC 同时跑,效率更高)
同时,此时的D事件需要ABC全部完成才能触发
就这么多了

互斥:间接制约
进程间竞争同一资源,同一时间只能有一个进程使用
例:独木桥,同时只能过一个人
同步:直接制约
进程间存在依赖关系,一个进程必须等另一个进程
完成某个操作后才能继续执行
例:张三步行、李四骑车,李四到了也要等张三
再补充一个概念吧
– 并发(单核CPU)= 进程们交替执行,宏观上看起来同时,微观上其实在轮流抢CPU
– 并行(多核CPU)= 进程们真正同时跑在不同的核上
那么也就有了
P操作 → 上锁(我在用,别人等着)
V操作 → 解锁(我用完了,下一个来)

OK接下来是PV操作
这里面的临界资源就是共享的资源,但以互斥的方式进行共享
临界区就是进程代码中访问临界资源的代码
信号量就是像我们上面说的P操作与V操作,也就是上锁和解锁
P操作就是让S自减1,也就是我拿了这个资源,然后判断S此时是不是小于0,如果是那就阻塞并进入阻塞队列,如果不是那就继续进程,可以记成”please给我个资源吧“里面的P
V操作就是让S自加1,也就是我释放了这个资源,然后判断此时S是不是小于等于0,如果是那就让阻塞队列里的进程拿到资源然后进行他的进程,如果不是那就继续我们自己的进程

例如这题,在没有PV俩个信号操作的情况下,现实逻辑会变成即便市场没有东西了但消费者还是会取产品,逻辑出现错误
引入信号量后,实际逻辑流程大概是
生产者进程:
生产一个产品,然后P操作S1-1变为0,送产品到缓冲区,V操作S2+1
然后循环一遍,然后这时候我们再执行P操作后S1变为-1,进入阻塞
消费者进程:
好,那么接下来就是消费者进程,执行P操作使S2-1,丛缓冲区拿走产品,执行V操作使S1+1,消费产品,这时候我们再次走到这个进程的P操作发现欸也阻塞了,且这时候我们的S1是=0的
那么再走一遍生产者流程以此往复

接下来是这个
其实这里的S1-5和各个P都没有特定的绑定关系,所以这里我们只需要判断每个P的出度和入度就可以了
比如这里P1俩个出度就是俩个V
P2俩个入度一个出度就是2P 1V了
类比下来就差不多是这样
进程管理2


OK接下来是死锁
死锁的触发条件就是第二张图中显示的
需要资源互斥和进程互斥的情况下,几个进程互相争抢资源
那么一旦出现像图一那种我们仨都需要五个资源,但你都给我卡在四资源
那么就会触发保持和等待
而大伙又不会互相剥夺资源
那么就会发生那种A等待B完成然后拿资源,B也在等待C,C也在等待A的尴尬局面
那么像这种情况下,也就是所有进程所需资源相同的情况下,不会触发死锁所需最小资源的公式是
n*(m-1)+1
其中n是进程数量,m是大伙都需要的资源数量,-1是所有人刚好阻塞的前提,+1是刚好有一个进程能运行的必要条件
那么由此引申,如果我们大伙都需要的是不同的呢比如3,4,5
那么公式就变为
$$sum_{i=1}^{N} n_i – N + 1$$
其中N为进程总数
那么为了防止死锁触发我们就需要俩个算法,一个是有序资源分配法,另外一个是银行家算法

那么接下来就依靠例题来展示银行家算法
首先我们看到题目里写了又R1,R2,R3三个互斥的资源分别可用资源数为10,5,3
而有P1,P2,P3,P4,P5五个进程
根据图中信息我们将可用资源-已分配资源:
R1=10-1-2-3-1-1=2
R2=5-1-1-1-1-1=0
R3=3-1-1=1
最后得目前可用资源为2,0,1
好那么接下来我们在横向获取目前每个进程所需的资源数
P1为(5-1, 3-1, 1-1)->(4,2,0)
P2为(3-2, 2-1, 0-0)->(1,1,0)
P3为(6-3, 1-1, 1-0)->(3,0,1)
P4为(3-1, 3-1, 2-1)->(2,2,1)
P5为(2-1, 1-1, 1-0)->(1,0,1)
那么按照银行家算法,我们需要丛最小可兼容的进程开始给他们借贷
首先是P5,把目前可用资源给P5以启动进程,进程结束后释放资源
得目前可用资源为R1+R2+R3+P5=(3,1,1)
好接下来我们按照顺序依次寻找兼容的,找到P2
给他资源开启进程,然后释放资源,根据上面得公式我们得到现在可用资源变为
(5,2,1)
在继续检索我们找到P4
同理获得现在可用资源为(6,3,2)
以此往复
完整安全序列
| 步骤 | 进程 | 需求 | 当前可用 | 释放后可用 |
|---|---|---|---|---|
| 1 | P5 | (1,0,1) | (2,0,1) ✓ | (3,1,1) |
| 2 | P2 | (1,1,0) | (3,1,1) ✓ | (5,2,1) |
| 3 | P4 | (2,2,1) | (5,2,1) ✓ | (6,3,2) |
| 4 | P1 | (4,2,0) | (6,3,2) ✓ | (7,4,3) |
| 5 | P3 | (3,0,1) | (7,4,3) ✓ | 完成! |
安全序列为 P5→P2→P4→P1→P3
银行家算法核心步骤总结
① 计算当前可用资源 = 总资源 – 所有已分配
② 计算每个进程还需要 = 最大需求 – 已分配
③ 找需求 ≤ 可用资源的进程 → 执行并释放
④ 重复③直到所有进程完成 → 安全状态 ✓
存储管理

啊接下来就是存储管理
那我们先讲这个分区存储管理吧
比如我们内存有100K的容量
那么在单一连续分配的情况下,我们任务只能一个一个地调用,而不能同时执行俩个任务,比如我有一个50K和一个80K的任务,那么只能同时执行一个
为了解决这个问题我们就有了固定分区,我就可以把内存划分为80K和20K俩个分区从而能够同时解决小于等于80K和小于等于20K的任务,但这又出现了一个问题就是,我只能在这俩个分区执行俩个任务(即便分区多了但可同时执行的任务也是固定的,即分区数量)
那么我们就可以靠可变分区动态地调整我们的任务区,比如我有俩个20K的任务进入了内存,好那么这时候这俩任务就算被动态地划分了俩个任务区,剩下80K还可以根据后续的任务动态划分任务区,使得我们的空间利用率被极大地提升了,而且每当任务结束,资源被释放后,空白的区域会自动进行整合,整合成一个空白区(非连续不合并)
OK啊是不是这些看着都很美好,但是如果你遇到了一个200K的任务是吧,怎么办呢,分区存储管理的模式下每个任务都得整个塞进去而你这200K塞不进去
那么这时候我们就需要分页存储管理了

yep,这就是页式存储
一般每页的大小都由计算机决定,不由我们决定,和分段存储管理不一样我们一会讲
那一页大概都是4K差不多,对也就是我们下面那个页内地址,我们要看他是0-11总共12位
那么就是2^12 byte,也就是4K的大小
然后就是这里的页表,我们一般有俩种地址,一种是逻辑地址一种是物理地址,将逻辑地址转换为物理地址进行寻址就是通过我们的页表进行页号块号转换进行操作的
你看,我们逻辑地址有页号和页内地址
那么物理地址也同样有块号和块内地址
那么我们的页号就通过表内的映射进行转换
比如我有一个逻辑地址是2C38H,其中2对应页号,C38H对应页内地址,转换过程中页号对照页表映射进行转换,地址项不变,那么我们找到页号在页表中的映射,也就是6
那么转换后的物理地址就是6C38H
而且,我们页式管理内存利用率较高,没有外部碎片,因为页的大小固定,但可能有内部碎片,因为最后一页可能填不满,浪费空间
而且还有一种抖动现象,就是我内存不足时,刚换出去的页面又被马上需要,系统不断切页换入换出导致CPU大部分时间都在切页面而非执行任务,效率极低

那有一个这样的例题咱就来回顾一下刚刚的分区存储管理里的可变分区
这里看到如果我们P5执行完释放内存,那么6区就变为空闲区的,可以与5,7俩区连续,从而合并成一个空闲区

OK那接下来就是段式存储了
左侧我们看到的作业空间就是类似程序中主函数和子函数所占用的空间,那么根据这些段的大小我们可以对应地在内存中分配内存空间,而且这些段的大小是由程序员决定的,这与页式存储不同
类似的段号和段内地址也与我们上面页式存储地结构相同
同样的我们也由相应的寻址方法也就是
逻辑地址 = 段号 + 段内地址
↓
查段表找到该段的基址
↓
物理地址 = 基址 + 段内地址
那么我们的函数可以被共享调用,同理我们这边的内存也可以被共享调用
但由于我们段长在内存中的划分,我们碎片利用率浪费较大,也就是外碎片
那么对比而言
| 内部碎片 | 外部碎片 | |
|---|---|---|
| 页式 | 有 | 无 |
| 段式 | 无 | 有 |

那么为了弥补俩者的优缺点,就有了段页式存储
流程大概是
段号 → 查段表 → 找到对应的页表
页号 → 查页表 → 找到物理块号
物理地址 = 块号 + 页内地址
段页式 = 段式的逻辑清晰优点 + 页式的无外部碎片优点 代价是需要查两次表,效率较低
那么也对应有相同的结构
最多有256个段,每个段最大允许有4096个页号,页的大小为4K
总结而言
| 类型 | 碎片类型 | 大小决定者 | 共享 | 效率 |
|---|---|---|---|---|
| 页式 | 内部碎片 | 系统决定 | 难 | 高 |
| 段式 | 外部碎片 | 程序员决定 | 易 | 中 |
| 段页式 | 内部碎片 | 两者结合 | 易 | 低 |
文件管理

这块的内容其实挺少的
就像上图所说,文件是按名存储
而文件目录就类似一张表,里面的每一行就是一个文件目录项(FCB)
FCB=文件控制块
整个文件目录由多个FCB组成
而FCB包含
– 文件名
– 文件物理地址(存在磁盘哪个位置)
– 文件长度
– 存取控制信息(读/写/执行权限)
– 时间信息(创建时间、修改时间)

那接下来就是树形目录管理
咱经常用电脑都对这玩意不陌生吧
那就简单讲讲吧
每个树状节点可以什么都不存,或者存文件,文件夹
它本身可以是文件夹或者文件
那如果要寻址呢
比如我现在在D1目录,那么我要找我的F1
那么F1的绝对路径就要从我们的根目录开始找也就是
/D1/W1/F1
而相对路径就是从当前目录开始找也就是
W1/F1
而文件的全名的话
比如我们的F1是txt文件,那么他的文件名就是绝对路径+文件类型
也就是/D1/W1/F1.txt了

接下来就是这个位示图了
其中每一行代表一个子,每一个格子代表一个物理块
这里的1,0分别代表被占用和未被占用
然后物理块丛编号0开始计算,字也是
已知某个格子的字号和位号,求它是第几号物理块:
物理块号=字号×字长+位号
以这道题为例,字长 = 16(每行16列)
| 例子 | 计算 | 结果 |
|---|---|---|
| 第0行第5列 | 0 × 16 + 5 | 第5号物理块 |
| 第1行第3列 | 1 × 16 + 3 | 第19号物理块 |
| 第2行第0列 | 2 × 16 + 0 | 第32号物理块 |
反过来也要会:已知物理块号,求字号和位号
- 字号 = 物理块号 ÷ 字长(取商)
- 位号 = 物理块号 ÷ 字长(取余数)

我们拿一道题来做例子吧
首先第一问他问我们16385号物理块在哪个字里面
好首先由于我们的物理块号丛0开始,所以我们需要在这里给16385+1得到他是第16386个物理块
然后在这里用16386÷32(也就是字长,我们刚刚看到的每行有几列的那个)
那么就可以得到512.1….
那么这里得到的商为512,则我们的结论也是第512个字
接下来是第二题,这里说磁盘容量为1000G,换算成M的话就是1024 1000
对应得到我们的物理块总数就是1024 1000/ 4
然后又因为每个字有32位也就是32个物理块,那么可以得到最终算式是
1024 1000 / 4 32=2^3 * 1000=8000
安全性基本概念

OK我们来到了安全性的基本概念,我也不知道这块会考多少分不过还是要认真对待一下
这里的
物理安全就是类似于机房啊,服务器这些实体的玩意的安全
网络安全就是你传输数据过程中你要保证数据链路安全,不能给人家篡改了或者抓包了之类的,还要检测入侵, 防ddos,中间人攻击等
系统安全的话就是操作系统层面的安全这一块,比如账号权限,补丁更新,病毒防护等
那应用安全的话就是类似软件安全这一块,比如登陆权限,登入校验,防SQL注入
管理安全就是就是公司人员的管理,约束,比如什么样的人赋予什么权限之类的
安全性基本层次
物理安全
↓
网络安全
↓
系统安全
↓
应用安全
↓
管理安全

那上面就是计算机安全性原则,视频里面基本都帮我们阐述好了
| 原句 | 对应原则 | 该怎么记 |
|---|---|---|
| 安全措施应具有简洁性 | 简单性原则 | 安全机制越简单,越容易验证、维护,漏洞越少 |
| 保护机制应该公开 | 公开设计原则 | 安全不能依赖“算法保密”,应依赖密钥、权限、策略 |
| 用户和程序应使用尽可能少的特权 | 最小特权原则 | 只给完成任务所必需的权限 |
| 多用户共享资源机制应最小化 | 最小共享机制原则 | 尽量减少用户之间共享同一安全机制或资源,降低相互影响和信息泄露风险,就类似于学生机房里面每个学生有自己的账号那样,降低风险 |

那这个其实就是对安全机制的拓展了
感觉没什么好说的(?
内防内控策略
内防内控策略主要针对内部用户、内部终端和内部网络行为进行安全管理,防止合法用户利用合法身份进行越权访问或违规操作。
主要措施包括:
- 终端访问授权
对内部终端和用户账号进行身份认证与权限控制,防止合法终端访问未授权资源。
例子:
普通员工只能访问自己的业务系统,不能访问财务数据库或管理员后台。
- 终端安全检查与策略管理
对终端设备进行安全检查,确保设备符合安全要求。
例子:
检查电脑是否安装杀毒软件、是否打系统补丁、是否使用弱口令、是否私自安装违规软件。
- 上网行为管理与违规审计
对员工访问网站、下载文件、登录系统、导出数据等行为进行记录和审计。
例子:
员工大量下载客户资料,系统记录其账号、时间、IP、访问内容,方便事后追责。
简单来记的话就是
内防内控策略是对内部终端、内部用户和内部访问行为进行授权、检查、管理和审计,防止内部越权访问和违规操作
网路攻击

OK啊那么来到网络攻击这一章
分类的话就是可以分成被动攻击和主动攻击俩种
被动攻击的话大概可以理解为我就坐在那里不动,你的数据过来我就可以进行攻击,就像图中的截获数据进行窃听,一般都是用wireshark之类的来抓包进行流量分析吧,主要用来泄露信息,破坏保密性,简而言之就是偷看啦,而且不会影响通信过程,比较难被发现,然后被动攻击不会对数据交流造成损失等
那主动攻击我们就很熟悉了哈
篡改就是截断我们的数据包对数据内容进行篡改,比如对传输中的数据进行修改,插入,删除或伪造,使接受方收到错误信息
恶意程序就是类似病毒木马等,木马通常具有伪装性和隐蔽性,主要用于非法控制主机、窃取信息或打开后门
展开来说的话就是
| 类型 | 特点 |
|---|---|
| 病毒 | 依附在其他程序上,能够自我复制和传播 |
| 蠕虫 | 可以通过网络主动传播,不一定依附宿主程序 |
| 木马 | 伪装成正常程序,诱导用户运行,暗中窃取信息或控制系统 |
| 后门 | 绕过正常认证机制,给攻击者留下远程控制入口 |
| 间谍软件 | 偷偷收集用户信息、账号、密码、行为记录 |
| 勒索软件 | 加密用户文件,然后索要赎金 |
拒绝服务就是我们比较熟悉的DOS了,DDOS就是分布式拒绝服务,一般就是用肉鸡对目标站进行大量的请求申请从而压力他的服务器让目标服务器瘫痪,而DRDos是分布式反射拒绝服务攻击,就是攻击者伪造受害者IP狠狠地向第三方发送请求,第三方把响应流量反射给受害者,从而造成攻击流量地放大
重放攻击是攻击者截获一次合法通信数据,然后在之后重新发送该数据,使系统误以为这是合法请求,数据内容可以包括登陆认证报文,会话令牌token,转账请求等
实际情况的话就是在转账中可以遇见,比如向某某人转100块,被重放了你可能就破产了

然后下面这些我更熟悉了呀(我是良民
蜜罐就是让一个看起来脆弱不堪但也看起来真实的系统来诱惑攻击者从而记录攻击行为,分析攻击方式,保护真实的服务器,诱捕攻击者,就是卖个破绽
SQL注入的话,我遇到过的就是在输入表单里面填写SQL语句或者判断语句等,比如用户登陆时输入1 or 1,那么程序逻辑的while就会因为user=1判断为真给放行了
XSS攻击就是把恶意脚本插入网页中,当其他用户访问该网页时,脚本就在用户浏览器里面运行,他和SQL注入的区别就在于,SQL是对后端查询的位置进行攻击,目标是数据库,而XSS是对前端页面植入脚本,目标是用户浏览器和会话信息
暴力破解就是穷举嘛,什么可能的都塞进去,那字典攻击就是把常见的组合植入脚本然后挨个尝试,常见的预防手段就是图形验证码或者冷却时间
组合破解就是在字典攻击的基础上对常见词进行组合,变形和拼接
社会工程学就是狠狠攻击人性弱点,比如你要去大规模攻击某个公司你就贿赂他们保安晚上给公司断电,这就算社工的一种,注重于对人的攻击,最有效且收益最大的手段啊
那漏洞扫描就是脚本小子拿那几个常用工具把远程目标主机的常见漏洞都扫一遍然后找漏洞进行攻击,不过漏洞检测本身也是合法的安全检测手段
计算机病毒与木马

OK,然后我们来谈谈计算机病毒与木马
好像内容也没多少我们尽快概括一下吧
首先是病毒,他会直接,即时地破坏我们计算机,比如会让我们的程序崩溃,或者电脑黑屏等等
它具有传染性、自我复制能力,依附在程序、文件或引导区中,运行后传播并可能破坏系统或数据
那木马就是植入我们的电脑中窃取数据的,静默的,可长期留存的,木马通常伪装成正常程序,诱使用户运行或被攻击者植入系统中,随后隐藏运行,用于窃取信息、远程控制、建立后门或下载其他恶意程序
典型场景是攻击者控制端与受害主机上的木马程序建立通信,从而实现远程控制、信息窃取等操作
信息安全的实现技术01

这一章稍微有点长
首先是对称加密技术
简单描述的话就是A,B俩个端交流的话,我们A端发送信息用这个密钥加密,我们B端解读信息用这个密钥解密读取明文
那这个加密技术有效率高,速度快,适合对于大数据进行加密的特点,但同时也面临密钥分发苦难的问题(因为这样做就等于你要针对每一个客户创建一个密钥并点对点分发,远没有非对称加密的一方有公钥来的简便高效)
然后上面这些加密算法是需要记住的
简单记一记名字就行了不是很需要详细了解内核
然后这里的AES是有点替代DES的感觉,软考经常考
如果有 n 个用户两两安全通信,对称加密理论上需要:
n × (n − 1) / 2 个密钥
因为每两个用户之间都要有一把共享密钥

那对应的我们也有非对称加密
流程一般就是
A 想给 B 发送机密数据
↓
A 使用 B 的公钥加密
↓
密文传给 B
↓
B 使用 B 自己的私钥解密
↓
得到明文
也就是发送方用接受方的公钥加密,接受方用自己的私钥解密这样子
非对称加密:每个用户拥有一对密钥,即公钥和私钥。公钥可以公开,私钥只能由本人保存。用公钥加密的数据只能用对应私钥解密。公钥和私钥成对出现,虽然二者存在数学关系,但从公钥推出私钥在计算上不可行。

接下来是数字信封的内容
这里流程就是
发送方A将报文X加密,获得对称密钥K,经过接收方B的公钥加密后获得密文K,密文K和密文X组合后发送给B,B在获取后通过自己的私钥解密内容获得对称密钥加密后的内容,在通过双方共同持有的密钥解密内容获得明文报文X
流程就是
A 生成一个随机对称密钥 K
↓
A 用 K 加密报文 X,得到报文密文 C
↓
A 用 B 的公钥 PKB 加密 K,得到加密后的密钥 EK
↓
A 把 C 和 EK 一起发送给 B
↓
B 用自己的私钥 SKB 解密 EK,得到 K
↓
B 用 K 解密 C,恢复出报文 X
攻击者即使截获了报文密文 C 和加密后的密钥 EK,也无法得到明文,因为攻击者无法用 B 的私钥解开 EK,也就无法获得对称密钥 K
总而言之就是对称+非对称组成的二重保护机制

那接下来就是数字签名
这算是一种防抵赖机制吧
基本流程就是A用自己的私钥加密明文得到密文(即签名),B收到密文后用A的公钥解密得到明文(即核实签名)
为什么说防抵赖呢,因为我B在收到信息后,如果能用你A的公钥解密内容,就说明这玩意是你A发的,独一无二的
那么B也不能伪造信息内容
但数字签名这项技术安全性过低,因为黑客可以直接截获数据然后用A的公钥直接截获明文

那么也就有了我们的具有保密性的数字签名
在普通数字签名的基础上,又使用了接收方 B 的公钥和私钥来进行加密与解密
流程大概就是
A 用自己的私钥 SKA 对报文 X 进行签名
↓
得到签名后的数据 DSKA(X)
↓
A 用 B 的公钥 PKB 对签名后的数据加密
↓
得到密文 EPKB(DSKA(X))
↓
发送给 B
↓
B 用自己的私钥 SKB 解密
↓
得到 DSKA(X)
↓
B 用 A 的公钥 PKA 验证签名
↓
恢复并确认报文 X
这可以保证我们B在接收密文时可以用自己的私钥解密第一层保护数据,从而防止被黑客截获直接解密密文

OK然后接下来时消息摘要,这其实是一种检测我们报文是否被篡改的技术
流程就是报文通过摘要算法得到报文摘要,然后再通过发送方的私钥加密得到识别码,再将识别码和报文内容发送给B
B通过A的公钥解密识别码内容,再通过与A相同的摘要算法对获得的明文内容进行处理,最后将我们解密识别码得到的结果和我本地处理得到的报文摘要进行对比
如果相同就说明没被篡改,反之则被篡改过了
当然,单独的消息摘要只能检测完整性,不能证明是谁发的
常见摘要算法有
| 算法 | 摘要长度 |
|---|---|
| MD5 | 128 位 |
| SHA-1 | 160 位 |
| SHA-256 | 256 位 |
这边说一下这个报文摘要运算
他就类似一个函数,哈希函数,由多个变量组成,比如f(x)=x+1/2*x^2 这种,比如我输入一个2进去,那么你只能得到3,但我如果只抛给你一个3你根本不知道x是多少,所以报文摘要后的内容是没办法反推明文的


接下来是这个数字证书
数字证书由 CA 认证机构签发。CA 会把用户身份信息、公钥、有效期、发行者等信息写入证书,并使用 CA 的私钥对证书进行数字签名。其他用户可以使用 CA 的公钥验证该证书是否可信
那么应用过程一般就是
我消息的接收者B注册公钥私钥,然后把我们的私公钥拿去给CA机构申请证书,CA机构先审核,审核通过了就用他们自己的私钥生成数字证书,那A就可以用CA机构的公钥去验证这个数字证书,验证通过后,A 就可以信任证书中的 B 公钥,并使用 公钥 加密消息或加密对称密钥,再发送给 B
可视化流程的话就是
1. B 生成自己的密钥对:PKB 和 SKB
-
B 把自己的身份信息和公钥 PKB 提交给 CA
-
CA 审核 B 的身份
-
审核通过后,CA 生成 B 的数字证书
证书中包含 B 的身份信息、B 的公钥 PKB、有效期、CA 信息等 -
CA 用自己的私钥 SKCA 对证书进行签名
-
A 获取 B 的数字证书
-
A 用 CA 的公钥 PKCA 验证证书签名
-
验证通过后,A 确信证书里的公钥 PKB 确实属于 B
-
A 使用 B 的公钥 PKB 加密消息或加密会话密钥,然后发送给 B
-
B 使用自己的私钥 SKB 解密
那这一章第一部分就这样啦
信息安全的实现技术02


那这就是我们网络最基本的几层哈,其实我们在学计网的时候应该是五层他这里细化成七层了,当然这不重要
1.
额先讲讲这个物理层吧,那其实这个物理层就是在物理层面上进行隔离,比如对信号进行干扰或屏蔽啥的,类似于那种军队里面的网络,不允许将wifi传播到外界去,内部自己使用的,甚至于说可以屏蔽苹果手机的信号(亲身体验过)
那这个隔离啊,就是内部涉密网络不连接互联网,重要服务器放在独立的机房,内网外网不能互通
那屏蔽呢就是防止信号泄露或者外部的干扰
2.
那接下来就是这个数据链路层啊
它主要保护的就是我们相邻节点间的数据传输
像上面的技术就有链路加密这种对通信链路上传输的数据进行加密
还有PPTP这种用于点对点隧道协议和L2TP这种第二层隧道协议,俩者都常用于VPN(虚拟网络通道)
3.
然后是这个网络层方面
防火墙控制不同网络之间的数据访问,即允许哪些IP访问,允许哪些端口通信,阻止可疑的流量进入内部网络
而这个IPSec是在IP层提供加密和认证,对IP数据包进行加密,认证和完整性校验
4.
传输层的话就是我们比较熟悉的TLS,SSL和SET
TLS的话就是传输层的安全协议,SSL为它的前身
我们平常看到的HTTPS里面的S即Security,同时这个协议的含义也是在原有的HTTP协议上加上了TLS/SSL,即HTTP+TLS/SSL=HTTPS
用于安全传输
那么SET的话他就是用于电子支付的,即安全电子交易协议
5.
那最后就是会话层,表示层和应用层了
PGP 常用于电子邮件安全。
S/MIME 也是电子邮件安全协议。
SSH 是安全远程登录协议,欸对就是我们经常远程连接服务器的时候用的那个协议,反正对我来说是挺熟悉的,嗯就是以前玩树莓派那会
那HTTPS刚才讲过了

那这边这个是在讲防火墙的啊
我们先从最上面往下看吧,首先是这个屏蔽路由器,他会对按规则我们的IP包进行过滤,屏蔽,他决定了我们哪些IP包可以通过,这是网络级的防火墙
那应用级的,也就是可以针对应用层进行过滤
首先是这个双穴主机,接了俩个网卡,一个面向外网一个面向内网,通过主机上的代理服务或应用层控制实现访问控制
那屏蔽主机就是将屏蔽路由器和双穴主机进行结合,先由屏蔽路由器进行过滤再由双穴主机进行过滤,双重保障嘛
那最后就是这个屏蔽子网,他有个概念就是非军事区,这个非军事区里面可以放一些我们可以向外网访问的资源,比如我们的web服务器,那这里的俩个屏蔽路由器就分别对IP包进行不同条件上的过滤,由浅至深安全性逐渐增强
典型的结构就是
Internet
↓
外部屏蔽路由器 / 外部防火墙
↓
DMZ 区域
↓
内部屏蔽路由器 / 内部防火墙
↓
内部网络
安全性是最高的
关系数据库
说了这么久终于到数据库相关的内容了,真的是废话一大堆,受不了了

解释一下就基本概念,这里的
这里面这个表就是一个关系
那么属性就类似这个部门号,名称这些列
域就是属性的取值范围,比如我的昵称长度不能超过50个字
元组就是我这一行行的数据,比如 {101,开发部,189XXXX,张三} 这样算一个元组
分量是某个元组在某个属性上的取值,比如我部门号里面的101就算一个分量
目就是我一个元组里面由几个属性,比如上面我针对元组举的那个例子,里面有四个属性就是有四目
标准化而言的话就是
| 概念 | 通俗理解 | 例子 |
|---|---|---|
| 关系 | 一张二维表 | 员工表、部门表 |
| 属性 | 表中的列 | 员工号、姓名、部门号 |
| 域 | 属性的取值范围 | 性别只能取男/女,电话号码长度有限 |
| 元组 | 表中的一行数据 | 一条员工记录 |
| 分量 | 元组中的某一个属性值 | 某员工的姓名、某部门的电话 |
| 目/度 | 属性个数 | 部门表有 4 个属性,所以是 4 目关系 |
关系模式的话
一般是这样组成的
R(U,D,dom,.F)
R就是对应表的名称比如我们的工作表这样
U就是属性名的集合,比如{部门,名称,电话,负责人}
dom就是定义具体哪一列对应哪个取值范围,严格来说就是属性到域的映射关系啦,比如规定电话号码不能超过11位这样
F的话就是核心的逻辑约束,比如我通过这个部门号能确定部门名称这样,这种逻辑关系就是F
然后是候选码,就是可以标识我们某一个属性或者属性组的最小集合,可以确定这一条元组,比如我们看看下面这个员工,员工的候选码就是{员工号,身份证号}
那主键就是唯一标识该元组的属性,比如员工这边就是员工号了(其实就是从候选码里面选一个出来)
外键就是一个关系中的属性引用另一个关系的主码或候选码,用来建立两个表之间的联系。
主属性:包含在任意一个候选码中的属性。
非主属性:不包含在任何候选码中的属性。
全码:关系模式的所有属性共同组成候选码。

这里的实体完整性就是比如我们需要对主键定义一个not null这样的,也就是基本关系的主属性不能取空值
那用户自定义完整性就是类似于再性别这边定义一个M/F,只能约束有俩个性别这样的,也就是根据业务具体定义的约束条件
那参照完整性就是外键的完整性了
若属性 F 是关系 R 的外码,它引用关系 S 的主码,则 R 中 F 的取值必须为空值,或者等于 S 中某个元组的主码值。
关系代数运算

啊。。。。关系代数运算,这是最长的一章,但还好我以前在上数据库系统概论的时候学过一点,我们可以快速过一过(因为原视频右接近1h15min的时长但大部分都是废话)


并和差都一目了然
并就是俩表相加,也就是图中R表和S表拥有的集合
差就是减表将被减表的内容在自己的表中除去,就像图中,R表将自己与S表重合的部分剔除,只留下a开头和c开头的俩个元组

这里交就是把同时属于俩表的元素都抽出来
比如这里的R和S就是把俩表共有的元素抽出来组成新表

OK这里笛卡尔积看着很复杂是吧,没事我们直接看演示图技能懂了, 但这里还是要把公式记一下子

你看,这里就是把每个表的每个元素和相乘的其他表的元素组成排列组合
比如我们的D1里面的0,就需要和D2的a,b,D3的c,d排列组合形成
{0,a,c},{0,a,d},{0,b,c},{0,b,d}这样做组合运算

这里这张图可以更直观地感受,直白来讲就是我的每一行都要和你的每一行做组合
对就这么简单

然后是投影
就是单纯从表中选取属性,这里的数据库语句也可以直观看到
select A,C from R
好类比于我们的
select grade,name from Student_page
这样

那选择的话咱也很熟悉,就是根据条件从表中选择我们需要的元组
这里的数据库语句是select*from R where A>B

这里的除的话就比较复杂了,我们直接结合详细用例看看吧



这里先找我们R表和S表属性相交的部分,找出它在R关系里面的投影,作为象集A,将R的其他几个列作为一个象集B,那么如果这个象集B的某一元组在原表中任意元组有完整的象集A,那么这个元组就是结果之一
比如我们上图,我先找到S和R表重合的属性是C,D
那么我们直接在R表里面找到C,D
然后这里可以看到A,B俩列里面只有a,b和c,k这个组合完全包含C,D在S表里面的
拥有{c,d},{e,f}俩个元组的条件
那么结果就是R/S={a,b}和{c,k}


然后这里是连接

首先要做笛卡尔积运算
然后再根据条件做关系运算
比如

这里的条件是R.A<S.B
那么我们就从做完笛卡尔积的表中选择对应元组组成查询表就行了
啊不是图中红色框框的哈,是剔除他们的组成新表


就是要求进行比较分量必须是相同的属性组,并且结果集中将重复属性列去掉

然后就是外连接了
数据库语句里面好像是
左外left join
右外right join
全外连就是full join

比如这里的左连接,依旧是找投影那套,找出我们R和S里面相同的属性列,然后比如这里R的第一行和S的第一行都有b,c,那么就可以组成连接,那么这里的左外连接其实就是以R表为主体,你看,这里的b,a,d和df,g在S表中的B,C俩个属性都没有重复,那么相应的D属性就是null

右外连则与左外连相反,可以类比一下就得到结果哈
啊太好了速速写完了(毕竟都是以前上课上到过的内容速速过一下差不多
那就先这样了吧都凌晨俩点了,也算是狠狠复习了一波以前的知识了
查询优化
啊太好了久违的五分钟简短教学视频
我们就速战速决吧

OK这里我们查询的基本概念有这些
查询处理,查询代价和查询的优化
查询处理就是从数据库里面把数据扒拉出来,不管是磁盘数据库(mysql那一类)还是内存数据库(也就是redis那一类)
那查询代价就是I/O(也就是数据的input和output时间),主要指数据从磁盘读取数据页到内存的时间,这种从传统数据库读取数据所需的时间比我们从内存数据库里读取数据的时间要慢很多
已经CPU时间,我们CPU执行查询操作所需的时间,比如需要判断where或者需要进行排序的order by等
内存代价,也就是我们执行查询时额外需要的内存资源

然后这里是优化的准则,考试中有可能会考到原题所以需要记一记哈
总的来说就是
选取运算要提前执行
合并乘积(也就是计算笛卡尔积那种)和选择运算(类似选投影之类的吧)为连接运算
然后就是投影运算和其后的其他运算同时进行,避免重复扫描
和二目运算也一样
执行连接前要对关系做适当的预处理,就能快速找出要链接的元组
最后就是要存储公共子表达式
关系数据库理论基础知识

那函数依赖对吧
我们就言简意赅的速速解释,不浪费时间
就是存在关系X和Y,如果X能推出Y那么就说明X决定Y,或者说Y依赖于X
比如学生学号和学生姓名就是
学号ID->姓名
很简单对不对?
然后就是这里面的X属于决定因子
若X->Y且Y->X,则X<–>Y,唉也就是互相依赖嘛
然后就是如果Y函数不依赖于X那么就是X–>Y了呗

OK接下来这个
平凡依赖就是存在X->Y,且Y属于X,那么X->Y就是平凡依赖
就比如我存在西瓜1-100号,那么西瓜2-5号就属于这个1-100号的关系中
那么我们就可以由我们由西瓜1-100号推导出西瓜2-5号这个关系,也就是平凡依赖
然后非平凡依赖就是跟上面反着来的,也就是Y不属于X且Y依赖于X

完全函数依赖的话就是,我这个关系要完全依赖你那个关系的整个集合才能推导出来
任何一个子集都不行
很直观的就是我们上面整个(Sno,Cno)->Grade,学号+班级号推导出成绩,整个集合才能推导出我们的关系
那部分函数依赖的话就相对而言没那么苛刻了,只需要决定因子里面的子集便可以被推导出

然后是这个传递依赖函数,这里很直观啊
学号推出学生所在的系,学生所在的系推出系负责人
那么就可以传递依赖推导出学生学号推导出系负责人名字

然后是这个多值函数依赖啊
这个跟我们后面的4NF有关系
这上面都车轱辘话我们直接skip
比如我们存在这么一个关系集合
| 老师 (A) | 课程 (B) | 爱好 (C) |
|---|---|---|
| 张老师 | 数据库 | 篮球 |
| 张老师 | 操作系统 | 篮球 |
| 张老师 | 数据库 | 游泳 |
| 张老师 | 操作系统 | 游泳 |
其中我们可以通过张老师推导出(数据库,操作系统),即老师,课程表,这个依赖关系和爱好无关
还有一个是老师,爱好表,也就是(篮球,游泳),同样这个依赖关系和课程无关
这同时也体现了我们多值依赖的对称性
即关系R(A,B,C)中
若A–>B,则必有A–>C,且C为R-A-B
哦对了我们这里多值依赖的符号就是A–>B这样的
(当然也有平凡和非平凡之分)
以及我们多值传递还存在一个传递性
当我们存在A–>B,B–>C
那么就有A–>CB(C剔除B的部分)
这里CB的意思就是C中没有B的部分
OK啦讲完这一Part了,接下来还有仨视频明天可能能看完然后做完笔记,然后就进入刷题阶段,我感觉这个课实在是太啰嗦了害
Armstrong公里系统
啊。。。倒数第三章了我们速速过一下,其实每个视频都有90%的内容充满水分

首先就是这个几个基本定律
就设定一个关系模式R(U,F)
U是R属性的全集,F是关系模式R的依赖集
那么根据公理有
自反律:如果Y∈X∈U,则X->Y为F所函数蕴含
增广律:如果X->Y为F所函数蕴含,且Z∈U,则XZ->YZ为F所函数蕴含
传递率:若X->Y和Y->Z为F所函数蕴含,则X->Z为F所函数蕴含
啊是不是很眼熟,基本就和以前学高中数学那几个定理有些类似之处
那接下来就是根据上面几个公理拓展出来的
合并规则就是若X->Y且X->Z,则X->YZ为F所蕴含
伪传递律,若X->Y,且WY->Z,则XW->Z为F所蕴含,拆开来看的话就是X->Y这个关系两边同乘一个W,就有XW->WY,又因为WY->Z,那么就有XW->Z
最后一个是分解规则,若X->Y,且Z∈Y,则X->Z为F所函数蕴含,那这就直接是上面的传递律的拓展了

接下来是闭包,函数闭包就是我这个关系模式种所有的函数依赖关系的全集
那属性闭包就是我能够根据属性集内推导出来的字段构成的集合
丫的我发现这些视频真的是废话一大堆

简单来说就是类似X->Y这张,Y部分不能有多余的属性,仅能有一个属性
然后不能有传递依赖
左侧也不能有多余属性,也就是不能存在部分函数依赖


直接参考图中的关系就可以了
就是我从一个入度为0的属性出发可以遍历全图,那么他就是唯一候选码
否则就是和其他一起能够遍历全图的构成候选码集
规范化
这个就更不需要看视频了,丫的整个视频半个多小时才讲到4NF纯粹是浪费时间啊我看
首先是1NF
要求是 每个字段都是原子值,不可再分
什么意思呢?
就比如违反1NF的像
| 学号 | 姓名 | 电话 |
|---|---|---|
| 001 | 张三 | 139XXX, 189XXX |
| 这种一个存有数组的就违反 | ||
| 这里只能拆成 |
| 学号 | 姓名 | 电话 |
|---|---|---|
| 001 | 张三 | 139XXX |
| 001 | 张三 | 189XXX |
| 这样才符合1NF |
接下来是2NF
要求是 在满足1NF的前提下,非主属性必须完全依赖于候选键,且不能只依赖于候选键的一部分
举个例子,违反2NF的情况就是
| 学号 | 课程 | 姓名 | 成绩 |
|---|---|---|---|
| 001 | C01 | 张三 | 90 |
| 这种就违反了2NF,因为我们这里的主键是(学号,课程号),但姓名只依赖于学号,存在部份依赖,所以违反了2NF |
需要拆分成
| 学号 | 姓名 |
|---|---|
| 001 | 张三 |
| 即姓名仅依赖学号 | |
| 以及 |
| 学号 | 课程号 | 成绩 |
|---|---|---|
| 001 | C01 | 90 |
| 即成绩依赖学号和课程号 |
总的来说2NF就是消除部分依赖,避免数据冗余和更新异常
接下来是3NF
要求是 满足2NF的前提下,非主属性之间不能存在传递依赖
即不能出现: 主键->A->B这种情况
经典的违反3NF的就是
| 学号 | 系名 | 系主任 |
|---|---|---|
| 001 | 计算机系 | 李教授 |
| 那么这里就是学号为主键 | ||
| 可以有学号->系名->系主任 | ||
| 存在非主属性的传递依赖,则不满足3NF | ||
| 方法很简单,把表拆成(学号,系名)和(系名,系主任) | ||
| 就可以了 |
然后是特殊的BCNF,即3NF的加强版
要求 对于每个函数依赖X->Y,X必须是候选键
3NF只保护非主属性,但BCNF连主属性都保护
一般满足3NF但违反BCNF的例子有
| 学生 | 老师 | 课程 |
|---|---|---|
| 张三 | 王老师 | 数学 |
| 候选键有(学生,老师)和(学生,课程) | ||
| 但存在老师->课程,老师不是候选键,违反了BCNF | ||
| 这里只需要拆分成(学生,老师)和(老师,课程)这俩个表即可 |
最后是4NF
要求 满足BCNF的前提下,不能存在非平凡的多值依赖
那我们之前也讲过了非平凡的多值依赖是什么了
经典的违反多值依赖的案例长这样
| 员工 | 技能 | 爱好 |
|---|---|---|
| 张三 | Java | 足球 |
| 张三 | Java | 篮球 |
| 张三 | Python | 足球 |
| 张三 | Python | 篮球 |
| 这种技能与爱好冗余却强行放在一张表中,产生笛卡尔积式冗余 |
解决方法就是把表拆成
(员工,技能)和(员工,爱好)
就可以了
模式分解
太好了这是最后一个视频了

首先是模式分解的定义啊
我们在拆分表的时候不能随便拆分
既要保持无损连接还要保持函数依赖

举个例子
像上面这种关系模式一般可以拆成那下面的四种组合(有点类似排列组合的感觉吧)

然后就是无损连接的定义
其实只要把这个公式记一下就OK了
也就是我们要求表在分解后可以通过自然连接来还原我们原本的表的

比如说在这个案例里面
我们把原本带有(sno,sdept,mname)这三个属性的表拆分成
(sno,nname)和(sdept和mname)这俩个表
这时候再将俩个表自然连接,就会莫名其妙多出俩个在原表中不存在的数据
这里可以通过上面的公式计算出来
比如我们的R12∩R11=Mname,R12-R11=Sdept
那么这里我们的Mname就是系主任名嘛
Sdept就是系名,这里我们的是可以通过系主任名推出系名的
那为什么这里还是非无损连接呢??
因为这里有重名的“张三”和“李四”,所以导致还原的时候出现了错误的数据
直截了当来说,我们这里的公共属性必须是候选码(即属性必须唯一)

然后就是这里的函数依赖
就是要表分解后,原表有的函数依赖在分解后的表中也能体现
所以这里的分解方案只能是(Sno,Sdept)和(Sdept,Mname)
全篇感想
最大的感想就是网上这些机构的教学视频少看,不仅不全而且废话居多!
简直是在浪费时间!!!!
有能力的同学最好自己去读文档学习,而不是被网课拖延,浪费了宝贵的时间!


