MrZWH / computer-ABC

计算机组成原理+操作系统+计算机网络

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

编程必备基础

  • 操作系统
    • 操作系统的演进
      • 无操作系统:人工操作、用户独占、CPU等待人工操作,资源利用率很低
      • 批处理系统:无需等待人工操作,批量输入任务、资源利用率提升、多道程序设计
      • 分时系统:人-机交互、多用户共享、及时调试程序
    • 多道程序设计:早期批处理系统只能一次处理一个任务,多道程序设计使得批处理系统可以一次处理多个任务,多道程序设计是指在计算机内存中同时存放多个程序,多道程序在计算机的管理程序之下相互穿插运行,对多道程序的管理是操作系统的重要功能。
    • What&Why
      • 操作系统是管理计算机硬件和软件资源的计算机程序,管理硬件、提供用户交互的软件系统
      • 管理配置内存、决定资源供需顺序、控制输入输出设备等
      • 操作系统提供让用户和系统交互的操作界面
      • 操作系统的种类是多种多样的,不局限于计算机
      • 从手机到超级计算机,操作系统可简单也可复杂
      • 在不同的设备上,操作系统可向用户呈现多种操作手段
      • 我们不可能直接操作计算机硬件
      • 设备种类繁多复杂,需要统一界面
      • 操作系统的简易性使得更多人能够使用计算机
    • 操作系统的基本功能
      • 一、操作系统统一管理着计算机资源,如处理器资源、存储器资源、IO设备资源、文件资源
      • 二、操作系统实现了对计算机资源的抽象,用户无需面向硬件接口编程;IO设备管理软件,提供读写接口;文件管理软件,提供操作文件接口;
      • 三、操作系统提供了用户与计算机之间的接口,图像窗口形式、命令形式、系统调用形式
      • 操作系统概览
    • 操作系统相关概念
      • 并发性(后面三种特性的前提)
        • 并行 vs 并发
        • 并行是指两个或多个事件可以在同一个时刻发生
        • 并发是指两个或多个事件可以在同一个时间间隔发生
        • 并发和并行
        • 多道程序设计是并行并发的基础,对于单处理器来说程序是并发执行的
        • 并行和并发2
      • 共享性
        • 共享性表现为操作系统中的资源可供多个并发的程序共同使用
        • 这种共同使用的模式称之为资源共享
        • 共享性
        • 互斥共享:当资源被程序A占用时,其他想使用的话只能等待,只有进程A使用完以后,其他进程才可以使用该资源,如打印机。
        • 同时访问形式:某种资源的在一段时间内并发地被多个程序访问,这种同时是宏观的,从宏观去看,该资源可以被同时访问。
      • 虚拟性
        • 表现为把一个物理实体转变为若干个逻辑实体,物理实体是真实存在的,逻辑实体是虚拟的
        • 虚拟技术主要有时分复用技术空分复用技术
        • 时分复用技术:资源在时间上进行复用,不同程序并发使用;多道程序分时的使用计算机的硬件资源;
          • 虚拟处理器技术:借助多道程序设计技术,为每个程序建立进程,多个程序分时复用处理器来执行相关逻辑
          • 虚拟设备技术:物理设备虚拟为多个逻辑设备,每个程序占用一个逻辑设备,多个程序通过逻辑设备并发访问
        • 空分复用技术:用来实现虚拟磁盘、虚拟内存等,提高资源的利用率,提升编程效率
          • 虚拟磁盘技术:物理磁盘虚拟为逻辑磁盘,C、D、E等逻辑盘,使用起来更加安全方便
          • 虚拟内存技术:在逻辑上扩大程序的存储容量,使用比实际内存更大的容量,大大提升编程效率
      • 异步性
        • 在多道程序环境下,允许多个进程并发执行
        • 进程在使用资源时可能需要等待或放弃
        • 进程的执行并不是一气呵成的,而是走走停停的形式推进的
        • 异步性
    • 基础篇:环境为 Vmware WorkStation + Ubuntu
      • 进程管理
        • 进程管理之进程实体
          • 为什么需要进程:没有配置OS之前,资源属于当前运行的程序,只能一个程序接着一个程序的运行,配置OS之后,引入多道程序设计的概念,合理的隔离来资源、运行环境,提升资源利用率
            • 进程是系统进行资源分配和调度的基本单位
            • 进程作为程序独立运行的载体保障程序正常执行
            • 进程的存在使得操作系统资源的利用率大幅提升
          • 进程的实体
            • 主存中的进程形态
            • 进程的实体
            • 标识符:标识符唯一标记一个进程,用于区别其他进程
            • 状态:标记进程的进程状态,如:运行态 or 阻塞状态
            • 程序计数器:进程即将被执行的下一条指令的地址
            • 内存指针:程序代码、进程数据相关指针
            • 上下文数据:进程执行时处理器存储的数据
            • IO状态信息:被进程IO操作所占用的文件列表
            • 记账信息:使用处理器时间、时钟数总和等,这些数据在调试或者在获取状态时都是很有用的
            • 进程的实体2
            • 进程控制块(PCB):用于描述和控制进程运行的通用数据结构,记录进程的当前状态和控制进程运行的全部信息,PCB使得进程是能够独立运行的基本单位,PCB是操作系统进程调度经常会被读取的信息,PCB是常驻内存的,存放在系统专门开辟的PCB区域内
          • 进程(Process)与线程(Thread)
            • 线程是操作系统进行运行调度的最小单位,进程是系统进行资源分配和调度的基本单位
            • 线程是包含在进程当中,是进程中实际运行工作的单位
            • 一个进程可以并发多个线程,每个线程执行不同的任务
            • 进程的线程共享进程资源
            • 进程线程对比
        • 进程管理之五状态模型
          • 就绪:
            • 当进程被分配到除CPU以外所有必要的资源后
            • 只要在获得CPU的使用权,就可以立即运行
            • 其他资源都准备好、只差CPU资源的状态为就绪状态
            • 在一个系统中多个处于就绪状态的进程通常排成一个队列,就绪队列
          • 执行:
            • 进程获得CPU,其程序正在执行称为执行状态
            • 在单处理机中,在某个时刻只能有一个进程是处于执行状态
            • 阻塞队列
          • 阻塞:
            • 进程因某种原因如:其他设备未就绪而无法继续执行
            • 从而放弃CPU的状态称为阻塞状态,如打印机
          • 创建
            • 分配PCB => 插入就绪队列
            • 创建进程时拥有PCB但其他资源尚未就绪的状态称为创建状态,操作系统提供fork函数接口创建进程。
          • 终止
            • 系统清理 => PCB归还
            • 进程结束由系统清理或这归还PCB的状态称为终止状态
          • 进程五状态模型
        • 进程管理之进程同步
          • 为什么需要进程间同步
            • 生产者-消费者问题:有一群生产者进程在生产产品,并将这些产品提供给消费者进程进行消费,生产者进程和消费者进程可以并发执行,在两者之间设置了一个具有n个可缓冲区的缓冲池,生产者进程需要将所生产的产品放到缓冲区中,消费者进程可以从缓冲区中取走产品消费。
            • 生产者消费者问题
            • 在计算机里面缓冲区是位于Cache(高速缓存或者主存)上面
            • 如果生产者或者消费者需要操作缓冲区需要三个步骤
              • 先把缓冲区里的数据取出来,放到计算机的寄存器里面 register=count
              • 在CPU的寄存器里面把register加1,register=register+1,表示生产完成了一个产品
              • 把register 放回到缓冲区里面,count=register
            • 单从生产者程序或者消费者程序看是没有问题的
            • 但两者并发执行时就可能出差错,轮流操作缓冲区导致数据不一致
            • 生产者消费者问题2
            • 哲学家进餐问题:有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共同的使用一张圆桌,分别坐在周五的五张椅子山,在圆桌上有五个碗和五只筷子。平时哲学家只进行思考,饥饿时则试图取靠近他们的左右两边的筷子,只有两支筷子都被他们拿到的时候就能进餐,进餐完毕之后放下筷子继续思考。如果五个哲学家都拿一支筷子等待其他人释放另一只筷子的资源那么哲学家将饿死。
            • 根源问题是:彼此相互之间没有通信
            • “如果生产者通知消费者我已经完成一件生产”
            • “哲学家向旁边哲学家说我要进餐了”
            • 进程间同步解决了:对竞争资源在多进程间进行使用次序的协调
          • 进程间同步原则
            • 临界资源:指的是一些虽作为共享资源却又无法同时被多个线程共同访问的共享资源。当有进程在使用临界资源时,其他进程必须依据操作系统的同步机制等待占用进程释放该共享资源才可以重新竞争使用共享资源。
            • 原则一、空闲让进:资源无占用,允许使用
            • 原则二、忙则等待:资源有占用,请求进程等待
            • 原则三、有限等待:保证有限等待时间能够使用资源
            • 原则四、让权等待:等待时,进程需要让出CPU
          • 进程同步的方法:
            • 消息队列
            • 共享存储
            • 信号量
          • 线程同步
            • 进程的线程共享进程资源
            • 当多个线程并发的使用进程资源时,会发生什么?——进程内多线程也需要同步
            • 线程同步的方法:
              • 互斥量:保证多线程可以互斥的使用临界资源的一个锁
              • 读写锁:是应对多读少写或者少读多写的情况发明的锁
              • 自旋锁:
              • 条件变量:
        • Linux的进程管理
          • Linux进程相关概念
            • 进程的类型
              • 前台进程:通过命令行使用Linux的时候就是使用终端Shell,前台进程就是具有终端,可以和用户交互的进程。
              • 后台进程:与前台进程相对,没有占用终端的就是后台进程,后台程序基本上不和用户交互,优先级比前台进程低。将需要执行的命令以“&”符号结束。比如:python3 running_process.py &
              • 守护(daemon)进程(特殊的后台进程)
                • 很多守护进程在系统引导的时候启动,一直运行到系统关闭
                • Linux有很多典型的守护进程,进程名字以“d”结尾的一般都是守护进程,例如:crond(定时任务守护进程)、httpd(http服务的)、sshd、mysqld。
            • 进程的标记
              • 进程ID:是进程的唯一标记,每个进程拥有不同的ID,表现为一个非负整数,最大值由操作系统限定
                • 操作系统提供fork函数接口创建进程,进程的层级关系:
                • 进程层级关系
                • 父子进程关系可以通过pstree命令查看
                • ID为0的进程为idle进程,是系统创建的第一个进程
                • ID为1 的进程为init进程,是0号进程的子进程,完成系统的初始化
                • init进程是所有用户进程的祖先进程
              • 进程的状态标记
                • 通过 man ps 来了解linux 各种进程状态的标记
                • 进程的标记
                • 进程状态的标记
          • 操作Linux进程的相关命令
            • ps:常用于显示当前进程的状态,常配合aux参数或者ef参数和grep命令检索特点进程
              • ps -aux 打印进程详细信息
              • ps -u root 查看root 用户的进程
              • ps -aux | grep 'python3' 查看特定进程
              • ps -ef --forest 查看进程树
              • ps -aux --sort=-pcpu 按照cpu的使用频率进行排序
              • ps -aux --sort=-pmem 按照内存进行排序
            • top:看linux进程内存或其他状态,PR 代表优先级,VIRT 是进程的虚拟内存
            • kill:给进程发送指定信号,只有(SIGKIll 9)信号可以无条件终止进程,其他信号进程有权忽略
              • kill -l 查看操作系统支持的信号
              • kill -9 <进程ID> 代表进程需要无条件的停止下来
      • 作业管理
        • 作业管理之进程调度:是指计算机通过决策决定哪个就绪的进程可以获得CPU的使用权,跟多道程序设计密切相关
          • 第一个步骤:保留旧进程的运行信息,请出旧进程(收拾包袱)
          • 第二个步骤:选择新进程,准备运行环境并分配CPU(新进驻)
          • 进程调度的三种基本机制:
            • 就绪队列的排队机制:将就绪进程按照一定的方式排列成队列,一边调度的程序可以最快的找到就绪进程
            • 选择运行进程的委派机制:调度程序以一定的策略选择就绪进程,将CPU分配给它
            • 新老进程的上下文切换机制:保存当前进程的上下文信息,装入被委派执行进程的运行上下文
            • 新老进程上下文切换机制
          • 如果进行进程调度的时候老进程还没执行完呢?按照老进程有没有执行完,可以把进程调度方法分为两大类:
            • 非抢占式调度:
              • 处理器一旦分配给某个进程,就让该进程一直使用下去
              • 调度程序不以任何原因抢占正在被使用的处理器
              • 直到进程完成工作或因为IO阻塞才会让出处理器
            • 抢占式调度
              • 允许调度程序以一定的策略暂停当前运行的进程
              • 保留好旧进程的上下文信息,分配处理器给新进程
            • 进程调度两大方法
          • 进程调度算法:
            • 先来先服务调度算法
            • 短进程优先调度算法:调度程序优先选择就绪队列中估计运行时间最短的进程,不利于长作业进程的执行
            • 高优先权优先调度算法:进程附带优先权,调度程序优先选择权重高的进程,使得紧迫的任务可以优先处理
            • 时间片轮转调度算法:按照先来先服务的原则排列就绪进程,每次从队列头部取出待执行进程,分配一个时间片执行,每个时间片时间相同,是相对公平的调度算法,但不能保证及时响应用户
        • 作业管理之死锁:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此的通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
          • 死锁的产生
            • 竞争资源
              • 共享资源数量不满足各个进程需求
              • 各个进程之间发生资源竞争导致死锁
              • 竞争资源导致死锁
            • 进程调度顺序不当
              • 进程调度顺序不当
            • 死锁的四个必要条件
              • 互斥条件:进程对资源的使用是排他性使用,某资源只能由一个进程使用,其他进程需要使用只能等待
              • 请求保持条件:进程至少保持一个资源,又提出新的资源请求,新资源被占用,请求被阻塞,被阻塞的进程不释放自己保持的资源。
              • 不可剥夺条件:进程获得的资源在未完成使用前不能被剥夺,获得的资源只能由进程自身释放
              • 环路等待条件:发生死锁时,必然存在进程-资源环形链
          • 死锁的处理
            • 预防死锁的方法:破坏死锁必要条件中的一个或多个
              • 摒弃请求保持条件:
                • 系统规定进程运行之前,一次性申请所有需要的资源
                • 进程在运行期间不会提出资源请求,从而摒弃请求保持条件
              • 摒弃不可剥夺条件
                • 当一个进程请求新的资源得不到满足时,必须释放占有的资源
                • 进程运行时占有的资源可以被释放,意味着可以被剥夺
              • 摒弃环路等待条件
                • 可用资源线性排序,申请必须按照需要递增申请
                • 线性申请不再形成环路,从而摒弃了环路等待条件
            • 银行家算法
              • 是一个可操作的著名的避免死锁的算法
              • 以银行借贷系统分配策略为基础的算法
              • 客户申请的贷款是有限的,每次申请需要申明最大资金量,银行家在能够满足贷款时,都应该给用户贷款,客户在使用贷款后,能够及时归还贷款。
              • 要求三个数据结构
              • 银行家算法
      • 存储管理
        • 内存分配与回收:早期计算机编程并不需要过多的存储管理,随着计算机和程序越来越复杂,存储管理成为必要,主要解决三个问题:确保计算机有足够的内存处理数据、确保程序可以从可用内存中获取一部分内存使用、确保程序可以归还使用后的内存以供其他程序使用
          • 内存分配的过程
            • 单一连续分配:单一连续分配是最简单的内存分配方式,只能在单用户、单进程的操作系统中使用
            • 固定分区分配:固定分区分配是支持多道程序的最简单存储配方式,内存空间被划分为若干个固定大小的区域,每个分区只提供给一个程序使用,互不干扰
            • 动态分区分配:根据进程实际需要,动态分配内存空间,涉及到相关数据结构、分配算法
              • 动态分区空闲表数据结构 动态分区空闲表数据结构
              • 动态分区空闲链数据结构 动态分区空闲链数据结构
              • 动态分区分配算法:
                • 首次适应算法(FF算法)
                  • 分配内存时从开始顺序查找适合内存区
                  • 若没有合适的空闲区,则该次分配失败
                  • 每次从头开始,使得头部地址空间不断被划分
                  • 循环适应算法从上次检索出开始,对首次适应算法进行了改进
                • 最佳适应算法(BF算法)
                  • 最佳适应算法要求空闲区链表按照容量大小排序
                  • 遍历空闲区链表找到最佳合适空闲区
                  • 可避免大材小用的情况
                • 快速适应算法(QF算法)
                  • 快速适应算法要求有多个空闲区链表
                  • 每个空闲区链表存储一种容量的空闲区
          • 内存回收的过程
            • 可能会出现四种情况:
              • 内存回收四种情况
              • 对于第一种情况,不需要新建空闲区链表节点,只需要把空闲区1的容量增大为空闲区即可
              • 对于第二种情况,将回收去与空闲区合并,新的空闲区使用回收区的地址
              • 对于第三种情况,将空闲区1、空闲区2和回收区合并,新的空闲区使用空闲区1的地址
              • 对于第四种情况,为回收区创建新的空闲节点,插入到相应的空闲区链表中去
        • 段页式存储管理:从进程的角度理解进程的存储管理,操作系统如何管理进程的空间?
          • 页式存储管理
            • 字:
            • 字块:字块是相对内存条物理设备的定义
            • 页面:是相对进程逻辑空间的定义
            • 将进程逻辑空间等分成若干大小的页面
            • 相应的把物理内存空间分成与页面大小相同的的物理块
            • 以页面为单位把进程逻辑空间装进物理内存中分散的物理块
            • 页式存储管理
            • 页表记录进程逻辑空间与物理空间的映射
            • 页表
            • 问题:现代计算机系统中,可以支持非常大的逻辑地址空间(2^32~2^64),这样页表就变得非常大,要占用非常大的内存空间,如:具有32位逻辑地址空间的分页系统,规定页面大小为4KB,则在每个进程页表中的页表项可达1M(2^20)个,如果每个页表项占用1Byte,故每个进程仅仅页表就要占用1MB的内存空间。
            • 32位系统进程的寻址空间为4G
            • 4G/4KB = 2^20
            • 会出现多级页表
            • 多级页表
            • 遇到的问题:当有一段连续的逻辑分布在多个页面中,将大大降低执行效率
          • 段式存储管理
            • 将进程逻辑空间划分成若干段(非等分)
            • 段的长度由连续逻辑的长度决定
            • 主函数MAIN、子程序段X、子函数Y等
            • 段表
          • 段式与页式的共同点:都离散的管理了进程的逻辑空间
          • 段式与页式的不同点:页是物理单位,段是逻辑单位,分页是为了合理利用空间,分段是满足用户需求;页大小由硬件固定,段长度可动态变化;页表信息是一维的,段表信息是二维的,因为段表里每一段的额长度都是不一样的,因此需要把段的长度和基址都记录起来,所以段表的信息是二维的。
          • 段页式存储管理
            • 分页可以有效提高内存利用率(虽说存在页内碎片)
            • 分段可以更好满足用户需求
            • 两者结合,形成段页式存储管理
            • 先将进程的逻辑空间按段式管理分成若干段
            • 再把段内空间按页式管理等分成若干页
            • 段页式地址
            • 段号指定的是进程的逻辑空间的具体哪一段,段内页号指的是段内的具体某一页,页内地址指的是某一页里的具体的字
            • 分配内存之后的内存情况
            • 段页式存储管理内存分配后情况
        • 虚拟内存
          • 一个游戏十几G,物理内存只有4G,那这个游戏是怎么运行起来的?
          • 虚拟内存概述
            • 有些进程实际需要的内存很大,超过物理内存的容量
            • 多道程序设计,使得每个进程可用物理内存更加稀缺
            • 不可能无限增加物理内存,物理内存总有不够的时候
            • 虚拟内存是操作系统内存管理的关键技术
            • 使得多道程序运行和大程序运行成为现实
            • 把程序使用内存划分,将部分暂时不使用的内存放置在辅存
            • 虚拟内存
            • 进程的逻辑空间,红色部分是程序索要使用的内存,灰色的是暂时不需要使用的
          • 程序的局部性原理
            • 局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
            • 程序运行时,无需全部逻辑空间装入内存,装载部分即可
            • 如果程序发现所要使用的内存不在物理内存里(如果访问页不在内存),则发出缺页中断,发起页面置换,把保存在辅存里的页面置换到物理内存里。
            • 从用户层面看,程序拥有很大的空间,即是虚拟内存
            • 虚拟内存实际是对物理内存的补充,速度接近于内存,成本接近于辅存。
          • 虚拟内存的置换算法
            • 先进先出算法(FIFO)
            • 最不经常使用算法(LFU)
            • 最近最少使用算法(LRU)
            • 高速缓存替换时机
            • 主存页面替换时机
            • 替换策略发生在Cache-主存层次、主存、辅存层次
            • Cache-主存层次的替换策略是为了解决速度问题
            • 主存-辅存层级主要是为了解决容量问题
            • 这也是存储器层次结构分成的理由
        • Linux的存储管理
          • Buddy 内存管理算法(Buddy是伙伴的意思,所以通常把这个叫做伙伴系统)
            • Buddy算法是经典的内存管理
            • 算法基于计算机处理二进制的优势具有极高的效率
            • 算法主要是为了解决内存外碎片的问题
            • 页内碎片:内部碎片是已经被分配出去(能明确指出属于哪个进程)的内存空间大于请求所需的内存空间,不能被利用的内存空间就是内部碎片
            • 页外碎片:外部碎片是指还没有分配出去(不属于任何进程),但是由于大小而无法分配给申请内存空间的新进程的内存空闲块。
            • Buddy算法的目的是努力让内存分配与相邻内存合并能快速进行
            • 内存分配原则
            • 伙伴系统
            • 算法流程:
              • 创建一系列空闲块链表,每一种大小都是2的幂
              • 空闲块链表
              • 分配100K内存
              • 分配100K内存2
              • 回收刚才分配的内存
            • 实际是将内存外碎片问题 转移成 内存内碎片问题
          • Linux 交换空间
            • 交换空间(Swap)是磁盘的一个分区
            • Linux物理内存满时,会把一些内存交换之Swap空间
            • Swap空间是初始化系统时配置的
            • 在Linux系统中输入命令top,输出列表可以看到 Swap
            • Swap有什么用?
              • 冷启动内存依赖:对于一些大型应用程序,在启动过程中需要使用大量内存,但是这些内存很多时候只是在启动的时候用一下,后续运行的时候很少会用到这些内存,因此有了Swap系统就可以将这个部分不怎么使用的数据保存在Swap空间里,从而释放更多的物理内存
              • 系统睡眠依赖:当linux系统需要睡眠的时候,它会把系统里的内存数据都保存在Swap空间里,等下次启动的时候才会把这些数据重新加载到内存里,可以加快系统的启动速度
              • 大进程空间依赖:有些进程确实需要使用很多的内存空间,但是物理内存不够实用,因此它会把进程所需要使用的内存暂时保存到Swap空间里,使得整个大的进程也可以运行起来。
              • Swap空间与虚拟空间的对比
      • 文件管理
        • 操作系统的文件管理
          • 文件的逻辑结构
            • 逻辑结构的文件类型
              • 有结构文件与无结构文件
              • 有结构文件:
                • 文件内容由定长记录和可变长记录组成
                • 定长记录存储文件格式、文件描述等结构化数据项
                • 可变长记录存储文件具体内容
                • PNG文件结构
              • 无结构文件:
                • 也称为流式文件
                • 文件内容长度以字节为单位,如:exe文件、dll链接库文件、so文件
            • 顺序文件
              • 顺序文件是指按顺序存放在存储介质中的文件
              • 磁带的存储特性使得磁带文件只能存储顺序文件
              • 顺序文件是所有逻辑文件中存储效率最高的,因为在读或者是写的时候只需要顺序的读写
              • 如果需要对顺序文件做增删改查怎么办?效率低
            • 索引文件
              • 可变长文件不适合使用顺序文件格式存储
              • 索引文件是为了解决可变长文件存储而发明的一种文件格式
              • 索引文件需要配合索引表完成存储的操作
          • 辅存的存储空间分配
            • 辅存的分配方式
              • 辅存分配方式
              • 连续分配
                • 顺序读取文件内容非常容易,速度很快
                • 对存储要求高,要求满足容量的连续存储空间
              • 链接分配
                • 链接分配可以将文件存储在离散的盘块中
                • 需要额外的空间存储文件的盘块链接顺序
                • 隐式链接
                • 显示链接
                • FAT缺点:不支持高效的直接存储(FAT记录项多);检索时FAT表占用较大的存储空间(需要将整个FAT加载到内存);
              • 索引分配
                • 把文件的索引盘块集中存储(索引)
                • 读取某个文件时,将文件索引读取进内存即可
                • 索引分配
                • 每个文件拥有一个索引块,记录所有盘块信息
                • 索引分配方式支持直接访问盘块
                • 文件较大时,索引分配方式具有明显优势
            • 存储空间管理
              • 存储空间管理
              • 空闲表
              • 空闲链表:
                • 空闲链表把所有空闲盘区组成一个空闲链表
                • 每个链表节点存储空闲盘块和空闲的数目
              • 位示图
                • 位示图维护成本低
                • 位示图可以非常容易找到空闲盘快
                • 位示图使用0/1比特位,占用空间很小
          • 目录管理
            • 目录树
            • 任何文件或目录都只有唯一路径
        • Linux文件的基本操作
          • Linux目录
            • bin 目录文件在命令行输出后为绿色,表示都是可执行的二进制文件
            • etc 目录:系统管理及配置文件
            • home 目录:每个用户文件的根目录
            • usr 目录:系统应用目录
            • usr/local 目录:存放的管理员安装的软件安装目录
            • usr/local/bin 目录:一些软件的二进制文件
            • usr/local/etc 目录:用户安装的软件的配置目录
            • proc 目录:虚拟文件系统的目录,系统内存映射,可以访问系统信息包括:cpuinfo、meminfo,这里面有很多数字文件夹,代表的进程的文件夹,进程也是文件,Linux 一切皆文件
            • dev 目录:存放linux设备文件,多是黄色的文件,包括:终端、键盘输入、鼠标
            • boot 目录:存放系统引导时所使用的文件
            • lib 目录:系统启动或运行时一些用到的动态库文件
            • linux目录
            • 相对路径:
            • 绝对路径:
          • Linux文件常用操作
            • (目录/文件)创建、删除、读取、写入
          • Linux文件类型
            • linux文件类型
        • Linux的文件系统
          • 文件系统概览
            • 常见文件系统:FAT、NTFS、EXT2/3/4
            • FAT(File Allocation Table)
              • FAT16、FAT32等,微软Dos/Windows使用的文件系统
              • 使用一张表来保持整个盘块的信息
            • NTFS(New Technology File System)
              • WindowsNT环境的文件系统
              • NTFS对FAT进行了改进,取代了旧的文件系统
            • EXT(Extended file system):扩展文件系统
              • Linux的文件系统
              • 不能被Windows识别
              • EXT2/3/4 数字表示第几代
          • Ext文件系统
            • EXT文件系统
            • EXT文件系统2
            • Inode Table:
              • 存放文件Inode的地方
              • 每个文件(目录都有一个Inode)
              • 是每一个文件(目录)的索引节点
            • Inode:
              • 存放文件的元信息:文件类型、文件权限、文件物理地址、文件长度、文件连续计数、文件存取时间、索引的节点编号、文件状态、访问计数(当前有哪几个进程访问了这个文件)、链接指针等等无关于文件内容具体信息
              • 文件名不是存放在Inode节点上的,而是存放在目录的Inode节点,比如有一个目录目录下面有一个文件,文件的名字不是存放在这个文件的Inode节点上,而是存放在包含这个文件的目录的Inode节点上
              • 为的是列出目录文件的时候无需加载文件的Inode
            • Inode bitmap
              • Inode的位示图
              • 记录已分配的Inode和未分配的Inode,当系统初始化的时候Inode数目已经固定
            • Data block
              • 是存放文件内容的地方
              • 每个block都有一个唯一的编号
              • 文件的block记录在文件的Inode上,Inode上记录的文件物理地址就是文件的block记录
            • block bitmap:功能和Inode bitmap 类似,记录Data block的使用情况
            • SuperBlock
              • 记录整个文件系统相关信息的地方
              • Block和Inode的使用情况
              • 时间信息、控制信息等
              • 块的大小一般都是1024字节
            • df -T,可以查看磁盘挂载信息
            • dumpe2fs <指定设备>,查看Inode信息
            • stat dumpe2fs.log,查看文件具体信息
      • 操作系统的设备管理
        • 广义的IO设备
          • 对CPU而言,凡是对CPU进行数据输入的都是输入设备
          • 对CPU而言,凡是对CPU进行数据输出的都是输出设备
          • 按使用特性分类
            • 存储设备:U盘、内存、磁盘
            • 交互IO设备:键盘、显示器、鼠标
          • 按信息交换的单位分类
            • 块设备:磁盘、SD卡
            • 字符设备:打印机、Shell终端
          • 按设备的共享属性分类:独占设备、共享设备、虚拟设备
          • 按传输速率分类:低速设备、中速设备、高速设备
        • IO设备的缓冲区
          • CPU与IO设备速率不匹配问题
          • 缓冲区是为了减少CPU处理IO请求的频率,提高CPU与IO设备之间的并行性
          • IO设备缓冲区
          • 专用缓冲区只适用于特点的IO进程
          • 当这样的IO进程比较多时,对内存的消耗也很大
          • 操作系统划出可供多个进程使用的公共缓冲区,称之为缓冲池
          • 缓冲池
        • SPOOLing技术
          • 是关于慢速字符设备如何与计算机主机交换信息的一种技术
          • 利用高速共享设备将低速的独享设备模拟为高速的共享设备
          • 逻辑上,系统为每一个用户都分配了一台独立的高速独享设备
          • 是一个虚拟设备技术,可以将一台物理设备虚拟成多个独立共享的高速独享设备
          • 在SPOOLing系统里面实际上没有任何一个设备分配给具体的进程,而是在输入或者输出的存储空间里,为这个进程分配一个存储区,并且建立一张IO请求表,这样就把逻辑设备虚拟成共享设备了
          • SPOOLing
          • 在输入输出之间增加了排队转储环节(输入井、输出井)
          • SPOOLing复杂输入(出)井与低俗设备之间的调度
          • 逻辑上,进程直接与高速设备交互,减少了进程的等待时间
    • 提升篇
      • 线程同步
      • 进程同步
      • 线程、协程
      • 用户态与内核态
      • 上下文切换
    • 综合实践
      • 线程安全
      • 线程池
      • 同步任务
      • 异步任务
  • 计算机网络
    • 概述篇
      • 什么是计算机网络:计算机网络主要由一些通用的、可编程的硬件互联而成,通过这些硬件,可以传送不同类型的数据,并且可以支持广泛和日益增长的应用。
        • 计算机网络不是软件概念,还包含硬件设备
        • 计算机网络不仅仅是信息通信,还可以支持广泛的应用
      • 计算机网络的分类
        • 按作用范围分类:广域网(WAN)、城域网(MAN)、局域网(LAN)
          • 作用范围网络分类
        • 按网络使用者分类:公用网络、专用网络
      • 计算机网络发展简史
        • 互联网的发展历史
          • 互联网发展历史
          • 单个网络ARPANET
          • 三层结构互联网
          • ISP(Internet Service Provider):网络服务提供商,如:**电信、**移动、**联通等
          • 多层次ISP互联网
          • 现代国际互联网的主要线路 https://live.infrapedia.com
        • **互联网的发展简史
          • **互联网发展史
          • **最大的五个公用计算机网络:
            • **电信互联网CHINANET
            • **联通互联网UNINET
            • **移动互联网CMNET
            • **教育与科研计算机网CERNET
            • **科学技术网CSTNET
          • 一些企业家也推动了**互联网发展:1996年,张朝阳创建搜狐;1997年,丁磊创建网易;1998年,王志东创建新浪;1998年,马化腾、张志东创建腾讯;1999年,马云创建阿里巴巴;2000年,李彦宏创建百度;
      • 层次结构
        • 层级结构设计的基本原则
          • 计算机网络分层设计的原因
          • 网络层次结构实例
          • 各层之间是相互独立的
          • 每一层要有足够的灵活性
          • 各层之间完全解耦
        • OSI七层模型
          • OSI七层模型
          • OSI欲成为全球计算机都遵循的标准,然后促进全球的计算机都可以沿用这个标准来方便进行互联已经交换数据
          • OSI在市场化过程中困难重重,因为当时TCP/IP在全球范围成功运行
          • OSI最终并没有成为广为使用的标准模型
          • 为什么没有被市场接受的原因:
            • OSI专家缺乏实际的经验,基于理论去设计,没有遵循生产实践
            • OSI标准制定周期过长,按OSI标准生产的设备无法及时进入市场
            • OSI模型设计的不合理,一些功能在多层重复出现
        • TCP/IP四层模型(更多采用)
          • TCP-IP四层模型
          • 四层模型间接通信
          • 四层模型分层协议
      • 现代互联网的网络拓扑
        • 边缘部分
          • 网络拓扑-边缘部分-家庭
          • 网络拓扑-边缘部分-企业
        • 核心部分:主要组成由地区ISP、主干ISP、以及国际路由器
          • 网络拓扑-核心部分
        • 边缘部分和核心部分
        • 客户-服务器模式 很多终端通过边缘部分连接到核心部分
        • 对等模式
      • 计算机网络的性能指标
        • 计算机网络常用单位:bps(速率,bit/s),为什么电信拉的100M光纤,测试峰值速度只有12M每秒?网络常用单位(Mbps),100M/s=100Mbps=100Mbit/s,bit位换算成字节有一个进制,8bit=1byte,所以100Mbit/s=(100/8)MB/s=12.5MB/s
        • 时延:发送时延(本机进行网络发送的时候它在本机所停留的时间)、传播时延、处理时延、排队时延
          • 发送时延
          • 传播时延
          • 排队时延:
            • 数据包在网络设备中等待被处理的时间
          • 处理时延
            • 数据包到达设备或者目的机器被处理所需要的时间
        • 往返时间RTT(Route-Trip Time):是评估网络质量的一项重要指标
          • RTT表示的是数据报文在端到端通信中来回一次的时间
          • 通常使用ping命令查看RTT
      • 物理层
        • 物理层的作用:
          • 连接不同的物理设备
          • 传输比特流(0、1、0、1这样的高低电平或者说是数字信号)
          • 连接介质:
            • 双绞线
            • 同轴电缆
            • 光纤
            • 红外线
            • 无线
            • 激光
          • 比特流
          • 物理特性:机械特性、电气特性、功能特性、过程特性
        • 信道的基本概念:是往一个方向传送信息的媒体
          • 一条通信电路包含一个接受信道和一个发送信道
          • 根据信道的不同通信电路可以分成:
            • 单工通信信道
              • 只能一个方向通信,没有反方向反馈的信道
              • 有线电视、无线收音机等等
            • 半双工通信信道
              • 双方都可以发送和接收信息
              • 不能双方同时发送,也不能同时接收
            • 全双工通信信道
              • 双方都可以发送和接收信息
              • 网络网线等等传输介质
        • 信道分用-复用技术:为了提升信道的利用效率
          • 信道分用-复用
          • 频分复用:按照率的不同来进行信道复用
          • 时分复用
          • 波分复用
          • 码分复用
      • 数据链路层
        • 数据链路层概述
          • 解决三个问题:封装成帧、透明传输、差错监测
          • 封装成帧:
            • “帧”是数据链路层数据的基本单位
            • 发送端接收到网络层的一段数据后,会在数据前后添加特定标记形成“帧”
            • 接收端根据前后特定标记识别出“帧”
            • 物理层不管“帧”不“帧”的,只管bit流的传输,体现了层与层之间是相互独立并且相互解耦的
            • 数据帧图示
            • 帧首部和尾部是特定的控制字符(特定比特流),首部(SOH:00000001),尾部(EOT:00000100)
            • 数据里面恰好有这些比特流咋办?——透明传输
          • 透明传输
            • “透明”在计算机领域是一个非常重要的术语。平常在设计一个API的时候,常说这个API设计良好的话,底层api的操作对api的调用方是透明的。
            • 一种实际存在的事物却又看起来不存在一样
            • 即是控制字符在帧数据中,但是要当作不存在的去处理
            • 数据中出现了控制字符
            • 数据中出现了控制字符-添加转义字符
            • 编程语言中""一般为转义字符
          • 差错监测
            • 物理层只管传输比特流,无法控制以及判断是否出错,如果物理层传输时受到干扰,如:宇宙射线、闪电等等,都会影响比特流传输
            • 数据链路层负责起“差错监测”的工作
        • 数据链路层的差错监测
          • 奇偶校验码
            • 奇偶校验码
            • 奇偶校验码的局限性
          • 循环冗余校验码CRC
            • 根据传输或保存的数据而产生固定位数校验码的方法
            • 检测数据传输或者保存后可能出现的错误
            • 生成的数字计算出来并且附加到数据后面
            • 模“2”除法
              • 是二进制下的除法
              • 与算术除法类似,但除法不借位,实际是“异或”操作
              • 模“2”除法
            • 运算的三个步骤:
              • 选定一个用于校验的多项式G(x),并在数据尾部添加 r 个 0
              • 将添加 r 个 0 后的数据,使用模“2”除法除以多项式的位串
              • 得到的余数填充在原数据r个0的位置得到可校验的位串
            • 例子1:使用CRC计算101001的可检验位串
              • 第一步:CRC计算可校验位串1
              • 第二步:CRC计算可校验位串2
              • CRC计算可校验位串3
              • 接收端接收的数据除以G(x)的位串,根据余数判断出错
            • 例子2:使用CRC计算10110011的可校验串
              • 例子2
              • 例子2-2
            • CRC的错误检测能力与位串的阶数r有关
            • 数据链路层只进行数据的检测,不进行纠正,遇到错误直接丢弃
            • 常用Gx位串
        • 最大传输单元MTU(Maximum Transmission Unit)
          • MTU
            • 数据链路层的数据帧也不是无限大的,mtu就是描述最大能传输的数据帧
            • 受限于底层物理设备特性
            • 数据帧过大或过小都会影响传输的效率
            • 以太网MTU一般为1500字节
          • 路径MTU
            • 路径MTU
        • 以太网协议(数据链路层常用的协议)
          • MAC地址(物理地址、硬件地址)
            • 每一个设备都拥有唯一的MAC地址
            • MAC地址共48个比特位,使用十六进制表示,12个数字或字母,每个数字或字母占4个比特位
          • 以太网协议
            • 以太网(Ethernet)是一种使用广泛的局域网技术
            • 以太网是一种应用于数据链路层的协议
            • 使用以太网可以完成相邻设备的数据帧传输
            • 以太网数据格式
            • MAC地址表
            • MAC地址表作用
            • 当路由器不知道MAC地址时数据包的处理过程
      • 底层协议
    • 网络层篇
      • 怎么跨设备传输
      • 路由器是网络层重要的设备,从硬件角度分:家庭路由器、企业路由器
      • 网络层IP协议相关
        • IP 协议详解
          • 虚拟互连网络
            • 实际的计算机网络是错综复杂的
            • 物理设备通过使用IP协议,屏蔽了物理网络之间的差异
            • 当网络中的主机使用IP协议连接时,则无需关注网络细节
            • IP协议使得复杂的实际网络变为一个虚拟互连的网络
            • IP协议使得网络层可以屏蔽底层细节而专注网络层的数据转发
            • IP协议解决了在虚拟网络中数据报传输路径的问题
          • IP协议
            • MAC地址:30-B4-9E-ED-85-CA,每一个网络设备或者说每一个网卡都有唯一。
            • IP地址
            • IP地址长度为32位,常分成4个8位
            • IP地址常使用点分十进制来表示(0255.0255.0255.0255)
            • 最多可以表示2^32个ip地址
            • IP数据报
            • IP数据报具体格式
            • 至少五行,每行32比特位,就是至少20个字节
            • 版本:占4位,指的是IP协议的版本,通信双方的版本必须一致,当前主流版本是4,即IPv4,也有IPv6
            • 首部位长度:占4位,最大数值为15,表示的是IP首部长度,单位是“32位字”(4个字节),也即是IP首部最大长度为60字节
            • 总长度:占16位,最大数值为65535,表示的是IP数据报总长度(IP首部+IP数据),超过MTU时数据链路层将会把IP协议分片,就是把较长的IP数据报拆分成多个数据帧来传输
            • 标识:
            • 标志:标记IP报文是否可以分片
            • 片偏移:IP报文的长度比数据帧的要求要长的话,那么将会进行IP报文的分片。当前帧是第几个偏移的IP数据
            • TTL:占8位,表明IP数据报文在网络中的寿命,每经过一个设备,TTL减1,当TTL=0时,网络设备必须丢弃该报文。作用是,当报文找不到终点时避免无限的传输消耗带宽。
            • 协议:占8位,表面IP数据所携带的具体数据是什么协议的(如:TCP、UDP等)
            • 协议表
            • 首部检验和:占16位,校验IP首部是否有出错
            • 源IP地址:发送IP数据报的机器的地址
            • 目的IP地址:数据报到达哪个机器的地址
          • IP协议的转发流程
            • 逐跳
            • 路由表简介
              • 路由表
            • IP协议的转发流程
              • IP协议转发流程
              • IP协议转发流程2
              • IP协议转发流程3
              • 数据帧每一跳的源|目的MAC地址都在变化
              • IP数据报每一跳的IP地址始终不变
        • 子网划分
          • 分类的IP地址
            • 分类的IP地址
            • 分类的IP地址进一步数据
            • 特殊的主机号:
              • 主机号全0表示当前网络段,不可分配为特定主机
              • 主机号全1表示广播地址,向当前网络段所有主机发消息
            • 特殊的网络号
              • A类地址网络段全0(00000000)表示特殊网络
              • A类地址网络段后7位全1(01111111:127)表示回环地址
              • B类地址网络段(10000000.00000000:128.0)是不可使用的
              • C类地址网络段(192.0.0)是不可使用的
            • 分类的IP地址更准确数据
            • 127.0.0.1,通常被称为本地回环地址(Loopback Address),不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所有默认被看作是永远不会宕掉的接口。在Windows操作系统中也有相似的定义,所有通常在安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否正常的。
            • D类地址:1110…… 特殊用途
            • E类地址:1111…… 特殊用途
          • 划分子网
            • 某公司拥有100名员工,每人配备一个计算机,请问该公司应该申请哪种网络段?
            • 分类的IP地址更准确数据(修改版)
            • 申请C类更节约网络地址
            • 某公司拥有256名员工,每人配备一个计算机,请问该公司应该申请哪种网络段?
            • 选B类,但是造成了很大的地址空间浪费
            • 划分子网
            • 子网号这么多,有没有办法快速判断某个IP的网络号?——子网掩码
            • 子网掩码:
              • 子网掩码和IP地址一样,都是32位
              • 子网掩码由连续的1和连续的0组成
              • 某一个子网的子网掩码具备网络号位数个连续的1
              • 子网掩码
              • 划分子网的子网掩码
              • 子网掩码快速的进行子网判断,
              • 子网掩码快速的进行子网判断1
              • 子网掩码快速的进行子网判断2
          • 无分类编址CIDR
            • CIDR中没有A、B、C类网络号、和子网划分的概念
            • CIDR将网络前缀相同的IP地址称为一个“CIDR地址块”
            • 网络前缀
            • 斜线记法
            • 无分类编址CIDR除了网络前缀与网络号不一样,其他的知识点比如子网掩码、特殊的网络号、特殊的地址号以及特殊的主机号都是通用的
            • 分配网络前缀位多少位多少位的网络地址
            • CIDR前缀
            • CIDR例子
            • 某个城市的CIDR划分
        • 网络地址转换NAT技术(Network Address Translation)
          • IPv4最多只有40+亿个IP地址
          • 早期IP地址的不合理规划导致IP号浪费
          • 内网地址与外网地址
          • 三类内网地址
          • 内网多个设备使用同一个外网IP请求外网的服务,外部怎么知道具体是哪个设备在请求?——使用 网络地址转换NAT技术 解决
          • NAT技术用于多个主机通过一个公有IP访问互联网的私有网络中
          • 端口是每个进程在进行网络请求的概念,通过端口指定某个设备具体哪个进程在使用网络。
          • NA(P)T表
          • NAT减缓了IP地址的消耗,但是增加了网络通信的复杂度
        • 简单路由过程
      • 网络层其他协议
        • ARP协议与RARP协议
          • ARP(Address Resolution Protocol)地址解析协议
            • ARP协议
            • ARP缓存表
            • 实际时有两种情况:
              • ARP缓存表缓存有IP地址和MAC地址的映射关系
              • ARP缓存表没有缓存IP地址和MAC地址的映射关系
            • ARP缓存表是ARP协议和RARP协议运行的关键
            • ARP缓存表缓存了IP地址到硬件地址之间的映射关系
            • ARP缓存表中的记录并不是永久有效的,有一定的期限
            • arp -a:查看ARP缓存表
            • ARP是封装在数据帧里的,因为使用到了IP所以算网络层,是网络层和数据链路层配合使用的重要协议。
            • ARP协议数据结构
          • RARP(Reverse Address Resolution Protocol)逆地址解析协议
            • RARP协议
            • RARP数据结构
          • (R)ARP协议是TCP/IP协议栈里面的基础的协议,是协调网络层和数据链路层配合工作的协议
          • (R)ARP协议的操作对程序员是透明的
          • 理解(R)ARP协议有助于理解网络分层的细节
        • ICMP 协议
          • ICMP 协议详解
            • 网络控制报文协议(Internet Control Message Protocol)
            • ICMP协议可以报告错误信息或者异常情况
            • ICMP协议
            • ICMP报文首部
            • ICMP在IP报文的位置
            • 差错报告报文
              • 差错报告报文
            • 询问报文
              • 询问报文
          • ICMP 协议的应用
            • Ping应用
              • 会发送询问报文
              • Ping回环地址127.0.0.1,如果ping不同则表明计算机的协议栈有问题
              • Ping网关地址
              • Ping远端地址
            • Traceroute应用
              • 可以探测IP数据报在网络中走过的路径
              • 当TTL=0时,网络设备必须丢弃该报文,会发送ICMP终点不可达差错报文,源端的主机这里传输发生了错误,这样让源主机察觉这里的问题。
              • 巧妙利用TTL以及ICMP终点不可达差错报文,每次把TTL加1,直到到达对方的机器
              • tracert github.com 查看途径哪些IP
      • IP的路由算法
        • 路由的概述
          • 路由的概述
          • 路由算法到图论算法
          • 一个理想的路由算法的特点:
            • 算法是正确的、完整的。也就是说依据这个算法,数据能正确的到达目的地,不至于说达不到或目的是错误的。
            • 算法在计算上应该尽可能的简单
            • 算法可以适应网络中的变化,如网络抖动,光纤电缆损坏
            • 算法是稳定的和公平
            • 因为互联网的规模非常大,环境非常复杂,所有需要对互联网进行划分。涉及到自治系统(Autonomous System)
            • 自治系统(Autonomous System)
              • 一个自治系统(AS)是出于一个管理机构(可以是一个国家、城市、学校)下的网络设备群
              • AS内部网络自行管理,AS对外提供一个或多个出(入)口
            • 自治系统内部路由的协议称为:内部网关协议(RIP、OSPF)
            • 自治系统外部路由的协议称为:外部网关协议(BGP)
            • 内部网关协议与外部网关协议
        • 内部网关路由协议
          • 距离矢量(DV)算法
            • 每一个节点使用两个向量$D_i$和$S_i$
            • $D_i$描述的是当前节点到别的节点的距离
            • $S_i$描述的是当前节点到别的节点的下一节点
            • 每个节点与相邻的节点交换向量$D_i$和$S_i$的信息
            • 每个节点根据交换的信息更新自己的节点信息
            • DV算法
            • DV算法1
          • RIP协议的过程
            • RIP(Routing Information Protocol)协议
            • 是使用DV算法的一种路由协议
            • RIP协议把网络的跳数(hop)作为DV算法的距离
            • RIP协议每个30s交换一次路由信息
            • RIP协议认为跳数大于15的路由称为不可达路由
            • 1.路由器初始化路由信息(两个向量$D_i$和$S_i$)
            • 2.对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设为X,所有距离加1)
              • 检索本地路由,将信息中新的路由插入到路由表里面
              • 检索本地路由1
              • 检索本地路由,对于下一跳为X的,更新修改后的信息
              • 检索本地路由2
              • 检索本地路由,对比相同目的地的距离,如果新信息的距离更小,则更新本地路由表
              • 检索本地路由3
            • 3.如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)
            • RIP协议的缺点
            • RIP协议实现简单,开销很小
            • RIP协议限制网络的规模(跳数大于十五就不可达
            • RIP协议“坏消息传得慢”,更新收敛时间过长
          • Dijkstra(迪杰斯特拉)算法
            • 是著名的图算法
            • 解决有权图从一个节点到其他节点最短路径问题
            • “以起始点为中心,向外层层扩展”
            • 把计算机网络抽象成一张图就是为了更加方便在计算机描述路由的过程,这个算法对路由来说也是必不可少的
            • 最短路径问题
            • Dijkstra算法文字描述
            • Dijkstra算法文字图解1
            • Dijkstra算法文字图解2
            • Dijkstra算法文字图解3
            • Dijkstra算法文字图解4
            • Dijkstra算法文字图解5
          • OSPF协议
            • 链路状态(LS)协议
              • 链路状态(LS)协议
              • 链路状态(LS)协议特点2
              • 只有链路状态发生变化时,才发送更新信息
            • OSPF协议的过程
              • OSPF(Open Shortest Path First:开放最短路径优先)
              • OSPF协议的核心是Dijkstra算法,是链路状态(LS)协议的一种实现
              • 每个路由器都能获得网络的完整拓扑
              • OSPF协议的过程1
              • OSPF协议的过程2
              • OSPF协议的过程3
              • OSPF协议的五种消息类型:
                • 问候消息(Hello):消息长度非常短,维护该路由器与相邻路由器的可达性
                • 链路状态数据库描述信息:用于向隔壁路由器发送自己的链路状态数据库所有链路状态的简单的消息
                • 链路状态请求消息:向隔壁路由器请求
                • 链路状态更新信息
                • 链路状态确认消息
              • OSPF协议的完整过程
              • RIP与OSPF对比
        • 外部网关路由协议
          • BGP协议
            • BGP(Border Gateway Protocol:边际网关协议)
            • BGP协议是运行在AS之间的一种协议
            • 为什么使用该协议?——互联网规模大,使用ls太慢;AS内部使用不同的路由协议,需要使用BGP协调
            • AS之间需要考虑除网络特性以外的一些因素(政治、安全等等)
            • BGP协议能够找到一条到达目的地比较好的路由
            • BGP发言人
            • AS可通过BGP发言人自行配置
            • 结合CIDR
            • AS之间通过BGP发言人来进行路由信息的交换,BGP协议并不关心AS内部的网络拓扑
      • IPv6
    • 传输层篇
      • TCP 协议
      • UDP 协议
      • 超时重传机制
      • 拥塞避免算法
      • 心跳保活机制
    • 应用层篇
      • 应用层概述
        • 应用层工作在终端设备,在应用层不管是软件还是协议都是非常多的,主要是传输层以及以下的层提供了完整的通信服务,也就是不需要管理通信服务,它只需要往上对接用户,提供丰富的功能就好了。
        • 应用层是面向用户的一层
        • 应用层一些协议
        • UDP与TCP应用场景
        • 应用层主要功能是定义应用间通信的规则,包括应用进程的报文类型(请求报文、应答报文);报文的语法、格式,不同的应用报文可以自己去协定,但是同一类应用它们之间要相互通信的话就要协商一致的报文语法或者说格式;应用进程发送数据的时机、规则。
      • DNS详解
        • DNS
        • IP地址:端口可以具体指定某一个机器的进程
        • 点分十进制的难点
        • 使用域名帮助记忆
        • 域名由点、字母和数字组成
        • 点分割不同的域
        • 域名可以分为顶级域、二级域、三级域
        • 顶级域
        • com一般指企业、net一般指网络机构、gov一般指政府、org一般指组织
        • 域名树
        • 域名服务器
      • DHCP(Dynamic Host Configuration Protocol)动态主机设置协议
        • 是一个局域网协议,由三类保留地址组成的网络称为局域网,和外网通信是使用NAT技术。
        • DHCP是应用UDP协议的应用层协议,DNS也是。
        • DHCP作用
        • DHCP实际场景
        • UDP协议是位于IP地址之上的,IP协议有一个ip,这里面的报文是怎么填写自己的ip的呢?——对于这样一个报文它的ip地址会全填写为1,代表他是一个广播的报文
        • DHCP过程
      • HTTP(HyperText Transfer Protocol)超文本传输协议,带超链接的文本其实也是一个富文本的表现形式,可以有图片动图视频,web服务就是提供内容的服务,对内容都有一个路径
        • http(s)://<主机>:<端口>/<路径>
        • HTTP协议是可靠(依赖传输层的TCP实现)数据传输协议
        • web服务器
        • web服务器步骤
        • HTTP请求方法
          • GET:获取指定的服务的资源
          • POST:提交数据到服务端
          • DELETE:删除指定的服务端资源
          • UPDATE:更新指定的服务端资源
        • 如何指定资源:
          • 在地址中指定
          • 在请求数据中指定
        • 请求报文与应答报文
        • 状态码
      • HTTP工作的结构
        • Web缓存
          • web缓存
        • Web代理
          • web代理
          • 正向代理
          • 反向代理
          • 理解代理
        • CDN(Content delivery Network:内容分发网络)
        • 爬虫
          • 增加网络拥塞
          • 损耗服务器资源
      • HTTPS协议详解
        • HTTP是明文传输
        • HTTPS(Secure)是安全的HTTP协议
        • http(s)://<主机>:<端口>/<路径>,端口一般443
        • 加密模型:
          • 对称加密
          • 非对称加密:
            • A、B是拥有一定数学关系的一组密钥,其中一把看作是私钥(私钥自己使用,不对外公开),另外一把公钥(给大家使用,对外公开)
        • 数字证书:
          • 数字证书是可信任组织颁发给特点对象的认证
          • 数字证书
        • SSL(Secure Sockets Layer:安全套接层)
          • 介于应用层与传输层之间
          • 数据安全和数据完整,不会泄漏和被篡改。
          • 对传输层数据进行加密后传输
        • https传输过程
        • SSL安全参数握手1
        • SSL安全参数握手2
      • URL 资源
      • HTTP 结构
      • HTTPS 安全
      • HTTP 服务
    • 综合实践
      • 使用线程池
      • IP 报文
      • ICMP 报文
      • TCP 报文
      • UDP 报文

环境说明

  • Linux 环境:VMWare WorkStation + Linux 虚拟机
  • 编程语言:C++、Python

Gaia

“Gaia(盖亚)”(希腊语:Γαία、英语:Gaia (Gaea)),是古希腊神话中的大地之神,是众神之母,所有神灵中德高望重的显赫之神。 这门课程在内容上的定位是“基础知识”,相对于繁花齐放的实践项目来说,这门课程对它们而言,就犹如Gaia对各有所长的众神一样,是基础、是根基,虽“力不及众神”,但亦是“德高望重”,因而这个项目命名为“Gaia(盖亚)”。

书籍推荐

以下这个列表将会持续更新和推荐一些质量高的书籍,保证学习进度的前提下,深化前面已经学习的知识。

推荐列表

第7章、第8章、第11章、第13章暂时不看。

12-5 http工作的结构-没声音

About

计算机组成原理+操作系统+计算机网络


Languages

Language:Python 59.9%Language:C++ 31.3%Language:Makefile 8.2%Language:C 0.7%