精华内容
下载资源
问答
  • 年开销5万
    千次阅读 多人点赞
    2021-01-15 18:08:39

    本文转载自 InfoQ,作者 万佳

    10.5 个人开发的一款产品 ,在正式上线两个月后,其日活用户就超过 1000 万。不到一年,它的注册用户就突破 1 亿。并且,其国际版在全球超 100 个国家和地区上线。过去一年,它支撑了 3 亿场会议。这是腾讯会议正式发布一年来取得的成绩。

    而一年前,腾讯会议才刚刚亮相,显得平淡无奇。

    2019 年 12 月 25 日,腾讯云发布一款云视频会议产品,即腾讯会议,它致力于提升跨企业、跨区域沟通和协作效率,帮助企业节省人力、时间等成本。用户可以直接通过手机、电脑、小程序等入口打开即用,一键入会。

    产品发布后不久,疫情的到来促使企业和个人对远程会议的需求增长,腾讯会议步入高速发展阶段,驶入一条快车道。扛过疫情后,腾讯会议又不断推出新功能,持续进行架构优化,提升服务质量。

    回顾过去这一年,腾讯云副总裁、腾讯会议负责人吴祖榕把腾讯会议最大的特点概括为“生于云、长于云”。某种意义上,“生于云、长于云”不仅让腾讯会议有了一个坚实的技术底座,而且经受住疫情的考验,甚至为其整个发展奠定了基础。

    一个 DAU 5 万的小目标

    腾讯会议最早可追溯至 2018 年 7 月,此时,这个项目正式启动,前途未知。

    “那时,我们要把最小的功能单元做出来,最大的压力是团队规模小,整个腾讯会议的开发团队只有 7.5 个人。”吴祖榕在接受采访时说。

    2019 年 5 月,腾讯会议发布了 0.94 内测版本,总共使用了 10.5 个人,其中前端 8 个人、后端 1.5 个人、产品 1 个人。当时,腾讯云投入 1.5 个后台开发人员,花了两个月时间搭建起整个腾讯会议的后台体系,核心技术则来自腾讯云原生的一系列技术组件。据悉,在基础设施层,腾讯会议使用了腾讯云的云服务器(CVM)和容器服务(TKE);在存储层,用了腾讯云的数据持久化(TDSQL);在逻辑层,使用了状态数据缓存(REDIS)、日志服务(CLS);在接入层,用上了腾讯云的接入域名(DNSPOD)和负载均衡(CLB in TKE)。

    吴祖榕表示,这极大降低了后端的开销,让后台开发人员只需关注业务逻辑,保障整个业务的推出。“所有的技术组件都是由(腾讯云)云原生提供的,使得我们开发资源就像搭积木一样。”他说。

    并且,正是因为腾讯会议在早期充分使用了一系列的云原生组件,也为其后续扩容提供了极大便利。

    2019 年 12 月 25 日,腾讯会议正式对外发布,团队当时定了一个小目标:希望在 2020 年底,腾讯会议的 DAU(日活跃用户)可以达到 5 万。如果在 2020 年底实现 5 万 DAU 的目标,“我们觉得这就是我们今年最好的成绩”。

    上线两个月,DAU 破 1000 万

    世事难料,在腾讯会议发布近 1 个月后,武汉封城,疫情形势日益严峻。在武汉封城第二天,腾讯会议发布公告,面向用户免费开放 100 人不限时会议功能。此后,继续扩容,免费开放增加至 300 人。与此同时,大量用户开始陆续涌入平台,而腾讯会议在短时间内迎来海量用户的快速增长。

    2 月初,腾讯会议迎来巨大考验。它的系统最初是为 5 万 DAU 目标设计的,但是,在不到两个月的时间,腾讯会议的 DAU 突然翻了几百倍。

    腾讯会议后端技术总监王彬在接受 InfoQ 记者采访时说:“前期,我们系统投入的人力并不多,包括从产品到研发。此时,突然有上百倍的增长,这对我们的系统有很大的压力。”随着用户量的不断飙升,系统能否撑住变得至关重要。“2 月份,团队停掉所有新的开发任务,唯一的要求是稳定“。

    吴祖榕称,稳定是最重要的。

    2 月 3 日,即春节后开工第一天,随着海量用户的涌入,各大办公软件陆续“崩了”,腾讯会议也没扛住。稳定是第一要务已经不言而喻。如何保证稳定,关键是扩容。2 月 10 日正式复工,这意味着腾讯会议只有 8 天的扩容时间。“复工复学第一天,我们就开始了夜以继日的扩容”。

    以前,腾讯谈海量服务是“先扛住,再优化,周期往往是一个月或两个月。吴祖榕表示,”到了疫情期间,这个周期缩短到 24 小时:白天,我们做大量的扩容,保障带宽资源、服务器资源等;夜里,我们针对产品性能等问题做大量的开发、部署;凌晨,我们再对当天的所有变更、代码优化做压力测试”。

    白天扩容,晚上优化,这 8 天是所有人压力最大的时候。

    8 天后,扩容 10 万台云主机,累计有超百万核的计算资源投入。

    不过,对王彬他们而言,事情远未结束。“我们的设备跟进了,但我的管理能力是跟不上的”。他打了一个比方,一个饭店以前一天接待 100 人,突然有一天,要接待 10000 人。

    设备虽然得到扩容,但并不是事情就完成了,业务层面还有大量的细节需要优化和解决。扩容前,业务层只是一个几十台设备的集群系统,系统的管理和调度系统都比较简单。扩容后,突然变成一个多地域,设备数达 10 万级的集群,原有的调度和管理系统完全无法支撑这么大的规模,需要快速优化和局部重构。

    因此,这就需要他们做很多事,比如入口路径规划等等。具体说来,集群化管理上,完成 4 个普通 Set 和 2 个 BGP Set 的建设,这样可根据业务发展情况,灵活调度和扩容。在接入和加速优化层面,利用腾讯云在全球的 IDC 机房、数据节点和加速节点,腾讯会议完成了全球部署和接入,确保全球用户的使用体验。

    除调度系统的优化外,还要梳理所有模块的调用关系,明确系统的核心路径,尽量简化核心路径,减少和取消核心路径的外部依赖。

    对于存储层,王彬介绍,由于访问量突增,同时需要确保低延迟的接口响应,将核心模块的存储从 MySQL 迁移到腾讯云 redis,确保在高并发下系统的稳定性。为了发现系统瓶颈,他们也建立了一套分布式的压测系统,每天凌晨进行压力测试,从压测中发现系统的瓶颈点,再快速的优化和改进。通过每日压测,系统的同时在线服务能力逐渐从 100 多万上升到 500 万、800 万在线。

    在人力方面,他们同样“压力山大”,因为整个人力非常短缺。据王彬介绍,在腾讯会议 1.0 版本发布时,它的后台开发只有几个人。在疫情期间,虽然扩容了 10 万台云主机,但是系统要调整,架构要优化,这也意味着需要有更多的开发人员。

    人手不够怎么办?他们一方面紧急招募新人和一些志愿者;另一方面,向腾讯云求助,腾讯云兄弟部门则派了四五个团队过来协助。

    事实证明,腾讯会议的成功扩容和后续优化,不仅让它扛住了复工后汹涌而来的巨大流量,而且经受住疫情的巨大考验。

    吴祖榕说:“你要能在 8 天扩容 100 万核,你不长在云上,做不了这件事情。如果是传统的做法,完全没办法在这么短时间里调集这么多服务器资源、带宽资源、技术资源等。这就是‘生于云、长于云’背后最核心的东西。”

    245 天,注册用户破 1 亿

    在疫情得到控制后,腾讯会议的第一要务从稳定变成了功能和服务质量。与此同时,它也从爆发期迈入稳定期。

    这时,腾讯会议在技术上主要是持续打造自己的核心能力。首先,在音视频的核心体验上,“多方通信是一个带约束条件的技术问题”,端到端通信需要在 400 毫秒内完成。如果时间小于 200 毫秒,效果会更好。

    吴祖榕表示,“这个过程中,每增加一个新技术,就会带来延迟,因为要运算、要处理,处理完之后再交给下一个环节。这一块越长,链条越复杂”。

    虽然约束条件是 400 毫秒,但是团队在内部定的目标是在 200 毫秒内完成端到端通信。在这个过程中,他们做了许多事情。比如,语音方面,团队专门采集很多噪声,甚至还花费很多力气去采集雨点打到玻璃窗上的声音。

    “有一天,我们正在开会,而外边下起了大雨。因此,会议另一边的人听着非常嘈杂,他们问发生了什么事情。这时,我们意识到雨点噪声(对会议的影响)”。

    除了雨点声,团队还采集了公交车开门的声音、餐桌上吃盒饭的声音、关门声、水杯放在桌子上的声音、咳嗽声、微信消息提示声和敲键盘的声音等等。据了解,他们累计采集了上几百种的声音。团队把采集下来的声音作为噪声,将经典信号处理与深度学习结合,通过 AI 训练来实现降噪,目的是在开会期间安静地把声音传输给对方,提升整体的沟通效率。

    另一个深入音视频核心场景的技术实践与椅子有关。当时,腾讯会议新出了一个功能,叫虚拟背景。因为疫情期间,人们在家开会时会打开摄像头,但背后的画面有时并不适合出现在摄像头里,因此就有了这个功能。

    但是,这个虚拟背景最大的问题是椅子的头枕,它会在后面凸出来,给人的体验很不好。为解决这个问题,团队采集了近 6 万张带有头枕椅子的数据,给它们做标注,从而实现更好的虚拟背景效果。

    “整个阶段,我们围绕‘听得清、看得清、听得真、看得真’做了大量的努力。”吴祖榕说。除了音视频层面,持续打造核心能力的第二点是后端技术。据腾讯会议后端技术总监王彬介绍,第一,他们做了系统服务化拆分,把“会管会控”拆分成主控、媒体网关、安全、权限、数据网关、消息、应用。“拆了以后,需求不用每次改个‘大胖子’,消息的改消息,安全的改安全,这对整个服务的质量提升是有帮助的”。

    并且,这样做还可以降低维护成本和提升系统的运营质量,拆分出核心模块和非核心模块,则大大提升了核心模块的稳定性和容灾能力。

    第二,在接入方面,他们建立分级的数据中心,完善后台管理体系和调度系统,调度用户就近接入和数据流闭环。以前,他们接入的机房均位于北京、上海、深圳等地,但这些机房的成本很高。那怎么办?于是,他们将全国数据中心划分为三级:第一级为 DC,在北京、上海等地;第二级是 EC,位于成都、重庆、武汉等地;第三级是 OC,比如兰州等地。“像成都等这些地方不比一线城市,它的成本会低一点。我成都的会就在成都开,接入成都的 IDC 机房”。

    第三,在部署和运营上,他们从预发布、灰度 Set 到普通 Set 再到 VIP Set 形成一套完整的流程和体系。新版本正式上线前会有预发布,通过自动化拨测检测系统的质量和可用性。然后,进入灰度 Set 阶段,基于后台管理体系评估灰度版本的质量,减少系统发布异常的影响范围。经过灰度 Set 验证的版本,在普通 Set 开始部署和放量。最后是 VIP Set,在普通 Set 验证系统和功能的稳定性后,逐步部署到 VIP Set 中。

    此外,他们还进行了流量优化、提升通信质量,等等。

    现在,王彬他们正在做私有化系统建设。基于腾讯云 TCS 平台,由 TCS 提供云基础设施、中间件、数据库等产品服务整合,涵盖应用自动化测试、部署、升级、运维等,打造将业务快速私有化和交付的能力。同时,在功能上,支持超大型在线会议和更多的数据类型等。“现在,我们的企业版支持 2000 人开会,后面会支持更多的人,比如支持 10000 人、20000 人开会。”他说。

    在腾讯会议正式发布 245 天后,其注册用户正式突破 1 亿。

    写在最后:

    虽然腾讯会议已经一岁,但是它未来的路还有很长。正如吴祖榕在采访中所说:“至少在明年一年的时间里,我们在会议上要补充的东西依然有很多,我们的路还很长很长。过去一年,你会发现腾讯会议的界面几乎没有变过,但是我们在每个版本上都迭代了非常多的细节,优化了产品。”

    更多相关内容
  • 5万字、97 张图总结操作系统核心知识点

    万次阅读 多人点赞 2020-07-14 09:19:25
    在大概了解到操作系统之后,我们先来认识一下硬件都有哪些 计算机硬件 计算机硬件是计算机的重要组成部分,其中包含了 5 个重要的组成部分:运算器、控制器、存储器、输入设备、输出设备。 运算器:运算器最主要的...

    文末领取大图。

    这不是一篇教你如何创建一个操作系统的文章,相反,这是一篇指导性文章,教你从几个方面来理解操作系统。首先你需要知道你为什么要看这篇文章以及为什么要学习操作系统。

    搞清楚几个问题

    首先你要搞明白你学习操作系统的目的是什么?操作系统的重要性如何?学习操作系统会给我带来什么?下面我会从这几个方面为你回答下。

    操作系统也是一种软件,但是操作系统是一种非常复杂的软件。操作系统提供了几种抽象模型

    • 文件:对 I/O 设备的抽象
    • 虚拟内存:对程序存储器的抽象
    • 进程:对一个正在运行程序的抽象
    • 虚拟机:对整个操作系统的抽象

    这些抽象和我们的日常开发息息相关。搞清楚了操作系统是如何抽象的,才能培养我们的抽象性思维和开发思路。

    很多问题都和操作系统相关,操作系统是解决这些问题的基础。如果你不学习操作系统,可能会想着从框架层面来解决,那是你了解的还不够深入,当你学习了操作系统后,能够培养你的全局性思维。

    学习操作系统我们能够有效的解决并发问题,并发几乎是互联网的重中之重了,这也从侧面说明了学习操作系统的重要性。

    学习操作系统的重点不是让你从头制造一个操作系统,而是告诉你操作系统是如何工作的,能够让你对计算机底层有所了解,打实你的基础。

    相信你一定清楚什么是编程

    Data structures + Algorithms = Programming

    操作系统内部会涉及到众多的数据结构和算法描述,能够让你了解算法的基础上,让你编写更优秀的程序。

    我认为可以把计算机比作一栋楼

    计算机的底层相当于就是楼的根基,计算机应用相当于就是楼的外形,而操作系统就相当于是告诉你大楼的构造原理,编写高质量的软件就相当于是告诉你构建一个稳定的房子。

    认识操作系统

    在了解操作系统前,你需要先知道一下什么是计算机系统:现代计算机系统由一个或多个处理器、主存、打印机、键盘、鼠标、显示器、网络接口以及各种输入/输出设备构成的系统。这些都属于硬件的范畴。我们程序员不会直接和这些硬件打交道,并且每位程序员不可能会掌握所有计算机系统的细节。

    所以计算机科学家在硬件的基础之上,安装了一层软件,这层软件能够根据用户输入的指令达到控制硬件的效果,从而满足用户的需求,这样的软件称为 操作系统,它的任务就是为用户程序提供一个更好、更简单、更清晰的计算机模型。也就是说,操作系统相当于是一个中间层,为用户层和硬件提供各自的借口,屏蔽了不同应用和硬件之间的差异,达到统一标准的作用。

    上面一个操作系统的简化图,最底层是硬件,硬件包括芯片、电路板、磁盘、键盘、显示器等我们上面提到的设备,在硬件之上是软件。大部分计算机有两种运行模式:内核态用户态,软件中最基础的部分是操作系统,它运行在 内核态 中。操作系统具有硬件的访问权,可以执行机器能够运行的任何指令。软件的其余部分运行在 用户态 下。

    在大概了解到操作系统之后,我们先来认识一下硬件都有哪些

    计算机硬件

    计算机硬件是计算机的重要组成部分,其中包含了 5 个重要的组成部分:运算器、控制器、存储器、输入设备、输出设备

    • 运算器:运算器最主要的功能是对数据和信息进行加工和运算。它是计算机中执行算数和各种逻辑运算的部件。运算器的基本运算包括加、减、乘、除、移位等操作,这些是由 算术逻辑单元(Arithmetic&logical Unit) 实现的。而运算器主要由算数逻辑单元和寄存器构成。
    • 控制器:指按照指定顺序改变主电路或控制电路的部件,它主要起到了控制命令执行的作用,完成协调和指挥整个计算机系统的操作。控制器是由程序计数器、指令寄存器、解码译码器等构成。

    运算器和控制器共同组成了 CPU

    • 存储器:存储器就是计算机的记忆设备,顾名思义,存储器可以保存信息。存储器分为两种,一种是主存,也就是内存,它是 CPU 主要交互对象,还有一种是外存,比如硬盘软盘等。下面是现代计算机系统的存储架构

    • 输入设备:输入设备是给计算机获取外部信息的设备,它主要包括键盘和鼠标。

    • 输出设备:输出设备是给用户呈现根据输入设备获取的信息经过一系列的计算后得到显示的设备,它主要包括显示器、打印机等。

    这五部分也是冯诺伊曼的体系结构,它认为计算机必须具有如下功能:

    把需要的程序和数据送至计算机中。必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作。能够按照要求将处理结果输出给用户。

    下面是一张 intel 家族产品图,是一个详细的计算机硬件分类,我们在根据图中涉及到硬件进行介绍

    • 总线(Buses):在整个系统中运行的是称为总线的电气管道的集合,这些总线在组件之间来回传输字节信息。通常总线被设计成传送定长的字节块,也就是 字(word)。字中的字节数(字长)是一个基本的系统参数,各个系统中都不尽相同。现在大部分的字都是 4 个字节(32 位)或者 8 个字节(64 位)。

    • I/O 设备(I/O Devices):Input/Output 设备是系统和外部世界的连接。上图中有四类 I/O 设备:用于用户输入的键盘和鼠标,用于用户输出的显示器,一个磁盘驱动用来长时间的保存数据和程序。刚开始的时候,可执行程序就保存在磁盘上。

      每个I/O 设备连接 I/O 总线都被称为控制器(controller) 或者是 适配器(Adapter)。控制器和适配器之间的主要区别在于封装方式。控制器是 I/O 设备本身或者系统的主印制板电路(通常称作主板)上的芯片组。而适配器则是一块插在主板插槽上的卡。无论组织形式如何,它们的最终目的都是彼此交换信息。

    • 主存(Main Memory),主存是一个临时存储设备,而不是永久性存储,磁盘是 永久性存储 的设备。主存既保存程序,又保存处理器执行流程所处理的数据。从物理组成上说,主存是由一系列 DRAM(dynamic random access memory) 动态随机存储构成的集合。逻辑上说,内存就是一个线性的字节数组,有它唯一的地址编号,从 0 开始。一般来说,组成程序的每条机器指令都由不同数量的字节构成,C 程序变量相对应的数据项的大小根据类型进行变化。比如,在 Linux 的 x86-64 机器上,short 类型的数据需要 2 个字节,int 和 float 需要 4 个字节,而 long 和 double 需要 8 个字节。

    • 处理器(Processor)CPU(central processing unit) 或者简单的处理器,是解释(并执行)存储在主存储器中的指令的引擎。处理器的核心大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。在任何时刻,PC 都指向主存中的某条机器语言指令(即含有该条指令的地址)。

      从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令,再更新程序计数器,使其指向下一条指令。处理器根据其指令集体系结构定义的指令模型进行操作。在这个模型中,指令按照严格的顺序执行,执行一条指令涉及执行一系列的步骤。处理器从程序计数器指向的内存中读取指令,解释指令中的位,执行该指令指示的一些简单操作,然后更新程序计数器以指向下一条指令。指令与指令之间可能连续,可能不连续(比如 jmp 指令就不会顺序读取)

    下面是 CPU 可能执行简单操作的几个步骤

    • 加载(Load):从主存中拷贝一个字节或者一个字到内存中,覆盖寄存器先前的内容
    • 存储(Store):将寄存器中的字节或字复制到主存储器中的某个位置,从而覆盖该位置的先前内容
    • 操作(Operate):把两个寄存器的内容复制到 ALU(Arithmetic logic unit)。把两个字进行算术运算,并把结果存储在寄存器中,重写寄存器先前的内容。

    算术逻辑单元(ALU)是对数字二进制数执行算术和按位运算的组合数字电子电路。

    • 跳转(jump):从指令中抽取一个字,把这个字复制到程序计数器(PC) 中,覆盖原来的值

    进程和线程

    关于进程和线程,你需要理解下面这张脑图中的重点

    进程

    操作系统中最核心的概念就是 进程,进程是对正在运行中的程序的一个抽象。操作系统的其他所有内容都是围绕着进程展开的。

    在多道程序处理的系统中,CPU 会在进程间快速切换,使每个程序运行几十或者几百毫秒。然而,严格意义来说,在某一个瞬间,CPU 只能运行一个进程,然而我们如果把时间定位为 1 秒内的话,它可能运行多个进程。这样就会让我们产生并行的错觉。因为 CPU 执行速度很快,进程间的换进换出也非常迅速,因此我们很难对多个并行进程进行跟踪。所以,操作系统的设计者开发了用于描述并行的一种概念模型(顺序进程),使得并行更加容易理解和分析。

    进程模型

    一个进程就是一个正在执行的程序的实例,进程也包括程序计数器、寄存器和变量的当前值。从概念上来说,每个进程都有各自的虚拟 CPU,但是实际情况是 CPU 会在各个进程之间进行来回切换。

    如上图所示,这是一个具有 4 个程序的多道处理程序,在进程不断切换的过程中,程序计数器也在不同的变化。

    在上图中,这 4 道程序被抽象为 4 个拥有各自控制流程(即每个自己的程序计数器)的进程,并且每个程序都独立的运行。当然,实际上只有一个物理程序计数器,每个程序要运行时,其逻辑程序计数器会装载到物理程序计数器中。当程序运行结束后,其物理程序计数器就会是真正的程序计数器,然后再把它放回进程的逻辑计数器中。

    从下图我们可以看到,在观察足够长的一段时间后,所有的进程都运行了,但在任何一个给定的瞬间仅有一个进程真正运行

    因此,当我们说一个 CPU 只能真正一次运行一个进程的时候,即使有 2 个核(或 CPU),每一个核也只能一次运行一个线程

    由于 CPU 会在各个进程之间来回快速切换,所以每个进程在 CPU 中的运行时间是无法确定的。并且当同一个进程再次在 CPU 中运行时,其在 CPU 内部的运行时间往往也是不固定的。

    这里的关键思想是认识到一个进程所需的条件,进程是某一类特定活动的总和,它有程序、输入输出以及状态。

    进程的创建

    操作系统需要一些方式来创建进程。下面是一些创建进程的方式

    • 系统初始化(init):启动操作系统时,通常会创建若干个进程。
    • 正在运行的程序执行了创建进程的系统调用(比如 fork)
    • 用户请求创建一个新进程:在许多交互式系统中,输入一个命令或者双击图标就可以启动程序,以上任意一种操作都可以选择开启一个新的进程,在基本的 UNIX 系统中运行 X,新进程将接管启动它的窗口。
    • 初始化一个批处理工作

    从技术上讲,在所有这些情况下,让现有流程执行流程是通过创建系统调用来创建新流程的。该进程可能是正在运行的用户进程,是从键盘或鼠标调用的系统进程或批处理程序。这些就是系统调用创建新进程的过程。该系统调用告诉操作系统创建一个新进程,并直接或间接指示在其中运行哪个程序。

    在 UNIX 中,仅有一个系统调用来创建一个新的进程,这个系统调用就是 fork。这个调用会创建一个与调用进程相关的副本。在 fork 后,一个父进程和子进程会有相同的内存映像,相同的环境字符串和相同的打开文件。

    在 Windows 中,情况正相反,一个简单的 Win32 功能调用 CreateProcess,会处理流程创建并将正确的程序加载到新的进程中。这个调用会有 10 个参数,包括了需要执行的程序、输入给程序的命令行参数、各种安全属性、有关打开的文件是否继承控制位、优先级信息、进程所需要创建的窗口规格以及指向一个结构的指针,在该结构中新创建进程的信息被返回给调用者。在 Windows 中,从一开始父进程的地址空间和子进程的地址空间就是不同的

    进程的终止

    进程在创建之后,它就开始运行并做完成任务。然而,没有什么事儿是永不停歇的,包括进程也一样。进程早晚会发生终止,但是通常是由于以下情况触发的

    • 正常退出(自愿的) : 多数进程是由于完成了工作而终止。当编译器完成了所给定程序的编译之后,编译器会执行一个系统调用告诉操作系统它完成了工作。这个调用在 UNIX 中是 exit ,在 Windows 中是 ExitProcess
    • 错误退出(自愿的):比如执行一条不存在的命令,于是编译器就会提醒并退出。
    • 严重错误(非自愿的)
    • 被其他进程杀死(非自愿的) : 某个进程执行系统调用告诉操作系统杀死某个进程。在 UNIX 中,这个系统调用是 kill。在 Win32 中对应的函数是 TerminateProcess(注意不是系统调用)。

    进程的层次结构

    在一些系统中,当一个进程创建了其他进程后,父进程和子进程就会以某种方式进行关联。子进程它自己就会创建更多进程,从而形成一个进程层次结构。

    UNIX 进程体系

    在 UNIX 中,进程和它的所有子进程以及子进程的子进程共同组成一个进程组。当用户从键盘中发出一个信号后,该信号被发送给当前与键盘相关的进程组中的所有成员(它们通常是在当前窗口创建的所有活动进程)。每个进程可以分别捕获该信号、忽略该信号或采取默认的动作,即被信号 kill 掉。整个操作系统中所有的进程都隶属于一个单个以 init 为根的进程树。

    Windows 进程体系

    相反,Windows 中没有进程层次的概念,Windows 中所有进程都是平等的,唯一类似于层次结构的是在创建进程的时候,父进程得到一个特别的令牌(称为句柄),该句柄可以用来控制子进程。然而,这个令牌可能也会移交给别的操作系统,这样就不存在层次结构了。而在 UNIX 中,进程不能剥夺其子进程的 进程权。(这样看来,还是 Windows 比较)。

    进程状态

    尽管每个进程是一个独立的实体,有其自己的程序计数器和内部状态,但是,进程之间仍然需要相互帮助。当一个进程开始运行时,它可能会经历下面这几种状态

    图中会涉及三种状态

    1. 运行态,运行态指的就是进程实际占用 CPU 时间片运行时
    2. 就绪态,就绪态指的是可运行,但因为其他进程正在运行而处于就绪状态
    3. 阻塞态,除非某种外部事件发生,否则进程不能运行

    进程的实现

    操作系统为了执行进程间的切换,会维护着一张表,这张表就是 进程表(process table)。每个进程占用一个进程表项。该表项包含了进程状态的重要信息,包括程序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号和调度信息,以及其他在进程由运行态转换到就绪态或阻塞态时所必须保存的信息。

    下面展示了一个典型系统中的关键字段

    第一列内容与进程管理有关,第二列内容与 存储管理有关,第三列内容与文件管理有关。

    现在我们应该对进程表有个大致的了解了,就可以在对单个 CPU 上如何运行多个顺序进程的错觉做更多的解释。与每一 I/O 类相关联的是一个称作 中断向量(interrupt vector) 的位置(靠近内存底部的固定区域)。它包含中断服务程序的入口地址。假设当一个磁盘中断发生时,用户进程 3 正在运行,则中断硬件将程序计数器、程序状态字、有时还有一个或多个寄存器压入堆栈,计算机随即跳转到中断向量所指示的地址。这就是硬件所做的事情。然后软件就随即接管一切剩余的工作。

    当中断结束后,操作系统会调用一个 C 程序来处理中断剩下的工作。在完成剩下的工作后,会使某些进程就绪,接着调用调度程序,决定随后运行哪个进程。然后将控制权转移给一段汇编语言代码,为当前的进程装入寄存器值以及内存映射并启动该进程运行,下面显示了中断处理和调度的过程。

    1. 硬件压入堆栈程序计数器等

    2. 硬件从中断向量装入新的程序计数器

    3. 汇编语言过程保存寄存器的值

    4. 汇编语言过程设置新的堆栈

    5. C 中断服务器运行(典型的读和缓存写入)

    6. 调度器决定下面哪个程序先运行

    7. C 过程返回至汇编代码

    8. 汇编语言过程开始运行新的当前进程

    一个进程在执行过程中可能被中断数千次,但关键每次中断后,被中断的进程都返回到与中断发生前完全相同的状态。

    线程

    在传统的操作系统中,每个进程都有一个地址空间和一个控制线程。事实上,这是大部分进程的定义。不过,在许多情况下,经常存在同一地址空间中运行多个控制线程的情形,这些线程就像是分离的进程。下面我们就着重探讨一下什么是线程

    线程的使用

    或许这个疑问也是你的疑问,为什么要在进程的基础上再创建一个线程的概念,准确的说,这其实是进程模型和线程模型的讨论,回答这个问题,可能需要分三步来回答

    • 多线程之间会共享同一块地址空间和所有可用数据的能力,这是进程所不具备的
    • 线程要比进程更轻量级,由于线程更轻,所以它比进程更容易创建,也更容易撤销。在许多系统中,创建一个线程要比创建一个进程快 10 - 100 倍。
    • 第三个原因可能是性能方面的探讨,如果多个线程都是 CPU 密集型的,那么并不能获得性能上的增强,但是如果存在着大量的计算和大量的 I/O 处理,拥有多个线程能在这些活动中彼此重叠进行,从而会加快应用程序的执行速度

    经典的线程模型

    进程中拥有一个执行的线程,通常简写为 线程(thread)。线程会有程序计数器,用来记录接着要执行哪一条指令;线程实际上 CPU 上调度执行的实体。

    下图我们可以看到三个传统的进程,每个进程有自己的地址空间和单个控制线程。每个线程都在不同的地址空间中运行

    下图中,我们可以看到有一个进程三个线程的情况。每个线程都在相同的地址空间中运行。

    线程不像是进程那样具备较强的独立性。同一个进程中的所有线程都会有完全一样的地址空间,这意味着它们也共享同样的全局变量。由于每个线程都可以访问进程地址空间内每个内存地址,因此一个线程可以读取、写入甚至擦除另一个线程的堆栈。线程之间除了共享同一内存空间外,还具有如下不同的内容

    上图左边的是同一个进程中每个线程共享的内容,上图右边是每个线程中的内容。也就是说左边的列表是进程的属性,右边的列表是线程的属性。

    线程之间的状态转换和进程之间的状态转换是一样的

    每个线程都会有自己的堆栈,如下图所示

    线程系统调用

    进程通常会从当前的某个单线程开始,然后这个线程通过调用一个库函数(比如 thread_create)创建新的线程。线程创建的函数会要求指定新创建线程的名称。创建的线程通常都返回一个线程标识符,该标识符就是新线程的名字。

    当一个线程完成工作后,可以通过调用一个函数(比如 thread_exit)来退出。紧接着线程消失,状态变为终止,不能再进行调度。在某些线程的运行过程中,可以通过调用函数例如 thread_join ,表示一个线程可以等待另一个线程退出。这个过程阻塞调用线程直到等待特定的线程退出。在这种情况下,线程的创建和终止非常类似于进程的创建和终止。

    另一个常见的线程是调用 thread_yield,它允许线程自动放弃 CPU 从而让另一个线程运行。这样一个调用还是很重要的,因为不同于进程,线程是无法利用时钟中断强制让线程让出 CPU 的。

    POSIX 线程

    POSIX 线程 通常称为 pthreads是一种独立于语言而存在的执行模型,以及并行执行模型。

    它允许程序控制时间上重叠的多个不同的工作流程。每个工作流程都称为一个线程,可以通过调用 POSIX Threads API 来实现对这些流程的创建和控制。可以把它理解为线程的标准。

    POSIX Threads 的实现在许多类似且符合POSIX的操作系统上可用,例如 FreeBSD、NetBSD、OpenBSD、Linux、macOS、Android、Solaris,它在现有 Windows API 之上实现了pthread

    IEEE 是世界上最大的技术专业组织,致力于为人类的利益而发展技术。

    线程调用描述
    pthread_create创建一个新线程
    pthread_exit结束调用的线程
    pthread_join等待一个特定的线程退出
    pthread_yield释放 CPU 来运行另外一个线程
    pthread_attr_init创建并初始化一个线程的属性结构
    pthread_attr_destory删除一个线程的属性结构

    所有的 Pthreads 都有特定的属性,每一个都含有标识符、一组寄存器(包括程序计数器)和一组存储在结构中的属性。这个属性包括堆栈大小、调度参数以及其他线程需要的项目。

    线程实现

    主要有三种实现方式

    • 在用户空间中实现线程;
    • 在内核空间中实现线程;
    • 在用户和内核空间中混合实现线程。

    下面我们分开讨论一下

    在用户空间中实现线程

    第一种方法是把整个线程包放在用户空间中,内核对线程一无所知,它不知道线程的存在。所有的这类实现都有同样的通用结构

    线程在运行时系统之上运行,运行时系统是管理线程过程的集合,包括前面提到的四个过程: pthread_create, pthread_exit, pthread_join 和 pthread_yield。

    在内核中实现线程

    当某个线程希望创建一个新线程或撤销一个已有线程时,它会进行一个系统调用,这个系统调用通过对线程表的更新来完成线程创建或销毁工作。

    内核中的线程表持有每个线程的寄存器、状态和其他信息。这些信息和用户空间中的线程信息相同,但是位置却被放在了内核中而不是用户空间中。另外,内核还维护了一张进程表用来跟踪系统状态。

    所有能够阻塞的调用都会通过系统调用的方式来实现,当一个线程阻塞时,内核可以进行选择,是运行在同一个进程中的另一个线程(如果有就绪线程的话)还是运行一个另一个进程中的线程。但是在用户实现中,运行时系统始终运行自己的线程,直到内核剥夺它的 CPU 时间片(或者没有可运行的线程存在了)为止。

    混合实现

    结合用户空间和内核空间的优点,设计人员采用了一种内核级线程的方式,然后将用户级线程与某些或者全部内核线程多路复用起来

    在这种模型中,编程人员可以自由控制用户线程和内核线程的数量,具有很大的灵活度。采用这种方法,内核只识别内核级线程,并对其进行调度。其中一些内核级线程会被多个用户级线程多路复用。

    进程间通信

    进程是需要频繁的和其他进程进行交流的。下面我们会一起讨论有关 进程间通信(Inter Process Communication, IPC) 的问题。大致来说,进程间的通信机制可以分为 6 种

    下面我们分别对其进行概述

    信号 signal

    信号是 UNIX 系统最先开始使用的进程间通信机制,因为 Linux 是继承于 UNIX 的,所以 Linux 也支持信号机制,通过向一个或多个进程发送异步事件信号来实现,信号可以从键盘或者访问不存在的位置等地方产生;信号通过 shell 将任务发送给子进程。

    你可以在 Linux 系统上输入 kill -l 来列出系统使用的信号,下面是我提供的一些信号

    进程可以选择忽略发送过来的信号,但是有两个是不能忽略的:SIGSTOPSIGKILL 信号。SIGSTOP 信号会通知当前正在运行的进程执行关闭操作,SIGKILL 信号会通知当前进程应该被杀死。除此之外,进程可以选择它想要处理的信号,进程也可以选择阻止信号,如果不阻止,可以选择自行处理,也可以选择进行内核处理。如果选择交给内核进行处理,那么就执行默认处理。

    操作系统会中断目标程序的进程来向其发送信号、在任何非原子指令中,执行都可以中断,如果进程已经注册了新号处理程序,那么就执行进程,如果没有注册,将采用默认处理的方式。

    管道 pipe

    Linux 系统中的进程可以通过建立管道 pipe 进行通信

    在两个进程之间,可以建立一个通道,一个进程向这个通道里写入字节流,另一个进程从这个管道中读取字节流。管道是同步的,当进程尝试从空管道读取数据时,该进程会被阻塞,直到有可用数据为止。shell 中的管线 pipelines 就是用管道实现的,当 shell 发现输出

    sort <f | head
    

    它会创建两个进程,一个是 sort,一个是 head,sort,会在这两个应用程序之间建立一个管道使得 sort 进程的标准输出作为 head 程序的标准输入。sort 进程产生的输出就不用写到文件中了,如果管道满了系统会停止 sort 以等待 head 读出数据

    管道实际上就是 |,两个应用程序不知道有管道的存在,一切都是由 shell 管理和控制的。

    共享内存 shared memory

    两个进程之间还可以通过共享内存进行进程间通信,其中两个或者多个进程可以访问公共内存空间。两个进程的共享工作是通过共享内存完成的,一个进程所作的修改可以对另一个进程可见(很像线程间的通信)。

    在使用共享内存前,需要经过一系列的调用流程,流程如下

    • 创建共享内存段或者使用已创建的共享内存段(shmget())
    • 将进程附加到已经创建的内存段中(shmat())
    • 从已连接的共享内存段分离进程(shmdt())
    • 对共享内存段执行控制操作(shmctl())

    先入先出队列 FIFO

    先入先出队列 FIFO 通常被称为 命名管道(Named Pipes),命名管道的工作方式与常规管道非常相似,但是确实有一些明显的区别。未命名的管道没有备份文件:操作系统负责维护内存中的缓冲区,用来将字节从写入器传输到读取器。一旦写入或者输出终止的话,缓冲区将被回收,传输的数据会丢失。相比之下,命名管道具有支持文件和独特 API ,命名管道在文件系统中作为设备的专用文件存在。当所有的进程通信完成后,命名管道将保留在文件系统中以备后用。命名管道具有严格的 FIFO 行为

    写入的第一个字节是读取的第一个字节,写入的第二个字节是读取的第二个字节,依此类推。

    消息队列 Message Queue

    一听到消息队列这个名词你可能不知道是什么意思,消息队列是用来描述内核寻址空间内的内部链接列表。可以按几种不同的方式将消息按顺序发送到队列并从队列中检索消息。每个消息队列由 IPC 标识符唯一标识。消息队列有两种模式,一种是严格模式, 严格模式就像是 FIFO 先入先出队列似的,消息顺序发送,顺序读取。还有一种模式是 非严格模式,消息的顺序性不是非常重要。

    套接字 Socket

    还有一种管理两个进程间通信的是使用 socket,socket 提供端到端的双相通信。一个套接字可以与一个或多个进程关联。就像管道有命令管道和未命名管道一样,套接字也有两种模式,套接字一般用于两个进程之间的网络通信,网络套接字需要来自诸如TCP(传输控制协议)或较低级别UDP(用户数据报协议)等基础协议的支持。

    套接字有以下几种分类

    • 顺序包套接字(Sequential Packet Socket): 此类套接字为最大长度固定的数据报提供可靠的连接。此连接是双向的并且是顺序的。
    • 数据报套接字(Datagram Socket):数据包套接字支持双向数据流。数据包套接字接受消息的顺序与发送者可能不同。
    • 流式套接字(Stream Socket):流套接字的工作方式类似于电话对话,提供双向可靠的数据流。
    • 原始套接字(Raw Socket): 可以使用原始套接字访问基础通信协议。

    调度

    当一个计算机是多道程序设计系统时,会频繁的有很多进程或者线程来同时竞争 CPU 时间片。当两个或两个以上的进程/线程处于就绪状态时,就会发生这种情况。如果只有一个 CPU 可用,那么必须选择接下来哪个进程/线程可以运行。操作系统中有一个叫做 调度程序(scheduler) 的角色存在,它就是做这件事儿的,该程序使用的算法叫做 调度算法(scheduling algorithm)

    调度算法的分类

    毫无疑问,不同的环境下需要不同的调度算法。之所以出现这种情况,是因为不同的应用程序和不同的操作系统有不同的目标。也就是说,在不同的系统中,调度程序的优化也是不同的。这里有必要划分出三种环境

    • 批处理(Batch) : 商业领域
    • 交互式(Interactive): 交互式用户环境
    • 实时(Real time)

    批处理中的调度

    现在让我们把目光从一般性的调度转换为特定的调度算法。下面我们会探讨在批处理中的调度。

    先来先服务

    最简单的非抢占式调度算法的设计就是 先来先服务(first-come,first-serverd)。当第一个任务从外部进入系统时,将会立即启动并允许运行任意长的时间。它不会因为运行时间太长而中断。当其他作业进入时,它们排到就绪队列尾部。当正在运行的进程阻塞,处于等待队列的第一个进程就开始运行。当一个阻塞的进程重新处于就绪态时,它会像一个新到达的任务,会排在队列的末尾,即排在所有进程最后。

    这个算法的强大之处在于易于理解和编程,在这个算法中,一个单链表记录了所有就绪进程。要选取一个进程运行,只要从该队列的头部移走一个进程即可;要添加一个新的作业或者阻塞一个进程,只要把这个作业或进程附加在队列的末尾即可。这是很简单的一种实现。

    最短作业优先

    批处理中,第二种调度算法是 最短作业优先(Shortest Job First),我们假设运行时间已知。例如,一家保险公司,因为每天要做类似的工作,所以人们可以相当精确地预测处理 1000 个索赔的一批作业需要多长时间。当输入队列中有若干个同等重要的作业被启动时,调度程序应使用最短优先作业算法

    需要注意的是,在所有的进程都可以运行的情况下,最短作业优先的算法才是最优的。

    最短剩余时间优先

    最短作业优先的抢占式版本被称作为 最短剩余时间优先(Shortest Remaining Time Next) 算法。使用这个算法,调度程序总是选择剩余运行时间最短的那个进程运行。

    交互式系统中的调度

    交互式系统中在个人计算机、服务器和其他系统中都是很常用的,所以有必要来探讨一下交互式调度

    轮询调度

    一种最古老、最简单、最公平并且最广泛使用的算法就是 轮询算法(round-robin)。每个进程都会被分配一个时间段,称为时间片(quantum),在这个时间片内允许进程运行。如果时间片结束时进程还在运行的话,则抢占一个 CPU 并将其分配给另一个进程。如果进程在时间片结束前阻塞或结束,则 CPU 立即进行切换。轮询算法比较容易实现。调度程序所做的就是维护一个可运行进程的列表,就像下图中的 a,当一个进程用完时间片后就被移到队列的末尾,就像下图的 b。

    优先级调度

    轮询调度假设了所有的进程是同等重要的。但事实情况可能不是这样。例如,在一所大学中的等级制度,首先是院长,然后是教授、秘书、后勤人员,最后是学生。这种将外部情况考虑在内就实现了优先级调度(priority scheduling)

    它的基本思想很明确,每个进程都被赋予一个优先级,优先级高的进程优先运行。

    多级队列

    最早使用优先级调度的系统是 CTSS(Compatible TimeSharing System)。CTSS 在每次切换前都需要将当前进程换出到磁盘,并从磁盘上读入一个新进程。为 CPU 密集型进程设置较长的时间片比频繁地分给他们很短的时间要更有效(减少交换次数)。另一方面,如前所述,长时间片的进程又会影响到响应时间,解决办法是设置优先级类。属于最高优先级的进程运行一个时间片,次高优先级进程运行 2 个时间片,再下面一级运行 4 个时间片,以此类推。当一个进程用完分配的时间片后,它被移到下一类。

    最短进程优先

    最短进程优先是根据进程过去的行为进行推测,并执行估计运行时间最短的那一个。假设每个终端上每条命令的预估运行时间为 T0,现在假设测量到其下一次运行时间为 T1,可以用两个值的加权来改进估计时间,即aT0+ (1- 1)T1。通过选择 a 的值,可以决定是尽快忘掉老的运行时间,还是在一段长时间内始终记住它们。当 a = 1/2 时,可以得到下面这个序列

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2pIhTP0Q-1594689410542)(/Users/mr.l/Library/Application Support/typora-user-images/image-20200220120452410.png)]

    可以看到,在三轮过后,T0 在新的估计值中所占比重下降至 1/8。

    保证调度

    一种完全不同的调度方法是对用户做出明确的性能保证。一种实际而且容易实现的保证是:若用户工作时有 n 个用户登录,则每个用户将获得 CPU 处理能力的 1/n。类似地,在一个有 n 个进程运行的单用户系统中,若所有的进程都等价,则每个进程将获得 1/n 的 CPU 时间。

    彩票调度

    对用户进行承诺并在随后兑现承诺是一件好事,不过很难实现。但是存在着一种简单的方式,有一种既可以给出预测结果而又有一种比较简单的实现方式的算法,就是 彩票调度(lottery scheduling)算法。

    其基本思想是为进程提供各种系统资源(例如 CPU 时间)的彩票。当做出一个调度决策的时候,就随机抽出一张彩票,拥有彩票的进程将获得该资源。在应用到 CPU 调度时,系统可以每秒持有 50 次抽奖,每个中奖者将获得比如 20 毫秒的 CPU 时间作为奖励。

    公平分享调度

    到目前为止,我们假设被调度的都是各个进程自身,而不用考虑该进程的拥有者是谁。结果是,如果用户 1 启动了 9 个进程,而用户 2 启动了一个进程,使用轮转或相同优先级调度算法,那么用户 1 将得到 90 % 的 CPU 时间,而用户 2 将之得到 10 % 的 CPU 时间。

    为了阻止这种情况的出现,一些系统在调度前会把进程的拥有者考虑在内。在这种模型下,每个用户都会分配一些CPU 时间,而调度程序会选择进程并强制执行。因此如果两个用户每个都会有 50% 的 CPU 时间片保证,那么无论一个用户有多少个进程,都将获得相同的 CPU 份额。

    实时系统中的调度

    实时系统(real-time) 是一个时间扮演了重要作用的系统。实时系统可以分为两类,硬实时(hard real time)软实时(soft real time) 系统,前者意味着必须要满足绝对的截止时间;后者的含义是虽然不希望偶尔错失截止时间,但是可以容忍。

    实时系统中的事件可以按照响应方式进一步分类为周期性(以规则的时间间隔发生)事件或 非周期性(发生时间不可预知)事件。一个系统可能要响应多个周期性事件流,根据每个事件处理所需的时间,可能甚至无法处理所有事件。例如,如果有 m 个周期事件,事件 i 以周期 Pi 发生,并需要 Ci 秒 CPU 时间处理一个事件,那么可以处理负载的条件是

    只有满足这个条件的实时系统称为可调度的,这意味着它实际上能够被实现。一个不满足此检验标准的进程不能被调度,因为这些进程共同需要的 CPU 时间总和大于 CPU 能提供的时间。

    下面我们来了解一下内存管理,你需要知道的知识点如下

    地址空间

    如果要使多个应用程序同时运行在内存中,必须要解决两个问题:保护重定位。第一种解决方式是用保护密钥标记内存块,并将执行过程的密钥与提取的每个存储字的密钥进行比较。这种方式只能解决第一种问题(破坏操作系统),但是不能解决多进程在内存中同时运行的问题。

    还有一种更好的方式是创造一个存储器抽象:地址空间(the address space)。就像进程的概念创建了一种抽象的 CPU 来运行程序,地址空间也创建了一种抽象内存供程序使用。

    基址寄存器和变址寄存器

    最简单的办法是使用动态重定位(dynamic relocation)技术,它就是通过一种简单的方式将每个进程的地址空间映射到物理内存的不同区域。还有一种方式是使用基址寄存器和变址寄存器。

    • 基址寄存器:存储数据内存的起始位置
    • 变址寄存器:存储应用程序的长度。

    每当进程引用内存以获取指令或读取、写入数据时,CPU 都会自动将基址值添加到进程生成的地址中,然后再将其发送到内存总线上。同时,它检查程序提供的地址是否大于或等于变址寄存器 中的值。如果程序提供的地址要超过变址寄存器的范围,那么会产生错误并中止访问。

    交换技术

    在程序运行过程中,经常会出现内存不足的问题。

    针对上面内存不足的问题,提出了两种处理方式:最简单的一种方式就是交换(swapping)技术,即把一个进程完整的调入内存,然后再内存中运行一段时间,再把它放回磁盘。空闲进程会存储在磁盘中,所以这些进程在没有运行时不会占用太多内存。另外一种策略叫做虚拟内存(virtual memory),虚拟内存技术能够允许应用程序部分的运行在内存中。下面我们首先先探讨一下交换

    交换过程

    下面是一个交换过程

    刚开始的时候,只有进程 A 在内存中,然后从创建进程 B 和进程 C 或者从磁盘中把它们换入内存,然后在图 d 中,A 被换出内存到磁盘中,最后 A 重新进来。因为图 g 中的进程 A 现在到了不同的位置,所以在装载过程中需要被重新定位,或者在交换程序时通过软件来执行;或者在程序执行期间通过硬件来重定位。基址寄存器和变址寄存器就适用于这种情况。

    交换在内存创建了多个 空闲区(hole),内存会把所有的空闲区尽可能向下移动合并成为一个大的空闲区。这项技术称为内存紧缩(memory compaction)。但是这项技术通常不会使用,因为这项技术会消耗很多 CPU 时间。

    空闲内存管理

    在进行内存动态分配时,操作系统必须对其进行管理。大致上说,有两种监控内存使用的方式

    • 位图(bitmap)
    • 空闲列表(free lists)

    使用位图的存储管理

    使用位图方法时,内存可能被划分为小到几个字或大到几千字节的分配单元。每个分配单元对应于位图中的一位,0 表示空闲, 1 表示占用(或者相反)。一块内存区域和其对应的位图如下

    位图提供了一种简单的方法在固定大小的内存中跟踪内存的使用情况,因为位图的大小取决于内存和分配单元的大小。这种方法有一个问题是,当决定为把具有 k 个分配单元的进程放入内存时,内容管理器(memory manager) 必须搜索位图,在位图中找出能够运行 k 个连续 0 位的串。在位图中找出制定长度的连续 0 串是一个很耗时的操作,这是位图的缺点。(可以简单理解为在杂乱无章的数组中,找出具有一大长串空闲的数组单元)

    使用链表进行管理

    另一种记录内存使用情况的方法是,维护一个记录已分配内存段和空闲内存段的链表,段会包含进程或者是两个进程的空闲区域。可用上面的图 c 来表示内存的使用情况。链表中的每一项都可以代表一个 空闲区(H) 或者是进程(P)的起始标志,长度和下一个链表项的位置。

    当按照地址顺序在链表中存放进程和空闲区时,有几种算法可以为创建的进程(或者从磁盘中换入的进程)分配内存。我们先假设内存管理器知道应该分配多少内存,最简单的算法是使用 首次适配(first fit)。内存管理器会沿着段列表进行扫描,直到找个一个足够大的空闲区为止。 除非空闲区大小和要分配的空间大小一样,否则将空闲区分为两部分,一部分供进程使用;一部分生成新的空闲区。首次适配算法是一种速度很快的算法,因为它会尽可能的搜索链表。

    首次适配的一个小的变体是 下次适配(next fit)。它和首次匹配的工作方式相同,只有一个不同之处那就是下次适配在每次找到合适的空闲区时就会记录当时的位置,以便下次寻找空闲区时从上次结束的地方开始搜索,而不是像首次匹配算法那样每次都会从头开始搜索。

    另外一个著名的并且广泛使用的算法是 最佳适配(best fit)。最佳适配会从头到尾寻找整个链表,找出能够容纳进程的最小空闲区。

    虚拟内存

    尽管基址寄存器和变址寄存器用来创建地址空间的抽象,但是这有一个其他的问题需要解决:管理软件的不断增大(managing bloatware)。虚拟内存的基本思想是,每个程序都有自己的地址空间,这个地址空间被划分为多个称为页面(page)的块。每一页都是连续的地址范围。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,硬件会立刻执行必要的映射。当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。

    分页

    大部分使用虚拟内存的系统中都会使用一种 分页(paging) 技术。在任何一台计算机上,程序会引用使用一组内存地址。当程序执行

    MOV REG,1000
    

    这条指令时,它会把内存地址为 1000 的内存单元的内容复制到 REG 中(或者相反,这取决于计算机)。地址可以通过索引、基址寄存器、段寄存器或其他方式产生。

    这些程序生成的地址被称为 虚拟地址(virtual addresses) 并形成虚拟地址空间(virtual address space),在没有虚拟内存的计算机上,系统直接将虚拟地址送到内存中线上,读写操作都使用同样地址的物理内存。在使用虚拟内存时,虚拟地址不会直接发送到内存总线上。相反,会使用 MMU(Memory Management Unit) 内存管理单元把虚拟地址映射为物理内存地址,像下图这样

    下面这幅图展示了这种映射是如何工作的

    页表给出虚拟地址与物理内存地址之间的映射关系。每一页起始于 4096 的倍数位置,结束于 4095 的位置,所以 4K 到 8K 实际为 4096 - 8191 ,8K - 12K 就是 8192 - 12287

    在这个例子中,我们可能有一个 16 位地址的计算机,地址从 0 - 64 K - 1,这些是虚拟地址。然而只有 32 KB 的物理地址。所以虽然可以编写 64 KB 的程序,但是程序无法全部调入内存运行,在磁盘上必须有一个最多 64 KB 的程序核心映像的完整副本,以保证程序片段在需要时被调入内存。

    页表

    虚拟页号可作为页表的索引用来找到虚拟页中的内容。由页表项可以找到页框号(如果有的话)。然后把页框号拼接到偏移量的高位端,以替换掉虚拟页号,形成物理地址。

    因此,页表的目的是把虚拟页映射到页框中。从数学上说,页表是一个函数,它的参数是虚拟页号,结果是物理页框号。

    通过这个函数可以把虚拟地址中的虚拟页转换为页框,从而形成物理地址。

    页表项的结构

    下面我们探讨一下页表项的具体结构,上面你知道了页表项的大致构成,是由页框号和在/不在位构成的,现在我们来具体探讨一下页表项的构成

    页表项的结构是与机器相关的,但是不同机器上的页表项大致相同。上面是一个页表项的构成,不同计算机的页表项可能不同,但是一般来说都是 32 位的。页表项中最重要的字段就是页框号(Page frame number)。毕竟,页表到页框最重要的一步操作就是要把此值映射过去。下一个比较重要的就是在/不在位,如果此位上的值是 1,那么页表项是有效的并且能够被使用。如果此值是 0 的话,则表示该页表项对应的虚拟页面不在内存中,访问该页面会引起一个缺页异常(page fault)

    保护位(Protection) 告诉我们哪一种访问是允许的,啥意思呢?最简单的表示形式是这个域只有一位,0 表示可读可写,1 表示的是只读

    修改位(Modified)访问位(Referenced) 会跟踪页面的使用情况。当一个页面被写入时,硬件会自动的设置修改位。修改位在页面重新分配页框时很有用。如果一个页面已经被修改过(即它是 的),则必须把它写回磁盘。如果一个页面没有被修改过(即它是 干净的),那么重新分配时这个页框会被直接丢弃,因为磁盘上的副本仍然是有效的。这个位有时也叫做 脏位(dirty bit),因为它反映了页面的状态。

    访问位(Referenced) 在页面被访问时被设置,不管是读还是写。这个值能够帮助操作系统在发生缺页中断时选择要淘汰的页。不再使用的页要比正在使用的页更适合被淘汰。这个位在后面要讨论的页面置换算法中作用很大。

    最后一位用于禁止该页面被高速缓存,这个功能对于映射到设备寄存器还是内存中起到了关键作用。通过这一位可以禁用高速缓存。具有独立的 I/O 空间而不是用内存映射 I/O 的机器来说,并不需要这一位。

    页面置换算法

    下面我们就来探讨一下有哪些页面置换算法。

    最优页面置换算法

    最优的页面置换算法的工作流程如下:在缺页中断发生时,这些页面之一将在下一条指令(包含该指令的页面)上被引用。其他页面则可能要到 10、100 或者 1000 条指令后才会被访问。每个页面都可以用在该页首次被访问前所要执行的指令数作为标记。

    最优化的页面算法表明应该标记最大的页面。如果一个页面在 800 万条指令内不会被使用,另外一个页面在 600 万条指令内不会被使用,则置换前一个页面,从而把需要调入这个页面而发生的缺页中断推迟。计算机也像人类一样,会把不愿意做的事情尽可能的往后拖。

    这个算法最大的问题时无法实现。当缺页中断发生时,操作系统无法知道各个页面的下一次将在什么时候被访问。这种算法在实际过程中根本不会使用。

    最近未使用页面置换算法

    为了能够让操作系统收集页面使用信息,大部分使用虚拟地址的计算机都有两个状态位,R 和 M,来和每个页面进行关联。每当引用页面(读入或写入)时都设置 R,写入(即修改)页面时设置 M,这些位包含在每个页表项中,就像下面所示

    因为每次访问时都会更新这些位,因此由硬件来设置它们非常重要。一旦某个位被设置为 1,就会一直保持 1 直到操作系统下次来修改此位。

    如果硬件没有这些位,那么可以使用操作系统的缺页中断时钟中断机制来进行模拟。当启动一个进程时,将其所有的页面都标记为不在内存;一旦访问任何一个页面就会引发一次缺页中断,此时操作系统就可以设置 R 位(在它的内部表中),修改页表项使其指向正确的页面,并设置为 READ ONLY 模式,然后重新启动引起缺页中断的指令。如果页面随后被修改,就会发生另一个缺页异常。从而允许操作系统设置 M 位并把页面的模式设置为 READ/WRITE

    可以用 R 位和 M 位来构造一个简单的页面置换算法:当启动一个进程时,操作系统将其所有页面的两个位都设置为 0。R 位定期的被清零(在每个时钟中断)。用来将最近未引用的页面和已引用的页面分开。

    当出现缺页中断后,操作系统会检查所有的页面,并根据它们的 R 位和 M 位将当前值分为四类:

    • 第 0 类:没有引用 R,没有修改 M
    • 第 1 类:没有引用 R,已修改 M
    • 第 2 类:引用 R ,没有修改 M
    • 第 3 类:已被访问 R,已被修改 M

    尽管看起来好像无法实现第一类页面,但是当第三类页面的 R 位被时钟中断清除时,它们就会发生。时钟中断不会清除 M 位,因为需要这个信息才能知道是否写回磁盘中。清除 R 但不清除 M 会导致出现一类页面。

    NRU(Not Recently Used) 算法从编号最小的非空类中随机删除一个页面。此算法隐含的思想是,在一个时钟内(约 20 ms)淘汰一个已修改但是没有被访问的页面要比一个大量引用的未修改页面好,NRU 的主要优点是易于理解并且能够有效的实现

    先进先出页面置换算法

    另一种开销较小的方式是使用 FIFO(First-In,First-Out) 算法,这种类型的数据结构也适用在页面置换算法中。由操作系统维护一个所有在当前内存中的页面的链表,最早进入的放在表头,最新进入的页面放在表尾。在发生缺页异常时,会把头部的页移除并且把新的页添加到表尾。

    第二次机会页面置换算法

    我们上面学到的 FIFO 链表页面有个缺陷,那就是出链和入链并不会进行 check 检查,这样就会容易把经常使用的页面置换出去,为了避免这一问题,我们对该算法做一个简单的修改:我们检查最老页面的 R 位,如果是 0 ,那么这个页面就是最老的而且没有被使用,那么这个页面就会被立刻换出。如果 R 位是 1,那么就清除此位,此页面会被放在链表的尾部,修改它的装入时间就像刚放进来的一样。然后继续搜索。

    这种算法叫做 第二次机会(second chance)算法,就像下面这样,我们看到页面 A 到 H 保留在链表中,并按到达内存的时间排序。

    a)按照先进先出的方法排列的页面;b)在时刻 20 处发生缺页异常中断并且 A 的 R 位已经设置时的页面链表。

    假设缺页异常发生在时刻 20 处,这时最老的页面是 A ,它是在 0 时刻到达的。如果 A 的 R 位是 0,那么它将被淘汰出内存,或者把它写回磁盘(如果它已经被修改过),或者只是简单的放弃(如果它是未被修改过)。另一方面,如果它的 R 位已经设置了,则将 A 放到链表的尾部并且重新设置装入时间为当前时刻(20 处),然后清除 R 位。然后从 B 页面开始继续搜索合适的页面。

    寻找第二次机会的是在最近的时钟间隔中未被访问过的页面。如果所有的页面都被访问过,该算法就会被简化为单纯的 FIFO 算法。具体来说,假设图 a 中所有页面都设置了 R 位。操作系统将页面依次移到链表末尾,每次都在添加到末尾时清除 R 位。最后,算法又会回到页面 A,此时的 R 位已经被清除,那么页面 A 就会被执行出链处理,因此算法能够正常结束。

    时钟页面置换算法

    一种比较好的方式是把所有的页面都保存在一个类似钟面的环形链表中,一个表针指向最老的页面。如下图所示

    当缺页错误出现时,算法首先检查表针指向的页面,如果它的 R 位是 0 就淘汰该页面,并把新的页面插入到这个位置,然后把表针向前移动一位;如果 R 位是 1 就清除 R 位并把表针前移一个位置。重复这个过程直到找到了一个 R 位为 0 的页面位置。了解这个算法的工作方式,就明白为什么它被称为 时钟(clokc)算法了。

    最近最少使用页面置换算法

    在前面几条指令中频繁使用的页面和可能在后面的几条指令中被使用。反过来说,已经很久没有使用的页面有可能在未来一段时间内仍不会被使用。这个思想揭示了一个可以实现的算法:在缺页中断时,置换未使用时间最长的页面。这个策略称为 LRU(Least Recently Used) ,最近最少使用页面置换算法。

    虽然 LRU 在理论上是可以实现的,但是从长远看来代价比较高。为了完全实现 LRU,会在内存中维护一个所有页面的链表,最频繁使用的页位于表头,最近最少使用的页位于表尾。困难的是在每次内存引用时更新整个链表。在链表中找到一个页面,删除它,然后把它移动到表头是一个非常耗时的操作,即使使用硬件来实现也是一样的费时。

    用软件模拟 LRU

    尽管上面的 LRU 算法在原则上是可以实现的,但是很少有机器能够拥有那些特殊的硬件。上面是硬件的实现方式,那么现在考虑要用软件来实现 LRU 。一种可以实现的方案是 NFU(Not Frequently Used,最不常用)算法。它需要一个软件计数器来和每个页面关联,初始化的时候是 0 。在每个时钟中断时,操作系统会浏览内存中的所有页,会将每个页面的 R 位(0 或 1)加到它的计数器上。这个计数器大体上跟踪了各个页面访问的频繁程度。当缺页异常出现时,则置换计数器值最小的页面。

    只需要对 NFU 做一个简单的修改就可以让它模拟 LRU,这个修改有两个步骤

    • 首先,在 R 位被添加进来之前先把计数器右移一位;
    • 第二步,R 位被添加到最左边的位而不是最右边的位。

    修改以后的算法称为 老化(aging) 算法,下图解释了老化算法是如何工作的。

    我们假设在第一个时钟周期内页面 0 - 5 的 R 位依次是 1,0,1,0,1,1,(也就是页面 0 是 1,页面 1 是 0,页面 2 是 1 这样类推)。也就是说,在 0 个时钟周期到 1 个时钟周期之间,0,2,4,5 都被引用了,从而把它们的 R 位设置为 1,剩下的设置为 0 。在相关的六个计数器被右移之后 R 位被添加到 左侧 ,就像上图中的 a。剩下的四列显示了接下来的四个时钟周期内的六个计数器变化。

    CPU正在以某个频率前进,该频率的周期称为时钟滴答时钟周期。一个 100Mhz 的处理器每秒将接收100,000,000个时钟滴答。

    当缺页异常出现时,将置换(就是移除)计数器值最小的页面。如果一个页面在前面 4 个时钟周期内都没有被访问过,那么它的计数器应该会有四个连续的 0 ,因此它的值肯定要比前面 3 个时钟周期内都没有被访问过的页面的计数器小。

    这个算法与 LRU 算法有两个重要的区别:看一下上图中的 e,第三列和第五列

    工作集时钟页面置换算法

    当缺页异常发生后,需要扫描整个页表才能确定被淘汰的页面,因此基本工作集算法还是比较浪费时间的。一个对基本工作集算法的提升是基于时钟算法但是却使用工作集的信息,这种算法称为WSClock(工作集时钟)。由于它的实现简单并且具有高性能,因此在实践中被广泛应用。

    与时钟算法一样,所需的数据结构是一个以页框为元素的循环列表,就像下面这样

    ​ 工作集时钟页面置换算法的操作:a) 和 b) 给出 R = 1 时所发生的情形;c) 和 d) 给出 R = 0 的例子

    最初的时候,该表是空的。当装入第一个页面后,把它加载到该表中。随着更多的页面的加入,它们形成一个环形结构。每个表项包含来自基本工作集算法的上次使用时间,以及 R 位(已标明)和 M 位(未标明)。

    与时钟算法一样,在每个缺页异常时,首先检查指针指向的页面。如果 R 位被是设置为 1,该页面在当前时钟周期内就被使用过,那么该页面就不适合被淘汰。然后把该页面的 R 位置为 0,指针指向下一个页面,并重复该算法。该事件序列化后的状态参见图 b。

    现在考虑指针指向的页面 R = 0 时会发生什么,参见图 c,如果页面的使用期限大于 t 并且页面为被访问过,那么这个页面就不会在工作集中,并且在磁盘上会有一个此页面的副本。申请重新调入一个新的页面,并把新的页面放在其中,如图 d 所示。另一方面,如果页面被修改过,就不能重新申请页面,因为这个页面在磁盘上没有有效的副本。为了避免由于调度写磁盘操作引起的进程切换,指针继续向前走,算法继续对下一个页面进行操作。毕竟,有可能存在一个老的,没有被修改过的页面可以立即使用。

    原则上来说,所有的页面都有可能因为磁盘I/O 在某个时钟周期内被调度。为了降低磁盘阻塞,需要设置一个限制,即最大只允许写回 n 个页面。一旦达到该限制,就不允许调度新的写操作。

    那么就有个问题,指针会绕一圈回到原点的,如果回到原点,它的起始点会发生什么?这里有两种情况:

    • 至少调度了一次写操作
    • 没有调度过写操作

    在第一种情况中,指针仅仅是不停的移动,寻找一个未被修改过的页面。由于已经调度了一个或者多个写操作,最终会有某个写操作完成,它的页面会被标记为未修改。置换遇到的第一个未被修改过的页面,这个页面不一定是第一个被调度写操作的页面,因为硬盘驱动程序为了优化性能可能会把写操作重排序。

    对于第二种情况,所有的页面都在工作集中,否则将至少调度了一个写操作。由于缺乏额外的信息,最简单的方法就是置换一个未被修改的页面来使用,扫描中需要记录未被修改的页面的位置,如果不存在未被修改的页面,就选定当前页面并把它写回磁盘。

    页面置换算法小结

    我们到现在已经研究了各种页面置换算法,现在我们来一个简单的总结,算法的总结归纳如下

    算法注释
    最优算法不可实现,但可以用作基准
    NRU(最近未使用) 算法和 LRU 算法很相似
    FIFO(先进先出) 算法有可能会抛弃重要的页面
    第二次机会算法比 FIFO 有较大的改善
    时钟算法实际使用
    LRU(最近最少)算法比较优秀,但是很难实现
    NFU(最不经常食用)算法和 LRU 很类似
    老化算法近似 LRU 的高效算法
    工作集算法实施起来开销很大
    工作集时钟算法比较有效的算法
    • 最优算法在当前页面中置换最后要访问的页面。不幸的是,没有办法来判定哪个页面是最后一个要访问的,因此实际上该算法不能使用。然而,它可以作为衡量其他算法的标准。

    • NRU 算法根据 R 位和 M 位的状态将页面氛围四类。从编号最小的类别中随机选择一个页面。NRU 算法易于实现,但是性能不是很好。存在更好的算法。

    • FIFO 会跟踪页面加载进入内存中的顺序,并把页面放入一个链表中。有可能删除存在时间最长但是还在使用的页面,因此这个算法也不是一个很好的选择。

    • 第二次机会算法是对 FIFO 的一个修改,它会在删除页面之前检查这个页面是否仍在使用。如果页面正在使用,就会进行保留。这个改进大大提高了性能。

    • 时钟 算法是第二次机会算法的另外一种实现形式,时钟算法和第二次算法的性能差不多,但是会花费更少的时间来执行算法。

    • LRU 算法是一个非常优秀的算法,但是没有特殊的硬件(TLB)很难实现。如果没有硬件,就不能使用 LRU 算法。

    • NFU 算法是一种近似于 LRU 的算法,它的性能不是非常好。

    • 老化 算法是一种更接近 LRU 算法的实现,并且可以更好的实现,因此是一个很好的选择

    • 最后两种算法都使用了工作集算法。工作集算法提供了合理的性能开销,但是它的实现比较复杂。WSClock 是另外一种变体,它不仅能够提供良好的性能,而且可以高效地实现。

    总之,最好的算法是老化算法和WSClock算法。他们分别是基于 LRU 和工作集算法。他们都具有良好的性能并且能够被有效的实现。还存在其他一些好的算法,但实际上这两个可能是最重要的。

    下面来聊一聊文件系统,你需要知道下面这些知识点

    文件

    文件命名

    文件是一种抽象机制,它提供了一种方式用来存储信息以及在后面进行读取。可能任何一种机制最重要的特性就是管理对象的命名方式。在创建一个文件后,它会给文件一个命名。当进程终止时,文件会继续存在,并且其他进程可以使用名称访问该文件

    文件命名规则对于不同的操作系统来说是不一样的,但是所有现代操作系统都允许使用 1 - 8 个字母的字符串作为合法文件名。

    某些文件区分大小写字母,而大多数则不区分。UNIX 属于第一类;历史悠久的 MS-DOS 属于第二类(顺便说一句,尽管 MS-DOS 历史悠久,但 MS-DOS 仍在嵌入式系统中非常广泛地使用,因此它绝不是过时的);因此,UNIX 系统会有三种不同的命名文件:mariaMariaMARIA 。在 MS-DOS ,所有这些命名都属于相同的文件。

    许多操作系统支持两部分的文件名,它们之间用 . 分隔开,比如文件名 prog.c。原点后面的文件称为 文件扩展名(file extension) ,文件扩展名通常表示文件的一些信息。一些常用的文件扩展名以及含义如下图所示

    扩展名含义
    bak备份文件
    cc 源程序文件
    gif符合图形交换格式的图像文件
    hlp帮助文件
    htmlWWW 超文本标记语言文档
    jpg符合 JPEG 编码标准的静态图片
    mp3符合 MP3 音频编码格式的音乐文件
    mpg符合 MPEG 编码标准的电影
    o目标文件(编译器输出格式,尚未链接)
    pdfpdf 格式的文件
    psPostScript 文件
    tex为 TEX 格式化程序准备的输入文件
    txt文本文件
    zip压缩文件

    在 UNIX 系统中,文件扩展名只是一种约定,操作系统并不强制采用。

    文件结构

    文件的构造有多种方式。下图列出了常用的三种构造方式

    ​ 三种不同的文件。 a) 字节序列 。b) 记录序列。c) 树

    上图中的 a 是一种无结构的字节序列,操作系统不关心序列的内容是什么,操作系统能看到的就是字节(bytes)。其文件内容的任何含义只在用户程序中进行解释。UNIX 和 Windows 都采用这种办法。

    图 b 表示在文件结构上的第一部改进。在这个模型中,文件是具有固定长度记录的序列,每个记录都有其内部结构。 把文件作为记录序列的核心思想是:读操作返回一个记录,而写操作重写或者追加一个记录。第三种文件结构如上图 c 所示。在这种组织结构中,文件由一颗记录树构成,记录树的长度不一定相同,每个记录树都在记录中的固定位置包含一个key 字段。这棵树按 key 进行排序,从而可以对特定的 key 进行快速查找。

    文件类型

    很多操作系统支持多种文件类型。例如,UNIX(同样包括 OS X)和 Windows 都具有常规的文件和目录。除此之外,UNIX 还具有字符特殊文件(character special file)块特殊文件(block special file)常规文件(Regular files) 是包含有用户信息的文件。用户一般使用的文件大都是常规文件,常规文件一般包括 可执行文件、文本文件、图像文件,从常规文件读取数据或将数据写入时,内核会根据文件系统的规则执行操作,是写入可能被延迟,记录日志或者接受其他操作。

    文件访问

    早期的操作系统只有一种访问方式:序列访问(sequential access)。在这些系统中,进程可以按照顺序读取所有的字节或文件中的记录,但是不能跳过并乱序执行它们。顺序访问文件是可以返回到起点的,需要时可以多次读取该文件。当存储介质是磁带而不是磁盘时,顺序访问文件很方便。

    在使用磁盘来存储文件时,可以不按照顺序读取文件中的字节或者记录,或者按照关键字而不是位置来访问记录。这种能够以任意次序进行读取的称为随机访问文件(random access file)。许多应用程序都需要这种方式。

    随机访问文件对许多应用程序来说都必不可少,例如,数据库系统。如果乘客打电话预定某航班机票,订票程序必须能够直接访问航班记录,而不必先读取其他航班的成千上万条记录。

    有两种方法可以指示从何处开始读取文件。第一种方法是直接使用 read 从头开始读取。另一种是用一个特殊的 seek 操作设置当前位置,在 seek 操作后,从这个当前位置顺序地开始读文件。UNIX 和 Windows 使用的是后面一种方式。

    文件属性

    文件包括文件名和数据。除此之外,所有的操作系统还会保存其他与文件相关的信息,如文件创建的日期和时间、文件大小。我们可以称这些为文件的属性(attributes)。有些人也喜欢把它们称作 元数据(metadata)。文件的属性在不同的系统中差别很大。文件的属性只有两种状态:设置(set)清除(clear)

    文件操作

    使用文件的目的是用来存储信息并方便以后的检索。对于存储和检索,不同的系统提供了不同的操作。以下是与文件有关的最常用的一些系统调用:

    1. Create,创建不包含任何数据的文件。调用的目的是表示文件即将建立,并对文件设置一些属性。
    2. Delete,当文件不再需要,必须删除它以释放内存空间。为此总会有一个系统调用来删除文件。
    3. Open,在使用文件之前,必须先打开文件。这个调用的目的是允许系统将属性和磁盘地址列表保存到主存中,用来以后的快速访问。
    4. Close,当所有进程完成时,属性和磁盘地址不再需要,因此应关闭文件以释放表空间。很多系统限制进程打开文件的个数,以此达到鼓励用户关闭不再使用的文件。磁盘以块为单位写入,关闭文件时会强制写入最后一,即使这个块空间内部还不满。
    5. Read,数据从文件中读取。通常情况下,读取的数据来自文件的当前位置。调用者必须指定需要读取多少数据,并且提供存放这些数据的缓冲区。
    6. Write,向文件写数据,写操作一般也是从文件的当前位置开始进行。如果当前位置是文件的末尾,则会直接追加进行写入。如果当前位置在文件中,则现有数据被覆盖,并且永远消失。
    7. append,使用 append 只能向文件末尾添加数据。
    8. seek,对于随机访问的文件,要指定从何处开始获取数据。通常的方法是用 seek 系统调用把当前位置指针指向文件中的特定位置。seek 调用结束后,就可以从指定位置开始读写数据了。
    9. get attributes,进程运行时通常需要读取文件属性。
    10. set attributes,用户可以自己设置一些文件属性,甚至是在文件创建之后,实现该功能的是 set attributes 系统调用。
    11. rename,用户可以自己更改已有文件的名字,rename 系统调用用于这一目的。

    目录

    文件系统通常提供目录(directories) 或者 文件夹(folders) 用于记录文件的位置,在很多系统中目录本身也是文件,下面我们会讨论关于文件,他们的组织形式、属性和可以对文件进行的操作。

    一级目录系统

    目录系统最简单的形式是有一个能够包含所有文件的目录。这种目录被称为根目录(root directory),由于根目录的唯一性,所以其名称并不重要。在最早期的个人计算机中,这种系统很常见,部分原因是因为只有一个用户。下面是一个单层目录系统的例子

    ​ 含有四个文件的单层目录系统

    该目录中有四个文件。这种设计的优点在于简单,并且能够快速定位文件,毕竟只有一个地方可以检索。这种目录组织形式现在一般用于简单的嵌入式设备(如数码相机和某些便携式音乐播放器)上使用。

    层次目录系统

    对于简单的应用而言,一般都用单层目录方式,但是这种组织形式并不适合于现代计算机,因为现代计算机含有成千上万个文件和文件夹。如果都放在根目录下,查找起来会非常困难。为了解决这一问题,出现了层次目录系统(Hierarchical Directory Systems),也称为目录树。通过这种方式,可以用很多目录把文件进行分组。进而,如果多个用户共享同一个文件服务器,比如公司的网络系统,每个用户可以为自己的目录树拥有自己的私人根目录。这种方式的组织结构如下

    在这里插入图片描述

    根目录含有目录 A、B 和 C ,分别属于不同的用户,其中两个用户个字创建了子目录。用户可以创建任意数量的子目录,现代文件系统都是按照这种方式组织的。

    路径名

    当目录树组织文件系统时,需要有某种方法指明文件名。常用的方法有两种,第一种方式是每个文件都会用一个绝对路径名(absolute path name),它由根目录到文件的路径组成。

    另外一种指定文件名的方法是 相对路径名(relative path name)。它常常和 工作目录(working directory) (也称作 当前目录(current directory))一起使用。用户可以指定一个目录作为当前工作目录。例如,如果当前目录是 /usr/ast,那么绝对路径 /usr/ast/mailbox可以直接使用 mailbox 来引用。

    目录操作

    不同文件中管理目录的系统调用的差别比管理文件的系统调用差别大。为了了解这些系统调用有哪些以及它们怎样工作,下面给出一个例子(取自 UNIX)。

    1. Create,创建目录,除了目录项 ... 外,目录内容为空。
    2. Delete,删除目录,只有空目录可以删除。只包含 ... 的目录被认为是空目录,这两个目录项通常不能删除
    3. opendir,目录内容可被读取。例如,未列出目录中的全部文件,程序必须先打开该目录,然后读其中全部文件的文件名。与打开和读文件相同,在读目录前,必须先打开文件。
    4. closedir,读目录结束后,应该关闭目录用于释放内部表空间。
    5. readdir,系统调用 readdir 返回打开目录的下一个目录项。以前也采用 read 系统调用来读取目录,但是这种方法有一个缺点:程序员必须了解和处理目录的内部结构。相反,不论采用哪一种目录结构,readdir 总是以标准格式返回一个目录项。
    6. rename,在很多方面目录和文件都相似。文件可以更换名称,目录也可以。
    7. link,链接技术允许在多个目录中出现同一个文件。这个系统调用指定一个存在的文件和一个路径名,并建立从该文件到路径所指名字的链接。这样,可以在多个目录中出现同一个文件。有时也被称为硬链接(hard link)
    8. unlink,删除目录项。如果被解除链接的文件只出现在一个目录中,则将它从文件中删除。如果它出现在多个目录中,则只删除指定路径名的链接,依然保留其他路径名的链接。在 UNIX 中,用于删除文件的系统调用就是 unlink。

    文件系统的实现

    文件系统布局

    文件系统存储在磁盘中。大部分的磁盘能够划分出一到多个分区,叫做磁盘分区(disk partitioning) 或者是磁盘分片(disk slicing)。每个分区都有独立的文件系统,每块分区的文件系统可以不同。磁盘的 0 号分区称为 主引导记录(Master Boot Record, MBR),用来引导(boot) 计算机。在 MBR 的结尾是分区表(partition table)。每个分区表给出每个分区由开始到结束的地址。

    当计算机开始引 boot 时,BIOS 读入并执行 MBR。

    引导块

    MBR 做的第一件事就是确定活动分区,读入它的第一个块,称为引导块(boot block) 并执行。引导块中的程序将加载分区中的操作系统。为了一致性,每个分区都会从引导块开始,即使引导块不包含操作系统。引导块占据文件系统的前 4096 个字节,从磁盘上的字节偏移量 0 开始。引导块可用于启动操作系统。

    除了从引导块开始之外,磁盘分区的布局是随着文件系统的不同而变化的。通常文件系统会包含一些属性,如下

    ​ 文件系统布局

    超级块

    紧跟在引导块后面的是 超级块(Superblock),超级块 的大小为 4096 字节,从磁盘上的字节偏移 4096 开始。超级块包含文件系统的所有关键参数

    • 文件系统的大小
    • 文件系统中的数据块数
    • 指示文件系统状态的标志
    • 分配组大小

    在计算机启动或者文件系统首次使用时,超级块会被读入内存。

    空闲空间块

    接着是文件系统中空闲块的信息,例如,可以用位图或者指针列表的形式给出。

    BitMap 位图或者 Bit vector 位向量

    位图或位向量是一系列位或位的集合,其中每个位对应一个磁盘块,该位可以采用两个值:0和1,0表示已分配该块,而1表示一个空闲块。下图中的磁盘上给定的磁盘块实例(分配了绿色块)可以用16位的位图表示为:0000111000000110。

    使用链表进行管理

    在这种方法中,空闲磁盘块链接在一起,即一个空闲块包含指向下一个空闲块的指针。第一个磁盘块的块号存储在磁盘上的单独位置,也缓存在内存中。

    碎片

    这里不得不提一个叫做碎片(fragment)的概念,也称为片段。一般零散的单个数据通常称为片段。 磁盘块可以进一步分为固定大小的分配单元,片段只是在驱动器上彼此不相邻的文件片段。

    inode

    然后在后面是一个 inode(index node),也称作索引节点。它是一个数组的结构,每个文件有一个 inode,inode 非常重要,它说明了文件的方方面面。每个索引节点都存储对象数据的属性和磁盘块位置

    有一种简单的方法可以找到它们 ls -lai 命令。让我们看一下根文件系统:

    inode 节点主要包括了以下信息

    • 模式/权限(保护)
    • 所有者 ID
    • 组 ID
    • 文件大小
    • 文件的硬链接数
    • 上次访问时间
    • 最后修改时间
    • inode 上次修改时间

    文件分为两部分,索引节点和块。一旦创建后,每种类型的块数是固定的。你不能增加分区上 inode 的数量,也不能增加磁盘块的数量。

    紧跟在 inode 后面的是根目录,它存放的是文件系统目录树的根部。最后,磁盘的其他部分存放了其他所有的目录和文件。

    文件的实现

    最重要的问题是记录各个文件分别用到了哪些磁盘块。不同的系统采用了不同的方法。下面我们会探讨一下这些方式。分配背后的主要思想是有效利用文件空间快速访问文件 ,主要有三种分配方案

    • 连续分配
    • 链表分配
    • 索引分配

    连续分配

    最简单的分配方案是把每个文件作为一连串连续数据块存储在磁盘上。因此,在具有 1KB 块的磁盘上,将为 50 KB 文件分配 50 个连续块。

    ​ 使用连续空间存储文件

    上面展示了 40 个连续的内存块。从最左侧的 0 块开始。初始状态下,还没有装载文件,因此磁盘是空的。接着,从磁盘开始处(块 0 )处开始写入占用 4 块长度的内存 A 。然后是一个占用 6 块长度的内存 B,会直接在 A 的末尾开始写。

    注意每个文件都会在新的文件块开始写,所以如果文件 A 只占用了 3 又 1/2 个块,那么最后一个块的部分内存会被浪费。在上面这幅图中,总共展示了 7 个文件,每个文件都会从上个文件的末尾块开始写新的文件块。

    连续的磁盘空间分配有两个优点。

    • 第一,连续文件存储实现起来比较简单,只需要记住两个数字就可以:一个是第一个块的文件地址和文件的块数量。给定第一个块的编号,可以通过简单的加法找到任何其他块的编号。

    • 第二点是读取性能比较强,可以通过一次操作从文件中读取整个文件。只需要一次寻找第一个块。后面就不再需要寻道时间和旋转延迟,所以数据会以全带宽进入磁盘。

    因此,连续的空间分配具有实现简单高性能的特点。

    不幸的是,连续空间分配也有很明显的不足。随着时间的推移,磁盘会变得很零碎。下图解释了这种现象

    这里有两个文件 D 和 F 被删除了。当删除一个文件时,此文件所占用的块也随之释放,就会在磁盘空间中留下一些空闲块。磁盘并不会在这个位置挤压掉空闲块,因为这会复制空闲块之后的所有文件,可能会有上百万的块,这个量级就太大了。

    链表分配

    第二种存储文件的方式是为每个文件构造磁盘块链表,每个文件都是磁盘块的链接列表,就像下面所示

    ​ 以磁盘块的链表形式存储文件

    每个块的第一个字作为指向下一块的指针,块的其他部分存放数据。如果上面这张图你看的不是很清楚的话,可以看看整个的链表分配方案

    与连续分配方案不同,这一方法可以充分利用每个磁盘块。除了最后一个磁盘块外,不会因为磁盘碎片而浪费存储空间。同样,在目录项中,只要存储了第一个文件块,那么其他文件块也能够被找到。

    另一方面,在链表的分配方案中,尽管顺序读取非常方便,但是随机访问却很困难(这也是数组和链表数据结构的一大区别)。

    还有一个问题是,由于指针会占用一些字节,每个磁盘块实际存储数据的字节数并不再是 2 的整数次幂。虽然这个问题并不会很严重,但是这种方式降低了程序运行效率。许多程序都是以长度为 2 的整数次幂来读写磁盘,由于每个块的前几个字节被指针所使用,所以要读出一个完成的块大小信息,就需要当前块的信息和下一块的信息拼凑而成,因此就引发了查找和拼接的开销。

    使用内存表进行链表分配

    由于连续分配和链表分配都有其不可忽视的缺点。所以提出了使用内存中的表来解决分配问题。取出每个磁盘块的指针字,把它们放在内存的一个表中,就可以解决上述链表的两个不足之处。下面是一个例子

    上图表示了链表形成的磁盘块的内容。这两个图中都有两个文件,文件 A 依次使用了磁盘块地址 4、7、 2、 10、 12,文件 B 使用了6、3、11 和 14。也就是说,文件 A 从地址 4 处开始,顺着链表走就能找到文件 A 的全部磁盘块。同样,从第 6 块开始,顺着链走到最后,也能够找到文件 B 的全部磁盘块。你会发现,这两个链表都以不属于有效磁盘编号的特殊标记(-1)结束。内存中的这种表格称为 文件分配表(File Application Table,FAT)

    目录的实现

    文件只有打开后才能够被读取。在文件打开后,操作系统会使用用户提供的路径名来定位磁盘中的目录。目录项提供了查找文件磁盘块所需要的信息。根据系统的不同,提供的信息也不同,可能提供的信息是整个文件的磁盘地址,或者是第一个块的数量(两个链表方案)或 inode的数量。不过不管用那种情况,目录系统的主要功能就是 将文件的 ASCII 码的名称映射到定位数据所需的信息上

    共享文件

    当多个用户在同一个项目中工作时,他们通常需要共享文件。如果这个共享文件同时出现在多个用户目录下,那么他们协同工作起来就很方便。下面的这张图我们在上面提到过,但是有一个更改的地方,就是 C 的一个文件也出现在了 B 的目录下

    如果按照如上图的这种组织方式而言,那么 B 的目录与该共享文件的联系称为 链接(link)。那么文件系统现在就是一个 有向无环图(Directed Acyclic Graph, 简称 DAG),而不是一棵树了。

    日志结构文件系统

    技术的改变会给当前的文件系统带来压力。这种情况下,CPU 会变得越来越快,磁盘会变得越来越大并且越来越便宜(但不会越来越快)。内存容量也是以指数级增长。但是磁盘的寻道时间(除了固态盘,因为固态盘没有寻道时间)并没有获得提高。

    为此,Berkeley 设计了一种全新的文件系统,试图缓解这个问题,这个文件系统就是 日志结构文件系统(Log-structured File System, LFS)。旨在解决以下问题。

    • 不断增长的系统内存

    • 顺序 I/O 性能胜过随机 I/O 性能

    • 现有低效率的文件系统

    • 文件系统不支持 RAID(虚拟化)

    另一方面,当时的文件系统不论是 UNIX 还是 FFS,都有大量的随机读写(在 FFS 中创建一个新文件至少需要5次随机写),因此成为整个系统的性能瓶颈。同时因为 Page cache的存在,作者认为随机读不是主要问题:随着越来越大的内存,大部分的读操作都能被 cache,因此 LFS 主要要解决的是减少对硬盘的随机写操作。

    在这种设计中,inode 甚至具有与 UNIX 中相同的结构,但是现在它们分散在整个日志中,而不是位于磁盘上的固定位置。所以,inode 很定位。为了能够找到 inode ,维护了一个由 inode 索引的 inode map(inode 映射)。表项 i 指向磁盘中的第 i 个 inode 。这个映射保存在磁盘中,但是也保存在缓存中,因此,使用最频繁的部分大部分时间都在内存中。

    到目前为止,所有写入最初都缓存在内存中,并且追加在日志末尾,所有缓存的写入都定期在单个段中写入磁盘。所以,现在打开文件也就意味着用映射定位文件的索引节点。一旦 inode 被定位后,磁盘块的地址就能够被找到。所有这些块本身都将位于日志中某处的分段中。

    真实情况下的磁盘容量是有限的,所以最终日志会占满整个磁盘空间,这种情况下就会出现没有新的磁盘块被写入到日志中。幸运的是,许多现有段可能具有不再需要的块。例如,如果一个文件被覆盖了,那么它的 inode 将被指向新的块,但是旧的磁盘块仍在先前写入的段中占据着空间。

    为了处理这个问题,LFS 有一个清理(clean)线程,它会循环扫描日志并对日志进行压缩。首先,通过查看日志中第一部分的信息来查看其中存在哪些索引节点和文件。它会检查当前 inode 的映射来查看 inode 否在在当前块中,是否仍在被使用。如果不是,该信息将被丢弃。如果仍然在使用,那么 inode 和块就会进入内存等待写回到下一个段中。然后原来的段被标记为空闲,以便日志可以用来存放新的数据。用这种方法,清理线程遍历日志,从后面移走旧的段,然后将有效的数据放入内存等待写到下一个段中。由此一来整个磁盘会形成一个大的环形缓冲区,写线程将新的段写在前面,而清理线程则清理后面的段。

    日志文件系统

    虽然日志结构系统的设计很优雅,但是由于它们和现有的文件系统不相匹配,因此还没有广泛使用。不过,从日志文件结构系统衍生出来一种新的日志系统,叫做日志文件系统,它会记录系统下一步将要做什么的日志。微软的 NTFS 文件系统、Linux 的 ext3 就使用了此日志。 OS X 将日志系统作为可供选项。为了看清它是如何工作的,我们下面讨论一个例子,比如 移除文件 ,这个操作在 UNIX 中需要三个步骤完成:

    • 在目录中删除文件
    • 释放 inode 到空闲 inode 池
    • 将所有磁盘块归还给空闲磁盘池。

    虚拟文件系统

    UNIX 操作系统使用一种 虚拟文件系统(Virtual File System, VFS) 来尝试将多种文件系统构成一个有序的结构。关键的思想是抽象出所有文件系统都共有的部分,并将这部分代码放在一层,这一层再调用具体文件系统来管理数据。下面是一个 VFS 的系统结构

    还是那句经典的话,在计算机世界中,任何解决不了的问题都可以加个代理来解决。所有和文件相关的系统调用在最初的处理上都指向虚拟文件系统。这些来自用户进程的调用,都是标准的 POSIX 系统调用,比如 open、read、write 和 seek 等。VFS 对用户进程有一个 上层 接口,这个接口就是著名的 POSIX 接口。

    文件系统的管理和优化

    能够使文件系统工作是一回事,能够使文件系统高效、稳定的工作是另一回事,下面我们就来探讨一下文件系统的管理和优化。

    磁盘空间管理

    文件通常存在磁盘中,所以如何管理磁盘空间是一个操作系统的设计者需要考虑的问题。在文件上进行存有两种策略:分配 n 个字节的连续磁盘空间;或者把文件拆分成多个并不一定连续的块。在存储管理系统中,主要有分段管理分页管理 两种方式。

    正如我们所看到的,按连续字节序列存储文件有一个明显的问题,当文件扩大时,有可能需要在磁盘上移动文件。内存中分段也有同样的问题。不同的是,相对于把文件从磁盘的一个位置移动到另一个位置,内存中段的移动操作要快很多。因此,几乎所有的文件系统都把文件分割成固定大小的块来存储。

    块大小

    一旦把文件分为固定大小的块来存储,就会出现问题,块的大小是多少?按照磁盘组织方式,扇区、磁道和柱面显然都可以作为分配单位。在分页系统中,分页大小也是主要因素。

    拥有大的块尺寸意味着每个文件,甚至 1 字节文件,都要占用一个柱面空间,也就是说小文件浪费了大量的磁盘空间。另一方面,小块意味着大部分文件将会跨越多个块,因此需要多次搜索和旋转延迟才能读取它们,从而降低了性能。因此,如果分配的块太大会浪费空间;分配的块太小会浪费时间

    记录空闲块

    一旦指定了块大小,下一个问题就是怎样跟踪空闲块。有两种方法被广泛采用,如下图所示

    第一种方法是采用磁盘块链表,链表的每个块中包含极可能多的空闲磁盘块号。对于 1 KB 的块和 32 位的磁盘块号,空闲表中每个块包含有 255 个空闲的块号。考虑 1 TB 的硬盘,拥有大概十亿个磁盘块。为了存储全部地址块号,如果每块可以保存 255 个块号,则需要将近 400 万个块。通常,空闲块用于保存空闲列表,因此存储基本上是空闲的。

    另一种空闲空间管理的技术是位图(bitmap),n 个块的磁盘需要 n 位位图。在位图中,空闲块用 1 表示,已分配的块用 0 表示。对于 1 TB 硬盘的例子,需要 10 亿位表示,即需要大约 130 000 个 1 KB 块存储。很明显,和 32 位链表模型相比,位图需要的空间更少,因为每个块使用 1 位。只有当磁盘快满的时候,链表需要的块才会比位图少。

    磁盘配额

    为了防止一些用户占用太多的磁盘空间,多用户操作通常提供一种磁盘配额(enforcing disk quotas)的机制。系统管理员为每个用户分配最大的文件和块分配,并且操作系统确保用户不会超过其配额。我们下面会谈到这一机制。

    在用户打开一个文件时,操作系统会找到文件属性磁盘地址,并把它们送入内存中的打开文件表。其中一个属性告诉文件所有者是谁。任何有关文件的增加都会记到所有者的配额中。

    ​ 配额表中记录了每个用户的配额

    第二张表包含了每个用户当前打开文件的配额记录,即使是其他人打开该文件也一样。如上图所示,该表的内容是从被打开文件的所有者的磁盘配额文件中提取出来的。当所有文件关闭时,该记录被写回配额文件。

    当在打开文件表中建立一新表项时,会产生一个指向所有者配额记录的指针。每次向文件中添加一个块时,文件所有者所用数据块的总数也随之增加,并会同时增加硬限制软限制的检查。可以超出软限制,但硬限制不可以超出。当已达到硬限制时,再往文件中添加内容将引发错误。同样,对文件数目也存在类似的检查。

    文件系统备份

    做文件备份很耗费时间而且也很浪费空间,这会引起下面几个问题。首先,是要备份整个文件还是仅备份一部分呢?一般来说,只是备份特定目录及其下的全部文件,而不是备份整个文件系统。

    其次,对上次未修改过的文件再进行备份是一种浪费,因而产生了一种增量转储(incremental dumps) 的思想。最简单的增量转储的形式就是周期性的做全面的备份,而每天只对增量转储完成后发生变化的文件做单个备份。

    稍微好一点的方式是只备份最近一次转储以来更改过的文件。当然,这种做法极大的缩减了转储时间,但恢复起来却更复杂,因为最近的全面转储先要全部恢复,随后按逆序进行增量转储。为了方便恢复,人们往往使用更复杂的转储模式。

    第三,既然待转储的往往是海量数据,那么在将其写入磁带之前对文件进行压缩就很有必要。但是,如果在备份过程中出现了文件损坏的情况,就会导致破坏压缩算法,从而使整个磁带无法读取。所以在备份前是否进行文件压缩需慎重考虑。

    第四,对正在使用的文件系统做备份是很难的。如果在转储过程中要添加,删除和修改文件和目录,则转储结果可能不一致。因此,因为转储过程中需要花费数个小时的时间,所以有必要在晚上将系统脱机进行备份,然而这种方式的接受程度并不高。所以,人们修改了转储算法,记下文件系统的瞬时快照,即复制关键的数据结构,然后需要把将来对文件和目录所做的修改复制到块中,而不是到处更新他们。

    磁盘转储到备份磁盘上有两种方案:物理转储和逻辑转储物理转储(physical dump) 是从磁盘的 0 块开始,依次将所有磁盘块按照顺序写入到输出磁盘,并在复制最后一个磁盘时停止。这种程序的万无一失性是其他程序所不具备的。

    第二个需要考虑的是坏块的转储。制造大型磁盘而没有瑕疵是不可能的,所以也会存在一些坏块(bad blocks)。有时进行低级格式化后,坏块会被检测出来并进行标记,这种情况的解决办法是用磁盘末尾的一些空闲块所替换。

    然而,一些块在格式化后会变坏,在这种情况下操作系统可以检测到它们。通常情况下,它可以通过创建一个由所有坏块组成的文件来解决问题,确保它们不会出现在空闲池中并且永远不会被分配。那么此文件是完全不可读的。如果磁盘控制器将所有的坏块重新映射,物理转储还是能够正常工作的。

    Windows 系统有分页文件(paging files)休眠文件(hibernation files) 。它们在文件还原时不发挥作用,同时也不应该在第一时间进行备份。

    文件系统的一致性

    影响可靠性的一个因素是文件系统的一致性。许多文件系统读取磁盘块、修改磁盘块、再把它们写回磁盘。如果系统在所有块写入之前崩溃,文件系统就会处于一种不一致(inconsistent)的状态。如果某些尚未写回的块是索引节点块,目录块或包含空闲列表的块,则此问题是很严重的。

    为了处理文件系统一致性问题,大部分计算机都会有应用程序来检查文件系统的一致性。例如,UNIX 有 fsck;Windows 有 sfc,每当引导系统时(尤其是在崩溃后),都可以运行该程序。

    可以进行两种一致性检查:块的一致性检查和文件的一致性检查。为了检查块的一致性,应用程序会建立两张表,每个包含一个计数器的块,最初设置为 0 。第一个表中的计数器跟踪该块在文件中出现的次数,第二张表中的计数器记录每个块在空闲列表、空闲位图中出现的频率。

    文件系统性能

    访问磁盘的效率要比内存满的多,是时候又祭出这张图了

    从内存读一个 32 位字大概是 10ns,从硬盘上读的速率大概是 100MB/S,对每个 32 位字来说,效率会慢了四倍,另外,还要加上 5 - 10 ms 的寻道时间等其他损耗,如果只访问一个字,内存要比磁盘快百万数量级。所以磁盘优化是很有必要的,下面我们会讨论几种优化方式

    高速缓存

    最常用的减少磁盘访问次数的技术是使用 块高速缓存(block cache) 或者 缓冲区高速缓存(buffer cache)。高速缓存指的是一系列的块,它们在逻辑上属于磁盘,但实际上基于性能的考虑被保存在内存中。

    管理高速缓存有不同的算法,常用的算法是:检查全部的读请求,查看在高速缓存中是否有所需要的块。如果存在,可执行读操作而无须访问磁盘。如果检查块不再高速缓存中,那么首先把它读入高速缓存,再复制到所需的地方。之后,对同一个块的请求都通过高速缓存来完成。

    高速缓存的操作如下图所示

    由于在高速缓存中有许多块,所以需要某种方法快速确定所需的块是否存在。常用方法是将设备和磁盘地址进行散列操作,然后,在散列表中查找结果。具有相同散列值的块在一个链表中连接在一起(这个数据结构是不是很像 HashMap?),这样就可以沿着冲突链查找其他块。

    如果高速缓存已满,此时需要调入新的块,则要把原来的某一块调出高速缓存,如果要调出的块在上次调入后已经被修改过,则需要把它写回磁盘。

    块提前读

    第二个明显提高文件系统的性能是,在需要用到块之前,试图提前将其写入高速缓存,从而提高命中率。许多文件都是顺序读取。如果请求文件系统在某个文件中生成块 k,文件系统执行相关操作并且在完成之后,会检查高速缓存,以便确定块 k + 1 是否已经在高速缓存。如果不在,文件系统会为 k + 1 安排一个预读取,因为文件希望在用到该块的时候能够直接从高速缓存中读取。

    当然,块提前读取策略只适用于实际顺序读取的文件。对随机访问的文件,提前读丝毫不起作用。甚至还会造成阻碍。

    减少磁盘臂运动

    高速缓存和块提前读并不是提高文件系统性能的唯一方法。另一种重要的技术是把有可能顺序访问的块放在一起,当然最好是在同一个柱面上,从而减少磁盘臂的移动次数。当写一个输出文件时,文件系统就必须按照要求一次一次地分配磁盘块。如果用位图来记录空闲块,并且整个位图在内存中,那么选择与前一块最近的空闲块是很容易的。如果用空闲表,并且链表的一部分存在磁盘上,要分配紧邻的空闲块就会困难很多。

    磁盘碎片整理

    在初始安装操作系统后,文件就会被不断的创建和清除,于是磁盘会产生很多的碎片,在创建一个文件时,它使用的块会散布在整个磁盘上,降低性能。删除文件后,回收磁盘块,可能会造成空穴。

    磁盘性能可以通过如下方式恢复:移动文件使它们相互挨着,并把所有的至少是大部分的空闲空间放在一个或多个大的连续区域内。Windows 有一个程序 defrag 就是做这个事儿的。Windows 用户会经常使用它,SSD 除外。

    磁盘碎片整理程序会在让文件系统上很好地运行。Linux 文件系统(特别是 ext2 和 ext3)由于其选择磁盘块的方式,在磁盘碎片整理上一般不会像 Windows 一样困难,因此很少需要手动的磁盘碎片整理。而且,固态硬盘并不受磁盘碎片的影响,事实上,在固态硬盘上做磁盘碎片整理反倒是多此一举,不仅没有提高性能,反而磨损了固态硬盘。所以碎片整理只会缩短固态硬盘的寿命。

    下面我们来探讨一下 I/O 流程问题。

    I/O 设备

    什么是 I/O 设备?I/O 设备又叫做输入/输出设备,它是人类用来和计算机进行通信的外部硬件。输入/输出设备能够向计算机发送数据(输出)并从计算机接收数据(输入)

    I/O 设备(I/O devices)可以分成两种:块设备(block devices)字符设备(character devices)

    块设备

    块设备是一个能存储固定大小块信息的设备,它支持以固定大小的块,扇区或群集读取和(可选)写入数据。每个块都有自己的物理地址。通常块的大小在 512 - 65536 之间。所有传输的信息都会以连续的块为单位。块设备的基本特征是每个块都较为对立,能够独立的进行读写。常见的块设备有 硬盘、蓝光光盘、USB 盘

    与字符设备相比,块设备通常需要较少的引脚。

    块设备的缺点

    基于给定固态存储器的块设备比基于相同类型的存储器的字节寻址要慢一些,因为必须在块的开头开始读取或写入。所以,要读取该块的任何部分,必须寻找到该块的开始,读取整个块,如果不使用该块,则将其丢弃。要写入块的一部分,必须寻找到块的开始,将整个块读入内存,修改数据,再次寻找到块的开头处,然后将整个块写回设备。

    字符设备

    另一类 I/O 设备是字符设备。字符设备以字符为单位发送或接收一个字符流,而不考虑任何块结构。字符设备是不可寻址的,也没有任何寻道操作。常见的字符设备有 打印机、网络设备、鼠标、以及大多数与磁盘不同的设备

    设备控制器

    设备控制器是处理 CPU 传入和传出信号的系统。设备通过插头和插座连接到计算机,并且插座连接到设备控制器。设备控制器从连接的设备处接收数据,并将其存储在控制器内部的一些特殊目的寄存器(special purpose registers) 也就是本地缓冲区中。

    每个设备控制器都会有一个应用程序与之对应,设备控制器通过应用程序的接口通过中断与操作系统进行通信。设备控制器是硬件,而设备驱动程序是软件。

    内存映射 I/O

    每个控制器都会有几个寄存器用来和 CPU 进行通信。通过写入这些寄存器,操作系统可以命令设备发送数据,接收数据、开启或者关闭设备等。通过从这些寄存器中读取信息,操作系统能够知道设备的状态,是否准备接受一个新命令等。

    为了控制寄存器,许多设备都会有数据缓冲区(data buffer),来供系统进行读写。

    那么问题来了,CPU 如何与设备寄存器和设备数据缓冲区进行通信呢?存在两个可选的方式。第一种方法是,每个控制寄存器都被分配一个 I/O 端口(I/O port)号,这是一个 8 位或 16 位的整数。所有 I/O 端口的集合形成了受保护的 I/O 端口空间,以便普通用户程序无法访问它(只有操作系统可以访问)。使用特殊的 I/O 指令像是

    IN REG,PORT
    

    CPU 可以读取控制寄存器 PORT 的内容并将结果放在 CPU 寄存器 REG 中。类似的,使用

    OUT PORT,REG
    

    CPU 可以将 REG 的内容写到控制寄存器中。大多数早期计算机,包括几乎所有大型主机,如 IBM 360 及其所有后续机型,都是以这种方式工作的。

    第二个方法是 PDP-11 引入的,它将所有控制寄存器映射到内存空间中。

    直接内存访问

    无论一个 CPU 是否具有内存映射 I/O,它都需要寻址设备控制器以便与它们交换数据。CPU 可以从 I/O 控制器每次请求一个字节的数据,但是这么做会浪费 CPU 时间,所以经常会用到一种称为直接内存访问(Direct Memory Access) 的方案。为了简化,我们假设 CPU 通过单一的系统总线访问所有的设备和内存,该总线连接 CPU 、内存和 I/O 设备,如下图所示

    ​ DMA 传送操作

    现代操作系统实际更为复杂,但是原理是相同的。如果硬件有DMA 控制器,那么操作系统只能使用 DMA。有时这个控制器会集成到磁盘控制器和其他控制器中,但这种设计需要在每个设备上都装有一个分离的 DMA 控制器。单个的 DMA 控制器可用于向多个设备传输,这种传输往往同时进行。

    DMA 工作原理

    首先 CPU 通过设置 DMA 控制器的寄存器对它进行编程,所以 DMA 控制器知道将什么数据传送到什么地方。DMA 控制器还要向磁盘控制器发出一个命令,通知它从磁盘读数据到其内部的缓冲区并检验校验和。当有效数据位于磁盘控制器的缓冲区中时,DMA 就可以开始了。

    DMA 控制器通过在总线上发出一个读请求到磁盘控制器而发起 DMA 传送,这是第二步。这个读请求就像其他读请求一样,磁盘控制器并不知道或者并不关心它是来自 CPU 还是来自 DMA 控制器。通常情况下,要写的内存地址在总线的地址线上,所以当磁盘控制器去匹配下一个字时,它知道将该字写到什么地方。写到内存就是另外一个总线循环了,这是第三步。当写操作完成时,磁盘控制器在总线上发出一个应答信号到 DMA 控制器,这是第四步。

    然后,DMA 控制器会增加内存地址并减少字节数量。如果字节数量仍然大于 0 ,就会循环步骤 2 - 步骤 4 ,直到字节计数变为 0 。此时,DMA 控制器会打断 CPU 并告诉它传输已经完成了。

    重温中断

    在一台个人计算机体系结构中,中断结构会如下所示

    ​ 中断是怎样发生的

    当一个 I/O 设备完成它的工作后,它就会产生一个中断(默认操作系统已经开启中断),它通过在总线上声明已分配的信号来实现此目的。主板上的中断控制器芯片会检测到这个信号,然后执行中断操作。

    精确中断和不精确中断

    使机器处于良好状态的中断称为精确中断(precise interrupt)。这样的中断具有四个属性:

    • PC (程序计数器)保存在一个已知的地方
    • PC 所指向的指令之前所有的指令已经完全执行
    • PC 所指向的指令之后所有的指令都没有执行
    • PC 所指向的指令的执行状态是已知的

    不满足以上要求的中断称为 不精确中断(imprecise interrupt),不精确中断让人很头疼。上图描述了不精确中断的现象。指令的执行时序和完成度具有不确定性,而且恢复起来也非常麻烦。

    IO 软件原理

    I/O 软件目标

    设备独立性

    I/O 软件设计一个很重要的目标就是设备独立性(device independence)。这意味着我们能够编写访问任何设备的应用程序,而不用事先指定特定的设备

    错误处理

    除了设备独立性外,I/O 软件实现的第二个重要的目标就是错误处理(error handling)。通常情况下来说,错误应该交给硬件层面去处理。如果设备控制器发现了读错误的话,它会尽可能的去修复这个错误。如果设备控制器处理不了这个问题,那么设备驱动程序应该进行处理,设备驱动程序会再次尝试读取操作,很多错误都是偶然性的,如果设备驱动程序无法处理这个错误,才会把错误向上抛到硬件层面(上层)进行处理,很多时候,上层并不需要知道下层是如何解决错误的。

    同步和异步传输

    I/O 软件实现的第三个目标就是 同步(synchronous)异步(asynchronous,即中断驱动)传输。这里先说一下同步和异步是怎么回事吧。

    同步传输中数据通常以块或帧的形式发送。发送方和接收方在数据传输之前应该具有同步时钟。而在异步传输中,数据通常以字节或者字符的形式发送,异步传输则不需要同步时钟,但是会在传输之前向数据添加奇偶校验位。大部分物理IO(physical I/O) 是异步的。物理 I/O 中的 CPU 是很聪明的,CPU 传输完成后会转而做其他事情,它和中断心灵相通,等到中断发生后,CPU 才会回到传输这件事情上来。

    缓冲

    I/O 软件的最后一个问题是缓冲(buffering)。通常情况下,从一个设备发出的数据不会直接到达最后的设备。其间会经过一系列的校验、检查、缓冲等操作才能到达。

    共享和独占

    I/O 软件引起的最后一个问题就是共享设备和独占设备的问题。有些 I/O 设备能够被许多用户共同使用。一些设备比如磁盘,让多个用户使用一般不会产生什么问题,但是某些设备必须具有独占性,即只允许单个用户使用完成后才能让其他用户使用。

    一共有三种控制 I/O 设备的方法

    • 使用程序控制 I/O
    • 使用中断驱动 I/O
    • 使用 DMA 驱动 I/O

    I/O 层次结构

    I/O 软件通常组织成四个层次,它们的大致结构如下图所示

    下面我们具体的来探讨一下上面的层次结构

    中断处理程序

    在计算机系统中,中断就像女人的脾气一样无时无刻都在产生,中断的出现往往是让人很不爽的。中断处理程序又被称为中断服务程序 或者是 ISR(Interrupt Service Routines),它是最靠近硬件的一层。中断处理程序由硬件中断、软件中断或者是软件异常启动产生的中断,用于实现设备驱动程序或受保护的操作模式(例如系统调用)之间的转换。

    中断处理程序负责处理中断发生时的所有操作,操作完成后阻塞,然后启动中断驱动程序来解决阻塞。通常会有三种通知方式,依赖于不同的具体实现

    • 信号量实现中:在信号量上使用 up 进行通知;
    • 管程实现:对管程中的条件变量执行 signal 操作
    • 还有一些情况是发送一些消息

    设备驱动程序

    每个连接到计算机的 I/O 设备都需要有某些特定设备的代码对其进行控制。这些提供 I/O 设备到设备控制器转换的过程的代码称为 设备驱动程序(Device driver)

    设备控制器的主要功能有下面这些

    • 接收和识别命令:设备控制器可以接受来自 CPU 的指令,并进行识别。设备控制器内部也会有寄存器,用来存放指令和参数

    • 进行数据交换:CPU、控制器和设备之间会进行数据的交换,CPU 通过总线把指令发送给控制器,或从控制器中并行地读出数据;控制器将数据写入指定设备。

    • 地址识别:每个硬件设备都有自己的地址,设备控制器能够识别这些不同的地址,来达到控制硬件的目的,此外,为使 CPU 能向寄存器中写入或者读取数据,这些寄存器都应具有唯一的地址。

    • 差错检测:设备控制器还具有对设备传递过来的数据进行检测的功能。

    在这种情况下,设备控制器会阻塞,直到中断来解除阻塞状态。还有一种情况是操作是可以无延迟的完成,所以驱动程序不需要阻塞。在第一种情况下,操作系统可能被中断唤醒;第二种情况下操作系统不会被休眠。

    设备驱动程序必须是可重入的,因为设备驱动程序会阻塞和唤醒然后再次阻塞。驱动程序不允许进行系统调用,但是它们通常需要与内核的其余部分进行交互。

    与设备无关的 I/O 软件

    I/O 软件有两种,一种是我们上面介绍过的基于特定设备的,还有一种是设备无关性的,设备无关性也就是不需要特定的设备。设备驱动程序与设备无关的软件之间的界限取决于具体的系统。下面显示的功能由设备无关的软件实现

    与设备无关的软件的基本功能是对所有设备执行公共的 I/O 功能,并且向用户层软件提供一个统一的接口。

    缓冲

    无论是对于块设备还是字符设备来说,缓冲都是一个非常重要的考量标准。缓冲技术应用广泛,但它也有缺点。如果数据被缓冲次数太多,会影响性能。

    错误处理

    在 I/O 中,出错是一种再正常不过的情况了。当出错发生时,操作系统必须尽可能处理这些错误。有一些错误是只有特定的设备才能处理,有一些是由框架进行处理,这些错误和特定的设备无关。

    I/O 错误的一类是程序员编程错误,比如还没有打开文件前就读流,或者不关闭流导致内存溢出等等。这类问题由程序员处理;另外一类是实际的 I/O 错误,例如向一个磁盘坏块写入数据,无论怎么写都写入不了。这类问题由驱动程序处理,驱动程序处理不了交给硬件处理,这个我们上面也说过。

    设备驱动程序统一接口

    我们在操作系统概述中说到,操作系统一个非常重要的功能就是屏蔽了硬件和软件的差异性,为硬件和软件提供了统一的标准,这个标准还体现在为设备驱动程序提供统一的接口,因为不同的硬件和厂商编写的设备驱动程序不同,所以如果为每个驱动程序都单独提供接口的话,这样没法搞,所以必须统一。

    分配和释放

    一些设备例如打印机,它只能由一个进程来使用,这就需要操作系统根据实际情况判断是否能够对设备的请求进行检查,判断是否能够接受其他请求,一种比较简单直接的方式是在特殊文件上执行 open操作。如果设备不可用,那么直接 open 会导致失败。还有一种方式是不直接导致失败,而是让其阻塞,等到另外一个进程释放资源后,在进行 open 打开操作。这种方式就把选择权交给了用户,由用户判断是否应该等待。

    设备无关的块

    不同的磁盘会具有不同的扇区大小,但是软件不会关心扇区大小,只管存储就是了。一些字符设备可以一次一个字节的交付数据,而其他的设备则以较大的单位交付数据,这些差异也可以隐藏起来。

    用户空间的 I/O 软件

    虽然大部分 I/O 软件都在内核结构中,但是还有一些在用户空间实现的 I/O 软件,凡事没有绝对。一些 I/O 软件和库过程在用户空间存在,然后以提供系统调用的方式实现。

    盘可以说是硬件里面比较简单的构造了,同时也是最重要的。下面我们从盘谈起,聊聊它的物理构造

    盘硬件

    盘会有很多种类型。其中最简单的构造就是磁盘(magnetic hard disks), 也被称为 hard disk,HDD等。磁盘通常与安装在磁臂上的磁头配对,磁头可将数据读取或者将数据写入磁盘,因此磁盘的读写速度都同样快。在磁盘中,数据是随机访问的,这也就说明可以通过任意的顺序来存储检索单个数据块,所以你可以在任意位置放置磁盘来让磁头读取,磁盘是一种非易失性的设备,即使断电也能永久保留。

    磁盘

    为了组织和检索数据,会将磁盘组织成特定的结构,这些特定的结构就是磁道、扇区和柱面

    磁盘被组织成柱面形式,每个盘用轴相连,每一个柱面包含若干磁道,每个磁道由若干扇区组成。软盘上大约每个磁道有 8 - 32 个扇区,硬盘上每条磁道上扇区的数量可达几百个,磁头大约是 1 - 16 个。

    对于磁盘驱动程序来说,一个非常重要的特性就是控制器是否能够同时控制两个或者多个驱动器进行磁道寻址,这就是重叠寻道(overlapped seek)。对于控制器来说,它能够控制一个磁盘驱动程序完成寻道操作,同时让其他驱动程序等待寻道结束。控制器也可以在一个驱动程序上进行读写草哦做,与此同时让另外的驱动器进行寻道操作,但是软盘控制器不能在两个驱动器上进行读写操作。

    RAID

    RAID 称为 磁盘冗余阵列,简称 磁盘阵列。利用虚拟化技术把多个硬盘结合在一起,成为一个或多个磁盘阵列组,目的是提升性能或数据冗余。

    RAID 有不同的级别

    • RAID 0 - 无容错的条带化磁盘阵列
    • RAID 1 - 镜像和双工
    • RAID 2 - 内存式纠错码
    • RAID 3 - 比特交错奇偶校验
    • RAID 4 - 块交错奇偶校验
    • RAID 5 - 块交错分布式奇偶校验
    • RAID 6 - P + Q冗余

    磁盘格式化

    磁盘由一堆铝的、合金或玻璃的盘片组成,磁盘刚被创建出来后,没有任何信息。磁盘在使用前必须经过低级格式化(low-levvel format),下面是一个扇区的格式

    前导码相当于是标示扇区的开始位置,通常以位模式开始,前导码还包括柱面号扇区号等一些其他信息。紧随前导码后面的是数据区,数据部分的大小由低级格式化程序来确定。大部分磁盘使用 512 字节的扇区。数据区后面是 ECC,ECC 的全称是 error correction code数据纠错码,它与普通的错误检测不同,ECC 还可以用于恢复读错误。ECC 阶段的大小由不同的磁盘制造商实现。ECC 大小的设计标准取决于设计者愿意牺牲多少磁盘空间来提高可靠性,以及程序可以处理的 ECC 的复杂程度。通常情况下 ECC 是 16 位,除此之外,硬盘一般具有一定数量的备用扇区,用于替换制造缺陷的扇区。

    磁盘臂调度算法

    下面我们来探讨一下关于影响磁盘读写的算法,一般情况下,影响磁盘快读写的时间由下面几个因素决定

    • 寻道时间 - 寻道时间指的就是将磁盘臂移动到需要读取磁盘块上的时间
    • 旋转延迟 - 等待合适的扇区旋转到磁头下所需的时间
    • 实际数据的读取或者写入时间

    这三种时间参数也是磁盘寻道的过程。一般情况下,寻道时间对总时间的影响最大,所以,有效的降低寻道时间能够提高磁盘的读取速度。

    如果磁盘驱动程序每次接收一个请求并按照接收顺序完成请求,这种处理方式也就是 先来先服务(First-Come, First-served, FCFS) ,这种方式很难优化寻道时间。因为每次都会按照顺序处理,不管顺序如何,有可能这次读完后需要等待一个磁盘旋转一周才能继续读取,而其他柱面能够马上进行读取,这种情况下每次请求也会排队。

    通常情况下,磁盘在进行寻道时,其他进程会产生其他的磁盘请求。磁盘驱动程序会维护一张表,表中会记录着柱面号当作索引,每个柱面未完成的请求会形成链表,链表头存放在表的相应表项中。

    一种对先来先服务的算法改良的方案是使用 最短路径优先(SSF) 算法,下面描述了这个算法。

    假如我们在对磁道 6 号进行寻址时,同时发生了对 11 , 2 , 4, 14, 8, 15, 3 的请求,如果采用先来先服务的原则,如下图所示

    我们可以计算一下磁盘臂所跨越的磁盘数量为 5 + 9 + 2 + 10 + 6 + 7 + 12 = 51,相当于是跨越了 51 次盘面,如果使用最短路径优先,我们来计算一下跨越的盘面

    跨越的磁盘数量为 4 + 1 + 1 + 4 + 3 + 3 + 1 = 17 ,相比 51 足足省了两倍的时间。

    但是,最短路径优先的算法也不是完美无缺的,这种算法照样存在问题,那就是优先级 问题,

    这里有一个原型可以参考就是我们日常生活中的电梯,电梯使用一种电梯算法(elevator algorithm) 来进行调度,从而满足协调效率和公平性这两个相互冲突的目标。电梯一般会保持向一个方向移动,直到在那个方向上没有请求为止,然后改变方向。

    电梯算法需要维护一个二进制位,也就是当前的方向位:UP(向上)或者是 DOWN(向下)。当一个请求处理完成后,磁盘或电梯的驱动程序会检查该位,如果此位是 UP 位,磁盘臂或者电梯仓移到下一个更高跌未完成的请求。如果高位没有未完成的请求,则取相反方向。当方向位是 DOWN时,同时存在一个低位的请求,磁盘臂会转向该点。如果不存在的话,那么它只是停止并等待。

    我们举个例子来描述一下电梯算法,比如各个柱面得到服务的顺序是 4,7,10,14,9,6,3,1 ,那么它的流程图如下

    所以电梯算法需要跨越的盘面数量是 3 + 3 + 4 + 5 + 3 + 3 + 1 = 22

    电梯算法通常情况下不如 SSF 算法。

    错误处理

    一般坏块有两种处理办法,一种是在控制器中进行处理;一种是在操作系统层面进行处理。

    这两种方法经常替换使用,比如一个具有 30 个数据扇区和两个备用扇区的磁盘,其中扇区 4 是有瑕疵的。

    控制器能做的事情就是将备用扇区之一重新映射。

    还有一种处理方式是将所有的扇区都向上移动一个扇区

    上面这这两种情况下控制器都必须知道哪个扇区,可以通过内部的表来跟踪这一信息,或者通过重写前导码来给出重新映射的扇区号。如果是重写前导码,那么涉及移动的方式必须重写后面所有的前导码,但是最终会提供良好的性能。

    稳定存储器

    磁盘经常会出现错误,导致好的扇区会变成坏扇区,驱动程序也有可能挂掉。RAID 可以对扇区出错或者是驱动器崩溃提出保护,然而 RAID 却不能对坏数据中的写错误提供保护,也不能对写操作期间的崩溃提供保护,这样就会破坏原始数据。

    我们期望磁盘能够准确无误的工作,但是事实情况是不可能的,但是我们能够知道的是,一个磁盘子系统具有如下特性:当一个写命令发给它时,磁盘要么正确地写数据,要么什么也不做,让现有的数据完整无误的保留。这样的系统称为 稳定存储器(stable storage)。 稳定存储器的目标就是不惜一切代价保证磁盘的一致性。

    稳定存储器使用两个一对相同的磁盘,对应的块一同工作形成一个无差别的块。稳定存储器为了实现这个目的,定义了下面三种操作:

    • 稳定写(stable write)
    • 稳定读(stable read)
    • 崩溃恢复(crash recovery)

    时钟

    时钟(Clocks) 也被称为定时器(timers),时钟/定时器对任何程序系统来说都是必不可少的。时钟负责维护时间、防止一个进程长期占用 CPU 时间等其他功能。时钟软件(clock software) 也是一种设备驱动的方式。下面我们就来对时钟进行介绍,一般都是先讨论硬件再介绍软件,采用由下到上的方式,也是告诉你,底层是最重要的。

    时钟硬件

    在计算机中有两种类型的时钟,这些时钟与现实生活中使用的时钟完全不一样。

    • 比较简单的一种时钟被连接到 110 V 或 220 V 的电源线上,这样每个电压周期会产生一个中断,大概是 50 - 60 HZ。这些时钟过去一直占据支配地位。
    • 另外的一种时钟由晶体振荡器、计数器和寄存器组成,示意图如下所示

    这种时钟称为可编程时钟 ,可编程时钟有两种模式,一种是 一键式(one-shot mode),当时钟启动时,会把存储器中的值复制到计数器中,然后,每次晶体的振荡器的脉冲都会使计数器 -1。当计数器变为 0 时,会产生一个中断,并停止工作,直到软件再一次显示启动。还有一种模式时 方波(square-wave mode) 模式,在这种模式下,当计数器变为 0 并产生中断后,存储寄存器的值会自动复制到计数器中,这种周期性的中断称为一个时钟周期。

    时钟软件

    时钟硬件所做的工作只是根据已知的时间间隔产生中断,而其他的工作都是由时钟软件来完成,一般操作系统的不同,时钟软件的具体实现也不同,但是一般都会包括以下这几点

    • 维护一天的时间
    • 阻止进程运行的时间超过其指定时间
    • 统计 CPU 的使用情况
    • 处理用户进程的警告系统调用
    • 为系统各个部分提供看门狗定时器
    • 完成概要剖析,监视和信息收集

    软定时器

    时钟软件也被称为可编程时钟,可以设置它以程序需要的任何速率引发中断。时钟软件触发的中断是一种硬中断,但是某些应用程序对于硬中断来说是不可接受的。

    这时候就需要一种软定时器(soft timer) 避免了中断,无论何时当内核因为某种原因呢在运行时,它返回用户态之前都会检查时钟来了解软定时器是否到期。如果软定时器到期,则执行被调度的事件也无需切换到内核态,因为本身已经处于内核态中。这种方式避免了频繁的内核态和用户态之前的切换,提高了程序运行效率。

    软定时器因为不同的原因切换进入内核态的速率不同,原因主要有

    • 系统调用
    • TLB 未命中
    • 缺页异常
    • I/O 中断
    • CPU 变得空闲

    死锁问题也是操作系统非常重要的一类问题

    资源

    大部分的死锁都和资源有关,在进程对设备、文件具有独占性(排他性)时会产生死锁。我们把这类需要排他性使用的对象称为资源(resource)。资源主要分为 可抢占资源和不可抢占资源

    ###可抢占资源和不可抢占资源

    资源主要有可抢占资源和不可抢占资源。可抢占资源(preemptable resource) 可以从拥有它的进程中抢占而不会造成其他影响,内存就是一种可抢占性资源,任何进程都能够抢先获得内存的使用权。

    不可抢占资源(nonpreemtable resource) 指的是除非引起错误或者异常,否则进程无法抢占指定资源,这种不可抢占的资源比如有光盘,在进程执行调度的过程中,其他进程是不能得到该资源的。

    死锁

    如果要对死锁进行一个定义的话,下面的定义比较贴切

    如果一组进程中的每个进程都在等待一个事件,而这个事件只能由该组中的另一个进程触发,这种情况会导致死锁

    资源死锁的条件

    针对我们上面的描述,资源死锁可能出现的情况主要有

    • 互斥条件:每个资源都被分配给了一个进程或者资源是可用的
    • 保持和等待条件:已经获取资源的进程被认为能够获取新的资源
    • 不可抢占条件:分配给一个进程的资源不能强制的从其他进程抢占资源,它只能由占有它的进程显示释放
    • 循环等待:死锁发生时,系统中一定有两个或者两个以上的进程组成一个循环,循环中的每个进程都在等待下一个进程释放的资源。

    发生死锁时,上面的情况必须同时会发生。如果其中任意一个条件不会成立,死锁就不会发生。可以通过破坏其中任意一个条件来破坏死锁,下面这些破坏条件就是我们探讨的重点

    死锁模型

    Holt 在 1972 年提出对死锁进行建模,建模的标准如下:

    • 圆形表示进程
    • 方形表示资源

    从资源节点到进程节点表示资源已经被进程占用,如下图所示

    在上图中表示当前资源 R 正在被 A 进程所占用

    由进程节点到资源节点的有向图表示当前进程正在请求资源,并且该进程已经被阻塞,处于等待这个资源的状态

    在上图中,表示的含义是进程 B 正在请求资源 S 。Holt 认为,死锁的描述应该如下

    这是一个死锁的过程,进程 C 等待资源 T 的释放,资源 T 却已经被进程 D 占用,进程 D 等待请求占用资源 U ,资源 U 却已经被线程 C 占用,从而形成环。

    有四种处理死锁的策略:

    • 忽略死锁带来的影响(惊呆了)
    • 检测死锁并回复死锁,死锁发生时对其进行检测,一旦发生死锁后,采取行动解决问题
    • 通过仔细分配资源来避免死锁
    • 通过破坏死锁产生的四个条件之一来避免死锁

    下面我们分别介绍一下这四种方法

    鸵鸟算法

    最简单的解决办法就是使用鸵鸟算法(ostrich algorithm),把头埋在沙子里,假装问题根本没有发生。每个人看待这个问题的反应都不同。数学家认为死锁是不可接受的,必须通过有效的策略来防止死锁的产生。工程师想要知道问题发生的频次,系统因为其他原因崩溃的次数和死锁带来的严重后果。如果死锁发生的频次很低,而经常会由于硬件故障、编译器错误等其他操作系统问题导致系统崩溃,那么大多数工程师不会修复死锁。

    死锁检测和恢复

    第二种技术是死锁的检测和恢复。这种解决方式不会尝试去阻止死锁的出现。相反,这种解决方案会希望死锁尽可能的出现,在监测到死锁出现后,对其进行恢复。下面我们就来探讨一下死锁的检测和恢复的几种方式

    每种类型一个资源的死锁检测方式

    每种资源类型都有一个资源是什么意思?我们经常提到的打印机就是这样的,资源只有打印机,但是设备都不会超过一个。

    可以通过构造一张资源分配表来检测这种错误,比如我们上面提到的

    如果这张图包含了一个或一个以上的环,那么死锁就存在,处于这个环中任意一个进程都是死锁的进程。

    每种类型多个资源的死锁检测方式

    如果有多种相同的资源存在,就需要采用另一种方法来检测死锁。可以通过构造一个矩阵来检测从 P1 -> Pn 这 n 个进程中的死锁。

    现在我们提供一种基于矩阵的算法来检测从 P1 到 Pn 这 n 个进程中的死锁。假设资源类型为 m,E1 代表资源类型1,E2 表示资源类型 2 ,Ei 代表资源类型 i (1 <= i <= m)。E 表示的是 现有资源向量(existing resource vector),代表每种已存在的资源总数。

    现在我们就需要构造两个数组:C 表示的是当前分配矩阵(current allocation matrix) ,R 表示的是 请求矩阵(request matrix)。Ci 表示的是 Pi 持有每一种类型资源的资源数。所以,Cij 表示 Pi 持有资源 j 的数量。Rij 表示 Pi 所需要获得的资源 j 的数量

    一般来说,已分配资源 j 的数量加起来再和所有可供使用的资源数相加 = 该类资源的总数。

    死锁的检测就是基于向量的比较。每个进程起初都是没有被标记过的,算法会开始对进程做标记,进程被标记后说明进程被执行了,不会进入死锁,当算法结束时,任何没有被标记过的进程都会被判定为死锁进程。

    上面我们探讨了两种检测死锁的方式,那么现在你知道怎么检测后,你何时去做死锁检测呢?一般来说,有两个考量标准:

    • 每当有资源请求时就去检测,这种方式会占用昂贵的 CPU 时间。
    • 每隔 k 分钟检测一次,或者当 CPU 使用率降低到某个标准下去检测。考虑到 CPU 效率的原因,如果死锁进程达到一定数量,就没有多少进程可以运行,所以 CPU 会经常空闲。

    从死锁中恢复

    上面我们探讨了如何检测进程死锁,我们最终的目的肯定是想让程序能够正常的运行下去,所以针对检测出来的死锁,我们要对其进行恢复,下面我们会探讨几种死锁的恢复方式

    通过抢占进行恢复

    在某些情况下,可能会临时将某个资源从它的持有者转移到另一个进程。比如在不通知原进程的情况下,将某个资源从进程中强制取走给其他进程使用,使用完后又送回。这种恢复方式一般比较困难而且有些简单粗暴,并不可取。

    通过回滚进行恢复

    如果系统设计者和机器操作员知道有可能发生死锁,那么就可以定期检查流程。进程的检测点意味着进程的状态可以被写入到文件以便后面进行恢复。检测点不仅包含存储映像(memory image),还包含资源状态(resource state)。一种更有效的解决方式是不要覆盖原有的检测点,而是每出现一个检测点都要把它写入到文件中,这样当进程执行时,就会有一系列的检查点文件被累积起来。

    为了进行恢复,要从上一个较早的检查点上开始,这样所需要资源的进程会回滚到上一个时间点,在这个时间点上,死锁进程还没有获取所需要的资源,可以在此时对其进行资源分配。

    杀死进程恢复

    最简单有效的解决方案是直接杀死一个死锁进程。但是杀死一个进程可能照样行不通,这时候就需要杀死别的资源进行恢复。

    另外一种方式是选择一个环外的进程作为牺牲品来释放进程资源。

    死锁避免

    我们上面讨论的是如何检测出现死锁和如何恢复死锁,下面我们探讨几种规避死锁的方式

    单个资源的银行家算法

    银行家算法是 Dijkstra 在 1965 年提出的一种调度算法,它本身是一种死锁的调度算法。它的模型是基于一个城镇中的银行家,银行家向城镇中的客户承诺了一定数量的贷款额度。算法要做的就是判断请求是否会进入一种不安全的状态。如果是,就拒绝请求,如果请求后系统是安全的,就接受该请求。

    类似的,还有多个资源的银行家算法,读者可以自行了解。

    破坏死锁

    死锁本质上是无法避免的,因为它需要获得未知的资源和请求,但是死锁是满足四个条件后才出现的,它们分别是

    • 互斥
    • 保持和等待
    • 不可抢占
    • 循环等待

    我们分别对这四个条件进行讨论,按理说破坏其中的任意一个条件就能够破坏死锁

    破坏互斥条件

    我们首先考虑的就是破坏互斥使用条件。如果资源不被一个进程独占,那么死锁肯定不会产生。如果两个打印机同时使用一个资源会造成混乱,打印机的解决方式是使用 假脱机打印机(spooling printer) ,这项技术可以允许多个进程同时产生输出,在这种模型中,实际请求打印机的唯一进程是打印机守护进程,也称为后台进程。后台进程不会请求其他资源。我们可以消除打印机的死锁。

    后台进程通常被编写为能够输出完整的文件后才能打印,假如两个进程都占用了假脱机空间的一半,而这两个进程都没有完成全部的输出,就会导致死锁。

    因此,尽量做到尽可能少的进程可以请求资源。

    破坏保持等待的条件

    第二种方式是如果我们能阻止持有资源的进程请求其他资源,我们就能够消除死锁。一种实现方式是让所有的进程开始执行前请求全部的资源。如果所需的资源可用,进程会完成资源的分配并运行到结束。如果有任何一个资源处于频繁分配的情况,那么没有分配到资源的进程就会等待。

    很多进程无法在执行完成前就知道到底需要多少资源,如果知道的话,就可以使用银行家算法;还有一个问题是这样无法合理有效利用资源

    还有一种方式是进程在请求其他资源时,先释放所占用的资源,然后再尝试一次获取全部的资源。

    破坏不可抢占条件

    破坏不可抢占条件也是可以的。可以通过虚拟化的方式来避免这种情况。

    破坏循环等待条件

    现在就剩最后一个条件了,循环等待条件可以通过多种方法来破坏。一种方式是制定一个标准,一个进程在任何时候只能使用一种资源。如果需要另外一种资源,必须释放当前资源。对于需要将大文件从磁带复制到打印机的过程,此限制是不可接受的。

    另一种方式是将所有的资源统一编号,如下图所示

    进程可以在任何时间提出请求,但是所有的请求都必须按照资源的顺序提出。如果按照此分配规则的话,那么资源分配之间不会出现环。

    尽管通过这种方式来消除死锁,但是编号的顺序不可能让每个进程都会接受。

    其他问题

    下面我们来探讨一下其他问题,包括 通信死锁、活锁是什么、饥饿问题和两阶段加锁

    两阶段加锁

    虽然很多情况下死锁的避免和预防都能处理,但是效果并不好。随着时间的推移,提出了很多优秀的算法用来处理死锁。例如在数据库系统中,一个经常发生的操作是请求锁住一些记录,然后更新所有锁定的记录。当同时有多个进程运行时,就会有死锁的风险。

    一种解决方式是使用 两阶段提交(two-phase locking)。顾名思义分为两个阶段,一阶段是进程尝试一次锁定它需要的所有记录。如果成功后,才会开始第二阶段,第二阶段是执行更新并释放锁。第一阶段并不做真正有意义的工作。

    如果在第一阶段某个进程所需要的记录已经被加锁,那么该进程会释放所有锁定的记录并重新开始第一阶段。从某种意义上来说,这种方法类似于预先请求所有必需的资源或者是在进行一些不可逆的操作之前请求所有的资源。

    不过在一般的应用场景中,两阶段加锁的策略并不通用。如果一个进程缺少资源就会半途中断并重新开始的方式是不可接受的。

    通信死锁

    我们上面一直讨论的是资源死锁,资源死锁是一种死锁类型,但并不是唯一类型,还有通信死锁,也就是两个或多个进程在发送消息时出现的死锁。进程 A 给进程 B 发了一条消息,然后进程 A 阻塞直到进程 B 返回响应。假设请求消息丢失了,那么进程 A 在一直等着回复,进程 B 也会阻塞等待请求消息到来,这时候就产生死锁

    尽管会产生死锁,但是这并不是一个资源死锁,因为 A 并没有占据 B 的资源。事实上,通信死锁并没有完全可见的资源。根据死锁的定义来说:每个进程因为等待其他进程引起的事件而产生阻塞,这就是一种死锁。相较于最常见的通信死锁,我们把上面这种情况称为通信死锁(communication deadlock)

    通信死锁不能通过调度的方式来避免,但是可以使用通信中一个非常重要的概念来避免:超时(timeout)。在通信过程中,只要一个信息被发出后,发送者就会启动一个定时器,定时器会记录消息的超时时间,如果超时时间到了但是消息还没有返回,就会认为消息已经丢失并重新发送,通过这种方式,可以避免通信死锁。

    但是并非所有网络通信发生的死锁都是通信死锁,也存在资源死锁,下面就是一个典型的资源死锁。

    当一个数据包从主机进入路由器时,会被放入一个缓冲区,然后再传输到另外一个路由器,再到另一个,以此类推直到目的地。缓冲区都是资源并且数量有限。如下图所示,每个路由器都有 10 个缓冲区(实际上有很多)。

    假如路由器 A 的所有数据需要发送到 B ,B 的所有数据包需要发送到 D,然后 D 的所有数据包需要发送到 A 。没有数据包可以移动,因为在另一端没有缓冲区可用,这就是一个典型的资源死锁。

    活锁

    某些情况下,当进程意识到它不能获取所需要的下一个锁时,就会尝试礼貌的释放已经获得的锁,然后等待非常短的时间再次尝试获取。可以想像一下这个场景:当两个人在狭路相逢的时候,都想给对方让路,相同的步调会导致双方都无法前进。

    现在假想有一对并行的进程用到了两个资源。它们分别尝试获取另一个锁失败后,两个进程都会释放自己持有的锁,再次进行尝试,这个过程会一直进行重复。很明显,这个过程中没有进程阻塞,但是进程仍然不会向下执行,这种状况我们称之为 活锁(livelock)

    饥饿

    与死锁和活锁的一个非常相似的问题是 饥饿(starvvation)。想象一下你什么时候会饿?一段时间不吃东西是不是会饿?对于进程来讲,最重要的就是资源,如果一段时间没有获得资源,那么进程会产生饥饿,这些进程会永远得不到服务。

    我们假设打印机的分配方案是每次都会分配给最小文件的进程,那么要打印大文件的进程会永远得不到服务,导致进程饥饿,进程会无限制的推后,虽然它没有阻塞。

    关注二维码回复"os脑图"即可获取高清思维导图

    回复 “os” 领取操作系统 PDF

    展开全文
  • 具体地,主线程将每一次循环中的两个一千维度向量的内积运算切割为5个二百维度的子向量分别交由5个子线程进行内积运算,得到五个子向量内积。然后主线程拿到5个子向量内积,对这5个值进行求和,结果即为原始的两...

    使用场景举例:一百万次循环,每次循环中需要对两个一千万维度的向量进行内积运算。注意,可能是由于某种原因(比如是迭代算法),该场景必须顺序执行一百万次循环。在这种场景下,希望使用多线程进行计算加速,具体就是对每次一循环中的计算进行多线程计算。具体地,主线程将每一次循环中的两个一千万维度向量的内积运算切割为5个二百万维度的子向量分别交由5个子线程进行内积运算,得到五个子向量内积。然后主线程拿到5个子向量内积,对这5个值进行求和,结果即为原始的两个一千万维度向量的内积结果。然后进行下一轮循环…。

    下面的代码中有三个填空部分,分别是:1)主线程在唤醒子线程之前的准备工作的代码,2)子线程干活具体内容的代码,3)主线程在一轮循环中子线程全部结束后(只是一轮)后的处理工作的代码。

    // 线程一次创建,多次使用
    #include <iostream>           // std::cout
    #include <thread>             // std::thread
    #include <mutex>              // std::mutex, std::unique_lock
    #include <condition_variable> // std::condition_variable
    #include <chrono>
    #include <vector>
    using namespace std;
    
    const int numOfThreads = 4; // 子线程总数量
    std::mutex mtx[numOfThreads]; // 主线程唤醒子线程的锁
    std::mutex mtx_main[numOfThreads]; // 子线程唤醒主线程的锁
    std::condition_variable cv_main[numOfThreads];//子线程唤醒主线程的条件变量 
    std::condition_variable cv[numOfThreads];//主线程唤醒子线程的条件变量 
    bool ready[numOfThreads] = { false };// 主线程设置,子线程查看的标记
    bool ready_main[numOfThreads] = { false };// 子线程设置,主线程查看的标记
    volatile bool done = false;// 主线程设置,子线程查看的标记。具体用于表示主线程总体任务是否结束
    
    void print_id(int id) {
        while (1) {
            
            std::unique_lock<std::mutex> lck(mtx[id]);// 用一个mutex锁创建一个 unique_lock
            if (done) break; // done的值由主线程设置,done=true 则结束子线程
            while (!ready[id]) cv[id].wait(lck);// 等待唤醒
            if (done) break; // 双重保险,否则可能发生死锁,暂不明原因。 done的值由主线程设置,done=true 则结束子线程    
            /*
            ... 这里写线程干活的代码
            */
            //std::this_thread::sleep_for(std::chrono::milliseconds(1));// 当前线程睡眠
            ready[id] = false;
            ready_main[id] = true;
            cv_main[id].notify_one();
        }
    }
    
    
    int main()
    {
        vector<thread> threads;
        for (int i = 0; i < numOfThreads; ++i)// 创建线程
            threads.push_back(thread(print_id, i));
        int n = 400; // 线程1次创建,重复使用 n 次
        int cnt = 0; // 计数器
        while (cnt < n) {
            /*
            ... 这里写唤醒子线程的准备工作的代码
            */
            for (int i = 0; i < numOfThreads; i++) {// 唤醒子线程
                ready[i] = true;
                cv[i].notify_one();
            }
            for (int i = 0; i < numOfThreads; i++) { //主线程通过阻塞等待本轮所有线程执行完毕
                std::unique_lock<std::mutex> lck(mtx_main[i]);
                while (!ready_main[i]) cv_main[i].wait(lck);// 等待 第 i 个线程唤醒
            }
            /*
            ... 这里写一轮子线程全部执行完成后的处理工作
            */
            
            cnt++;
        }
        done = true;// 主线程任务完成
        for (int i = 0; i < numOfThreads; i++) {//双重保险,否则可能发生死锁,暂不明原因。 唤醒子线程
            ready[i] = true;
            cv[i].notify_one();
        }
    
        for (auto& th : threads) th.join(); // 等待所有线程结束
    
        cout << "everything done" << endl;
    
        return 0;
    }
    
    展开全文
  • 1、文件包括网工第五版软考中级网络工程师全面学习笔记第二版(5万字)、常用检测命令实践图、协议神图、应第五常见编码图、相版配套视频及课件 2、文件中相应的视频链接也会持续的更新;对于相应的笔记文档的话,这里...

    作者:BSXY_19计科_陈永跃
    BSXY_信息学院
    注:未经允许禁止转发任何内容

    如果觉得在该软件或浏览器下不方便查看可进行资源下载,资源链接如下:
    第一版软考中级网络工程师全面学习笔记(近4万字)

    第二版说明:
    中级网工考试笔记第2版+高清网络协议神图+常见编码图+网工常见诊断命令实践图+配套视频及其课件+相应模拟器和相应资源wei:ych520cyy (7.7即可,不诚勿加可以去其他地方自找找看,验证消息为:中级网工)
    注:软件分享及资源说明,请看前言及资源下载说明

    软考中级网工考试笔记(涉及表格用图片代替_5万字左右)

    前言及资源下载说明

    如果觉得在该软件或浏览器下不方便查看可进行资源下载,资源链接如下:
    第一版软考中级网络工程师全面学习笔记(近4万字)

    由于第二版(中级网工考试笔记第2版+高清网络协议神图+常见编码图+网工常见诊断命令实践图+配套视频及其课件+相应模拟器和相应资源)wei:ych520cyy(7.7即可,不诚勿加可以去其他地方自找找看,验证消息为:中级网工)

    可能你从其他地方购买的或是其他的来的各种笔记都是几个甚至几十个文件排版也相当不好的文件让你去自己慢慢阅读,慢慢找。这里笔记只有一个文件且体积小也可以编辑,如果是用着WPS云文档也可上传到自己的云文档中,排版的也还可以,即便是打印出来也可以很好的进行阅读与查看

    在这里插入图片描述
    在这里插入图片描述
    视频及课件说明:课件和视频呢也是别人录制好了的,特别是版本2呢是2018年刚改革之后(第五版教材)的,也是可以看的,内容呢也是依据最近办教材的考纲来录制的,版本1视频同理也是依据最新第五版教材来录制的教学视频。
    在这里插入图片描述
    相关软件分享(有效期7个月):
    eNSP模拟器配套软件_多做几个实验真的对下午题很有优势

    typroa笔记软件(离线)_用于下午考试用的笔记_有一个记笔记的习惯真的太重要了

    flowus(线上)_最好的一点是可以分享笔记,也可以吧别人的笔记拷贝到自己空间(我渐渐的由typroa转到FlowUS笔记)

    截图软件Snipaste(绿色版无需安装)_对于在线上学习的东西得有一个好的截图软件_重点F1/F3,也可以百度一下花1分钟熟悉一下该软件
    这是之前记录的笔记,用这两个软件记录的笔记可对比一下,都差不多一个是需要线上的一个是线下的:
    在这里插入图片描述
    在这里插入图片描述

    第一章 计算机基础知识

    一、数据表示

    (一)定点和浮点和整数

    • 定点表示法表示的数(称为定点数)常分为定点整数和定点小数两种
    • 定点表示法中,小数点需要占用一个存储位
    • 浮点表示法用阶码尾数来表示数,称为浮点数
    • 在总位数相同的情况下,浮点表示法可以表示更大的数
    • 定点整数的最大值为:2n-1-1
    • 定点小数的最大值为:1-2-(n-1)
    • 定点小数精确范围:源码和反码:-(1-2-(n-1) ) ~ 1-2-(n-1);补码:-1~1-2-(n-1)

    (二)原/反/补码

    • 正数:0;负数:1;原码–>数值的二进制
      三码

    (三)取值范围

    在这里插入图片描述

    二、逻辑计算机

    • 黑盒测试注重于测试软件的功能性需求,黑盒测试试图发现以下类型的错误:功能错误或遗漏界面错误数据结构或外部数据库访问错误、性能错误、初始化和终止错误
    • 白盒测试中,白盒可以发现:代码路径中的错误、死循环、逻辑错误
    • 白盒测试方法,应根据程序的内部逻辑指定的覆盖标准确定测试数据

    三、计算机系统的组成与体系

    (一)中央处理器CPU

    在这里插入图片描述

    • ALU运算器、通用寄存器、状态寄存器、程序技术器、累加器等部件都是属于CPU中的部件
    • CPU产生每条指令的操作信号并将操作信号送往相应的部件进行控制
    • 程序计数器PC除了存放指令地址,不可以临时存储算术/逻辑运算结果
    • CPU中的控制器决定计算机运行过程的自动化
    • 指令译码器是CPU控制器中的部件
    • 在CPU中用于跟踪指令地址的寄存器是==(程序计数器(PC)(属于CUP的控制器组成部件)==
    • 通用寄存器常用于暂存运算器需要的数据或运算结果
    • 地址寄存器(MAR)和数据寄存器(MDR)用于访问内存时的地址和数据暂存
    • ==指令寄存器(IR)==用于暂存正在执行的指令
    • 在CPU中,常用来为ALU执行算术逻辑运算提供数据并暂存运算结果的寄存器是(累加寄存器)中
    • 计算机CPU对其访问速度最快的是(通用寄存器
    • 加法器是算术逻辑运算单元的部件
    • 指令系统采用不同的寻址方式的目的是(扩大寻址控件并提高编程灵活性
    • 为便于实现多级中断嵌套,使用(堆栈)来保护断点和现场最有效
    • CPU的中断响应时间指的是(从发出中断请求到开始进入中断处理程序
    • 最大吞吐率取决于流水线中最慢一段所需的时间
    • 如果流水线出现断流,加速比会明显下降
    • 要使加速比和效率最大化应该对流水线各级采用相同的运行时间
    • 流水线采用异步控制并不会给流水线性能带来改善,反而会增加控制电路的复杂性

    (二)组成原理

    • I/O接口编制分为:统一编制,单独编制。统一编制通过访问内存单元的指令访问I/O接口。单独编制需要设置专门的I/O指令访问I/O接口
    • 在计算机系统中采用总线结构,便于实现系统的积木化构造,同时可以(减少信息传输的数量
    • 流水线方式不可以提高指令的执行速度
    • 总线宽度是指总线的线数,即数据信号的并行传输能力,也体现总线占用的物理空间和成本;总线的带宽是指总线的最大数据传输率,即每秒传输的数据总量。总线宽度与时钟频率共同决定了总线的带宽
    • 带宽(MB/S)=时钟频率(MHz)/时钟周期×总线宽度(bit)/8
    • 并行总线适合近距离高速数据传输
    • 串行总线适合长距离数据传输
    • 单总线结构在一个总线上适应不同种类的设备,但无法达到高的性能要求
    • 专用总线在设计上可以与连接设备实现最佳匹配
    • 中间代码可以用树和图表示

    (三)硬件基础

    • SSD实质上是(Flash)存储器
    • 固态硬盘常见的的接口有:SATA、PCle、M.2
    • (相联存储器)是指按内容访问的存储器
    • 闪存掉电后信息不会丢失、属于非易失性存储器;以块为单位进行删除操作;在嵌入式系统中用来代替ROM存储器

    (四)计算机系统基础

    • 计算机指令一般包括操作码和地址码两部分,为分析执行的一条指令,其中操作码地址码都应存入指令寄存器(IR)中
    • 指令寄存器的位数取决于( 指令字长 )
    • 指令周期:取出并执行一条指令所需时间
    • 总线周期:CPU从存储器或者I/O接口存取一个字节所需时间
    • 时钟周期:CPU处理动作的最小单位
    • 相互关系:一个指令周期可以划分一个或多个总线周期;一个总线周期可以划分几个时钟周期

    (五)设备管理

    • 若某计算机系统的I/0接口与主存采用统一编制,则输入操作是通过==(访存)==指令来完成的

    四、总线系统

    • 总线系统一把可分为:数据总线DB、地址总线AB、控制总线
    • 广义地讲,任何连接两个以上电子元器件的导线都可以称为总线。通常可分为4类:
    • ①芯片内总线。用于在集成电路芯片内部各部分的连接。
    • ②元件级总线。用于一块电路板内各元器件的连接。
    • ③内总线,又称系统总线。用于构成计算机各组成部分(CPU、内存和接口等)的连接。
    • ④外总线,又称通信总线。用计算机与外设或计算机与计算机的连接或通信。
    • 连接处理机的处理器、存储器及其他部件的总线属于内总线,按总线上所传送的内容分为数据总线、地址总线和控制总线
    • CUP响应DMA请求是在一个总线周期结束时
    • DMA工作方式下,在主存与外设之间建立直接的数据通信
    • 总线:并行总线适合近距离高速数据传输;串行总线适合长距离数据传输;专用总线在设计上可以与连接设备实现最佳匹配

    五、指令系统

    1、指令由操作码地址码组成,指令长度分为固定长度可变长度两种
    2、立即寻址:指令的地址码字段给出的不是操作数的地址而是操作数本身。其特点是访问一次存储器就可同时去除指令和操作数
    3、变址寻址:操作数的地址由某个变址寄存器的内容位移量相加
    4、直接寻址(寄存器寻址):指令的地址码字段给出操作数所在存储单元地址(寄存器号)
    5、间接寻址(寄存器间接寻址)操作数的地址主存(寄存器)中的存储单元的内容

    六、CISC与RISC指令

    在这里插入图片描述

    七、计算机分类(Flynn)

    在这里插入图片描述

    八、存储系统

    (一)硬盘

    • 磁盘调度管理中,通常进行移臂调度,进行旋转调度
    • SSD 固态硬盘的存储介质分为两种,一种是采用闪存(FLASH 芯片)作为存储介质,这种是主流。另 外一种是采用 DRAM 作为存储介质。

    (二)Cache

    • Cache的功能:提高CPU数据输入输出的速率,突破所谓的“冯诺依曼瓶颈”,即CPU与存储系统间数据传送宽带限制
    • 在计算机的存储体系中,Cache是访问速度最快的层次
    • 使用Cache改善系统性能的依据是程序的局部性原理
    • 如果以h代表Cache的访问命中率,t1表示Cache的周期时间,t2表示主存储器时间,以读操作为例,使用“Cache+主存储器”的系统平均周期为t3,则:
    • t3=h×t1+(1-h)×t2
    • 其中(1-h)又称为失效率(未命中率)
    • Cache的设计思想是在合理成本下提高命中率
    • Cache和主存之间的映射交换,由硬件自动完成。

    (三)RAID技术

    • RAID 0磁盘利用率100%
    • RAID 1利用率50%,
    • RAID3,磁盘利用率(n-1)/n,有特定的奇偶校验盘,可靠性较高
    • RAID 5磁盘利用率(N-1)/N,N最小取3,没有特定校验盘,校验数据分散存放在各个盘上。可靠性较高。
    • RAID 6磁盘利用率(N-2)/N,N最小为4。
    • RAID10: RAID1 和 RAID0 的结合,先镜像再条带化
    • RAID01:RAID0 和 RAID1 的结合,先条带化再进行镜像

    (四)主存储器

    • 主存储器简称为主存、内存,设在主机内或主机板上,用来存放机器当前运行所需要的程序和数据,以便向CPU提供信息。相对于外存,其特点是容量小速度快。
    • 主存储器主要由存储体控制线路、地址寄存器、数据寄存器和地址译码电路等部分组成
    • 计算机系统的主存主要是由(DRAM)构成
    • 计算机采用分级存储体系的主要目的是为了解决存储容量、成本和速度之间的矛盾
    • 随机访问存储器(RAM)有两类:静态的(SRAM)和动态的(DRAM), SRAM 比DRAM速度更快,但也贵得多。SRAM用来作为高速缓冲存储器(Cache), DRAM 用来作为主存及图形系统的帧缓冲区。
    • EEPROM是电可擦除可编程只读存储器。
    • SAN是一种连接存储管理子系统存储设备的专用网络。SAN分为FC SAN和IP SAN,其中FC SAN采用光纤信道技术互联;IP SAN采用以太网技术互联;SAN可以被看作是数据传输的后端网络,而前端网络则负责正常的TCP/IP传输

    (五)存储系统的存取方式

    在这里插入图片描述

    (六)内部存储与外部存储

    • 常见的虚拟存储器由(主存-辅存)两级存储器组成
    • 栈区堆区也称为动态数据区,全局变量的存储空间时候静态数据区
    • 一个运行的程序对应一个进程,需要相应的存储空间;一个进程可以包含一或多个线程

    九、磁盘整列RAID

    1、RAID0技术:

    • 可以同时对多个磁盘做读写动作,但不具备备份和容错能力,价格便宜,写入速度快,但是可靠性最差,磁盘利用率100%(条带)
    • 优缺点/领域:不会占用太多CPU资源设计、使用和配置比较简单;无冗余,不能用于对数据安全性要求高的环境;视频生成和编辑、图像编辑
      2、RAID1技术:
    • 使用磁盘镜像技术,使用效率不高,但是可靠性高,利用率为50%
    • 优缺点/领域:具有100%数据冗余;开销大,空间利用率只有50%在写性能反面提升不大;金融、财务等高可用、高安全的数据存储环境
      在这里插入图片描述

    十、云计算与系统可靠性

    • 云计算的模式主要有三种:IaaS(基础设施即服务);SaaS(软件即服务);PaaS(平台即服务)
    • 失效率:产生故障的概率。
    • 平均无故障时间MTBF :相邻两个故障间隔时间的平均值,越大越好。
    • 平均故障修复时间MTTR :修复一次故障所时间的平均值,越小越好。
    • 可用性:系统的可靠性。

    第二章 计算机网络概论

    一、计算机网络概论

    1.计算机网络是通过通信线路和通信设备连接的许多的分散独立工作的计算机系统,遵从一定的协议用软件实现资源共享的系统
    2.组成分为硬件、软件、协议三部分,协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合
    3.协议分为国际标准OSI/RM七层协议和公认标准TCP/IP四层协议(或五层)。TCP/IP协议簇,包括一系列常用协议
    在这里插入图片描述

    二、计算机网络分类

    1.(1)按分布范围:分为域网、域网、广域网。(2)按拓扑结构:分为型、型、型等。(3)其他分类:公用网与专用网;通信网ISP与信息网ICP;校园网与企业网;骨干网与接入网;有线网与无线网等
    2.局(LAN)、城(MAN)、广(WAN)域网对比

    三、网络协议体系结构

    1.OSI/RM(开放系统互联参考模型) 七层是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
    2.TCP/IP(因特网传输协议)四层是应用层、传输层、互联网层、网络接口层。也有五层说法,网络接口层分为物理层、数据链路层。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    四、计算机网络传输过程

    1.网络数据传输过程——解封装、数据封装
    在这里插入图片描述

    第三章 知识产权与标准化

    一、知识产权

    在这里插入图片描述
    1.构成保护计算机软件著作权的两部基本法律是:《中华人民共和国著作权》《计算机软件保护条例》

    第四章 数据通信基础

    一、数据通信

    1.基本概念:信源、信道、信宿;数字信号、模拟信号;模拟通信、数字通信(信道中传送)
    2.光纤传输测试指标中,回波消耗是指信号反射引起的衰减

    二、数据通信计算

    1.模拟信道带宽计算:W=f2-f1,其中f1是低频,f2是高频。物理介质做成,带宽就固定了
    2.数字信道带宽计算:尼奎斯特定律(无噪声):
    W:带宽 B:码元速率、波特率 n:信号量(位bit) N:码元种类 R:数据速率(bit/s)

    • 码元速率:B=2W
    • 码元种类:n=log2N
    • 数据速率:R=Blog2N=2Wlog2N
    • 对数计算:N=4,log24=log2(22)=2
      3.数字信道带宽计算:香农定律(有噪声)
      C:数据速率 W:信道带宽 S:信号平均功率 N:噪声的平均功率 S/B:信噪比(一般dB表示)
    • 香农定律:C=Wlog2(1+S/N)
    • 信噪比公式:dB=10lg(S/N)
      4.数据速率®=每秒钟传送X个字符×(a+b+c+d);其中,每秒钟传输的X字符=有效速率/b位数据位;其中B=1/T;1s=106us;eg:周期为125us,即B=1000000/125=8000Hz
      5.采用曼彻斯特编码方式的数字通信中,波特率是数据速率的2倍,曼彻斯特编码
      不需要额外传输同步信号

      6.常用单位换算和数据
    • 1B=8b
    • 1s=103ms=106us
    • 通信换算进率1000 1G=1000M 存储换算进率1024 1G=1024M
    • 电缆延迟:200m/us(光速300m/us的70%)(200km/ms,200000km/s)

    三、通信传输介质

    1.同轴电缆:分为粗同轴电缆、细同轴电缆。传送距离长,信号稳定,常用语电视监视系统,音响设备传送音。数字信号(基带),模拟信号(带宽)
    2.光纤(光缆):分为单模光纤SMF(采用ILD激光二极管)、多模光纤MMF(采用LED发光二极管)对比:单模:高贵细远
    3.在FTTx组网方案中的光纤覆盖范围对比:FTTH>FTTB>FTTC>FTTN
    4.FTTN(Node)是光纤到节点,FTTC(Curb)是光纤到路边,FTTH(Home)是光纤到用户,FTTZ(Zone)是光纤到小区,FTTB(Building)是光纤到大楼,FTTD(Desk)到桌面,FTTO(Office)到办公室,FTTF(Floor)到楼层
    5.无线信道:分无线电波红外光波
    在这里插入图片描述

    四、数据调制与编码

    1.模拟信道调制:分为调幅ASK(高低)调频FSK(疏密)调相PSK(屁股)正交调幅QAM

    在这里插入图片描述
    2.数字信道编码:分为采用(2倍)、量化(等级)、编码(二进制)三个步骤
    3.常见调制技术与默认码元数:n=log2N
    在这里插入图片描述
    4.单极性码:正电压表示1,另外一种状态表示0;极性编码:正电压和负电压表示;归零码RZ,有正电平、负电平、零电平,正电平代表1,负电平表示0;曼彻斯特编码:负电平到正电平的跳变代表1,反之代表0,反之亦可;差分曼彻斯特编码:比特开始位置没电平跳变表示1,有电平跳转表示0;双极性编码:零电平代表0,正负电平表示1,连续的1必须跳转
    5.单击性码、极性码、双极性码、归零码、双相码、不归零码、曼彻斯特编码(不需要额外的传输同步信号)、差分曼彻斯特编码
    在这里插入图片描述
    6.E1信道的数据速率是(2.048Mb/s),E1的控制开销占2/32,数据开销为30/32,E1基本帧的传送时间为125us,其中每个话音信道的数据速率是(64Kb/s),有效的是54Kb/s;T1载波的数据速率是==1.544Mb/s
    7.==各种编码效率:

    • Manchester编码是一种双相码运用在不太快以太网中,提供了比特同步信息
    • ==4B/5B效率80%==用于百兆以太网,用于100Base-FX(采用的编码技术为4B/5B+NRZI)、100Base-TX、FDDI
    • 8B/10B效率80% 用于千兆以太网
    • 8B/6T:编码效率为80%,用于100Base-T4
    • 曼码和差分曼码效率50%,曼码用于不太快的以太网,差分用于令牌环网
    • BAMI:2/3
    • NRZI:100%

    五、数据通信方式

    1.通信方向:单工(电视)、全双工(手机)、半双工(对讲机)
    2.传输方式:步传输(发邮件什么时候下载都可以,不需要同步)(数据小、距离远、速率慢)、步传输(两端同时工作)(数据大、距离近、高速率

    六、数字传输标准

    1.T1标准:1.544Mbps、125us=8000次。1.544Mbps=[24*(7+1)+1]8000。T2=4T1;T3=7T2;T4=6T3(T476)(美国和日本采用的标准)
    2.E1标准(时分复用TDM):2.048Mbps、125us=8000次。2.048Mbps=3288000。CH0和CH16控制信令30个话音数据。E2=4E1;E3=4E2;E4=4E3(口诀:E444)(中国和欧洲)
    3.SONET标准(美国制定)和SDH标准(国际标准):用于光纤网络。155.520(OC-3:155.520 155Mbps;OC-12:155.520
    4 4*155Mbps;OC-1:OC-3除以3)

    七、数据交换技术

    1.电路交换:优点:独占性、实时性,适合传输大量的数据;缺点:需建立一条物理连接,利用率低(早期的电话系统)
    2.报文交换:优点:不需要专用通达,线路利用率高,存储转发节点可校验纠错;缺点:有通信时延。比如物流包裹
    3.分组交换:优点:利用率更高、可选路径、数据率转换、支持优先级;缺点:时延、开销大。比如邮局寄信。又分为数据报和虚电路
    4.

    • 分组数据报:单向传送、无连接的。如普通信
    • 分组虚电路:交互式、逻辑链接。如挂号信

    八、多路复用技术

    1.频分复用FDM:不同的频率子信道隔离频带防串扰,如CATV,WIFI。
    2.时分复用TDM:不同的时间,轮流占用,如手枪、手机。分为同步时分T1、E1; 统计时分,如ATM
    3.波分复用WDM:不同的波长,如光纤

    九、数据检错纠错

    1.检错码:奇偶校验看1的个数是奇数/偶数只能检错不能纠错。移动通信广泛采用。
    2.海明码是一种可以纠正错误的差错编码;循环冗余校验码只能检测出错误,而不能纠正错误;奇偶校验码在1的个数的奇偶性没有发生变化时是检测不出错误的。
    3.一对有效码字之间的海明距离是( 两个码字之间不同的比特数 )
    4.海明码:在数据位m后面增加冗余校验位k,组成信息m+k,则满足m+k<2k-1可纠正一位错误(一位一位纠正可)。不但检错还能纠错

    • 码距d:也叫海明距离,两个码字之间不同的最小的位数(比特数)
    • 可以查出多少位错误:≤d-1
    • 可以纠正多少位错误:<d/2
      5.CRC码:冗余循环校验码,是一种循环码,通过循环位移,实现检错,硬件容易实现,广泛用于于局域网。只能检错不能纠错

    第五章 广域通信网

    一、广域网概念和分类

    1.广域网是指长距离跨地区的各种局域网、计算机、终端互联在一起组成一个资源共享的通信网络。
    2.传统广域网和现代广域网
    在这里插入图片描述
    3.X.25、FRN、ATM:分组交换;ADSL用于连接公共交换电话网PSTN:电路交换网
    4.无光源网络:
    在这里插入图片描述

    二、公共交换电话网PSTN

    1.公共交换电话网PSTN:利用电话线上网,早期是电话+“猫”拨号上网。
    2.调制解调器Modem:俗称“猫”作用是把电话线里面的模拟信号和数字信号互相转换,V.90标准可以达到56Kb/s。(电话猫、电视猫、电力猫、光纤猫等)
    3.数据终端设备DTE,如用户的计算机、电话等。数据电路设备DCE,如调制解调器。DTE和DCE两端要同步

    三、公共数据网X.25

    1.X.25使用分组交换,分为三层:物理层、链路层、分组层。对应于OSI的低三层。采用虚拟电路、面向连接的。采用后退N帧ARQ、滑动窗口默认2
    2.流量控制技术:协调收发端流量。==假设没有传输错误的流控技术:==停等协议。发送一帧,等到应答,再发送;如果不应答,一直等。类似银行柜台存钱,一个个存钱
    3.==假设没有传输错误的流控技术:==滑动窗口协议。连续发送多个帧而无需应答。类似银行ATM机,一沓一沓存钱
    4.差错控制技术:检查和纠正传输错误。

    • 肯定应答:收到肯定应答信号ACK继续发送
    • 否定应答重发:收到否定应答信号NAK重发出错帧。
    • 超时重发:超过规定时间重发该帧。这种技术称为自动请求重发ARQ。
      5.ARQ分为三种:停等ARQ、选择重发ARQ、后退N帧ARQ。
    • 停等ARQ:是停等流控和ARQ结合。类似银行柜台存钱,手续齐全办理,叫号等时间长下一位,忘带身份证不办理。
    • 选择重发ARQ:是滑动窗口和ARQ结合。类似银行ATM一沓一沓存钱,这张是假币,选择这一张重发。如卫星通信
    • 后退N帧ARQ:也是滑动窗口和ARQ结合。类似银行验钞机一沓一沓数钱,这张是假币,选择这一张包括后面的都要重发
      6.各种流控和差错利用率计算如下。
    • ①常数a值的计算:a=(d/v)/(L/R)=(RT)/L=(Rd/v)/L
      R=数据速率,d=线路长度,v=传播速度,L=帧长,T=传播迟延
    • ②效率E值的计算:停等协议:E=1/(2a+1)
      滑动窗口:E=W/(2a+1
    • ③窗口W值的计算:选择ARQ:W≤2k-1
    • 后退ARQ:W≤2k-1
    • 高级数据链路控制协议HDLC:面向比特的。通常使用CRC-16、CRC-32校验。帧边界01111110 “两头踢皮球”。用户数据字段INFO大小.不固定固定大小的滑动窗口协议用在数据链层的HDLC中
      在这里插入图片描述
    • HDLC协议中,帧的编号和应答存放在控制字段中
    • 在HDLC协议中,如果监控帧中采用SERJ应答,表明差错控制机制为选择重发/选择性拒接ARQ
    • 00–接收就绪(RR);01–拒接(REJ);10–接收未就绪;11–选择拒接(SREJ)
    • 采电HDLC协议进行数据传输时,RNR5表明下一个接收的帧编号应为5,但接收器末准备好,暂停接收
      在这里插入图片描述

    四、帧中继网FR

    1.帧中继FR是X.25演变改进的。

    • 工作在OSI的低两层,即物理层和链路层
    • 在第二层建立虚电路(与X.25一样,也支持永久虚电路PVC和交换虚电路SVC),承载数据业务,因而第三层被简化了。也是分组交换
    • 提供面对连接的服务;一种高效的数据链路技术;利用了光纤通信和数字网络技术的优势
    • FR只做检错不再重传没有流控只有拥塞控制检错交高层
      2.帧中继主要优点有
    • 基于分组(帧)交换的透明传输,可提供面向连接的服务
    • 帧长可变,长度可达1600~4096字节,可以承载各种局域网的数据帧。
    • 数据速率可这2~45Mbps
    • 既可以接需要提供带宽也可以应付突发的数据传输
    • 没有流控和重传机制开销很少

    五、综合业务数据网ISDN

    1.综合业务数据网ISDN:基于电路交换,把数据、声音、视频信号三合一传输。

    • ISDN两种速率:
      N-ISDN基本速率BRI(2B+D)(主要是家庭)(144Kb/s)
      N-ISDN基群速率(主速率接口)PRI(30B+D)(主要是企业)(2048Kb/s)(组成ISDN称为:B-ISDN PRI(宽带-ISDN-基群速率))(B代表宽带,N代表窄带
    • B信道数据信道;D信道控制信道
      2B+D=264+16=144Kb/s
      30B+D=30
      64+64=1.984Mb/s(近似E1)

    六、异步传输模式ATM

    1.异步传输模式ATM:最早是B-ISDN标准的一部分,分为四层模式
    在这里插入图片描述
    2.ATM规定了4类用户业务:
    3.VPI用来表示不同虚拟路径,CIR用来约束数据速率
    4.ATM采用53字节信元分组交换,使用统计时分TDM。采用双绞线或光纤,典型数据速率155M,面向连接,使用虚电路的虚通路VPI和==虚信道VCI
    5.ATM业务类型
    在这里插入图片描述

    第六章 局域网和城域网

    一、局域网体系和标准

    1、局域网的概念:单一机构拥有计算机网络,中等规模地理范围,实现设备互联、信息交换和资源共享
    2、LAN/MAN的IEEE802标准,重点掌握:802.3(CSMA/CD)、802.11(无线局域网)、802.16(无线城域网)
    在这里插入图片描述
    3、CSMA/CD是IEEE802.3的核心算法
    4、IEEE802.3规定的最小帧长为64字节
    5、城域网的特征:以光传输网为基础;融合无线城域网;支持电信、电视与IP业务
    6、城域网管理中:利用传统电信网进行的网络管理称为“带内”管理;利用IP协议进行的网络管理称为“带外”管理;汇聚层以下采用带内管理
    7、802.11在MAC层采用了CSMA/CA算法

    二、数据链路LLC和MAC

    1、逻辑链路控制LLC:目的是屏蔽不同的介质访问控制方法,以向高层(网络层)提供统一的服务和接口LLC地址是SAP(服务访问点)。这个标准与HDLC是兼容的,无帧校验字段,放到了MAC层。同时提供目标地址和源地址字段。
    在这里插入图片描述
    当源地址/目的地址中:I/G=0是单地址,等于1是组地址;
    当控制字段中C/R=0是命令,等于1是响应
    在LLC2中,管理帧I:信息;管理帧中RR:接收准备好;RNR接收未准备好;REJ:拒接
    2、介质访问控制MAC:其中,长度字段表示数据实际长度,最大1500。同时还可以表示上层协议类型,1501以上的值,如图是以太网帧格式:
    在这里插入图片描述
    其中长度:可以表示数据字段长度也可以表示上层协议的类型
    3、MAC地址:采用16进制数表示,共6B(48位),有IEEE和厂家烧制到网卡上
    4、以太网结构中填充字段的作用是保持最小帧长
    5、CSMA/CD协议:载波监听多路访问/冲突检测。是分布式介质访问控制方法
    在这里插入图片描述
    6、最小帧长计算:为了检测到冲突。L=2R×d/v其中,R为网络数据速率,d为最大段长,v为信号传播速度
    7、二进制后退指数算法

    • 考虑网络负载变化;
    • 后退次数和负载大小有关
    • 重发次数最大为16,然后上报高层协议。

    三、交换式以太网

    1、概念:以太网:早期的802.3局域网,10Mbps。来源于光在空气中传播的介质“以太(ether)”,由此得名“以太网”寓意无处不在的网络。
    2、交换式以太网核心部件是交换机,有一个高速底板,插上一些插槽,插槽上有一些连接器,用于连接10M网卡的主机。如:E0/0,F0/1,(插槽/接口);G0/0/0(插槽/模块/接口)
    E:以太网,F:快速以太网,G吉比特以太网
    3、以太网采用了二进制指数后退算法特点是网络负载越重,可能后退的时间越长
    4、以太网交换机连接的一组工作站,组成了一个广播域,但不是一个冲突域
    5、双绞线分为
    交叉
    双绞线和直通双绞线;同种设备连接用交叉双绞线(PC和路由器,服务器与服务器等);不同种设备用直通线(PC与交换机,服务器与交换机)
    6、链路聚合是多个物理链路聚合合成一个逻辑链路

    四、高速以太网

    1、快速以太网:802.3u标准,速率可到 100M,100Base-T/F规范。FLP快速链路脉冲;T表示非屏蔽双绞线,C表示屏蔽双绞线,F表示光纤
    在这里插入图片描述
    在这里插入图片描述
    2、千兆以太网:802.3z标准,速率可到 1Gbps,兼容10M/100M以太网。帧突发
    在这里插入图片描述
    3、万兆以太网:802.3ae标准,速率可达万兆(10Gbps),只支持光纤,只支持全双工不再采用CSMA/CD,可用于城域网

    在这里插入图片描述
    4、光以太网:利用光纤的带宽有事,结合以太网成熟的技术,为新一代的宽带城域网提供技术支持。光以太网具备的特征有:(1)能够根据用户的需求分配带宽;(2)具有认证和授权功能;(3)提供计费功能;(4)支持VPN和防火墙,保证网络安全;(5)支持MPLS,提供QoS服务;(6)方便快速灵活的适应用户和业务的拓展

    五、虚局域网VLAN

    1、虚拟局域网VLAN概念:根据管理功能、组织机构或应用类型,对物理网络进行分 段而形成的逻辑网络,与用户的物理位置无关
    2、不通VLAN在不同广播域,切割广播域,减少广播提高网络性能,增加网络安全,使网络易于维护,更具逻辑性,
    3、在运营商中,一般会有多个用户和不同的业务流需要融合。运营商常用外层VLAN区分不同的业务流,在ONU或家庭网关处采用内层VLAN来区分不同的用户;这种处理方式要求运营商网络或用户局域网中的交换机都支持802.1q协议,同时通过802.1ad(运营商网桥协议)来实现灵活的QinQ技术
    4、VLAN划分方式:①静态分配VLAN:基于端口。②动态分配VLAN:基于MAC地址(2层)、网络层IP(3层)、规则策略(高层)等
    5、如果校园网中办公室用户没有移动办公的需求,采用基于交换机端口的VLAN划分方法比较合理;如果有的用户需要移动办公,采用基于MAC地址的VLAN划分方法比较合适
    6、VLAN划分的好处①控制网络流量,抑制广播风暴。②提高网络安全性,不同VLAN之间可做控制。③网络管理灵活,用户可以随地接入网络
    7、不同VLAN之间通信:需要路由器或三层交换机
    8、VLAN标准802.1q(dot1q)在原来的以太帧中增加了4B的控制信息,其中包含12位VLAN标识符VID。可用4094个VLAN。
    在这里插入图片描述
    9、VLAN两种端口:接入端口Access(通过单个VLAN)和中继端口Trunk(通过多个VLAN)
    10、双绞线与光纤:

    • 双绞线:最大衰减值 回波耗损限值 近端串扰衰减值 开路/短路 是否错对
    • 光 纤:最大衰减值 回波耗损限值 波长窗口参数 时延 长度
    • 近端串扰仅用于双绞线测试
    • 波长窗口参数和回波损耗限值仅用于光纤的
    • 最大衰减限指既可是光纤也可是双绞线
      11、VLAN的一些叙述:
    • 一个新的交换机默认配置的是VLAN 1
    • 一个VLAN能跨越多个交换机
    • 各个VLAN属于不同的广播域(一个VLAN就是一个广播域)
    • VLAN对分组进行过滤,增强了网络的安全性
      12、WLAN接入安全控制中,采用的安全措施有SSID访问控制物理地址过滤WPA2安全认证、更改默认设置、更新AP
      13、在缺省配置是交换机所有端口属于同一个VLAN中,
      14、VLAN标记中
    • 不同交换机之间的相同VLAN必须通过中继端口连接才能互相通信
    • 交换机根据目标地址和VLAN标记进行转发决策
    • 进入目的网段时,交换机删除VLAN标记,恢复原来的帧结构
    • VLAN标记对用户是透明的
    • VLAN简化了在网络中增加、移除和移动主机的操作
      15、VLAN ID必填,由12bit表示,范围是1-4096,其中1是缺省VLAN,一直存在不能删除;1-1000可用于以太网,1002可用于FDDI和令牌环,1025-4096是扩展的VLAN ID

    六、局域网互联

    1、局域网互联设备:2层网桥(生成树、源路由)、3层交换机、路由器。网桥要求3层以上协议相同,1、2层协议不同可互联。
    在这里插入图片描述
    2、网桥如果从端口收到一个数据帧,则将其源地址记入该端口的数据库的方式来知道网络端口连接了哪些网站;当网桥连接的局域网出现环路时,运行生成树协议阻塞一部分端口

    七、生成树网桥

    1、生成树网桥:又叫透明网桥IEEE802.1d,生成树算法。基本思想是在网桥之间传递BPDU,比较参数,根据STP打开好端口,阻塞差端口,沿着好的端口建立路径。边走边拐弯。用于以太网
    在这里插入图片描述
    2、生成树网桥步骤:①确定根桥②确定根端口③确定指定桥④确定指定端口⑤阻塞剩余端口⑥形成无环网络(上图)
    3、出现像以上路由环路可能会产生:(1)广播风暴 (2)MAC地址表不稳定 (3)帧复制的现象
    4、生成树网桥计算数据:

    • 确定根桥ID:优先级+MAC地址都选最小(网桥ID由2字节的网桥优先级和6字节的MAC地址组成)
      优先级0~65535,默认32768(±4096)
    • 确定根端口:优先级+编号,都选最小的
      优先级0~255,默认128
    • 三小原则:优先级、MAC地址、通路费用
    • 最小交换机ID(BID或桥ID)就包含了优先级和MAC地址两个参数了
      5、生成树端口的四种状态:
    • Blocking(阻塞):接收BPDU,不学习MAC地址,不转发数据帧。20S
    • Listening(侦听):接收BPDU,==不学习MAC地址,不转发数据帧,但交换机向其他交换机通告该端口,参与选举根端口或指定端口
    • Learning(学习):接收BPDU,学习MAC地址,不转发数据帧。
    • Forwarding(转发):正常转发数据帧。
    • 阻塞→20秒→侦听→15秒→学习→15秒→转发
      6、生成树种类和标准
    • 多生成树MSTP-IEEE 802.1s
    • 快速生成树RSTP-IEEE 802.1w
    • 生成树STP-IEEE 802.1d
    • 端口认证 基于用户-IEEE 802.1x(基于MAC地址)
    • 口诀记忆:多快生口,是s我w弟d兄x
      7、生成树协议STP使用了网桥优先级和MAC地址来选举根网桥
      8、生成树协议STP协议的作用是防止二层环路;运行在交换机和网桥上
      9、网桥协议数据单元(BPDU)包含两种:配置BPDU<=35B;拓扑变化通知BPDU<=4B
      10、Bridge ID用8个字节表示;阻塞的端口仍然是一哥激活端口,但它只能接受BPDU
      11、快速生成树技术主要包含:(1)backonefast:网中链路失效时;(2)uplinkfast:直连链路失效时;(3)portfast:只适合用于端口连接单个主机妆发状态;(4)BPUD Filter:强行要求端口转发为转发状态

    八、源路由网桥

    1、源路由网桥:IEEE 802.5,基本思想是发送探测帧到目的节点,返回路径以后沿着路径再传送。发送帧在这条路径上就传送,不在这条路径上就发送广播,查询路径,选择最优路径再传送。选好路再走。令牌环网。

    在这里插入图片描述

    九、城域网简介

    1、什么是城域网?城域网比局域网传输距离远,能够覆盖整个城市。能够提供分组传输的数据、语音和视频等多媒体业务。更大的传输容量,更高的传输效率。
    2、城域以太网:①以太网专用线、②以太网虚拟专线、③以太局域网服务(E-LAN)最看好
    3、无线城域网标准:WiMAX(802.16d固定、802.16e移动)、WiMAXII(802.16m4G)
    Q-in-Q:运营商网桥协议(PBP)IEEE802.1ad(基于技术是在以太帧中插入运营商VLAN标记字段)。MAC-in-MAC:运营商主干网桥(PBB)IEEE802.1ah
    在这里插入图片描述

    第七章 无线通信网

    一、无线移动通信

    1、4G:至少100Mbps,下1Gbps,上 500Mbps,使用正交频分多。包含TDD和FDD两种制式。选定的多路复用技术是OFDM(正交频分多路复用)
    在这里插入图片描述

    二、无线局域网

    1、无线局域网WLAN:两大阵营:①IEEE 802.11面向数据无连接。②欧洲邮电委HIPERLAN面向语音有连接。奥迪A5
    在这里插入图片描述
    2、802.11的扩频技术就是:用伪随机序列对代表数据的模拟信号进行调频
    3、调频扩频技术的特点:(1)抗干扰性能好;(2)隐蔽性强,干扰小;(3)易于实现码分多址;
    4、扩频技术:(1)扩频通信减少了干扰并有利于通信保密;(2)每一个信号比特可以用N个码片比特来传输;(3)信号散布到更宽的频带上降低了信道阻塞的概率;
    5、扩频通信减少了干扰并有利于通信保密
    6、扩展频谱通信的主要思想是将信号散步到更宽的带宽上以减少阻塞和干扰的机会
    7、无线局域网WLAN:两种结构:①基础设施网络、②特殊网络Ad Hoc
    在这里插入图片描述
    8、无线局域网WLAN:两种AP(数链层作用是无线接入)(室内30m,室外150m)

    • 胖AP(FAT)一般指无线路由:胖AP多用于家庭和小型网络,功能比较全,一般一台设备就能实现接入、认证、路由、VPN、地址翻译,甚至防火墙功能
    • 瘦AP(FIT)一般指无线网关或网桥瘦AP多用于要求较高的场合,要实现认证一般需要认证服务器或者支持认证功能的交换机配合
      9、无线局域网WLAN:三种技术:①红外线,②扩展频谱,③窄带微波
    • 红外线(IR)分为:定向光束红外线、全向广播红外线,漫反射红外线。
    • 扩展频谱分为:频率跳动FHSS、直接序列DSSS。
    • 窄带微波(RF)分为:申请许可证RF,免许可证RF
    • CSMA/CA:载波监听多路访问冲突避免解决隐蔽终端问题
    • 传数据先检测,如果探测到网络中没有数 据,则等待一个IFS时间,再随机选择一个时间片继续探测,如果无线网路中还没有活动的 话,就将数据发送出去
    • 送出数据前,先送一段小小的请求报文给目标端,收到目标端回应后,在传送大量的数 据,确保不会碰撞,开销最小
      10、三种帧间隔IFS:优先级访问控制
    • DIFS(分布式协调IFS)最长优先级最低
    • PIFS(点协调IFS)中等长度,优先级居中
    • SIFS(短IFS)最短优先级最高立即响应
    • 超级帧:点协调轮询终端。应答帧:分布式
    • DIFS用在CSMA/CA协议中,只要MAC层有数据要发送,就监听信道是否空闲。如果信道空闲,等待DIFS时段后开始发送;如果信道忙,就继续监听,直到可以发送为止。
      11、无线加密协议WEP:认证和加密,明文的。无线保护接入WPA/WPA2:802.1x认证、RC4加密和TKIP数据完整性
      12、无线局域网通常采用的加密方式是WPA2,其
      安全加密算法是AES和TKIP

      13、为了弥补WEP协议的安全缺陷,WPA安全认证方案增加的机制是临时秘钥完整性协议
      14、Ad Hoc网络
      节点之间对等。每个节点既是主机又是路由器形成自组织网MANET。MANET的特点就是:网络拓扑结构是动态变化的;电源能量限制了无线终端必须以最节能的方式工作;每个节点既是主机又是路由器
      15、MANET中的路由协议:
      在这里插入图片描述
      16、DSDV路由协议:目标排序的距离矢量协议,扁平式先验式,利用序列号解决环路
      17、AODV路由协议:按需分配的距离矢量协议,扁平式,反应式,开销少,适合快速变化的网络。
      18、无线网的安全:隐藏SSID、MAC过滤、WEP/WPA/WPA2、802.11i四个方面
      19、802.11i标准制定的无线网络加密协议WPA是一个基于TKIP算法的加密方案
      20、无线网络加密协议WRAP是一个基于AES算法的加密方案
      21、802.11i采用的加密算法是AES
      22、802.11i:临时秘钥TKIP(RC4)、强制加密协议CCMP(AES128)、任选加密WARP。802.1x
      23、802.1X起源于802.11标准,最初的目的主要是解决无线局域网用户的接入认证问题;如果不能通过验证的话,就无法访问局域网中的资源,相当于物理断开
      24、WEP:RC4加密,CRC-32校验,24初始向量+40比特字符串构成64比特的WEP密钥,24初始向量+104比特字符串=128;WPA的设计中包含了认证、加密和数据完整性校验三个组成部分。48初始向量+80字符串=128密钥。RC4加密,相比起WEP采用了临时秘钥以减少安全风险
      25、WIFI6支持完整版的MU-MIMO;理论吞吐量最高可达9.6Gbps;遵从协议802.11ax;
      26、漫游是由无线客户端主动发起的,决定权在无线客户端这一方面,而并不在无线设备(AP接入控制器、AC无线接入点)这一方面;漫游分为二层漫游和三层漫游;三层漫游必须在同一个SSID;客户端在AP间漫游,AP可以处于不同的VLAN
      27、无线AP有两种工作模式,中继模式时网络SSID号均一致,而在桥接模式时网络SSID号不同
      28、组播报文对无线网络空口的影响主要是(拥塞),随着业务数据转发的方式不同,组播报文的抑制分别在(AP交换机接口)和(AC流量模板)配置
      29、AP发射功率的单位是dbm,天线增益的单位是dbi,这两个值越高,说明无线设备的信号穿透越强

    三、无线个人网

    1、无线个人网WPAN:小范围,10米左右,手持设备。IEEE 802.15.1/2/3/4标准
    2、蓝牙(Bluetooh)技术IEEE 802.15.1:1主设备、7从设备。数据速率1Mbps
    3、蓝牙技术中:

    • 工作频段——2.402-2.480GHz
    • 异步信道速率——非对称为723.2Kbps/57.6Kbps,对称433.9Kbps
    • 同步信道速率——64Kbps
    • 信道间隔——1MHz 信道数——79
      4、4个重要协议:RF无线电频率协议、链路控制协议LCP、链路管理协议LMP和链路控制自适应协议L2CAP。
      5、ZigBee(蜜蜂网)技术IEEE 802.15.4:全功能设备FFD,简单功能设备RFD,RFD之间不能通信。一般用于物联网,采用AODV协议
    • 被动式红外传感器是一种简单功能设备,接受协调器的控制
    • 协调器也可以运行某些应用,发起和接受其他设备的通信请求
    • 简单功能设备之间不能相互通信,只能与协调器通信

    第八章 网络互联与互联网

    一、网络互联设备

    1、常用网络互联设备:
    1层物理层:中继器、集线器
    2层链路层:网桥、交换机
    3层网络层:路由器、三层交换机
    4层以上高层:网关

    在这里插入图片描述
    2、网络互联设备:①中继器Repeater、集线器Hub(又叫多端口中继器)传输比特01放大信号,延长传输距离
    在这里插入图片描述
    3、网络互联设备:②网桥Bridge交换机Switch又叫多端口网桥,传输帧有源地址、目的地址,有自己的物理地址MAC地址
    4、网络互联设备:③路由器Router选择网络路径,传输分组,有自己的逻辑地址IP地址
    在这里插入图片描述
    5、在网络层采用分层编制方案的好处是为了减少了路由表的长度
    6、交换机获取与其端口连接设备的MAC地址中,交换机检查端口流入分组的源地址
    7、无源网络优势有:

    • 设备简单,安装维护费用低,投资相对较小
    • 组网灵活,支持多种拓扑结构
    • 安装方便不要另外租用或建造机房
      8、网桥查看每个端口出现的帧,将其源地址记入该端口的数据库,这样就可以了解各个端口连接了哪些网站
      9、当网桥连接的局域网出现环路时,所有的网桥通过运行生成树协议,阻塞一部分端口,使得不再出现环路
      10、部署无线控制器设备,实现各会议室的无线网络统一管理,无缝漫游:部署无线认证设备,实现内部用户使用用户名和密码认证登录,外来访客通过扫描二维码或者手机短信验证登录无线网络:部署POE交换机设备,实现无线AP的接入供电;大型会议室部署高密吸顶式AP设备,实现高密度人群的无线访问;在小型会议室借助86线盒部署面板式AP设备,实现无线访问。
      11、PoE也称为以太网供电,是在现有的以太网Cat.5布线基础架构不作任何改动的情况下,利用现有的标准五类、超五类和六类双纹线在为基于IP的终端(如IP电话机、无线局城网接入点AP、网络摄像机等)同时提供电功率和数据传输
      12、完整的PoE系统由供电端设备(PSE)和受电端设备(PD)两部分组成。依据IEEE 802.3af/at标准,有两种供电方式,使用空闲脚供电和使用数据脚供电;当使用空闲脚供电时,双绞线的==(4、5)线对为极、(7、8)线对为负极为PD设备供电==。当使用数据脚供电时,将DC电源加在传输变压器的中点,不影响数据的传输。在这种方式下线对1、2和线对3、6可以为任意极性。
      13、POE的标准供电电压值为48V
      14、在核心交换机上配置VLAN,可以实现无线网络和办公区网络、服务器区网络逻辑隔离;部署上网行为管理设备,可以对所有用户的互联网访问进行审计和控制,阻止并记录非法访问:部署防火墙设备,实现服务器区域的边界防护,防范来自无线区域和办公区域的安全威胁;在路由器上配置基于源地址的策略路由(因为目的都是访问互联网,基于源地址才能区分),实现无线区域用户通过运营商1访问互联网,办公区域和服务器区域通过运营商2访问互联网
      15、区分NAS和SAN。插网线跑网络协议的叫NAS,比如NFS/CIFS设备;跑存储协议的叫SAN,比如光纤交换机下的光纤盘柜。简单区分就是插RJ45的就是NAS,插光纤的就是SAN(不全部)
      16、在不增加网络设备的前提下,要防止外网用户对本网络进行攻击,只能在路由器上配置Nat策略对于外部网络显示的是一个公网IP或者是一段公网IP,从而隐藏内部网
      17、从题干中的关键词“使用web页面进行认证上网”可以知道这是一种基于web portal的认证方式,这种方式最大的特点是不需要安装客户端,直接使用浏览器访问网络之前,会强制定位到web认证页面
      18、网络设备旁路部署和直连部署的区别:相较于以旁路方式部署,将AC直连部署存在的问题是==(对AC的吞吐率和数据处理能力要求比较高,AC容易成为整个无线网络带宽的瓶颈);如果将AC部署在接入层设备上,往往由于接入层设备性能较差,稳定性不好,也不会配置冗余的电源、线路等提升可靠性的条件;
      19、网卡的工作模式有
      直接、广播、多播和混杂四种模式==,缺省的工作模式为直接和广播,即它只接收广播帧和发给自己的帧。网络管理机在抓包时,需要把网卡置于混杂模式,这时网卡将接受同一子网内所有站点所发送的数据包,这样就可以达到对网络信息监视的目的

    二、因特网协议IP

    1、TCP/IP协议簇:分为4个层次;主要协议,STDD
    在这里插入图片描述
    2、松散路由与严格路由

    • 松散路由:必须经过源站指定的路由器
    • 严格路由:只能进过远端指定的路由器,不能进过源端没有指定的路由器
      3、路由的协议管理距离:
    • 直连端口——0
    • 静态路由——1
    • IGRP——100
    • OSPF——110
    • IS-IS——115
    • RIP——120
      4、常用的协议封装和协议号:
    • ARP–>以太帧中传送(链路层)
    • ICMP–>IP 1
    • OSPF–>IP 89
    • RIP–>UDP 520
    • BGP–>TCP 179
      5、TCP/IP协议常见的协议端口号
      在这里插入图片描述
      6、IP协议:因特网协议,网络层最重要 的协议。无连接的、不可靠的数据包交换
      在这里插入图片描述
      7、IP协议数据单元,几个重要字段
    • 标识符:用于分段和重转配
    • IHL:IP头长度,20字节(32位字计)
    • 服务类型:区分优先级、可靠度
    • 总长度:包含IP头在内(字节数)
    • 头检验和:只校验IP头,不包括数据
    • 源地址:IP地址;目的地址:IP地址
    • 生存期:路由器个数+1,超过定值丢弃,防止数据报在网络中无限转发
    • 用户数据:MAC帧长1518,MTU1500,1518-14-4-20=1480,再-20=1460
      8、IP私有地址:不能用于公网,只能在内部局域网使用,它们在Internet上也不会被路由,但可以通过NAT等技术与公网通信。下表为标准A、B、C类私有IP地址块
      9、几种IP特殊地址:具有特殊意义
    • 0.0.0.0不确切地址,一般设备刚启动尚无IP临时使用表示本机。也叫默认路由地址
    • 255.255.255.255限制(受限)广播地址,==同一广播域内的主机,表示本网所有主机。“大广播”
    • 127.0.0.1:回环(送)地址==,别名Localhost,向自己发送测试数据。用于测试
    • 169.254.x.x自动专用地址,==找不到DHCP服务器,主机给自己分配的一个IP
    • ==单播地址:单个IP、主机地址
    • 网络地址主机号各位全为0,表示本网络 整个网络,不分配
    • 广播地址主机号各位全为1,发送给特定 网络的所有主机,不分配。也叫直接广播地址,也叫子网广播地址,“小广播”
      组播地址:224.0.0.1,从224.0.0.0到239.255.255.255,表示一个组内的主机
      10、TCP/IP网络中最早使用的动态路由协议是(RIP)协议,这种协议基于(距离矢量)算法来计算路由
      11、在交换网络中VTP协议的作用是将VLAN信息传播到整个网络中,让同一管理域中的所有交换机共享vlan配置信息
      12、静态修剪就是手工剪掉中继链路上不活动的VLAN
      13、动态修剪使得中继链路上所有共享的VLAN都是活动的
      14、动态/静态修剪要求在VTP域中的所有交换机都配置成服务器模式

    三、控制报文协议ICMP

    1、ICMP协议:因特网控制报文协议网络层的协议,协议号为1。传送有关通信控制和差错报文。就像侦查员、探子。封装在IP包中因而也不可靠ICMP的校验和是整个ICMP,也是必需有的
    2、ICMP协议的功能包括(报告通信故障),当网络通信出现拥塞时,路由器发出ICMP(源抑制)报文。
    3、确定一个网络是否可以连通,主机应该发送ICMP回声请求
    在这里插入图片描述
    在这里插入图片描述
    ICMP差错报告格式中,除了类型、代码和校验码外,还需要加上出错报文的前64比特以便源主机定位出错报文

    四、无线城域网

    1、无线城域网IEEE 802.16:WiMAX:802.16d(无线固定),802.16e(无线移动)WiMAX II:802.16m(4G)。比Wi-Fi覆盖范围更大,数据速率更高,更好的可扩展 性和安全性,实现电信级的服务
    2、关键技术:正交频分多路复用OFDM、多输入多输出MIMO、频分/时分双工FDD/TDD
    3、网络中有无线节点的接入
    ,在安全管理方面采取得措施有:修改屏蔽SSID、MAC地址过滤、加密方式的注意

    五、IP与子网掩码

    1、子网掩码:屏蔽IP地址的网络部分的“全1”比特模式。将某个IP地址划分成网络地址和主机地址两部分。子网掩码不能单独存在,它必须结合IP地址一起使用
    2、A、B、C地址划分:
    在这里插入图片描述
    3、IP地址中私有地址:分别为10.0.0.0/8;172.16.0.0172.31.0.0/16;192.168.0.0192.168.255.0/24
    4、0.0.0.0不能作为目标地址;广播地址不能作为源地址;127.0.0.1既可以作为源地址又可以作为目标地址
    5、路由协议是通过执行一个算法来完成路由选择的一种协议
    6、动态路由协议可以分为距离向量路由协议和链路状态路由协议
    7、路由器之间可以通过路由协议学习网络的拓扑结构

    六、地址解析协议ARP

    1、地址解析协议ARP(二层以太帧中)IP查询MAC地址,询问/回答机制。ARP缓存表、ARP欺骗、 ARP病毒、代理ARP、反向RARP
    在这里插入图片描述
    2、地址解析协议ARP:缓存表:开始-运行-cmd,输入arp -a(-s、-d等)回车
    3、显示所有的ARP缓存表是arp -a;静态添加是arp -s;清楚ARP缓存是arp -d;
    4、ARP请求采用广播方式发送
    5、ARP Request采用广播发送;ARP Response采用单播传送
    6、ARP表用于缓存设备的IP地址与Mac地址的对应关系,采用ARP表的好处是==(限制网络广播数量)==
    7、地址解析协议ARP:代理ARP,有路由器充当第三方代理,进行ARP请求/回答;(由一个路由器代替远端目标回答ARP请求)
    8、所谓“代理ARP”是指由(离源主机最近的路由器)假装目标主机回答源主机
    的ARP请求
    9、反向地址解析协议RARP:由MAC查找IP,常用语无盘工作站,设备没有硬盘,无法记录IP,刚启动时发送一个广播,用MAC去获取IP。==需要一台RARP服务器,记录MAC与IP的对应关系。
    10、==ARP欺骗和ARP病毒:假如向某一主机发送伪装ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。例如:网管软件获取全网MAC地址。病毒伪装网关MAC收集信息

    七、内部路由协议RIP

    1、网络层路由协议:选择转发数据路径
    在这里插入图片描述
    2、路由信息协议RIP:距离矢量算法,TCP/IP网络中最早使用的动态路由,计算跳数,最大15跳,16跳不可达。30s更新、 180s不存在、240s删除“口诀168”。支持等费用负载均衡和链路冗余。使用UDP的520端口。
    在这里插入图片描述
    3、两种版本:RIPV1和RIPV2区别,适 合小型网络。
    在这里插入图片描述
    4、路信息由协议RIP防止环路的办法

    • 最大跳数:当一个路由条目发送出去会自加1跳,跳数最大为16跳,意味着不可达
    • 水平分割:一条路由信息不会发送给信息的来源(不把从某邻居节点获得的路由信息在发送给该邻居节点)
    • 反向毒化的水平分割:把从邻居学习到的路由信息设为16跳,在发送给那个邻居。更安全
    • 抑制定时器和触发更新也可以防止环路
    • 距离矢量路由协议的路由器,根据邻居发来的信息更新自己的路由表
    • 在距离矢量路由协议中,每一个路由器接收的路由信息来源于它的邻居路由器

    八、内部路由协议OSPF

    1、开放最短路径优先协议OSPF:链路状态算法,路由器之间通过网络接口状态LSA来更新和建立链路状态数据库(邻居表),包括:连通、距离、时延、带宽等状态,Dijkstra的SPF算法(计算最短路径)。链路状态算法用于计算路由表。触发更新、分层路由。支持大型网络,区域ID的取值范围是1~65535
    2、链路状态协议的特点:

    • 提供了整个网络的拓扑视图
    • 计算到达的各个目标最短通路
    • 具有事件触发的路由更新功能
    • OSPF为减少洪泛链路状态的信息量,可以将自治系统划分为更小的区域
      3、简化原理:发Hello报文建立邻接关系(邻居表)—形成链路状态数据库(拓扑表)SPF(链路状态)算法形成计算机路由表
      在这里插入图片描述
      4、支持可变长子网掩码(VLSM)和路由汇聚功能
      5、OSPF要选定一个指定的路由器(DR),指定路由器的功能就是发送链路状态公告
      6、OSPF采用触发更新,和30分钟周期更新支持不连续子网和CIDR
      7、单个OSPF网络只有区域0
      8、OSPF区域类型:主干区域(32位),Area 0.0.0.0或者Area 0来表示
      在这里插入图片描述
      9、开放最短路径优先协议OSPF:根据物理连接和拓扑结构,分为以下网络类型:
      在这里插入图片描述
      10、OSPF路由器分类:根据不同区域之间功能分为:BR(骨干)、IR、ABR、ASBR
      在这里插入图片描述
      11、OSPF的五种报文类型Hello报文默认10s更新一次,40s失效目标地址是224.0.0.5所有路由器。用于发现建立邻居还用于选出区域内的指定路由器DR和备份指定路由器BDRDR/BDR组播地址是224.0.0.6
      在这里插入图片描述
      12、RIP定时发布路由信息,而OSPF在网络拓扑发生变化是发布路由信息;RIP的路由信息发送给邻居,而OSPF路由信息发送给整个网络路由器;都是内部路由协议
      13、OSPF协议中DR的作用范围是一个网段
      14、OSPF协议相对于RIP1的优势在于:没有跳数的限制、支持可变长子网掩码(VLSM)、支持网络规模大、收敛速度快(如果是和RIP2比较,则RIP2支持可变长子网掩码(VLSM))
      15、在一个区域OSPF拥有一个32位的区域标识符;在一个区域内部的路由器不知道其他区域的网络拓扑
      16、在OSPF的链路状态“度量”主要指费用、距离、延时、带宽(没有收敛时间)
      17、在OSPF中,一个路由器的链路状态只涉及与相邻路由器的连通状态

    九、外部路由协议BGP

    1、边界网关协议BGP:是外部网关协议,主要功能就是控制路由策略不同自治系统AS之间。寻找较好的路由策略。通过TCP的179端口建立连接支持子网VLSM和CIDR,是一种路径矢量协议。目前最新BGP4,而BGP4+支持IPV6
    在这里插入图片描述
    2、BGP的四种报文:Open建立邻居,Keepalive周期性探测邻居存活。BGP协议使用keep-alive报文周期性的证实邻居站的连通性每一个自治系统要选择至少一个路由器作为该自治系统的“BGP发言人”。增量更新,支持认证。可靠传输,防止环路,防止区域间路由循环。自治通信,策略选路。支持无类、支持聚合。
    在这里插入图片描述
    3、PGP是一种电子邮件加密软件包它提供数据加密和数字签名两种服务,采用(RSA公钥证书)进行身份认证,使用(IDEA)(128位密钥)进行数据加密,使用(MD5)进行数据完整性验证
    4、BGP使用keepalive周期性的发送存活消息(60s)维持邻居关系
    5、安全电子邮件使用PGP协议
    6、BGP4相比RIP存在很多优势例如:
    7、==可以跨设备建立邻居关系
    8、提供了丰富的路由属性,进行选路
    9、可以管理全球的路由器
    10、==BGP4的特点:

    • BGP4网关向对等实体(Peer)发布可以到达的AS列表
    • BGP4网关采用逐跳路由(hop-by-hop)模式发布路由信息
    • BGP4可以通过路由汇聚功能形成超级网络(Supemet)
      11、BGP将TCP用作其传输协议,运行在TCP的179端口上(目的端口)

    十、传输层协议TCP

    1、TCP协议:传输控制协议面向字节流按顺序、连接、可靠、全双工,可变滑动窗口、差错控制用后退N帧ARQ协议、缓冲累积传送。协议号6
    在这里插入图片描述
    2、TCP协议:传输控制协议,下面是TCP段(段头),TCP头(传输头),TCP包头(报头)格式:
    在这里插入图片描述
    3、TCP协议:几个重要字段

    • 源端口、目的端口:16位,2^16(0-65535)
      4、URG:紧急指针有效
      5、ACK:应答顺序号有效
      6、PSH:推进功能有效
      7、RST:复位为初始状态
      8、SYN:建立同步连接
      9、FIN:结束释放连接
      10、校验和:包括TCP段头、数据、伪段头
      11、TCP三次握手及其协议状态:
      在这里插入图片描述

    LISTEN 服务器等待连接过来的状态(被动打开)
    SYN_SENT 客户端发起连接(主动打开),之后如果SYN超时或服务器不存在–>CLOSED
    SYN_RCVD 服务器收到SYN包的时候就是此状态
    ESTABLISHED 完成三次握手,进入连接建立状态,说明可以进行数据传输了
    12、SYN标志字段置“1”发生在连接请求与响应阶段;当出现错误连接RST标志字段置“1”;当连接终止请求FIN标志字段置“1”;ACK标志字段置“1”表明此TCP段带有捎带应答
    13、TCP使用三次握建立连接,可以防止出现错误连接;流控协议是可变大小的滑动窗口协议。
    14、TCP拥塞控制:报文到达速率大于路由器的转发速率,产生拥塞。解决方法有:
    ①重传计时器
    ②慢启动(慢开始)
    ③拥塞避免
    ④快速重传
    ⑤可变滑动窗口
    ⑥选择重发ARQ

    TCP拥塞控制:超时重传计时器,重传是保证TCP可靠的重要措施。TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的时间到了,但还没有收到确认,就重传这一报文段
    重传时间要设置的合理,一般和往返时间、平均时延、时间偏差等有关
    。大多数采取观察最近一段时间的报文时延来估算往返时间
    15、TCP拥塞控制:慢启动发送方在接收到确认之前逐步扩大窗口的大小。1、2、4、8等按指数规律翻倍,最后达到门限阈值出现超时,将拥塞窗口回到1,再次开始慢启动
    在这里插入图片描述
    17、TCP拥塞控制:拥塞避免窗口达到门限阈值以后,进入拥塞避免阶段,TCP采用线性增加方式放大窗口,按照+1递增发生拥塞,门限阈值减半。再发生再减半。按指数规律乘倍减半
    在这里插入图片描述
    18、TCP拥塞控制:快速重传发送端一连收到3个重复的ACK,就重传,不等计时器
    在这里插入图片描述

    十一、传输层协议UDP

    1、UDP协议(无顺序号):用户数据报协议无连接的、不可靠的、不保证顺序的、无差错流控机制校验和包括:UDP头部(8字节)、数据、伪头部协议号17
    在这里插入图片描述
    2、UDP协议:UDP报文格式如下:少量传输数据高层程序负责解决数据排序、差错控制等。开销少头部8个字节),网络管理常使用

    在这里插入图片描述
    3、TCP(适合远程)支持数据传输,UDP支持音视频传输
    4、UDP协议在IP层之上提供了端口寻址的能力

    十二、常用应用层协议

    1、电子邮件协议:SMTP简单邮件传输协议,负责将邮件上传到服务器,采用TCP的25端口,C/S工作。仅传送ASCII码文本
    在这里插入图片描述
    2、电子邮件协议:S/MIME多用途互联网邮件扩展协议,负责将多媒体邮件安全上传到服务器,包含文本、图像、音频、视频以及其他应用程序专用的数据,MIME不能提供运用层安全
    在这里插入图片描述
    3、电子邮件协议:POP3邮局协议,负责将邮件下载到客户机,采用TCP的110端口C/S工作用户从服务器读取邮件后,服务器就删除该邮件
    在这里插入图片描述
    4、电子邮件协议:IMAP4互联网消息访问协议提供摘要浏览,选择下载。采用TCP的143端口,C/S工作。用户从服务器读取邮件后,服务器仍会保存该邮件,可以反馈服务器实现同步
    在这里插入图片描述
    5、电子邮件协议:PGP电子邮件加密协议包括加密、鉴别、签名和邮件完整性等技术。使用IDEA(128位)加密数据,RSA加密密钥,MD5认证
    6、PEM增强保密邮件协议,使用多种加密方法提供机密性、认证和信息完整性的因特网电子邮件协议,采用每个报文一次一密的方法加密。其他和PGP功能差不多。
    7、文件传输协议:FTP,负责文件通过服务器上下传送。采用TCP的两条连接:数据连接20端口,控制连接21端口,C/S工作合法访问和匿名访问(anonymous)。
    在这里插入图片描述
    9、文件传输协议:FTP,有主动模式(PORT/Standard)和被动模式(PASV/Passive)。区别是:服务器主动20传数据,被动随机端口(主动爱你,被动随机)
    在这里插入图片描述
    10、远程登录协议:Telnet,TCP/IP终端仿真协议,登录到远程主机上操作,网络虚拟终端NVT支持异构主机,采用TCP的23端口,C/S工作,采用NVT格式实现客户端和服务器的数据传输
    在这里插入图片描述
    11、超文本传输协议:HTTP万维网WWW(Web)服务器提供全球的、分布的、动态的、多平台的、交互的、多媒体信息TCP的80端口,B/S工作统一资源定位器URL
    在这里插入图片描述

    十三、路由器技术NAT

    1、路由器技术NAT:网络地址翻译解决IP短缺,路由器内部和外部地址进行转换

    • 静态地址翻译转换:静态NAT(一对一)
    • 动态地址翻译转换:动态NAT(多对少)
    • 网络地址翻译端口转换(地址伪装):NAPT(多对一)
      在这里插入图片描述
      2、路由器技术NAT:静态NAT,内外一对一转换,用于web服务器,ftp服务器等固定IP的主机服务器
      在这里插入图片描述
      3、路由器技术NAT:动态NAT,内外多对少转换,用于内部局域网较多用户访问外部网络。外部需要地址池(pool)
      在这里插入图片描述
      4、路由器技术NAT:网络地址端口转换:NAPT(PAT)(多对一)内外多对一转换,使用外部一个IP,多个端口号对应内部IP。也称为IP伪装,可以隐藏内部主机
      在这里插入图片描述
      5、地址伪装是指,把多个内部地址翻译成一个外部地址和多个端口号
      6、网络地址和端口翻译(NATP)就是用于把内部的所有地址映射到一个外部地址,好处就是隐藏了内部网络的IP地址
      7、地址映射方式有:全相联方式、直接方式和组相联方式

    十四、路由器VLSM和CIDR

    1、路由器技术VLSM:可变长子网掩码。在有类的IP地址的基础上,从它们的主机号部分借出相应的位数来做网络号,也就是增加网络号的位数,子网划分
    2、VLSM是把标准网络分割成更小的子网的技术而CIDR是把几个标准网络合并成一个大网络的技术
    3、路由器技术CIDR:无类域间路由,解决路由缩放问题,采用/比特位,无类不区分A、B、C类,称为CIDR地址块,路由汇聚

    十五、路由器技术QoS

    1、路由器技术QoS(网络层):网络服务质量。将网络数据流分成不同的等级提供不同的服务。有集成服务(IntServ)和区分服务(DiffServ)模型两种标准

    在这里插入图片描述
    2、路由器技术QoS:集成服务(IntServ)分成三种:保证质量的服务(有关协议是RSVP特点是由接收方向路由器预约资源,从源到目标单向预约)、控制负载的服务、尽力而为的服务(目前因特网提供的服务)
    在这里插入图片描述
    3、QoS是网络的一种安全机制,主要用来解决网络延迟和阻塞等问题.它主要有三种工作模式,分别为区分服务模型、集成服务模型及尽力而为服务模型。其中使用比较普遍的方式是尽力而为服务模型
    4、路由器技术QoS:区分服务(DiffServ)不再使用资源预约而是区分不同的业务流。分为三种:尽力服务BE(000000)、优质服务AF、加速服务EF(101110)
    5、区分服务(DiffServ):区分服务代码点DSCP利用IP包头的服务类型字段ToS。逐跳行为PHB:逐级跳的转发方式,每个PHB对应一种转发方式
    6、Qos表现在延时、抖动、吞吐量和丢包率几个方面,采用的技术有RSVP、DiffServ、MPLS

    十六、路由器技术MPLS

    1、路由器技术MPLS:多协议标签交换,属于2.5层,MPLS包头的位置应该插入在以太帧头与IP头之间一般认为是第三层交换,硬件交换、速度快,叫一次路由,多次交换用标签交换代替复杂的路由运算
    2、路由器技术:MPLS基本原理。标记边缘路由器LER,标记交换路由器LSR
    在这里插入图片描述
    3、路由器技术:MPLS转发等价类(FEC),把等价的通信流汇聚转发。标记具有局部性。提供QoS、粒度控制、负载均衡等
    4、路由器可以根据转发目标把多个IP流聚合在一起,组成一个转发等价类
    5、MPLS技术主要是为了提高路由器转发速率而提出的,其核心思想是利用标签交换取代复杂的路由运算和路由交换;该技术实现的核心就是把
    IP数据报封装在MPLS数据包

    6、MPLS VPN有CE路由器、PE路由器、P路由器组成,P路由器是MPLS核心网中的路由器,负责高速转发PE路由器是MPLS核心网上的边缘路由器,负责传送数据报的MPLS标签的生成和弹出,还将发起根据路由建立交换标签的动作CE路由器是直接与运营商相连的用户端路由器
    7、路由器根据转发目标把多个IP流聚合在一起组成转发等价类

    十七、路由器技术组播

    1、路由器技术:IP组播,有一个源向一组主机发送信息,D类地址。(一个IP地址代表一个主机,称为单播地址)
    在这里插入图片描述
    2、路由器技术:IP组播用途,用于视频点播、网络电视、视频会议等点到多点的业务IP组播地址分为三类

    • 保留组播:224.0.0.0~224.0.0.255(预留的组播地址)用于路由协议,如224.0.0.1代表所有主机,224.0.0.2代表所有路由器
    • 用户组播:224.0.1.0~238.255.255.255(公用组播地址),全球范围分配,类似公网IP,可用于Internet
    • ==本地组播:==239.0.0.0~239.255.255.255(本地管理组地址,仅在特定的本地范围内有效)本地子网分配,类似私网IP
    • 224.0.2.0-238.255.255.255可为用户可用的组播地址(临时组播地址),全网范围内有效
      3、路由器技术:常考IP组播地址
    • 224.0.0.1->所有主机的地址
    • 224.0.0.2->所有组播路由器的地址
    • 224.0.0.3->没有分配
    • ==224.0.0.4->DVMRP路由器 ==
    • 224.0.0.5->所有OSPF路由器
    • 224.0.0.6->OSPF的DR/BDR
    • 224.0.0.9->RIP-2路由器
    • 24.0.0.12->DHCP 服务器/中继代理
    • 224.0.0.13->所有pim路由器
    • 组播服务发送信息只需要发送一个分组,组内所有成员即可全部收到
      4、路由器技术:IP组播地址与MAC地址:组播MAC地址:01-00-5e-xx-xx-xx
      5、IP组播协议:IGMP因特网组管理协议管理主机加入或离开组播组IGMP封装在IP中,协议号2(ICMP的协议号就是1)。IGMPv3报文:分为三种:
      成员资格询问报文:组播路由器发出,询问是否有主机加入组播
    • 成员资格报告报文:主机加入组播组
    • 记录报文:记录组播的状态和信息
      在这里插入图片描述
      6、IP组播路由协议:用来建立组播树,是实现组播传输的关键技术源分发树和共享分发树
      在这里插入图片描述
      8、IP组播路由协议:名词解释:
    • PIM:协议无关组播
    • PIM-DM:密集模式PIM
    • DVMRP:距离矢量组播路由协议
    • MOSPF:组播开放式最短路径优先
    • CBT:基于核心的树
    • PIM-SM:稀疏模式PIM
      9、PIM-DM:密集模式PIM。用于组播成员集中,且较多,如局域网:
    • 采取“泛洪扩散-修剪丢弃”维护组播分发树。使用“”的机制,先给你,可以不要
    • 关键技术是利用反向通路,使用自己找回来的路径
    • 使用源分发树:以组播源为根节点构造到所有组播组成员的生成树,通常也称为最短路径树(SPT
      10、PIM-SM:稀疏模式PIM,用于组播成员较少,且稀疏分布,如广域网:
    • 采用选择性的建立和维护分布树。只有发送请求的才会收到数据。使用“”的机制,你要了,才会给你
    • 使用共享分发树:确定一个汇聚点。先发给汇 聚点,再有汇聚点发给其他路由器

    十八、路由技术ACL

    1、ACL:访问控制列表可以根据源地址、目标地址、源端口、目标端口、协议信息对数据包进出过滤控制
    2、两个方向:入口inbound是指数据流进入路由器(进门)、出口outbound是指数据流从路由器流出(出门)。两种动作:允许permit、拒绝deny
    3、标准访问控制列表是根据IP报的源地址来对IP报文进行过滤扩展访问控制列表是根据IP报文的源地址、目的地址上层协议时间等来对IP报文进行过滤。一般地,标准访问控制列表放置在靠近数据目的地的位置扩展访问控制列表放置在靠近数据源端的位置
    4、ACL的分类
    在这里插入图片描述

    • 访问控制列表ACL可以通过编号或名称来引用==,标准ACL==只能根据数据包的源地址进行过滤,扩展ACL可以根据源地址、目的地址以及端口号进行过滤。

    十九、DHCP协议

    • 无法做到提高域名解析速度

    在这里插入图片描述

    • 当客户机发送dhcpdiscover报文时采用广播发送
    • DHCP服务可以服务与一个网段,也可以通过DHCP中继服务多个子网
    • 客户端要自动获取IP,此时并不知道DHCP服务器在哪
    • 在一个网段中可以配置多台DHCP服务器

    第九章 下一代互联网

    一、IPV6基础知识

    1、IPV6概念:下一代互联网NGI,目前是第6版。IPV6分组有1个固定头部和n个扩展头部(任选)以及上层协议的负载组成。如下图
    2、IPV6固定头部(40字节共320位):各字段解释含义:

    • 版本0110,4位,代表IPV6
    • 通信类型:8位,IP分组优先级,同服务类型
    • 流标记:20位,标记特殊处理的分组
    • 负载长度:16位,除了固定,扩展和负载
    • 下一头部:8位,指明扩展头部或高层协议
    • 跳数限制:8位,检测路由循环减1变为0丢弃
    • 源地址:128位,发送端的地址
    • 目标地址:128位,接收端的地址
      3、IPV6扩展头部类型:6种任选,作用 是保留IPV4某些字段的功能,但只是特殊设备 来检查处理,而不是每个都要处理。
      在这里插入图片描述
    • IPV6扩展头部格式:第1个字节:是下一头部选择符,指明下一头部类型。0逐跳选项,60目标选项,43源路由选择,44分段,51认证,50封装安全负荷,59没有下一头部
    • 第2个字节:扩展头部长度。以8个字节计数,不包含前8个字节,如果是8字节,则字段为0,如果是16字节,则字段为1,如果是24字节,则字段为2
      在这里插入图片描述
      任选部分:编码成TLV的形式,T类型1个字节,L长度,V数据
      4、IPV6扩展头部分组封装顺序如下:(IPv6跳槽记
    • (1)IPv6头部
    • (2)逐跳选项头
    • (3)目标选项头(第一个目标节点要处理的信息)
    • (4)路由选择头
    • (5)分段头
    • (6)认证头
    • (7)封装安全负荷头
    • (8)目标选项头(最后的目标节点要处理的信息)
    • (9)上层协议头部
      5、ipv6常考前缀(格式前缀用于表示地址类型或子网地址):
    • 全球单播前缀:001
    • 链路本地前缀:FE80(1111 1110 10)
    • 站点本来前缀:FEC0(1111 1110 11)
    • 不确定地址:0:0:0:0:0:0:0:0(不能分配给任何节点)
    • 环回地址:0:0:0:0:0:0:0:1(向自身发送ipv6分组)
    • 2000::/3全局单播地址
    • FC00::/7唯一的本地单播地址范围
    • FE80::/10链路本地单播地址范围
    • FF00::/8组播地址范围
    • 2002::/16保留供6to4隧道技术使用
      6、IPV6地址分类:①单播地址、②任意播地址、③组(多)播地址
    • 单播地址:标识一个接口,目的地址为单播地 址的报文会被送到被标识的接口
    • 组播地址:标识多个接口,目的地址为组播地址的报文会被送到被标识的==所有接口
    • 任播地址:标识多个接口,目的地址为任播地址的报文会被送到最近的一个被标识的接口;不能用作源地址,只能用做目标地址==,且只能分配给路由器。代表一组接口的标识符,任意播地址是在单播地址空间中分配的,组成是子网前缀+全0
    • IPV6没有定义广播地址
      7、单播地址:4类可聚合全球单播、链路本地地址、站点本地地址、特殊单播地址
    • ①可聚合全球单播(相当于公网IPv4):前缀001(/3)。2000(/3)
      在这里插入图片描述
    • ②链路本地地址(相当于自动专用IP):前缀 1111 1110 10(/10或/64),用于同一链路的相邻结点间的通信。链路本地地址相当于IPv4中的自动专用IP地址(APIPA),可用于邻居发现,并且总是自动配置的,包含链路本地地址的分组不会被路由器转发
      在这里插入图片描述
    • ③站点本地地址(相当于私有IP):格式前缀 1111 1110 11(/10或/48或/64)相当于IPv4中的私网地址
      在这里插入图片描述
    • ④特殊单播地址:不确定地址0:0:0:0:0:0:0:0, 回环地址0:0:0:0:0:0:0:1。
      9、组播地址:格式前缀1111 1111(/8), 还包括标志、范围、组ID字段
      在这里插入图片描述
      10、任播地址:仅用作目标,且只分配给路由器。默认路由器接口都被分配任意播地址。子网-路由器任意播地址子网前缀必须固定,其余位置全0
      11、一个IPv6包可以有多个扩展头,扩展头应该依照如下顺序逐跳选项头->路由选择->分片->鉴别->封装安全有效载荷->目的站选项
      12、IPV6地址配置:默认自动配置有2种
    • 全状态自动配置:动态主机配置协议DHCP实现了IP地址的自动配置
    • 无状态自动配置:①获得链路本地地址:链路本地地址前缀1111 1110 10后加网卡MAC地址,产生一个链路本地地址,并发出一个 ICMPv6请求,确认唯一性。②获得可聚合全球单播地址:向本地链路中所有组播ICMPv6 路由器请求,主机获得单播前缀001后加自己的接口ID,自动配置单播地址
      13、IPV6和IPV4的比较
      在这里插入图片描述
      14、IPV6地址相比IPV4改进:4个方面
    • 扩展寻址能力:扩展到128位,支持多级地址层次,改进组播,增加任意播更实用
    • 简化报头格式:IP头部字段有12个减少为8个,中间路由器有6个减少为4个,提高效率
    • 改进路由选项路由选项放在扩展头部仅在需要时插入路由选项,更灵活,更流畅
    • 提供流标记:对某些分组进行特别处理,可以提供特别的服务质量,更好的传送数据

    二、IPV6过渡技术

    1、IPV6向IPV4过渡技术:有3种技术

    • 隧道技术:用于解决IPV6网络节点之间通过IPV4网络进行通信的问题。(时空隧道
      优点:充分利用现有网络投资,过渡初期实现方便。缺点:路由器隧道出入口负载重,实现复杂,不利于大规模应用
      技术:有6to4隧道、6over4隧道、ISATAP隧道
      6to4地址形式:2002:IPv4:子网ID::接口ID
    • 协议翻译技术:使得纯IPV6节点之间和纯IPV4节点之间可以通信。(英汉互译
      优点:不需要升级改造,开启NAT-PT即可缺点:转换不能完全保持原有含义,缺乏安全性
      技术:有SIIT翻译、NAT-PT翻译、TRT翻译
    • 双协议栈技术:使得IPV4IPV6共存于同一设备和同一网络中。(英汉双语
      优点:网络规划相对简单,可以充分发挥安全性、路由约束和流支持。缺点:对设备要求较高,维护大量协议和数据,升级改造投资大、建设周期比较长
      技术:有BIS双栈、BIA双栈
    • 静态模式提供一对一的IPv6地址和IPv4地址的映射;动态模式也提供一对一的映射,==但是使用一个IPv4地址池;NAPT-PT(网络地址端口转换)==提供多个有NAT-PT前缀的IPv6地址和一个源IPv4地址间的多对一动态映射

    三、移动IP和IPV6

    1、移动IP的概念:移动主机在移动的同时,能够在任何地方使用他的家乡地址进行联网
    2、移动主机通过在无线通信网中漫游来保持网络连接
    3、移动IP的原理:移动主机分配一个家乡地址作为永久标识。如果到外地赋予一个转交地址家乡地址会获得外地的转交地址
    4、实现的关键技术就时移动主机具有一个家乡网络地址并获取一个外地转交地址

    四、IPV6路由协议

    1、IPV6路由协议:定义了5种路由协议:

    • RIPng:RIPv2的扩展,UDP521端口
    • OSPFv3:OSPFv2的扩展,做了较大改进
    • BGP4+:BGP4的扩展,用来支持IPV6
    • ICMPv6:ICMP的扩展,集成了ARP功能
    • IS-IS:中间系统到中间系统,IS-IS属于内部网关路由协议。IS-IS是一种链路状态协议,与TCP/IP网络中的OSPF协议非常相似,使用 最短路径优先算法进行路由计算。

    第十章 网络安全与应用

    一、网络安全基础

    1、网络安全威胁和漏洞类型:窃听;病毒;假冒;木马;重放;诽谤;流量分析;非授权访问;破坏完整;拒绝服务
    2、安全需求可划分为理安全(如机房安全)、络安全(入侵检测)、统安全(漏洞补丁管理)和用安全(数据库安全)
    3、漏洞:物理、软件、不兼容、其他等
    4、网络安全信息数据五大特征:

    • 完整性:信息数据完整不破坏
    • 保密性:信息数据需授权不泄露
    • 可用性:信息数据攻击后迅速恢复可用
    • 不可否认性:信息数据参与者补课否认不可抵赖,身份真实有效。
    • 可控性:信息数据可以管控传播范围
      5、网络安全基本技术:
    • 数据加密:数据按照规则打乱,重新组合
    • 数字签名证明发送者签发,也可==完整性,==使用公钥体质产生的一堆公钥和私钥
    • 身份认证用户合法性,身份真实没假冒
    • 防火墙控制内外数据进出阻挡病毒木马
    • 入侵检测:采用异常检测特征保护网络
    • 网络隔离:内外网隔离分开使用,如网闸
      6、主动攻击,攻击者试图突破网络的安全防线(如重放攻击、IP地址欺骗、拒接服务)。被动攻击,攻击者通过监视所有信息流以获得某些秘密(如流量分析,系统干涉)
      7、拒绝服务:主要是针对TCP连接进行攻击的,通过发送大量的建立连接请求,使得服务端穷于应付,无法提供正常的网络服务
      8、暴力攻击:是穷举式猜测用户密码
      9、网络侦察:是探测远端系统的漏洞,以便利用漏洞进行入侵
      10、特洛伊木马:是通过远端控制,对目标系统实施内部破坏或盗窃用户机密数据。

    二、信息加密技术

    1、现代信息加密技术:对称和非对称:
    对称算法有:==DES(共享密钥)==数据加密标准、3DES(共享密钥)三重DES加密、IDEA国际数据加密算法、AES高级加密标准、RC4流加密算法第四版2人等
    非对称算法有:RSA(基于大素数分解3人)、ECC(椭圆曲线密码学)、Elgamal(基于离散对数1人)
    2、(1)分组加密,也叫块加密,一次加密明文中的一个块。具有代表性的块加密算法有DES,AES,3DES等。(2)序列加密,也叫流加密,一次加密明文中的一个位。是指利用少量的密钥(制乱元素)通过某种复杂的运算(密码算法)产生大量的伪随机位流,用于对明文位流的加密。
    3、现代信息加密技术对称密钥总结表:
    在这里插入图片描述
    4、RC5:适合
    大量的明
    文消息进行加密传输

    • 私钥用来签名和解密,公钥用来认证和加密,数字证书是对用户公钥的认证确保公钥可信(所以数字证书中包含了用户的公钥)
    • ①选两个大素数p和q
    • ②令n=p*q,z=(p-1)(q-1)
    • ③符合公式ed=1(mod z),e公钥,d私钥
      mod为模运算,也就是取余数计算,例如:e
      d=1(mod z)可变形为==(ed)/ z余数为1==
      如:按RSA算法,若选两奇数P=5,Q=3,公钥 E=7,则私钥为()
      这里p=5,q=3。n=pq=15, z=(p-1)(q-1)=8。根据ed=1(mod z),也 就是(ed)/ z余数为1。即:(7
      d)/ 8 …1,把答案6、7、8、9带入只有答案7满足条件

    三、数字签名技术

    1、数字签名技术:数字签名用于确认发送者身份和消息完整性。满足三个条件:①接收者能够核实发送者。②发送者事后不能抵赖。③接收者不能伪造签名
    在这里插入图片描述
    2、用户B收到用户A带数字签名的消息M,为了验证M的真实性,首先需要从CA获取用户的数字证书,并利用CA的公钥验证证书的真伪,然后利用A的公钥验证M的真实性
    3、服务器证书的步骤顺序如下:①生成证书请求文件;②提交证书申请;③从CA导出证书文件;④在IIS服务器上导入并安装证书

    四、密钥管理技术

    1、密钥管理体系:KMI、PKI、SPK

    • KMI:密钥管理基础结构第三方KDC秘密物理通道,适用于封闭的内网使用
    • PKI:公钥基础结构不依赖秘密物理通道。适用于开放的外网
    • SPK:适用于规模化专用网
      2、其他
    • 加密:PKB;解密:SKB
    • 典型的公钥加密(公开)算法有:RSA、ECC、DSA、背包加密、Rabin算法
    • DES是私钥加密

    五、虚拟专用网VPN(IPSec)

    1、VPN技术:虚拟专用网,①建立在公网上。②虚拟性没有专用物理连接。③专用性,非VPN用户无法访问
    2、VPN四个关键技术:①隧道技术。②加解密技术。③密钥管理技术。④身份认证技术
    3、VPN三种应用解决方案

    • 内联网VPN(Intranet VPN):企业内部用于连通总部和分布各个LAN
    • 外联网VPN(Extranet VPN):企业外部用于实现企业与客户、银行、供应商互通
    • 远程接入VPN(Access VPN):解决远程用户出差访问企业内部网络
      4、L2TP数据包的封装格式是:
      在这里插入图片描述
    • ==PPP点对点协议、PPTP点对点隧道协议、L2TP第二层隧道协议;==能控制数据链路的建立;能够分配和管理广域网的IP地址;能够有效的进行检错
    • IPSec IP安全性、GRE通用路由封装协议
    • SSL/TLS安全套接层
      6、PPP、PPTP、L2TP技术对比汇总
      在这里插入图片描述
      7、PPP中的==LCP:==用于建立和配置数据链路;NCP:用于协议网络层参数,例如动态分配IP地址等。
      8、PPTP与L2TP的区别比较(二层的):
    • PPTP要求IP网络,L2TP适用各种网络
    • PPTP只能建立1条隧道,L2TP建立多条
    • PPTP包头占用6字节,L2TP占用4字节
    • PPTP不支持隧道验证,L2TP支持
      9、宽带接入通常采用PPPoE进行认证。PPP协议一般包括三个协商阶段,LCP协议用于建立和测试数据链路;NCP协议用于协商网络层参数;chap协议用于通信双方确认对方的身份
      10、IPSec(三层):IP安全性在IP层通过加密与数据源验证,来保证数据包传输安全
    • 认证头AH,用于数据完整和数据源认证、防重放,不提供数据加密服务
    • 封装安全负荷ESP,提供数据保密数据完整、辅助防重放
    • 密钥交换协议IKE,生成分发密钥(该策略由SA进行定义)
      11、IPSec两种模式:传输模式和隧道模式
      在这里插入图片描述
      12、SSL安全套接层:和TLS(传输层安全标准)是双胞胎。在传输层上4.5层套接安全协议SSL/TLS被称为HTTPS工作在传输层,对传输层、应用层都可以控制
      在这里插入图片描述
      13、SSL和IPSec的区别比较:
    • IPSec在网络层建立隧道,适用于固定的VPN。SSL是通过应用层的web连接建立的,适合移动用户远程访问公司的VPN
    • IPSec工作在网络层,灵活性小。SSL工作在传输层,灵活性大
      14、主机路由的掩码为:255.255.255.255
      15、IPSec可对数据进行完整性保护,提供用户身份认证服务,可对数据加密传输
      16、两台计算机通过IPSec协议通信之前必须先进行协商,协商结果称为SA (安全关联)。IKE(密钥)协议将协商工作分为两个阶段,第一阶段协商模式SA==(又称IKE SA)新建一个安全的、经过身份验证的通信管道,之后在第二阶段中协商快速模式SA(又称IPSec SA)后,便可以通过这个安全的信道来通信==。使用display ike sa命令,可以查看协商结果
      17、在Windows Server 2008 R2网关上配置IPSec策略,包括:创建IPSec策略、创建筛选器列表、配置隧道规则、进行策略指派 4个步骤
      18、IPSEC中安全关联(security Associations)三元组是<安全参数索引SPI,目标IP地址,安全协议>
      19、该技术根据连接主体的不同,针对移动办公和家庭用户可以采用的连接方式为远程访问的VPN连接方式。针对分支机构长期性的使用可以采用站点到站点的VPN连接方式
      20、IPsec传输模式和隧道模式,实现端到端的传输应选择传输模式

    六、应用层安全协议

    1、应用层安全协议:PGP电子邮件加密软件包,是一款软件,把RSA公钥体系的高保密和传统加密体系的高速度巧妙结合起来,成为最流行的电子邮件加密系统。可以用来加密件防止非授权者阅读,还能数字签名,防止篡改
    2、PGP提供2种服务数据加密和数字签名,使用RSA对公钥证书加密认证,IDEA(128位密钥)进行数据加密,MD5进行完整性验证

    • 加密算法:支持IDEA、CAST、3DES算法对消息进行加密;采用ElGamal或RSA算法用接收方的公钥加密会话密钥
    • 数据签名:采用SHA-1、MD5消息摘要算法计算消息的摘要值(散列码),用发送者的私钥按DSS或RSA算法加密消息摘要
      在这里插入图片描述
    • PGP广泛应用的特点:①能够在各种平台免费使用,众多厂商支持。②基于比较安全的加密算法(RSA、IDEA、MD5)。③应用领域广泛,可加密文件,也可用于个人安全通信。④不是政府或标准化组织开发和控制的。⑤网民普遍喜欢这种自由化的软件包
      3、安全电子交易协议SET:保障购物安全以信用卡为基础,在线交易的标准。安全性高,保证信息传输的机密性、真实性、完整 性和不可否认性。工作流程如下
      在这里插入图片描述
      4、SET是安全协议和报文格式集合,融合了SSL、STT、SHTTP、PKI等加密签名认证等。采用公钥密码体制和X.509数字证书。成为目前公认的信用卡网上交易的国际标准
      5、SET提供3种服务:①保证客户交易信息保密性和完整性。②确保商家和客户交易行为的不可否认性。③确保商家和客户的合法性
      6、双重签名技术:消费者对订单信息和支付信息进行签名商家看不到消费者账号信息银行看不到消费者订购信息可确认是真实
      7、应用层安全协议Kerberos(刻薄肉丝):是一项认证服务3A(AAA)认证有验证、授权和记账。防重放、保护数据完整性。AS认证服务器,TGS票据授予服务器,V应用服务器
      在这里插入图片描述
      V4时间戳,V5序列号。口诀:无T加T,有T加1
      8、基于Kerberos的网关模型:用户初始登录以后, 用户名和密码长期保存在内存中,用户登录新应用(申 请新票据) 时,系统 会自动提 取用户名 和密码, 用户不需 要再输入
      在这里插入图片描述
      9、用户向认证服务器AS申请初始票据–>认证服务器AS向用户发放票据授予票据–>用户向TGS请求回话票据–>TGS验证用户身份后发放给用户回话票据Kav–>用户向应用服务器请求登录–>应用服务器向用户验证时间戳

    七、防火墙技术

    1、防火墙的定义:来源于建筑物“防火墙”一词,位于两个或多个网络之间,执行访问控制策略过滤进出数据包的一种软件或硬件设备,通过流经的数据流进行分析和检查,可实现对数据包的过滤、保存用户访问网络的记录和服务器代理功能
    2、防火墙的要求:①所有进出网络的通信流量都 必须经过防火墙。②只有内部访问策略授权的通信才能允许通过。③防火墙本身具有很强的 高可靠性
    在这里插入图片描述
    3、防火墙的主要功能:①访问控制功能。②内容控制功能。③全面的日志功能。④集中管理功能。⑤自身的安全功能
    4、防火墙的附加功能:①流量控制。②网络地址转换NAT。③虚拟专用网VPN
    5、防火墙的局限性:①关闭限制了一些服务带来不便。②对内部的攻击无能为力。③带来传输延迟单点失效等。④还有其他局限
    6、防火墙的技术分类:包过滤防火墙代理防火墙状态化包过滤防火墙3类等
    7、防火墙的分类:以下几种常见方式:

    • 个人防火墙:保护单个主机,有瑞星防火墙、天网防火墙、费尔防火墙等
    • 企业防火墙:对整个网络实时保护,有赛门铁克防火墙、诺顿防火墙、思科防火墙、华为防火墙、Juniper防火墙等)
    • 软件防火墙:有瑞星防火墙、天网防火墙、微软ISA Server、卡巴斯基防火墙等
    • 硬件防火墙:思科防火墙、Juniper防火墙等
      8、防火墙的体系结构:①双宿主机模式:防火墙具有两个网卡接口通过包过滤代理访问网络。这是比较简单的一种结构。一般可以根据IP地址和端口号进行过滤
      在这里插入图片描述
      9、防火墙的体系结构:②屏蔽子网模式又叫过滤子网模式,两个包过滤路由器中间建立一个隔离的子网定义为DMZ网络,也称为非军事化区域。这是目前防火墙最常用的一种模式。可以有更高级的功能
      在这里插入图片描述
      10、防火墙设备中,配置双出口链路提高总带宽、链路冗余、链路负载均衡作用。通过配置链路聚合来提高总带宽,通过配置策略路由来实现链路负载均衡(防火墙设备集成了传统防火墙与路由功能才行)
      11、防火墙的工作模式路由模式、透明模式、混合模式3种:
    • 路由模式:如果防火墙以第三层对外连接接口具有IP地址),则认为防火墙工作在路由模式下
    • 透明模式:若防火墙通过第二层对外连接接口无IP地址),则防火墙工作在透明模式下
    • 混合模式:若防火墙同时具有工作在路由模式和透明模式的接口(某些接口具有IP地址,某些接口无IP地址),则为混合模式下
      12、防火墙的访问规则:3种接口
    • 内网接口(Inbound)连接内网和内网服务器
    • 外网接口(Outbound)连接外部公共网络
    • 中间接口(DMZ连接对外开放服务器
    • 1、Inbound可以访问任何Outbound和dmz区域
    • 2、dmz可以访问Outbound区域
    • 3、Outbound访问dmz需配合static(静态地址转 换)
    • 4、Inbound访问dmz需要配合acl(访问控制列表)
      13、防火墙工作层次越高,工作效率越低,安全性越高(高低高/地高低)
    • ①工作层次。这是决定防火墙效率及安全的主要因素。一般来说,工作层次越低,则工作效率越高,但安全性就低了;反之,工作层次越高,工作效率越低,则安全性越高。
    • ②防火墙采用的机制。如果采用代理机制,则防火墙具有内部信息隐藏的特点,相对而言,安全性高,效率低;如果采用过滤机制,则效率高,安全性却降低了

    八、计算机病毒 & 防范

    (一)病毒与木马

    1、病毒:一段可执行的程序代码,通过其他可执行程序启动和感染传播,可自我复制,难以清除,破坏性强(强盗)
    2、木马:一种潜伏在计算机里并且秘密开放一个甚至多个数据传输通道的远程控制程序。C/S结构,客户端也称为控制端。偷偷盗取账号、密码等信息。(间谍)
    3、恶意代码:又称恶意软件。也称为广告软件、间谍软件,没有作用却会带来危险。(恶搞)
    4、常见病毒木马的特征分类:

    • 1.文件病毒:感染office文件,前缀Macro或者word/excel等
    • 2.蠕虫病毒:前缀Worm通过系统漏洞传播(震网病毒、熊猫烧香、欢乐时光)
    • 3.木马病毒:前缀Trojan,黑客病毒前缀Hack,往往成对出现(强调控制操作)
    • 4.系统病毒:前缀Win32、PE、Win95
    • 5.脚本病毒:前缀Script,脚本语言编写的,通过网页传播
    • 6.引导区病毒:(破坏的是引导盘、文件目录等)
    • 7.黑客病毒:Hack
      5、黑客与骇客:黑客技术高超,帮助测试建设网络。骇客专门搞破坏或恶作剧
      6、黑客攻击:①拒绝服务攻击。②缓冲区溢出攻击。③漏洞攻击。④网络欺骗攻击。⑤网络钓鱼。⑥僵尸网络
      7、预防攻击:安装杀毒软件、硬件防火墙和UTM统一威胁安全管理设备,合理设置安全策略,制定应急预案

    (二)病毒防治方式

    • 安装杀毒软件及网络防火墙(断开网络),及时更新病毒库
    • 及时更新操作系统的补丁
    • 不去安全性得不到保证的网站
    • 从网络下载文件后及时杀毒
    • 关闭多余端口,做到使电脑在合理的使用范围之内
    • 及时备份数据

    九、IDS与IPS

    1、入侵检测系统IDS:安装部署位置通常是:①服务器区域的交换机上。②Interner接入路由器之后的第一台交换机上。③其他重点保护网段的交换机上通常是并联、不断网),常用的三种方法是:模式匹配、数据完整性分析、统计分析
    在这里插入图片描述
    2、入侵防御系统IPS位于防火墙之后的第二道安全屏障,是防火墙的的有力补充。通过对网络关键点收集信息并对其分析检测到攻击企图,就会自动将攻击包丢掉或采取措施阻挡攻击源,切断网络通常是串联、会断网
    在这里插入图片描述
    3、IPS/IDS和防火墙区别防火墙一般只检测网络层和传输层的数据包不能检测应用层的内容IPS/IDS可以检测字节内容
    4、IPS和IDS的区别:IPS是串接在网络中,会切断网络IDS是旁路式并联在网络上,不切断网络
    5、IDS/IPS:连接在需要把交换机端口配置成镜像端口上可以检测到全网流量
    6、属于入侵检测技术的如:专家系统、模型检测、简单匹配
    7、IPS分为三类:

    • 基于主机的防护系统(HIPS),安装在受保护的主机系统中,通过监视内核的系统调用,检测并阻挡针对本机的威胁和攻击
    • 基于网络的防护系统(NIPS),布置与网络出口处,一般串联与防火墙与路由器之间,对攻击的误报会造成合法的通信被阻断,导致拒绝服务
    • 应用入侵防护系统(AIPS)一般部署与服务器前端

    十、网络故障

    1、网络故障诊断设备:

    • 网络寻线仪:寻网线(比如机房没有做好标签哪一根线对应哪一台电脑)
    • 可见光检测笔:一般也叫红光笔,光纤寻线
    • 光时域反射计:测试光纤通不通,光纤的损耗值,判断故障可能的点在哪里,现在有一些包含了光功率的功能
    • 光功率计:测试光信号的功率,看功率的衰减

    第十一章 网络应用服务器

    一、网络服务器

    1、网络操作系统:用统一的方法管理各主机之间的通信和资源共享

    • 主要功能:网络通信共享资源网络管理、网络服务、互操作、网络接口
    • 四大特征:并发资源共享虚拟异步
    • 安全性:用户账号、时间限制、地点限制、磁盘空间限制、传输介质、加密审计等
      2、网络服务器Windows Server 2008: 微软基于Windows XP/NT5.1开发的服务器操作系统。新增功能:①网站IIS7.0。②虚拟机化Hyper- V。③可靠可扩展。④管理中心增强
      3、网络服务器Red Hat Enterprise Linux 7.0:红帽子,是开放源代码的产品,是Linux操作系统的一种。因为它具备最好的图形界面,无论是安装、配置还是使用都十分方便,而且运行稳定,适合做服务器
      4、网卡的工作模式有直接、广播、多播和混杂四种模式.缺省的工作模式为广播和直接模式。即它只接收广播帧和发给自己的帧。网络管理机在抓包时,需要把网卡置于混杂模式,这时网卡将接受同一子网内所有站点所发送的数据包,这样就可以达到对网络信息监视的目的
      5、在NTFS文件系统下,为了预防用户无限制的使用磁盘空间,可以使用磁盘配置管理。启动磁盘配置时,设置的两个参数分別是空间限制警告等级
      6、Internet共享打印使用的协议是IPP
      7、Server设备打“?”的含义是未安装驱动,设备打“×”的含义是设备被禁用
      8、1394网络适配器能连接视频设备、数码设备等(了解)
      9、建立域控制器DC(Domain Controller),需要通过命令行方式运行(dcpromo)命令;域中的DC和DNS配置在同一设备时,需要将独立服务器的首个DNS与DC的IP地址配置为(相同);DHCP服务加入DC需要(授权),否则服务报错。
      10、域名绑定127.0.0.1 webtest.com 的含义是(在hosts表中建立webtest.com与127.0.0.1的对应关系)。在建立安全站点时,需要在WEB 服务器上启用(SSL)功能,并且绑定创建好的证书
      11、若更新驱动程序后无法正常运行,可以在该选项卡页面通过(回退驱动程序)操作将以前的驱动程序恢复
      12、在"驱动程序’选项卡中会显示驱动程序提供商、驱动程序日期、 驱动程序版本和(数字签名)信息

    二、进程管理

    (一)死锁问题

    • 一进一出等待,一进两出是运行,两进一出是就绪
    • 资源m个,n个进程互斥使用,每个进程对资源的最大需求为w。则m≥n+w-1
    • 计算发生死锁的最小值i:
    • (i-1)×进程数+1>互斥资源R

    (二)其他

    • 中断向量可提供中断服务程序的入口地址

    三、server 2008基础

    1、Windows Server 2008本地用户与组

    • 用户:就是包含用户名、密码、权限以及说明
    • 用户组:具有相同性质的用户归结在一起,统一授权,组成用户组
    • 用户组分类:全局组本地组特殊组
      2、常见用户和组的权限,列表如下
      在这里插入图片描述
      3、活动目录中的工作组:①全局组:来自本域用于全林。②通用组:来自全林用于全林。③域本地组:来自全林用于本域
      4、仅用于分发电子邮件且没有启用安全性的是通信组
      5、Win 2003远程桌面服务的默认端口是32768。对外提供服务使用RDP协议
      6、Windows 2008 R2远程桌面服务:
    • ①远程桌面会话主机,RD(远程主机)的服务端
    • ②远程桌面Web访问,提供通过Web浏览器或者APP访问
    • ③远程桌面授权,给RD客户端颁发许可证
    • ④远程桌面网关,可以给RD客户机通过外网连接网
    • ⑤远程桌面连接代理,支持连接APP 程序或虚拟机
    • ⑥远程桌面虚拟化主机,集成了 Hyper-V
      7、CIFS通用Internet文件系统(windows), NFS网络文件系统(Linux)

    四、Linux基础

    1、Linux用户和组:Linux是一个多用户、多任务的分时操作系统。每个文件和程序必须属于某一个用户,每个用户对应个账号。其中最重要的一个超级用户root
    2、对于==/etc/fstab文件中列出的Linux分区,系统启动时会自动挂载==。超级用户可通过mount命令将分区加载到指定目录,从而该分区才在Linux系统中可用
    3、挂载点必须是一个目录
    4、超级用户root承担了系统管理的一切任务,可以控制所有的程序,访问所有文件,使用系统中的所有功能和资源
    5、其他用户和组都是有root来创建的
    6、/etc/hosts文件添加记录格式是:IP地址 主机名 别名(别命可以没有)如:192.167.1.100 zhujiming.com web80
    7、
    8、Linux文件目录管理:文件格式有EXT2、EXT3、EXT5等。采用树型根目录结构,用/表示。其他所有目录都是从根目录出发生成的
    9、Linux用户和组3个重要配置文件
    在这里插入图片描述
    10、网络管理配置文件:
    在这里插入图片描述
    11、配置命令:

    • ifconfig,网络接口(网卡)命令
    • route,配置路由命令
    • ping,网络测试命令
    • netstat,网络查询命令
      12、用户管理:
      在这里插入图片描述
      13、目录结构:
      在这里插入图片描述
      14、基本操作命令:
      在这里插入图片描述

    五、WEB服务器安装配置

    1、Windows Server 2008 R2 IIS服务简介:互联网信息服务。微软Windows平台下的一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、管理工具
    2、Web网站映射多个独立域名的方法有多种,通常包括多IP(为计算机安装多网卡)不同的主机头以及不同的端口号
    3、两台Web服务器采用同一域名有两个好处:对Web服务实现负载均衡;当某一台服务器产生故障时可以由另一台提供服务,可防止单点失效
    4、每个Web站点都具有唯一的,由三部分组成的标识符,用来接收和响应请求,分别是IP地址、端口号和域名(主机头名)
    5、若电子阅览室的客户机访问Web服务器时,出现“HTTP错误401.1-未经授权:访问由于凭据无效被拒绝。”现象,则需要在控制面板一>管理工具一>计算机管理—>本地用户和组,将IUSR_机器名账号启用来解决此问题。
    6、若出现“HTTP错误401.2-未经授权:访问由于服务器配置被拒绝。”的现象,造成错误的原因是身份验证设置的问题,一般应将其设置为匿名身份认证.

    六、FTP服务器安装配置

    1、选择IIS管理器中的FTP站点—新建—虚拟目录,分別设置FTP用户与别名、目录名的对应关系
    2、Linux的文件传输服务是通过vsftpd提供的,该服务使用的应用层协议是FTP协议,传输层协议是TCP协议,默认的传输层端口号为21。
    3、vsftpd服务可以通过命令行启动或停止,启动该服务的命令service vsftpd start,停止该服务的命令是service vsftpd start,程序的主配置文件为vsftpd.conf

    七、Apache服务器

    1、Apache服务器:跨平台,也是Linux下最流行的WEB服务器
    2、Apache服务器可采用RPM和源码编译两种方式进行安装,守护进程是 httpd
    3、Linux服务器配置Web服务之前,执行命令[root@root] rpm -qa | grep httpd的目的是确认Apache软件包是否已经成功安装。Web服务器配置完成后,可以用命令service httpd start 来启动Web服务
    4、Apache服务器的主配置文件是httpd.conf,该文件所在的目录为==/etc/httpd/conf/,用于对Apache服务器进行功能和性能的配置==管理
    在这里插入图片描述

    八、DNS服务器安装 & 配置

    1、DNS协议:域名解析协议,用于把主机域名解析为对应的IP地址。是一个分布式数据库,C/S工作方式。主要基于UDP协议,少数使用TCP,端口号都是53。常用域名如下
    在这里插入图片描述

    3、DNS协议:DNS服务器,专门用来域名解析,采用C/S结构,域名和IP一一对应分层式命名空间,例如:www.edu.dtwlxy.com.
    4、按照空间层次划分域名服务器:根域名、顶级域名、权限域名、本地域名
    5、一个合法的域名只能是由数字、字母、下划线组成,并不能以下划线开始和结束
    6、可用于测试DNS服务状态的命令有ping、nslookup、tracert
    7、windows中可通过DNS Client服务来阻止对域名解析cache的访问
    8、DNS通知是一个种推进机制,作用是使得辅助域名服务器及时更新信息
    9、DNS解析顺序:本地缓存记录-区域记录-转发域名服务器-根域名服务器
    10、按照作用划分域名服务器
    在这里插入图片描述
    11、DNS协议:解析顺序工作原理:
    在这里插入图片描述

    • 查本地缓存,两种来源:本地hosts文件和以前本机进行的DNS查询记录
    • 查本地首选DNS服务器和备用DNS服务器
    • ③如果找不到就请求远方的DNS服务器(转发或根DNS)
    • 根DNS指定一个顶级DNS,下一级DNS,本地DNS,返回客户端
    • ⑤转发至上一级DNS服务器,如果不能解析,找根DNS重复④
      两种查询方法:递归一查到底(1,2,9,10);迭代多次回头
      12、本地hosts>本地缓存>首选DNS>备用DNS>缓存DNS>主DNS>转发DNS>辅助DNS>根DNS,如果还是没有得到解析的话就是使用NetBIOS名字解析
      13、根域名服务器采用的迭代查询,中介域名服务器采用的是递归查询
      14、DNS记录类型:
    • A:IP地址,主机地址(正向解析,域名->ip,指定主机名或域名对应的IP地址记录)(record type=1)
    • NS:权威名称服务器(record type=2)
    • CNAME:别名的正则名称(record type=5)
    • SOA:标记权威区域的开始,指明区域主服务器和管理员邮件地址(record type=6)
    • PTR:域名指针(IP地址映射)(IP地址解析为主机名)(反向解析ip->域名)(record type=12)
    • MX:邮件交换(record type=4)
    • HINFO:记录提供电脑或操作系统的类型==(主机描述)(record type=13)==
    • 正向解析:域名->ip地址
      15、DNS服务的安全配置有:
    • ①转发器、高级选项卡等
    • 禁用递归、启用循环、启用网络掩码排序、保护缓存防止污染
    • ③新建主机、新建别名等
      16、DNS其他考点:
    • DNS查询方向:正向查询A,反向查询PTR
    • DNS区域复制:主辅:完全复制,渐增复制
    • DNS通知:推进(主→辅)、安全机制(通知)
      17、DNS的域名空间是由树状结构组织的分层域名;辅助域名服务器定期从主域名服务器获得更新数据;转发域名服务器负责所有非本地域名的查询
      18、DNS使用分布式来处理网络中多个主机和IP地址的转换
      19、Linux DNS服务器BIND:
    • /etc/named.conf 主配置文件
    • /var/named/wl.com.bd 正向区域文件(名称=>地址)
    • /var/named/192.168.100.bd 反向区域文件(地址=>名称)
    • /etc/resolve.conf 客户端配置文件

    九、DHCP服务器安装配置

    1、DHCP协议:动态主机配置协议可以自动为局域网内的主机分配一个IP地址,若一直得不到回应,DHCP客户端总共会广播4次请求
    2、DHCP的好处:①管理员可以迅速地验证IP地 址和其他配置参数,而不用去检查每个主机。②DHCP不会从一个范围里同时租借相同的lP地址给两台主机。③可以为每个DHCP范围(或者说所有的范围)设置若干选项(例如默认网关、DNS和WINS服务器的地址)
    3、DHCP协议工作原理和过程:
    在这里插入图片描述
    (1)当DHCP客户端首次启动时DHCP服务器发送一个DhcpDiscover数据包(广播
    (2)DHCP服务器接收到Dhcpdiscover数据包向主机提供(dhcpOffer(临时未分配))
    (3)该DHCP服务器向客户端发送一个确认==(dhcpAck)(默认情况是8天)==
    (4)当租约期过了一半时(50%即是4天向服务器发送Dhcprequest,服务器同意的话就发送DHCPACK,不同意就发送DhcpNack),客户端将和设置它的TCP/IP配置的DHCP服务器更新租约.了87.5%无法与当初的DHCP服务器联系上停止使用该IP
    当租约期满后,DHCP客户向服务器发送一个Dhcprequest重新租用IP
    4、DHCP服务器拒接客户端的IP地址请求时发送DhcpNack,客户端拒绝发送DhcpDecline
    5、DHCP作用域:

    • 作用域:常规等选项卡
    • 作用域选项:配置选项(DNS、网关等)
      6、地址池:新建排除范围(分发中不包括)
      7、保留:新建保留(分发但会绑定)
      8、筛选器:指定接受的DHCP
      9、服务器上面的网关和DNS都是空着的不需要设置
      10、Lniux DHCP服务器配置
    • DHCP服务主配置文件&路径:/etc/dhcpd.conf
    • Linux服务器的对应配置文件名称是dhcpd.conf,该文件的缺省目录是==/etc==
    • ipconfig /all 自动获得IP地址
    • ipconfig /release 释放IP地址
    • ipconfig /renew 重新得到新的IP地址

    十、Linux Samba简介

    1、Samba服务器:Samba是Linux上实现和Windows系统局域网上共享文件和打印机的一种通信协议,由服务器及客户端程序构成。支持SMB/CIFS协议,实现共享资源
    2、最主要的一个配置文件smb.conf,可以使用vi编辑器修改守护进程:smbd。启动samba服务service smb start(restart、stop)。启动脚本/etc/rc.d/init.d/smb start(restart)
    3、配置文件smb.conf三个主要部分:全局设置global、共享目录设置homes、共享打印机设置printers

    十一、windows 2008安全策略

    (一)Windows 2008安全策略

    1、安全策略的概念:实现定义好的一系列应用计算机的行为准则保护网络上的数据资源。本地策略用于单个计算机,组策略用于域范围内
    2、IPSec策略设置:用于两个网络NetA和NetB之间建立安全的通信传输。通过设置筛选器实现对进入外出的数据包进行IP、端口、协议方面的过滤控制。①创建IPSec策略。②创建筛选器列表。③配置隧道规则。④指派
    3、安全Web站点配置:HTTPS在HTTP的基础上加入了SSL协议,即数字证书验证

    • 一、安装证书服务:开始–管理工具–服务器管 理器–角色–添加加色–AD证书服务–证书颁发机构–独立–根–新建私钥–直到完成安装
    • 二、配置CA证书①创建申请文件。②申请证书。③颁发证书。④下载证书。⑤保存证书(获取服务器证书的步骤顺序)
    • 三、配置HTTPS。①绑定CA证书。②启用SSL。③实现安全访问
    • 使用组策略:A-G-DL-P中:A表示用户账号;G表示全局组;DL表示域本地组;P表示资源权限
      4、集成windows身份验证是安全级别最高的验证方法

    (二)Windows五种身份认证

    • 匿名认证:不需要提供经过身份认证的用户凭证
    • 基本身份认证:用户必须输入ID,访问是基本用户ID的,但该方式的用户ID和密码以明文形式在网络上传输
    • 集成windows身份验证:使用了KerberosV5,能够提供较高的安全级别
    • 摘要身份验证:该方式需要用户ID和密码,可提供中等安全级别,与基本身份验证相同,但克服可基本身份验证的缺点

    第十二章 组网技术

    一、交换路由基础知识

    (一)交换机

    1、交换机简介和分类:交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。工作于第2层或3层。最常见的交换机是以太网交换机。下图是华为的Huawei S2700系列以太网交换机
    2、按照VTP协议,交换机的运行模式有(服务器模式,客户机模式,透明模式)
    3、网桥和交换机:都是软硬件结合,都有广播和冲突域,区别就是交换机比网桥的端口多转发速度更快;(所以说交换机是多端口的网桥)
    4、集合器(物理层)与网桥(链路层):都能检测冲突域;
    5、交换机进行数据包转发的能力称为包转发率,也称端口吞吐率,指交换机进行数据包转发的能力,单位为pps,交换机的背板带宽是指交换机端口处理器和数据总线之间单位时间内所能传输的最大数据量
    6、交换机分类:
    在这里插入图片描述
    7、若交换机需要与车间1接入层交换机进行互连,其连接方式有堆叠和级联;其中堆叠方式可以共享使用交换机背板带宽级联方式可以使用双绞线将交换机连接在一起
    8、对汇聚层交换机的端口进行端口聚合,端口默认模式是access,进行端口聚合时应配置为trunk模式
    9、若备份路由设备长时间没有收到主路由设备发送的组播报文,则将自己的状态转为Master为了,避免二层广播风暴,需要在接入与汇聚设备上配置MSTP(了解)
    10、交换机典型三级:①接入层交换机,如S2700。②汇聚层交换机,S3700。③核心层交换机,如S5700
    11、交换机性能参数和计算公式:

    • 包转发率=千兆端口数×1.488Mpps+百兆端口 数×0.1488Mpps+其余端口×相应包转发pps
    • 背板带宽:总带宽=端口数×端口速率×2(全双工)
      12、交换机是一种由高速硬件构成的多端口网桥,交换机的初始MAC地址表为空,收到一个数据帧时将其源地址添加到自己的MAC地址表中,通过这种逆向学习算法逐步建立地址表,当收到的帧的目标地址不在MAC地址表中时,交换机将其广播发送到所有输出端口
      13、交换机通过读取输入帧中的源地址添加相应的MAC地址表项
      14、交换机的MAC地址表项是动态变化的;交换机的初始MAC地址表为空
      15、在缺省配置时交换机所有端口(属于统一VLAN)不同VLAN的数据帧必须通过(路由器)传输。
      16、Win XP,win server2008的TTL初始值为128;FreeBSD的TTL初始值为255;iOS12.4的初始值为64

    (二)路由器

    1、路由器简介和分类:路由器(Router)用来连接不同的局域网,路由器可以学习和传播各种路由信息。路由器工作在第3层网络层,具有局域网和广域网两种接口
    2、查看路由信息结果中,标记S表示静态路由,标记C表示直联,标记R表示采用RIP路由协议
    3、路由器出厂时,默认的串口封装协议是
    HDLC

    4、路由器根据IP数据报中的目的IP地址对应路由器中的路由表进行寻径
    5、路由器根据功能、性能、应用分为:

    • 骨干路由器:主干网络互连,模块化、热备份、双电源等冗余技术。如国家级、省级骨干网互连。如NE40E以上系列
    • 企业级路由器:用于一个企业出入口,提供多种功能,完成企业组网可实现数据、语音、视频等应用。如AR3600系列
    • 接入级路由器:边缘路由器,小型企业,或者部门组网。如AR2200系列
      6、路由器上的一些常见端口:
    • Serial端口(同步串口):高速同步串口,与广域网连接,可连接DDN、帧中继、X.25、PSTN等网络(路由SFP端口通过光纤连接广域网);链接终端和数字专线的设备CSU/DSU被集成在路由器的同步串口
    • Console端口:初次配置控制台端口,利用终端仿真程序,如超级终端、SecureCRT对路由器进行本地配置
    • RJ-45端口:以太网口,通过双绞线连接局域网,有的标识ETH,有的标识为10/100bTX(路由器就是通过RJ-45链接以太网交换机的)
    • AUX端口(异步串口):远程配置路由器,连接Modem
    • Console端口:Console端口通过专用电缆连接至计算机串行口,利用终端仿真程序对路由器进行本地配置。路由器的Console端口为RJ-45口
    • SFP端口:通过光纤连广城网,小型机架可插拔设备SFP是GBIC的升级版本,其功能基本和GBIC一样,但体积减少一半
    • 路由器连接帧中继网络的接口是Serial接口,连接双绞线以太网的接口是RJ-45接口
      7、广播域和冲突域
    • 冲突域:在同一个冲突域中的每一个节点都能收到所有被发送的帧。交换机能分隔冲突域。一个端口一个冲突域
    • 广播域:网络中能接收任一设备发出的广播帧的所有设备的集合。路由器能分隔广播域。一个端口一个广播域
      在这里插入图片描述
      8、有多个路由进行选择时,通过比较各个路由的管理距离走近路来决定
      9、VLAN之间通信就需要路由器的支持
      10、路由器出厂时,默认的串口封装协议是HDLC

    二、交换机VLAN实验

    1、交换机GVRP:VLAN注册协议,在VLAN增加、删除、调整时,自动发广播,保持全网所有的交换机VLAN信息是一致的
    2、GVRP是GARP的一种应用,由IEEE制定;交换机之间的协议报文交互必须在VLAN Trunk链路上进行;GVRP配置时需要在每一台交换机上建立VLAN
    3、GVRP把交换机分为3种注册模式

    • Normal模式:VLAN增删改,广播保持一致
    • Fixed模式:只传播手动配置的VLAN信息
    • Forbidden模式:只传播VLAN1不传其他VLAN
    • 交换机默认:透明模式,VLAN1所有端口
    • 优先级:默认:60;RIP:100;直连:0;OSPF:10;ISIS:15

    三、RIP与BDF联动实验

    1、BFD:双向转发检测,可以提供毫秒级的检测,可以实现链路的快速检测,BFD通过与上层路由协议联动。当主链路发生故障时,业务流量会快速切换到另一条路径进行传输

    四、动态路由IS-IS实验

    1、IS-IS:中间系统-中间系统,路由器称为中间系统IS。和OSPF协议很类似,属于内部网关路由协议,是一种链路状态协议。
    2、Net-Entity:网络实体。运行IS-IS的路由器必须配置一个网络实体地址。格式为:SEL服务访问点
    3、IS-IS 在路由域内采用两级的分层结构骨干区域与非骨干区域。并定义了路由器的三种角色:区域内Level-1、区域间Level-2、同属于Level-1-2。默认路由器接口为Level-1-2
    4、IS-IS 路由协议将自治系统分为骨干区域和非骨干区域
    5、IS-IS路由协议中Level-2路由器可以和不同区域的Level-2或者Level-2路由器形成邻居关系

    第十三章 网络管理

    一、网络管理结构

    1、网络管理模型:包括网络监测和网络控制两部分。以下是一个网络管理模型。分为管理站,被管理代理、管理信息库MIB三部。MIB采用管理信息结构SMI(ASN.1国际标准的子集)
    2、两种管理结构:

    • 集中式:集中控制整个网络。平衡优化网络。适用小网络
    • 分布式:灵活性和伸缩性,适用中、大型网络
      3、两种通信机制:
    • 轮询:是一种请求-响应式的交互方式。管理站 向代理发出请求,代理做出响应,从信息管理库取出信息,返回给管理站。类似领导安排工作
    • 事件报告:代理根据管理站的要求,向管理站 主动发送状态报告。类似员工汇报工作
      4、网络管理中的五大管理功能:
    • 费管理:计算收取用户使用网络服务费用
    • 全管理:提供信息的保密、认证和完整性
    • 能管理:性能检测、性能分析、性能管理
    • 置管理:监测和控制网络的状态以及配置
    • 障管理:发现和纠正网络故障,维护网络的
    • 正常运行。包括报警、检测、定位、测试、恢复以及日志记录等
      5、网络管理协议五种标准:
    • ISO制定:CMIS/CMIP公共管理信息服务规范
    • ②基于TCP/IP:简单网络管理协议SNMP V1、SNMP V2、SNMP V3三种版本
    • ③基于局域网:远程监控网络RMON,RMON-1、RMON-2两个版本
    • IEEE制定:基于物理层和数据链路层==CMOL
    • ⑤ITU-T:电信网络管理标准TMN==
      6、安全措施
    • 物理线路安全:防雷
    • 网络安全措施:入侵检测、流量控制、数字签名,数据加密,身份认证
    • 系统安全措施:漏洞发现和补丁管理
      7、检测故障命令:
    • Show 命令可查看系统的安装情况与网络的正常运行状况
    • Ping 命令确定网络连通
    • Tracert 命令跟踪路由器包传输
    • Debug 命令能够提供端口传输信息,节点产生的错误消息
      8、常见网络运维工具
    • 光时域反射计根据光的后向散射与菲涅耳反向原理制作,利用光在光纤中传播时产生的后向散射光来获取衰减的信息,可用于测量光纤衰减、接头损耗、光纤故障点定位以及了解光纤沿长度的损耗分布情况等,是光缆施工、维护及监测中必不可少的工具

    二、简单网管协议SNMP

    1、SNMP简单网络管理协议应用层协议,采用UDP,不会增加网络负担,UDP实现网络管理效率高。UDP161(代理)、UDP162(管理站)
    2、采用UD实现网络管理不会太多增加网络负载
    3、SNMPv1:四种报文①GetRequest、②GetNextRequest、③SetRequest、④Trap、⑤GetResponse。其中④用于事件报告⑤用于代理站。采用团体明文认证
    4、SNMPv2:又叫SNMPv2c,支持集中,也支持分布式管理:增强改进3方面:①管理里信息结构的扩充。②管理站之间的通信能力。③新的协议操作。Get BulkRequest块操作一大批的数据、InformRequest通信请求(增强了功能)
    5、SNMPv3:把管理和代理统一叫做实体(包括引擎和应用),并提供认证和加密。基于用户的安全模型,把安全威胁分为主要的和次要的。基于视图的访问控制模型,划分安全级别。(增强了安全性),新增了认证和加密
    6、在SNMP协议中,代理收到管理站的一个GET请求后,若不能提供该实例的值,则会返回下一个实例的值
    7、RMON和SNMP的主要区别就是:RMON提供了整个子网的管理信息,而SNMP管理信息库只包含本地设备的管理信息
    8、报文摘要算法生成报文摘要的目的是防止发送的报文被篡改
    9、在SNMP协议中,当代理收到一个GET请求时,如果有一个值不可或者不能提供,则返回该实例的下一个值
    10、从代理到管理站的SNMP报文的命令为:trap、Get-Response;从管理站到代理的SNMP报文有Get-Request、Get-Next-Request、Set-Request

    三、结构化布线系统

    • (1)交流工作接地电阻不应大于4Ω;
    • (2)安全工作接地电阻不应大于;
    • (3)直流工作接地电阻应按计算机系统具体要求确定;
    • (4)防雷保护地接地电阻不应大于10Ω;
    • (5)对于屏蔽系统若采用联合接地,其接地电阻不应大于

    四、管理信息库MIB

    1、管理信息库MIB-210个功能组

    • system:关于系统的总体信息
    • interface:系统到子网接口的信息
    • at(address translation):描述Internet到子网的地址映射
    • ip:关于系统中IP的实现和运行信息
    • icmp:关于系统的ICMP的实现和运行信息
    • tcp:关于系统中的TCP的实现和运行信息
    • udp:关于系统的UDP
    • egp:关于系统中的EGP的实现和运行信息
    • dot3:有关每个系统接口的传输模式
    • snmp:关于系统中SNMP的实现和运行信息
      2、MIB-2中,IP组对象为接受的IP数据报总数,数据类型为计数器类型
      3、远程网络监控RMON的管理信息库:
    • 先事件组再警报组
    • 先主机组再N台主机组
    • 先过滤组再捕获组
      4、RMON监视器
    • RMON的管理信息库提供整个子网的管理信息
    • RMON的管理信息库属于MIB-2的一部分
    • RMON监视器可以对每个分组进行统计和分析
    • RMON监视器包含MIB-2的功能
      5、网络管理常考零部件可靠性计算:
      在这里插入图片描述
      轮询设备和时间计算

    五、网络管理工具和命令

    1、Tracert是路由跟踪,确定IP数据报访问目标所采用时用;arp用来显示和修改arp缓存中的值;ipconfig显示当前TCP/IP配置的设置值;netstat可以显示路由表
    2、ipconfig/all:显示主机TCP/IP配置的详细信息;/release:DHCP客户端手共释放IP地址;/renew:DHCP客户端手工向服务器刷新新请求;/flushdns:清除本地DNS缓存内容;/displaydns:显示本地DNS内容
    3、ping,利用ICMP报文来测试网络的连通性、是否丢包、名称解析等。ping -a解析域名;ping -f不要拆分分段;ping -l指定数据包大小;ping -n 指定回显数据报的数据次数;ping-r记录路由;ping -t连通性(持续ping),直到终止
    4、netstat命令用于显示TCP连接,语法如下netstat [-a] [-e] [-n] [-o] [-p Protocol] [-r] [-s] [Interval]

    • -a:显示所有活动的TCP连接,以及正在监听的TCP和UDP端口
    • -e:显示以太网统计信息
    • -n:显示活动的TCP连接,地址和端口号以数字形式表示
    • -o:显示活动的TCP连接以及每个连接对应的进程ID。在Windows任务管理器中可以找到与进程ID对应的应用。这个参数可以与-a、-n和-p联合使用
    • -p Protocol:用标识符Protocol指定要显示的协议,可以是TCP、UDP、TCPv6或者UDPv6。如果与参数-s联合使用,则可以显示协议TCP、UDP, ICMP、IP、TCPv6、UDPv6, ICMPv6或IPv6的统计数据
    • -s:显示每个协议的统计数据。默认情况下,统计TCP、UDP、ICMP和IP协议发送和接收的数据包、出错的数据包、连接成功或失败的次数等。如果与-p参数联合使用,可以指定要显示统计数据的协议
    • -r:显示IP路由表的内容,其作用等价于路由打印命令route print
    • Interval:说明重新显不信息的时间间隔,键入Ctrl+C则停止显示。如果不使用这个参数,则只显示一次
      5、arp。用于显示和修改ARP缓存中的表项-s参数可以绑定IP和MAC以防止ARP病毒,如arp -s 192.168.1.1 AA-00-4F-2A-9C。但重启后会丢失如果写入注册表是个永久的办法
    • -a:显示所有接口的当前ARP缓存表
    • -d:删除ARP缓存表项
    • -s:绑定ARP表项,如IP和MAC绑定
      6、代理ARP是指由离目标主机最近的交换机假装目标主机回答源主机的ARP请求
      7、交换机常用命令
    • dis patch:查看补丁信息display patch-information ;
    • dis trap:查看告警信息 display trapbuffer ;
    • dis int br:查看接口开启情况 display interface brief ;
    • dis cu:查看当前配置 display current-configuration 。
    • virtual-cable-test:电缆测试
    • display transceiver interface:显示设备光模块接口的状态信息,用于对光功率参数的检测判断是否存在介质故障
    • display device:显示设备状态
    • display interface:显示端口配置信息

    8、其他命令:

    • pathping:把ping和tracert结合起来,探测路径、延时、丢包率
    • nbtstat:用来显示NetBIOS的 名称缓存
    • route:显示修改本地IP路由表。add添加、delete删除、change修改、print显示路由表(同netstat -r)
    • netsh:命令行脚本程序,可 修改计算机的网络配置
    • net:管理网络服务
    • nslookup。用来测试DNS服务器域名解析的。交互式和非交互式
    • traceroute是路由跟踪命令用于分组到达目标路劲上经过的各个路由器
    • netstat可用于显示IP、TCP、UDP、ICMP等协议的统计数据;
    • sniffer能够使用网络接口处于杂收模式,从而可截获网络上传输的分组
    • winipcfg在Windows中显示网络适配器和主机的有关信息
    • tracert可以发现数据包到达目标主机所经过的路由器和到达时间。通常配合-d使用
    • Tracert、Netstat及Route print均可以获得网关IP地址信息
    • Nslookup用来检查提供域名的服务器地址;ping加域名地址可测试域名成功与否;tracert也可用于进行DNS故障诊断;arp是地址协议,用于IP地址与MAC的映射

    六、网络存储技术

    1、网络存储技术:RAID,廉价磁盘冗余阵列。RAID0~RAID50多种。RAID卡
    在这里插入图片描述
    2、网络存储技术:
    在这里插入图片描述
    3、RAID2.0的优点有:自动负载均衡,降低了存储系统整体故障率;快速重构,降低了双盘失效率和数据丢失的风险;自检愈合,保证了系统可靠性。
    4、网络存储技术:NAS网络接入存储。将存储设备连接到现有的网络上来提供数据存储和文件访问服务的设备。NAS服务器是在专用主机上安装简化了的瘦操作系统(只具有访问权限控制、数据保护 和恢复等功能)的文件服务器。NAS服务器内置了与网络连接所需要 的协议,可以直接联网
    5、网络存储技术:SAN存储区域网络。是一种连接存储设备和存储管理子系统的专用 网络,专门提供数据存储和管理功能。SAN可以被看作是负责数据传输的后端网络,而前端网络则负责正常的TCP/IP传输。用户也可以把SAN看作是通过特定的互连方式连接的若干台 存储服务器组成。分为2种结构:IP-SAN(远离)与FC-SAN,FCSAN部署成本更高,传输速率更高
    6.默认网关的地址是子网中的广播地址的话,不能ping通任何远程设备

    第十四章 网络规划与设计

    一、网络设计基础

    1、网络系统生命周期:从构思到淘汰
    2、四阶段周期(重叠):能够快速适用新的需求变化成本低,灵活性好适用网络规模较小需求较为明确网络结构简单的工程项目。(口诀:小明花钱少)
    在这里插入图片描述
    3、五阶段周期(瀑布):比较死板,不灵活,较为严谨,适用于网络规模大,需求较为明确,需求变更较小的网络工程。常用此模型。(口诀:大明看瀑布)
    在这里插入图片描述
    4、六阶段周期(测试):偏重于测试和优化,适合大型网络,适合经常变更
    在这里插入图片描述
    5、网络开发过程:其中,通信规范分析又叫现有网络体系分析。以便在升级时尽量保护已有的投资(5个阶段)

    • (1)需求规范:对现有资源进行分析,确定网络的逻辑结构。集中访谈的信息资料。确定需求,包括:商业,用户,应用,计算机平台。理解网络应该具有的功能和性能
    • (2)通信规范:根据需求和通信规范,分析各个网络的通信流量。估计和测量通信量及设备和利用率。网络内部的通信流量分布
    • (3)逻辑网络设计:根据需求规范和通信规范,实施资源分配和安全规划。选择符合需求的设计。网络IP地址分配方案。根据用户的需求,选择特定的网络技术,网络互连设备和拓扑结构。网络结构设计。物理层技术选择。确定路由选择协议。
    • (4)物理网络设计:依据逻辑网络设计的要求,确定设备的具体物理分布和运行环境。将物理设计应用到物理空间。设备列表清单结构化布线设计
    • (5)文档规范:安装和维护。实现物理网络设计。
      6、确定新网络所需的通信量通信模式属于通信规范阶段;确定 IP 地址分配方案属于逻辑网络阶段;明确网络物理结构和布线方案属于物理网络设计阶段;确定网络投资规模属于需求规范阶段
      7、PERT不能清晰秒速各个任务之间的并行情况,甘特图不能清晰描述各个问题之间的依赖关系

    二、通信流量分析

    1、通信流量模式分析:对等模式、C/S模式、B/S模式
    2、对等模式:双向对等,如QQ、BT、P2P等
    3、C/S模式:S→C流量大,如VOD、Web服务器、ERP。C→S流量大,如SNMP双向流量大,如FTP、邮件服务器、数据库服务器
    4、B/S模式:S→B流量大,而web服务器与数据 库则属于双向流量大
    5、通信流量计算公式:分为两种:

    • 某个业务应用网络流量的计算公式为:应用的 数据传输速率 = 平均事务量大小 × 每字节位 数 × 每个会话事务数 × 平均用户数 / 平均会话长度
    • 考虑峰值用户数和应用增长率等因素后公式为: 应用的数据传输速率 = 平均事务量大小 × 每 字节位数 × 每个会话事务数 × 峰值用户数 × (1+增长率) / 平均会话长度

    三、逻辑网络设计

    1、逻辑网络设计工作主要内容

    • 网络结构的设计
    • 物理层技术的选择
    • 局域网技术的选择与运用
    • 广域网技术的选择与运用
    • 地址设计和命名模型
    • 路由选择协议
    • 网络管理
    • 网络安全
    • 逻辑网络设计文档
      2、局域网结构设计:单核心局域网结构
    • 单核心简单、投资少、地理范围小,适合小型网络
    • 缺点是单点故障,导致全网失效。扩展能力有限
      3、桌面用户不应与核心连接
      4、局域网结构设计:双核心局域网结构
    • 可做负载均衡热备,如HSRP、VRRP、GLBP。可靠性高、可热切换、接入方便、服务器直连核心,高速访问
    • 投资高、维护技术高
      5、局域网结构设计:三层次局域网结构
    • 核心层:高速转发,将多个汇聚层连接起来;提供宽带城域网的用户访问Internet所需的路由服务
      6、汇聚层:策略控制、实现资源访问控制和流量控制,数据转发和交换
      7、接入层:用户接入
      8、广域网结构设计:线缆调制解调器接入网广电网络属于这种,借助CATV有线电视实现
    • HCF网络实现带宽接入时,局端设备用于控制和管理用户的设备是CMTS,客户Cable Modem(大猫)
    • Cable Modem利用频分复用的方法将信道分为上行信道和下行信道
    • 下行50Mbps,上行3Mbps
    • 采用HFC技术,光纤/同轴缆混合传输
    • HFC是双向传输系统;由有线电视头端、长距离干线、放大器、馈线和下引线组成
      9、广域网结构设计:数字用户环路远程接入网xDSL电信网络属于这种,借助电话 线实现。
    • 局端DSLAM,客户端ADSL Modem(小猫)
    • ADSL:下行8Mbps
    • SDSL:下1.544M
    • HDSL:下2.048M
    • VDSL:下行50Mbps
    • 口诀:RCAV不对称
      10、广域网结构设计:同步数字体系接入网SDH
    • STM-1:155.520M
    • IP over SDH
      11、PDH兼容:63个2M
      12、MPLS VPN接入网:利用MPLS实现
    • P设备:核心高速转发
    • PE设备:边缘路由标签
    • CE设备:连客户端
      13、VRRP:VRRP技术实现冗余备份和容错选择功能,交换机A与交换机B之间的连接线称为心跳线,其作用是为了防止VRRP协议报文(心跳报文)所经过的链路不通或不稳定传递VRRP协议报文
      14、在宽带接入中,FTTx是速度最快的一种有线接入方式,而PON(Passive Optical Network)技术是未来FTTx的主要解决方案。PON目前有两种主要的技术分类,分别是GPON和EPON,EPON是以太网技术和PON技术的结合,它可以实现上下行1.25Gbps的速率
      15、GPON速率高达2.5Gbps,能提供足够的带宽以满足网络日益增长的对高带宽的需求,同时非对称性更能适应带宽数据业务市场;技术相对复杂,设备成本较高;能提供Qos的全业务保障,同时承载多种不同的帧,有良好的服务等级、支持Qos保证和全业务接入的能力;GPON比EPON带宽更大,它的业务承载更高效、分光能力更强,可以传输更大带宽业务,实现更多用户接入

    四、物理网络设计

    1、建筑物综合布线系统PDS
    在这里插入图片描述

    • (1)工作区子系统:指由中端设备到信息插座的整个区域(信息插座一般离地面30cm)
    • (2)水平布线子系统(不得超过90m)(从电杆拉出来的)
    • (3)干线子系统(竖起来像电杆)
    • (4)设备间子系统(机房,楼层中间)
    • (5)管理子系统(楼层配线间)
    • (6)建筑群子系统
      2、综合布线性能参数:双绞线、光纤
    • 衰减值:由于绝缘损耗、连接电阻等因素,造成信号沿链路传输损失
    • 近端串扰:当信号在一个线对上传输时,会同时将一小部分信号感应到其他线对上,这种感应信号成为串扰
    • 光纤:包括连通性、输入/输出功率、衰减/损耗,一般应在20db以内,超过25db不通
      3、在诊断光纤故障的仪表中,设备(光时域反射计)可在光纤的一端就测得光纤的损耗

    五、网络需求分析

    1、软件设计必须依据软件的需求来进行,结构化分析的结果为结构化设计提供了最基本的输入信息,其关系为:根据加工规格说明和控制规格说明进行过程设计;根据数据字典和实体关系图进行数据设计;根据数据流图进行接口设计;根据数据流图进行体系结构设计
    2、软件设计方式

    • 瀑布模式:适用于求明确
    • V模型:瀑布模型变种,它说明测试活动是如何与分析与设计相联系
    • 原型模型:快速构造整个系统或系统一部分
    • 螺旋模型:开发活动和风险管理结合,控制风险并减到最小

    第十五章 命令图和协议

    一、网络协议神图

    在这里插入图片描述
    在这里插入图片描述
    请添加图片描述

    二、常用命令图

    (一)netstat

    请添加图片描述

    (二)nslookup

    请添加图片描述

    (三)route print

    请添加图片描述

    (四)tracert

    请添加图片描述
    请添加图片描述

    展开全文
  • 额,买车不是重点,重点是他一直认为“他的表弟我,工作刚刚4,轻松赚了100”。 每每想到此,真是感慨万千,因为心中萌发出来的想法实在是太多了。 1、这是要捧杀我啊,一届本科,何德何能, 工作4就赚100...
  • 未来5-10计算机视觉发展趋势

    千次阅读 多人点赞 2020-05-21 09:35:50
    未来5-10计算机视觉发展趋势 来源:CCF计算机视觉专委会 引言 计算机视觉是人工智能的“眼睛”,是感知客观世界的核心技术。进入21世纪以来,计算机视觉领域蓬勃发展,各种理论与方法大量涌现,并在多个...
  • 一、内存开销 若是存储利用ArrayList存储2个Object,会创建10存储空间,则会浪费8存储空间 若是存储利用ArrayList存储11个Object,会创建16存储空间,则会浪费5存储空间 若是存储利用ArrayList存储17个Object
  • 协程究竟比线程能省多少开销

    千次阅读 2019-08-27 18:41:32
    前文中中我们用实验的方式验证了Linux进程和线程的上下文切换开销,大约是3-5us之间。这个开销确实不算大,但是海量互联网服务端和一般的计算机程序相比,特点是: 高并发:每秒钟需要处理成千上万的用户请求 周期...
  • 作者主页:不吃西红柿 简介:CSDN博客专家、信息技术智库公号作者✌ 简历模板、PPT模板、学习资料、面试题库、技术互助【关注我,都给你】 欢迎点赞 收藏 ⭐留言 耗时1整理,硬核文章目录:...
  • 13 万字 C 语言从入门到精通保姆级教程2021

    万次阅读 多人点赞 2021-06-07 12:25:01
    及大牛出,天地开,始有 FORTRAN、 LISP、ALGOL 随之, 乃有种语” 1963英国剑桥大学推出了CPL(Combined Programming Langurage)语言。 CPL语言在ALGOL 60的基础上接近硬件一些,但规模比较大,难以实现 1967英国...
  • 假设我们固定最小保证金规模到 500 ETH,并且假设 1000 ETH 的总存储规模。那么我们可以解上述等式,得到下列结果: 2412 个验证者 最大的验证者有 1206000 ETH 的保证金规模 如果我们约减...
  • 38 Redis Cluster 的通信开销限制集群规模前言一、实例通信方法和对集群规模的影响二、Gossip 消息大小三、实例间通信频率二、降低实例间通信开销的方法总结 前言 Redis Cluster 能保存的数据量以及支撑的吞吐量,...
  • 程序员月薪一到底有多难?

    千次阅读 2021-12-17 11:08:59
    1 我在2前,呆过一个互联网大厂,里面有个刚毕业的程序员,月入是1,但那家公司是发16薪。那家公司招外派员工(不是正式员工,就属于劳力派遣的),面试要求很简单,只要会spring boot增删改查,起码13k一个月,...
  • 为了权衡精确度和速度的开销,最终选择K=5。 (5)Fine-Grained Features 细粒度特征,可理解为不同层之间的特征融合。YOLOv2通过添加一个Passthrough Layer,把高分辨率的浅层特征连接到低分辨率的深层特征(把特征...
  • 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 输入某二叉树的后序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的...
  • Lua的CPU开销性能优化

    千次阅读 2017-09-15 10:45:33
    而另一方面这个机制使得Lua在拼接字符串上开销比较大,因为在一些直接持有字符串buffer的语言中,往往可以直接把后者的buffer插入到前者的buffer的末尾,而Lua先要遍历查找是否有相同的字符串,然后会把后者整个拷贝...
  • 发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~博主已将这些面试题整理到一个网站上,每天更新 Java 面试题,目前有 1多道 Java 高频面试题。...
  • 10字208道Java经典面试题总结(附答案)

    万次阅读 多人点赞 2021-08-01 16:05:55
    ,获取《10字208道Java经典面试题总结(附答案)》pdf,背题更方便,一文在手,面试我有 前言 最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间...
  • Someone graduated at the age of 22, 有人22岁就毕业了, but waited 5 years before securing a good job! 但等了五才找到好的工作! Someone became a CEO at 25, 有人25岁就当上CEO, and died at 50. 却在50...
  • link:http://www.wtoutiao.com/p/1e5gLML.html Imagination Tech · 2016-01-02 11:15 作者:octday 影响OpenGL绘制的效率直接和OpenGL API相关的一部分来自于其在CPU上执行的...
  • 自旋锁和自适应自旋锁 线程挂起和恢复都需要很大的性能开销,很多共享数据的锁定状态只持续很短的时间,为这段时间挂起恢复不值得,所以可以让现场进入一个自旋状态,但仍占用cpu的时间,默认是10次,超过10次则采用...
  • DiskRowSet用于老数据的mutation,后台定期对DiskRowSet做compaction,以删除没用的数据及合并历史数据,减少查询过程中的IO开销。 BloomFile根据一个DiskRowSet中的key生成一个bloom filter,用于快速模糊定位某个...
  • 为什么 5.组件中的data为什么是个函数? 6.说一说scoped样式隔离 7.v-if与v-show的区别? 8.什么是MVVM? 9.Vue修饰符有哪些? 10.函数式组件使用场景和原理 11.能说下 vue-router 中常用的路由模式实现原理吗? 12....
  • @Test public void test5(){ List<Employee> employeeList = this.filterEmployee(this.employees, new FilterEmployeeBySalary()); for (Employee e : employeeList){ System.out.println(e); } } 运行test5方法,...
  • 直到那天问了坐在我旁边那个整天摸鱼的5年程序员;他慵懒的回答:你想为什么是使用的是树结构呢? 咦,听到这回答,一下打开了我的思绪,有点意思!) 先抛开B+树是什么,有什么优势,这些先入为主的答案。 (我并不...
  • 之前,我们报道过一次超高学费的计算机类专业硕士:那次是一年六,而且不包括住宿。学费一年六,上海不提供住宿!上海交通大学人工智能专硕究竟要花多少钱?这次,我们又发现一所大学,计算机专业学...
  • 加州的奶茶从多年前的2、3刀,到疫情前的4、5刀,再到现在随便硅谷随便一个华人外卖网站上的税后7刀,再加上运费、平台服务费、小费等等“疫情后时代的苛捐杂税”和点三杯才能满足15刀起送的条件,想在家不去排队...
  • 5.说说存储过程的优缺点?6.说说存储过程与函数的区别7.什么叫视图?游标是什么?8.视图的优缺点有哪些?9.说说drop、truncate、 delete区别10.什么是临时表,临时表什么时候删除?11.说说非关系型数据库和关系型...
  • 但是,如果机器 IO 性能太差,插十条要十几二十分钟…… 你如果没有设置的话,插入 10W 条数据,默认自动提交 10W 次事务。 所以,我们应该在循环开始之前启动一次事务,循环结束后提交,这样每次 insert 就不会...
  • 一个中科大差生的8程序员工作总结

    万次阅读 多人点赞 2021-01-14 15:52:01
    今年终于从大菊花厂离职了,离职前收入大概60w不到吧,在某乎属于比较差的,今天终于有空写一下自己的职场故事,也算是给自己近8的程序员工作做个总结复盘。近8有些事情做对了,也有更多事情做错了,在这里记录...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 76,558
精华内容 30,623
热门标签
关键字:

年开销5万