#文档整理不易,有偿资料详讯wechat:_129Ww
无符号数:所有位均为数值位,没有符号位
有符号数
定点数——固定小数点的小数
定点小数
定点整数
原码
反码
补码
浮点数的一般表示法
浮点数除法运算的三个基本步骤是:尾数相除、指数相减、结果规格化
某计算机字长为8位,则带一位符号位的补码形式的机器数所能表示的最小定点整数是-128,最大定点整数是127.
若机器数字长为5位(最高一位为符号位),x的真值是 ( − 0.1001 ) 2 (-0.1001)_{2} (−0.1001)2,y的真值是 ( 0.0101 ) 2 (0.0101)_{2} (0.0101)2
- 机器数 [ x ] 补 [x]_{补} [x]补、 [ y ] 补 [y]_{补} [y]补分别是多少
- 采用补码减法运算,机器数 [ x − y ] 补 [x-y]_{补} [x−y]补是多少?运算结果是否溢出?
在IEEE754中,单精度浮点数表示公式为 ( − 1 ) S × 1. m × 2 ( E − 127 ) (-1)^S\times 1.m\times2^{(E-127)} (−1)S×1.m×2(E−127),可采用32位2进制数格式表示,从左到右分别是:数符 S S S,占1位;阶码 E E E,占8位;尾数 m m m,占23位。
- 采用二进制格式写出该单精度浮点数IEEE754表示
- 采用十六进制格式写出该单精度浮点数IEEE754表示
片内总线
CPU内部的总线。是CPU内部各寄存器之间、寄存器
与ALU之间传递信息的公共通道
系统总线
通信总线
用于计算机系统间或计算机系统与其他系统的通信
分布式控制方式
集中式控制方式(总线控制逻辑集中于一处)
链式查询方式
优点:线少,易扩充
缺点:故障敏感,优先级固定
计数器定时查询方式(公平)
优点:优先级灵活
缺点:每个设备都需与新增的设备地址线相连,线多
独立请求方式(公平)
优点:响应快,优先级灵活,请求可屏蔽
缺点:每个设备都有单独的总线请求信号线与总线同意信号线,线多
程序查询方式
程序中断方式
中断
中断I/O方式
直接内存访问方式(DMA)
DMA工作过程
CPU工作:初始化DMA控制块$\rightarrow D M A 请 求 DMA请求 DMA请求\rightarrow D M A 响 应 DMA响应 DMA响应 \rightarrow$ DMA操作**(周期窃取)**
CPU方式:周期窃取方式——单字传送方式;停止CPU访问内存——成组访问方式
周期窃取:DMA控制器接到DMA应答信号后,通过控制逻辑向系统总线发送存储器地址信号、存储器读写控制信号、
I/O接口读写控制信号等,完成一次数据传送。这些操作完全由硬件控制,一般仅需要一个总线存取周期,所以这种方式称为周期窃用(cycle-stealing)方式
通道方式
分类
字节多路通道:不仅允许多个设备同时操作,且允许它们同时进行传输型操作;
通道的数据传输率 = 各外设的数据传输率之和
选择通道:一旦选择了一个外设,即使该外设没有准备好,也只能等待;
通道数据传输率 = 一台设备的数据传输率
数组多路通道:允许多个设备同时工作,但只允许一个设备进行传输型操作,其他设备进行控制型操作;通道数据传输率 = 各设备数据传输率之和
通道是一种专业控制器,具有自己的指令系统
(基本上都是I/O指令)
通道执行通道程序来实现和管理I/O,CPU基本
上不需要管理I/O,CPU的效率得到更大的提高
通道程序由OS根据I/O任务的需求自动生成,
存放在存储器中,通道程序由OS管理,用户程序执行和访问通道程序
在常用的I/O控制方式中,要求主存与I/O设备之间有直接数据通路的方式是DMA方式
常见的几种总线仲裁方式中,对电路最为敏感的方式是链式查询方式
将网卡缓存器中的2000字节高效快速地传输到该计算机内存中,最合适的数据传输方式是DMA方式
在计数器定时查询总线仲裁方式下,若每次计数从上次计数的终止点开始,,则每个设备使用总线的机会相等
周期挪用常用于直接存储器存储方式的输入输出(DMA方式)
在独立请求总线仲裁方式下,若要支持N个设备,则应有N个总线请求信号和N个总线响应信号
若DMA采用周期窃取方式传送数据,则每传送一个字需占用一个存取周期的时间
中断向量是中断服务子程序的入口地址
I/O控制的四种方式:程序查询方式、访问中断方式、DMA方式、通道方式
按照信息交换的单位划分,I/O设备可以分为:字符设备和块设备
扇区地址:
存储容量:盘面数(磁头数) X 每盘面的磁道数 X 每磁道的扇区数 X 扇区容量
寻址时间:
数据传输率 Dr:单位时间内传输的数据位数(b/s)
廉价磁盘冗余阵列RAID(redundant array of inexpensive disks)
通过把数据分成多个数据块(Block)并行写入/读出多个磁盘以提高访问磁盘的速度
不同模式的RAID
RAID0 | RAID1 | RAID2 |
---|---|---|
RAID3 | RAID4 | RAID5 |
用户编程空间:用户编制程序时使用的地址称为虚地址或逻辑地址,其对应的存储空间称为虚存空间或逻辑地址空间。虚存空间的用户程序按照虚地址编程并存放在辅存中
物理内存空间:计算机物理内存的访问地址称为实地址或物理地址,其对应的存储空间称为物理空间或主存空间
虚存空间和主存空间按固定大小分成若干页,虚存页称为虚页,
主存页称为实页。辅存中的程序按页调入内存
虚地址格式(逻辑地址);虚页号+页内地址——虚拟内存最大容量由计算机地址结构决定
实地址格式(物理地址):实页号+页内地址——物理内存大小决定实地址长度
页表:记录虚页与实页的映射关系,实现虚实地址的转换;建立在内存中;页表用虚页号作为索引,页表项包括虚页对应的实页号和有效位
页表的起始逻辑地址必须为页大小的整数倍
页表寄存器:保存页表在内存中的首地址
页内地址(页内偏移量):页大小决定
页表大小(假设所有虚页都在使用中):虚页数*页表项位数——虚页号是页表的索引
多级页表机制:将页表分页,当前使用的页的页表项所在页在内存,
其余在外存,页表也采用按页交换机制
当虚页不在内存时(装入位为0),
页表提供保存该虚页的磁盘地址,
以便进行磁盘读取;有些系统采用双表结构:页表只提供虚页到实页的映射;由外页表提供虚页到磁盘地址的映射
访存次数问题
快表TLB(translation lookaside buffer):使用Cache存储部分活跃的页表项,称为TLB(快表),它包含了最近使用的那些页表项
已知:
又有
因此
页目录自映射:页目录中有一条 P D E PDE PDE指向自身物理地址——页目录基地址
已知页表基址 P T b a s e PT_{base} PTbase要求该基址与页面大小对齐,即
P T b a s e = ( ( P T b a s e > > 22 ) ) < < 22 PT_{base}=((PT_{base}>>22))<<22 PTbase=((PTbase>>22))<<22
说人话就是页表基址的低22位全0
页目录基址 P D b a s e PD_{base} PDbase在哪里?
P D b a s e = P T b a s e ∣ P T b a s e > > 10 PD_{base}=PT_{base}|PT_{base}>>10 PDbase=PTbase∣PTbase>>10
自映射页目录表项 P D E s e l f − m a p p i n g PDE_{self-mapping} PDEself−mapping在哪里?
P D E s e l f − m a p p i n g = P T b a s e ∣ ( P T b a s e ) > > 10 ∣ ( P T b a s e ) > > 20 PDE_{self-mapping}=PT_{base}|(PT_{base})>>10|(PT_{base})>>20 PDEself−mapping=PTbase∣(PTbase)>>10∣(PTbase)>>20
某机器字长为64位,内存容量为256MB,若按字编址,则其寻址空间为0~32M-1——按字编址,256MB/64bit=32M
进程可以使用的最大地址空间受限于地址位数
虚拟地址空间可以大于物理地址空间,也可以小于物理地址空间
某磁盘旋转速度为7200转/分钟,每磁道存储 1 M B 1MB 1MB数据。如果数据块大小为 4 K B 4KB 4KB,平均寻道时间为 6 m s 6ms 6ms,则读取一块数据的平均时间约为多少 m s ms ms
- 寻道时间: 6 m s 6ms 6ms
- 数据传输速率: ( 7200 / 60 ) r / s ∗ 1 M B = 1200 M B / s (7200/60)r/s*1MB=1200MB/s (7200/60)r/s∗1MB=1200MB/s
- 旋转延迟时间: 1 / [ 2 ∗ ( 7200 / 60 ) ] = 0.00042 = 0.42 m s 1/[2*(7200/60)]=0.00042=0.42ms 1/[2∗(7200/60)]=0.00042=0.42ms
- 传输时间: 4 K B / ( 1200 M B / s ) = 0.03 m s 4KB/(1200MB/s)=0.03ms 4KB/(1200MB/s)=0.03ms
- 总访问时间=读取一块数据的平均时间=寻道时间+旋转延迟时间+传输时间= 6.45 m s 6.45ms 6.45ms
假设:某磁盘的可用盘面数为10,每个盘面的磁道数为100,磁盘分为8个扇区,每扇区存储512个字节,磁盘转速为6000RPM。主存与磁盘之间的数据传送采用DMA单字传送方式,单字长为32位。一条指令的最长执行时间是20微秒。
请问:
该磁盘的容量是多少? 10 × 100 × 8 × 512 b y t e s = 4000 k b y t e s 10\times100\times8\times512bytes=4000kbytes 10×100×8×512bytes=4000kbytes
该磁盘的数据传输率是多少? ( 6000 / 60 ) × 8 × 512 b y t e s = 400 k b y t e s / s (6000/60)\times8\times512bytes=400kbytes/s (6000/60)×8×512bytes=400kbytes/s
是否可采用一条指令执行结束时响应DMA请求的方案,为什么?
不能;
传输单字: ( 32 / 8 ) / 400 k b y t e s / s = 0.01 × 1 0 − 3 s = 10 μ s (32/8)/400kbytes/s=0.01\times10^{-3}s=10\mu s (32/8)/400kbytes/s=0.01×10−3s=10μs;
即约每隔 10 μ s 10\mu s 10μs就会有一次DMA传送请求,采取此方案会造成数据丢失。
假设一个内存管理系统有47位的虚拟空间,每页大小为16KB,并且页表项占用8位。在每级页表大小不超过1页的情况下,需要几级页表来完成虚拟地址的映射?给出虚拟地址的结构划分,并详细解释:
每页最多可包含: 16 K B / 8 b i t = 16 K = 2 14 16KB/8bit=16K=2^{14} 16KB/8bit=16K=214个页表项,又页表以虚页号作为索引,故虚页号最大为14位;
页内偏移量: 16 K B = 2 14 → 14 16KB=2^{14}\rightarrow 14 16KB=214→14故虚拟地址中页内偏移量为14位;
可供页目录使用的地址空间最多有: 47 − 14 = 33 47-14=33 47−14=33;
要求每级页表不超过一页—— 33 / 14 = 3 ( 向 上 取 整 ) 33/14=3(向上取整) 33/14=3(向上取整)至少需要3级页表
(这里其实不太明白,但是感觉各级目录相等比较顺眼QAQ)
33 / 3 = 11 33/3=11 33/3=11故每一级页目录均为11位;
虚拟地址的结构划分:
一级页目录 二级页目录 三级页目录 页内偏移量 11位 11位 11位 14位 虚拟地址地址空间的大小仅取决于地址结构
页面越大,页面内部的内存碎片会越多;内碎片——分配给作业的存储空间中未被利用的部分
页面的大小会影响进程切换的速度
页面越大,运行程序所需的页面越少
现有一个容量为4GB的磁盘分区,磁盘空间以簇为单位进行分配,簇的大小为4KB,若采用位图法管理该分区的空间,即用一位(bit)标识一个簇是否被分配,则存放该位图所需簇的个数为:
需要 4 G B / 4 K B = 2 20 4GB/4KB=2^{20} 4GB/4KB=220个簇
每个簇用一位标识—— 2 20 2^{20} 220位
每个簇可以存放 2 12 × 2 3 = 2 15 2^{12}\times2^{3}=2^{15} 212×23=215位
需要 2 20 / 2 15 = 32 2^{20}/2^{15}=32 220/215=32个簇存放
假设只考虑页内碎片和页表引起的额外内存。如进程本身占用内存的平均大小是1MB,每个页表项的大小是8B,为减少额外的内存开销,页面大小应设置为:
页内碎片:页大小决定==>取平均值(页内不产生碎片~整页分配后未使用)
页表大小:页面数量决定(存放页面所需的内存大小)
不妨设页面大小为 2 m B 2^{m}B 2mB;
则进程所需的页面数量为 2 20 / 2 m = 2 20 − m 2^{20}/2^{m}=2^{20-m} 220/2m=220−m个;
存放这些页面消耗的内存大小: 2 20 − m × 2 3 = 2 23 − m 2^{20-m}\times 2^{3}=2^{23-m} 220−m×23=223−m
页内碎片平均值= ( 1 / 2 ) × 2 m = 2 m − 1 (1/2)\times 2^{m}=2^{m-1} (1/2)×2m=2m−1
要使 2 m − 1 + 2 23 − m 2^{m-1}+2^{23-m} 2m−1+223−m达到最小:m=12;
按存储介质分
按访问方式分
按功能分
存储器的层次结构
二级存储系统 | 高速缓冲存储器 | 主存储器 | |
---|---|---|---|
三级存储系统 | 高速缓冲存储器 | 主存储器 | 辅助存储器 |
集中刷新(有 2 n 2^{n} 2n行;设刷新周期为2ms;读写周期为 0.5 μ s 0.5\mu s 0.5μs)
在一个时间段内,刷新存储器所有行,此时CPU停止访问内存;另一个时间段内,CPU可以访问内存,刷新电路不工作
分散式刷新(有 2 n 2^{n} 2n行;设刷新周期为2ms;存取周期为 0.5 μ s 0.5\mu s 0.5μs)
分布式刷新
动态RAM依据电容充放电原理存储信息;静态RAM依据触发器原理存储信息。
构造 32 k × 32 b i t 32k\times32bit 32k×32bit的存储器共需64片 2 k × 8 b i t 2k\times8bit 2k×8bit的SRAM存储芯片
容量 1 M × 16 b i t 1M\times16bit 1M×16bit的DRAM存储芯片,如采用二维地址结构,且行地址和列地址的位数相同,则行译码器输出的行选择线有1024根,该芯片的刷新地址计数器是10位
用多个容量 1 k × 4 b i t 1k\times4bit 1k×4bit的存储芯片,组成容量为 64 k × 8 b i t 64k\times8bit 64k×8bit的存储器。若将这些芯片分装在几块内存板上,每块内存板容量为 16 k × 8 b i t 16k\times8bit 16k×8bit,则该存储器的地址线中,必须有2根地址线用于选内存板,4根地址线用于选芯片
容量为 32 k × 16 b i t 32k\times16bit 32k×16bit的存储器芯片,其地址线数量和数据线数量的总和为31
p.s:地址线是地址信号线,用于传送地址信息;地址选择线用于定位存储位元
某计算机的数据总线为8位,地址总线为20位,主存按字节编址,其中地址最低的256KB主存空间为只读系统程序区,其余为用户程序区,现有若干容量为 64 k × 8 b i t 64k\times8bit 64k×8bit的ROM芯片和容量为 256 k × 8 b i t 256k\times8bit 256k×8bit的DRAM芯片:
上述规格的DRAM芯片,若行地址和列地址共享同一组芯片管脚,则所需地址管脚多少根?芯片的刷新地址计数器是多少位?
256 k = 2 18 − − − − > 行 地 址 管 脚 = 列 地 址 管 脚 = 2 9 = 512 根 , 刷 新 地 址 计 数 器 的 位 数 = 总 行 数 位 数 = 9 位 256k=2^{18}---->行地址管脚=列地址管脚=2^{9}=512根,刷新地址计数器的位数=总行数位数=9位 256k=218−−−−>行地址管脚=列地址管脚=29=512根,刷新地址计数器的位数=总行数位数=9位
若DRAM芯片采用分布式刷新方式,且存储单元刷新间隔最长为4ms,则刷新周期是多少?
==???==分布式刷新方式 − − − − > ----> −−−−>刷新周期= 4 m s / 512 4ms/512 4ms/512
查阅资料得*:对于每行以4ms为刷新周期足够了,刷新循环到它需要512刷新次操作, 4ms ÷ 512 作为每次刷新的周期,(注意每次刷新周期与特定行的刷新周期的不同:每次刷新间隔指对于内存来说它隔多长时间就进行一次刷新操作,轮着刷新时,刷新的行是上一次刷新的行的下一行——是不同的两行,但对于全局内存来说确实是两次刷新操作间隔。特定哪一行的刷新周期:下一次对它进行刷新的间隔,期间要经过64次内存刷新周期才又轮得到它。)
该计算机所允许的最大主存容量是多少?
- 地址总线为20位,数据总线为8位,按字节编址
- 2 20 × ( 8 b i t / 8 ) = 1 M B 2^{20}\times(8bit/8)=1MB 220×(8bit/8)=1MB
构建该计算机所允许的最大容量的主存,需用上述规格的ROM芯片和DRAM芯片各多少片?
只读系统程序区 256 K B − − − − > R O M 256KB---->ROM 256KB−−−−>ROM, 256 / 64 = 4 256/64=4 256/64=4块
DRAM芯片 768 K B − − − − > D R A M 768KB---->DRAM 768KB−−−−>DRAM, 768 / 256 = 3 768/256=3 768/256=3块
请给出每个ROM芯片和DRAM芯片在上述主存中的地址空间范围。
2 20 = 1 6 5 − − − − > 5 2^{20}=16^{5}---->5 220=165−−−−>5位16进制地址码
芯片 起 止 ROM#1 0x00000H 0x0FFFFH ROM#2 0x10000H 0x1FFFFH ROM#3 0x20000H 0x2FFFFH ROM#4 0x30000H 0x3FFFFH DRAM#1 0x40000H 0x7FFFFH DRAM#2 0x80000H 0xBFFFFH DRAM#3 0xC0000H 0xFFFFFH 用于译码产生DRAM芯片片选信号的主存地址需多少位?
3块DRAM芯片,需要2位主存地址确定
https://wenku.baidu.com/view/f34bca962ec58bd63186bceb19e8b8f67c1cef27.html
计算机硬件可以执行的表示一种基本操作的二进制代码
操作数地址的数目
三地址:
OP | DES Add | SUR1 Add | Sur2 Add |
---|
双地址
OP | Des Add | Sur Add |
---|
单地址:累加器作为其中一个操作数的双操作数型,或单操作数型
OP | Add |
---|
零地址:隐含操作数型,或无操作数型
OP |
---|
##待补充
其余部分不作重点讲解
响应时间:从提交作业到作业完成所花费的时间
吞吐量:一定时间间隔内完成的作业数
CPU执行时间:
程 序 的 C P U 时 钟 周 期 数 × 时 钟 周 期 长 度 程序的CPU时钟周期数\times时钟周期长度 程序的CPU时钟周期数×时钟周期长度
程 序 的 C P U 时 钟 周 期 数 时 钟 频 率 \frac{程序的CPU时钟周期数}{时钟频率} 时钟频率程序的CPU时钟周期数
程序的CPU时钟周期数: 程 序 指 令 数 × 每 条 指 令 的 平 均 时 钟 周 期 数 程序指令数\times每条指令的平均时钟周期数 程序指令数×每条指令的平均时钟周期数
C P I : 指 令 平 均 执 行 时 钟 周 期 数 CPI:指令平均执行时钟周期数 CPI:指令平均执行时钟周期数
MIPS:百万指令每秒
面向连接并发服务器——e.g TCP
无连接循环服务器——e.g UDP
辨析:面向连接即连接已建立,则不需要说明交给谁——直接send()、recv();无连接则需要说明交给谁、接收谁发的——sendto()、recvfrom()
Telnet:使用TCP连接到特定服务器,并将输入发送给服务端, 将从服务器接收的信息显示在屏幕上
分布式超媒体 (hypermedia) 系统,是超文本 (hypertext) 系统的扩充
HTTP——HyperText Transfer Protocol
无连接
基于TCP,可靠交换文件的重要基础
熟知端口号:80
① 怎样标识分布在Internet上的万维网文档? ------URL
② 用什么协议实现万维网上各种超链的链接?------HTTP
③ 如何存储和表示万维网文档?------HTML
HTTP/1.0每传送一个文件都需要建立一次TCP连接;HTTP/1.1进行了改进;
网站地址:统一资源定位符 URL
HTTP报文类型:
安全的HTTP协议:HTTPS
发邮件
SMTP()
① 连接建立:连接在发送主机的SMTP客户和接收主机的SMTP
服务器之间建立,不使用中间邮件服务器
② 邮件传送
③ 连接释放:邮件发送完毕后,SMTP释放TCP 连接
SMTP支持在邮件服务器间、用户代理及邮件服务器间发送邮件(双向均可)
收邮件
提供域名到IP地址转换的服务叫域名服务
域名:…… . <三级域名>.<二级域名>.<顶级域名>——需要转换为IP地址才可以访问
域名服务器程序在专设的结点上运行, 运行该程序的机器称为域名服务器
互联网采用了层次树状结构的命名方法
权限域名服务器:
根域名服务器:不管是哪一个本地域名服务器,若要对互联网 上任何一个域名进行解析,只要自己无法解析, 就首先求助于根域名服务器
顶级域名服务器
权限域名服务器
本地域名服务器
主机向本地域名服务器的查询一般都是采用递归查询
本地域名服务器向根域名服务器的查询通常是采用迭代查询
每个域名服务器都维护一个高速缓存,存放最近用过的名字以及从何处获得名字映射信息的记录
如果本地域名服务器无缓存,当采用递归方法解析另一网络某主机域名时,用户主机、本地域名服务器发送的域名请求消息数分别为一条、一条
在“HTTP协议缺省使用端口80”这句话中,端口80为Web服务器的传输层端口号
HTTP协议的英文全称是Hypertext Transfer Protocol
HTTP协议是无连接、无状态的协议
TCP/IP协议向应用层提供的编程接口是Socket
域名解析DNS使用的传输层协议是UDP,如果一个C语言编写的应用程序基于该传输层协议实现网络通信,则该程序可调用套接字(Socket)编程接口函数sendto向外发送数据
建立TCP连接后,报文段中搭载的HTTP协议报文头部中用于获取文件的命令是GET
运行在不同主机间的两个应用进程AP1和AP2之间能建立多个TCP连接
传输层又叫运输层
向应用层提供服务
功能:连接管理、流量控制、差错控制、拥塞控制、建立无连接和面向连接的通信等
通信逻辑:进程(‼️用进程标识符来标志)间通信,端到端;可以复用和分用;可靠/不可靠通信服务
网络环境中一个完整的进程通信标识需要一个五元组来表示:
协议 | 本地地址 | 本地端口号 |
---|---|---|
远程地址 | 远程端口号 |
主要协议
UDP协议:无连接,用户数据报协议
TCP协议:面向连接,传输控制协议
UDP和TCP都使用IP协议,即他们的协议数据单元都作为IP数据报的数据
是自下而上第一个提供端到端服务的层次
端口:为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对TCP/IP体系的应用进程进行标志
常用端口号
端口号 | 协议 | 主要功能 |
---|---|---|
20 | FTP(数据) | |
21 | FTP(control) | |
23 | TELNET | |
25 | SMTP | |
53 | DNS | |
69 | TFTP | |
80 | HTTP | |
161 | SNMP(agent) | |
162 | SNMP(management) | |
179 | BGP | |
5060 | SIP over TCP or UDP | |
5061 | SIP using TLS over TCP ; SIPS over TCP |
不可靠、无连接;效率更高,但可能会出现丢包、乱序、数据错等问题
基于UDP的典型协议:RIP、DNS
面向报文,没有拥塞控制功能,但首部开销小(8个字节)
数据报格式
首部 | 数据报 |
---|
首部格式(不包含伪首部——4个字段、8个字节)
–伪首部– | 源端口 | 目的端口 | 长度 | 校验和 |
---|---|---|---|---|
12字节:仅在计算校验和时使用,不实际传输 | 2字节 | 2字节 | 2字节:UDP数据报的长度 | 2字节:整个UDP数据报的校验和 |
伪首部格式
源IP地址 | 目的IP地址 | 0 | 17 | UDP长度 |
---|---|---|---|---|
UDP的协议类型 |
校验和:整个IP报文的校验和
复位RST | 当该字段为1时,表明TCP连接出现严重差错,需释放连接后重新建立连接 |
---|---|
同步SYN | 该字段为1时,表示这是一个连接请求或连接接收报文 |
终止FIN | 该字段为1时,表示要求释放TCP连接 |
窗口大小 | 2字节,用来让对方设置发送窗口的依据,单位为字节 |
TCP的可靠传输通过校验和+超时重传实现
TCP每发送一个报文段,就对这个报文段设置一个计时器
如果计时器设置的重传时间到,但还没有收到确认,就要重传该报文段
加权平均往返时间 R T T s RTT_s RTTs( R T T RTT RTT:往返时间)
n e w R T T s = ( 1 − α ) ∗ o l d R T T s + α ∗ n e w R T T s a m p l e newRTT_s=(1-\alpha)*oldRTT_s+\alpha*newRTT_{sample} newRTTs=(1−α)∗oldRTTs+α∗newRTTsample
其中 α \alpha α越小, R T T RTT RTT值更新得越慢
超时重传时间 R T O RTO RTO
R T O = R T T s + 4 × R T T D RTO=RTT_s+4\times RTT_D RTO=RTTs+4×RTTD
其中 R T T D RTT_D RTTD是 R T T RTT RTT的加权平均值
RFC2988建议这样计算 R T T D RTT_D RTTD
第一次测量时, R T T D RTT_D RTTD值取为测量到的 R T T RTT RTT样本值的一半
以后的测量中,使用下式计算加权平均的 R T T D RTT_D RTTD
n e w R T T D = ( 1 − β ) × o l d R T T D + β × ∣ R T T s − n e w R T T s a m p l e ∣ newRTT_D=(1-\beta)\times oldRTT_D+\beta \times |RTT_s-newRTT_{sample}| newRTTD=(1−β)×oldRTTD+β×∣RTTs−newRTTsample∣
TCP基于滑动窗口协议实现可靠传输和流量控制,滑动窗口以字节为单位
acknowledge number:在此序号之前的数据已被正确接收
接收方根据ack与对方发来的窗口大小确定发送窗口的大小
TCP报头中都携带有窗口大小字段,告知对方自己接收窗口的剩余大小(即可接收的字节数,注意不要忽略仍在传输中的数据)
发送方的发送窗口应不大于对方的接收窗口
如何避免相互等待?
持续计数器——TCP为每一个连接设有一个持续计数器
如何保证传输效率(控制TCP报文的发送时机):
在某段时间内,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,从而产生拥塞
拥塞产生的条件 ∑ s o u r c e − n e e d e d > s o u r c e − a v a i l a b l e \sum source-needed > source-available ∑source−needed>source−available
注意⚠️:网络拥塞是多种原因引起的,通过简单地增加某种资源数量往往不能消除拥塞
拥塞常常会趋于恶化:TCP重传机制
e.g 一个路由器由于缓存不足丢弃了部分报文,发送端主机将超时重发,导致网络中被注入了更多的报文,从而加剧拥塞。
防止过多的数据被注入到网络中,使网络中的路由器或链路不致过载。
是全局性的过程
点对点通信量的控制——端到端的问题
慢启动,又称为慢开始
开始发送时,如果立即把大量报文注入网络,则可能导致拥塞——不清楚网络的负荷状况——试探性地增加发送窗口
拥塞窗口 c w n d cwnd cwnd:
拥塞避免
思路:每经过一个往返时间 R T T RTT RTT就将发送方的拥塞窗口 c w n d cwnd cwnd加1,而不是加倍——拥塞窗口按线性规律缓慢增长——加法增大
拥塞发生时的处理:
无论在慢启动阶段还是拥塞避免阶段,只要发送方判断网络出现拥塞,就要把慢启动门限 s s t h r e s h ssthresh ssthresh改为出现拥塞时的发送方窗口值的一半(但不能小于2)——乘法减小
接着把拥塞窗口重新设置为1,执行慢启动法
快重传
思路:如果发送方在超时时间内未收到确认报文,说明网络中发生拥塞,此时发送方应尽早地减小窗口宽度
快恢复
思路:当发送方收到连续三个重复的确认时,就进行“乘法减小”,即将慢启动门限 s s t h r e s h ssthresh ssthresh减为当前的拥塞窗口宽度的一半
发送窗口的上限值—— min [ r w n d , c w n d ] \min[rwnd,cwnd] min[rwnd,cwnd]
为什么是三次握手?
三次握手带来的安全问题及解决办法?
主机甲向主机乙发送一个(SYN=1,seq=11220) 的TCP段,期望与主机乙建立TCP连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确TCP段可能是中SYN=1,ACK=1,ack=11221,seq=任意值
一个TCP连接总是以1KB的最大段发送 TCP段,发送方有足够多的数据要发送。 当拥塞窗口为16KB时发生了超时,如果接下来的4个RTT(往返时间)时间内的TCP段的传输都是成功的,那么当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是9KB
Internet中某主机A上的浏览器使用HTTP协议从Web服务器B下载一个长度为10MB的文件。题图以表格形式给出了A与B之间从通信开始后传输的TCP报文段信息,表格中每一行对应一个报文段,报文段按传输时间先后顺序编号为 S 1 − S 14 S_1-S_{14} S1−S14,数据长度栏目表示报文段所搭载的应用数据长度。表格中的数值均为10进制,标注为’X’的表示该字段值未知,已知A、B间建立TCP连接的过程中通过选项字段协商确定最大报文段长度MSS=1000字节,双方均按照慢启动(开始)和拥塞避免机制进行传输,慢启动门限 s s t h r e s h = 4 ssthresh=4 ssthresh=4,单位:MSS,传输过程中没有报文段超时
编号 传输方向 序号 确认号 ACK SYN 窗口 S 1 S_1 S1 A → B A\rightarrow B A→B 0 0 X X 6500 S 2 S_2 S2 B → A B\rightarrow A B→A 0 1 X X 16384 S 3 S_3 S3 A → B A\rightarrow B A→B 1 1 X X 6500 S 4 S_4 S4 A → B A\rightarrow B A→B 1 1 1 0 6500 S 5 S_5 S5 B → A B\rightarrow A B→A 1 382 1 0 16384 S 6 S_6 S6 A → B A\rightarrow B A→B 382 1001 1 0 5500 S 7 S_7 S7 B → A B\rightarrow A B→A 1001 382 1 0 16384 S 8 S_8 S8 B → A B\rightarrow A B→A 2001 382 1 0 16384 S 9 S_9 S9 A → B A\rightarrow B A→B 382 3001 1 0 3500 S 10 S_{10} S10 B → A B\rightarrow A B→A 3001 382 1 0 16384 S 11 S_{11} S11 B → A B\rightarrow A B→A 4001 382 1 0 16384 S 12 S_{12} S12 B → A B\rightarrow A B→A 5001 382 1 0 16384 S 13 S_{13} S13 B → A B\rightarrow A B→A 6001 382 1 0 16384 S 14 S_{14} S14 A → B A\rightarrow B A→B 382 X 1 0 6000
- 已知报文段 S 1 , S 2 , S 3 S_1,S_2,S_3 S1,S2,S3是A、B间建立TCP连接的报文段,请分别给出这三个报文段中SYN和ACK两个字段的值
- 报文段 S 4 S_4 S4中搭载的HTTP协议报文头部中的方法或命令是什么?
- 请给出报文段 S 8 S_8 S8和 S 13 S_{13} S13中搭载的数据长度和报文段 S 14 S_{14} S14中搭载的确认号字段
- 假设B在收到 S 14 S_{14} S14后,直到收到A的下一个确认之前,最多可向A发送n个字节的应用数据。如果B在报文段 S 14 S_{14} S14之后仍然采用慢启动机制,n的值是多少?如果B在报文段 S 14 S_{14} S14之后改用拥塞避免机制,n的值是多少?
解析:
序号 SYN ACK S 1 S_1 S1 1 0 S 2 S_2 S2 1 1 S 3 S_3 S3 0 1 原因:SYN字段值表示正在请求建立连接/同意建立连接请求,ACK字段在连接建立后直到连接断开之前恒为1
S 4 S_4 S4开始向Web服务器请求发送文件,方法:GET
根据确认号推知, S 8 S_8 S8搭载的数据长度为1000字节,在 S 13 S_{13} S13所处的发送轮次中,由于A给出了接收窗口的最大值为3500字节,故而B在未收到A的确认信息之前,最多能向A传送3500字节—— S 13 S_{13} S13搭载的数据长度为500,传输过程中没有报文段超时,因此A在 S 14 S_{14} S14给出的确认号为A接下来可以接受的最小序号值,即6001+500=6501
分析:
- 最初B的发送窗口值为1(慢启动机制),第一轮次结束后(收到 S 6 S_6 S6确认报文) c w n d cwnd cwnd加倍,此时的 r w n d rwnd rwnd为5.5,发送窗口值为min[ c w n d , r w n d cwnd,rwnd cwnd,rwnd]为2,接着开始第二轮传输,第二轮次结束后(收到 S 9 S_9 S9确认报文) c w n d cwnd cwnd加倍,为4,但此时的 r w n d rwnd rwnd为3.5,发送窗口值为min[ c w n d , r w n d cwnd,rwnd cwnd,rwnd]为3.5
- 注意,这里只是改变了发送窗口搭载的最大数据长度,并没有改变 c w n d = 4 = s s t h r e s h cwnd=4=ssthresh cwnd=4=ssthresh
- 接下来接收到的确认报文 r w n d = 6 rwnd=6 rwnd=6
- 若继续使用慢启动机制,则 c w n d = 2 ∗ 4 = 8 cwnd=2*4=8 cwnd=2∗4=8,能发送的最大数据长度为 M S S ∗ m i n [ c w n d , r w n d ] = 6000 MSS*min[cwnd,rwnd]=6000 MSS∗min[cwnd,rwnd]=6000;
- 若改用拥塞避免机制,则 c w n d = 4 + 1 = 5 cwnd=4+1=5 cwnd=4+1=5,能发送的最大数据长度为 M S S ∗ m i n [ c w n d , r w n d ] = 5000 MSS*min[cwnd,rwnd]=5000 MSS∗min[cwnd,rwnd]=5000
网际协议IP是TCP/IP体系中两个最主要的协议之一
与IP协议配套使用的四个协议
分类的IP地址
ARP与RARP协议
ARP将IP地址转化为物理地址——解决同一局域网中的主机或路由器的IP地址和硬件地址的映射
主机设有一个ARP高速缓存,存有本地局域网上各主机和路由器的IP地址与硬件地址映射表
当主机欲向本局域网内上的主机发送IP包时,
先查看高速缓存===>如有,则查出其对应的硬件地址,再将此硬件地址写入MAC帧===>如无,则发送ARP请求:
如果目标主机不在本局域网内,IP包需经由路由器转发
—此时在局域网内要完成的是路由器IP与物理地址的映射
RARP协议将物理地址转换为IP地址
——增加子网字段,形成三级ip地址:从主机号借用若干位作为子网号
I P a d d r e s s : : = < n e t − i d > , < s u b n e t − i d > , < h o s t − i d > IP \ address ::={
路由算法用于生成路由信息(路由表)
静态路由与动态路由
自制系统AS(Autonomous Systom):在单一的技术管理下的一组路由器,而这些路由器使用一种AS内部的路由选择协议和共同的度量以确定分组在该AS内的路由,同时还使用一种AS之间的路由选择协议用以确定分组在AS之间的路由
典型的动态路由算法
RIP协议:
-每个路由器维护一张表,表中给出了到每个目的地的已知最佳距离和线路,并通过与相邻路由器交换距离信息来更新表
-路由器周期性地向所有相邻路由器发送他的距离表,同时他也接收每个邻居节点发来的距离表
-根据不同的邻居发来的信息,计算到目标路由器的最小距离,更新本路由的路由表
算法缺陷:对好消息反应迅速,对坏消息反应迟钝
距离定义:路由器跳数 hop count
最长距离——15跳,跳数为16表示不可达
要点
基本思想
OSPF协议
-收敛速度快:链路状态发生变化时,结点会以洪泛方式告知网络中所有其他结点
-适用于大规模网络:仅在链路状态发生变化时发送洪泛信息,不会产生很大通信量
**OSPF直接用IP数据报传送
某网络的IP地址空间为192.168.5.0/24,采用长子网划分,子网掩码为255.255.255.248,则该网络的最大子网个数为32,每个子网内的最大可分配地址个数为6
在子网192.168.4.0/30中,能接受目的地址为192.168.4.3的IP分组的最大主机数是2,ip地址分别是:192.168.4.1/30;192.168.4.2/30(CIDR记法)
若路由器R因为拥塞丢弃IP分组,则此时R可向发出该IP分组的源主机发送的ICMP报文的类型是源点抑制报文
某自治系统采用RIP协议,若该自治系统内的路由器 R 1 R_{1} R1收到其邻居路由器 R 2 R_{2} R2的距离矢量中包含的信息 < n e t 1 , 16 >
<net1,16>,则可能得出的结论是 R 1 R_{1} R1不能经过 R 2 R_{2} R2到达 n e t 1 net1 net1
物理层实现了比特流的传输,数据链路层在其基础上实现帧的传输——数据链路层传输的协议数据单元(PDU)是帧
数据链路层使用的信道类型:
数据链路层涉及的问题
成帧:帧边界的可识别性
差错控制
通过检错码/纠错码可以做到帧的无差错接收,但并不意味着可靠传输,其他的错误包括帧丢失、帧重复、帧先序
流量控制及可靠传输
广播信道中的介质访问控制
基本数据链路协议
无限制的单工协议
单工停-等协议(比无限制的单工协议增加了流量控制机制)
有噪声信道的单工协议
滑动窗口协议
连续发送的多个帧中,某一个帧出错或丢失,但后续帧已被正确接收,如何处理?——数据链路层需按顺序向网络层上交帧
应用:拨号上网、光纤传输
组成
帧格式:面向字节,所有PPP帧的长度都是整数字节
透明传输问题
身份认证协议
静态划分信道
动态介质访问控制(多点控制)
随机访问:可能产生碰撞、冲突
-典型协议:ALOHA、CSMA、CSMA/CD、CSMA/CA
受控访问:
-多点线路探询(polling)、轮询(局域网中使用较少)
核心概念:
载波监听
结点在发送之前先检测总线上是否有其他结点正在发送数据
碰撞检测
结点边发送数据边检测信道上是否发生了碰撞
由于线路的传播时延,单纯的载波监听并不难完全避免碰撞
发生碰撞时,两个或更多的信号在总线上相互叠加,导致无法识别
碰撞强化
发送方检测到碰撞后,立即停止发送,并发送32或48bit的人为干扰信号,以便让所有用户知道发生了碰撞
碰撞退避
争用期:
优缺点讨论
局域网技术标准
以太网采用CSMA/CD介质访问控制协议
适配器每收到一个帧就检查帧中的目的MAC地址,如果是发往本站的帧则进行处理,否则丢弃
以太网的帧格式
以太网采用曼彻斯特编码,每个比特均有电平跳变,无电平跳变则意味着总线空闲
高速以太网若工作在全双工模式下则不使用CSMA/CD协议——不存在争用
特殊字符表示
10BASE- | T | 10:10Mbps,BASE:基带传输,T:双绞线 |
---|
100BASE- | TX | 2对UTP5类线或屏蔽双绞线 |
---|---|---|
FX | 一对光纤 | |
T4 | 4对UTP三类线或五类线 | |
1000BASE- | X | 基于光纤 |
SX | 短波长 | |
LX | 长波长 | |
CX | 铜线 | |
T | 4对五类双绞线UTP | |
万兆以太网 | – | 只使用光纤 |
数据链路层采用后退N帧(GBN)协议,发送方已经发送了编号0-1的帧,当计时器超时时,若发送方只收到0,2,3号帧的确认,则发送方需要重发的帧数是4: A C K n ACK_{n} ACKn代表n号帧及n号帧之前的帧都已被正确接收
某局域网采用CSMA/CD协议实现介质访问控制,数据传输率为 100 M b / s 100Mb/s 100Mb/s,主机甲与主机乙的距离为 2 k m 2km 2km,信号传播速度是 200000 k m / s 200000km/s 200000km/s请回答以下问题,并给出计算过程:
(1) 若主机甲和主机乙发送数据时发生冲突,则从开始发送数据时刻起,到两台主机均检测到冲突时刻为止,最短经过多长时间?最长经过多长时间?(假设主机甲和主机已发送数据时,其它主机不发送数据)
解析:
甲乙间单向传输时延 τ = 2 / 200000 = 10 μ s \tau=2/200000=10\mu s τ=2/200000=10μs
最短:同时发送,中点处发生冲突,继而开始传送冲突信号——10 μ s \mu s μs
最长:甲发送的帧已经走过整段距离后,乙开始发送数据,此时冲突信号需传输整段到甲—— 2 ∗ 10 μ s 2*10\mu s 2∗10μs
在一个采用CSMA/CD协议的网络中,传输介质是一根完整的电缆,传播速率为 1 G b p s 1Gbps 1Gbps,电缆中的信号传播速度是 200000 k m / s 200000km/s 200000km/s。若最小数据帧长度减少 800 b i t 800bit 800bit,则最远的两个站点之间的距离至少需要
- 传输时延>2 τ \tau τ,保证了在远端站点发送完数据之前能够检测到冲突
- 传输时延=数据包的大小/数据包的发送速率
- 传播时延= τ = L / v \tau=L/v τ=L/v
设 C S M A / C D CSMA/CD CSMA/CD局域网的数据传输速率为 1 G b p s 1Gbps 1Gbps,信号传播速度为 200000 k m / s 200000km/s 200000km/s,最小帧长度为 25000 b i t 25000bit 25000bit,则该局域网中两站之间的最远距离为?
传 输 时 延 = T = 25000 b i t / 1 G b p s = 1.5 × 1 0 − 5 s 传输时延=T=25000bit/1Gbps=1.5\times 10^{-5}s 传输时延=T=25000bit/1Gbps=1.5×10−5s
传 播 时 延 = τ = L / V = L / 200000 k m / s < T / 2 传播时延=\tau=L/V=L/200000km/s
传播时延=τ=L/V=L/200000km/s<T/2 最 远 距 离 L = V × τ = 200000 × 1.5 × 1 0 − 5 × 1 / 2 = 1.5 k m 最远距离L=V\times \tau=200000\times 1.5\times 10^{-5}\times 1/2=1.5km 最远距离L=V×τ=200000×1.5×10−5×1/2=1.5km
脉码调制系统 PCM(pulse code modulation)——用于电话交换系统,在数字传输系统中进行多路话音的变换与传输
同步光纤网 SONET和同步数字系列 SDH——主要用于高速干线传输,特别是光纤传输
xHDL技术——基于电话线
HFC——基于有线电视线(光纤+同轴电缆)
FTTx——基于光纤
目前用于光纤到户的技术:
宽带接入技术FTTH使用的传输介质是:光纤
网络链路的波特率是指该链路的每秒传输的波形(码元)数
基本的信道复用技术有频分复用和时分复用,光纤传输常用的波分复用实际上是光的频分复用,无线局域网WLAN则使用了一种与前述几种信道复用技术不同的复用方法,即正交频分复用
性能指标
速率
-传送数据的速率,即数据速率(data rate)或比特率(bit rate)
-单位:b/s,也写为bps……
带宽
-原本指某个信号具有的频带宽度
-计算机网络中,指通信线路传送数据的能力——最高数据率
吞吐量
-单位时间内通过网络的数据量
时延
时延带宽积
顾名思义——传播时延*带宽
往返时间 R T T RTT RTT
利用率
非性能指标
OSI体系结构 | TCP/IP体系结构 | 五层体系结构 |
---|---|---|
应用层 | 应用层 | 应用层 |
表示层 | 应用层 | 应用层 |
会话层 | 应用层 | 应用层 |
传输层 | 传输层 | 传输层 |
网络层 | 网际层 | 网络层 |
数据链路层 | 网络接口层 | 数据链路层 |
物理层 | 网络接口层 | 物理层 |
信号量机制(Semaphore)——安全地避免忙等
0 ≤ S 0\leq S 0≤S表示当前可用的资源数目
P ( ) , S ( ) P(),S() P(),S()操作原语:原子操作不会被打断var S : S a m e p h o r e S:Samephore S:Samephore
P、V操作的定义:
procedure p(var s:samephore);
{
s.value=s.value-1;
if (s.value<0) asleep(s.queue);
}
procedure v(var s:samephore);
{
s.value=s.value+1;
if (s.value<=0) wakeup(s.queue);
}
信号量的使用
生产者消费者问题
/*设有一个可以装A、B两种物品的仓库,其容量无限大,但
要求仓库中A、B两种物品的数量满足下述不等式:
• -M≤A物品数量-B物品数量≤N
• 其中M和N为正整数.
§ 试用信号量和PV操作描述A、B两种物品的入库过程.*/
/*分析:A入库——必然导致B最大值增加,但A能够入库的要求为当前库中A数量小于(B数量+N);B入库同理*/
Semaphore mutex = 1,sa = N,sb = M;
procedure A:
while(1)
begin
P(sa)
P(mutex)
A get stored
V(mutex)
V(sb)
procedure B:
while(1)
begin
P(sb)
P(mutex)
B get stored
V(mutex)
V(sa)
/*三个进程P1、P2、P3 互斥使用一个包含N(N>0)个单元的缓冲区。P1 每次用produce()生成一个正整数并用put()送入缓冲区某一个空单元中;P2 每次用getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;P3 每次用 geteven()从该缓冲区中取出一个偶数并用counteven()统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义。*/
Semaphore mutex = 0,empty = N,odd = 0,even = 0
int number = 0
P1:
while(True)
number = produce()
P(empty)
P(mutex)
put()
v(mutex)
if(number%2==0):
V(even)
else:
V(odd)
P2:
cobegin:
while(True)
P(odd);
P(mutex);
getodd();
V(mutex);
V(empty);
countodd();
P3:
cobegin:
while(True)
P(even);
P(mutex);
geteven();
V(mutex);
V(empty);
counteven();
读者-写者问题
//读者优先
int readers = 0;//读者计数器
Semaphore mutex = 1;
Semaphore roomEmpty = 1;//写者“写”信号
writer:
while(1){
P(roomEmpty);//写者互斥、写者-读者互斥
writing;//写文件
V(roomEmpty);//写操作完成
}
reader:
while(1){
P(mutex);//互斥操作读者计数器
if(readers==0){
P(roomEmpty);//第一个读者进临界区,加锁
}
readers++;//读者可同步访问共享数据
V(mutex);
read;
P(mutex);
readers--;
if(readers==0){
V(roomEmpty);//读者全部读完,解锁
}
V(mutex);
}
//共享读;互斥写、互斥读写;写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)--FIFO
int readers = 0;//读者计数器
Semaphore mutex = 1;
Semaphore roomEmpty = 1;//互斥访问
semaphore w = 1;//写者优先
write:
while(1){
P(w);
P(roomEmpty);
writing;
V(roomEmpty);
V(w);
}
readers:
while(1){
P(w);//之前是否有写者排队
P(mutex);
if(readers==1){
P(roomEmpty);
}
readers++;
V(mutex);
V(w);
reading;
P(mutex);
readers--;
if(readers==0){
V(roomEmpty);
}
V(mutex);
}
哲学家进餐问题
思路:当且仅当哲学家能同时拿起左右两边的筷子时,哲学家拿起筷子并就餐,但是不能简单地将该问题简化为两次申请筷子的操作——每个哲学家都执行一次申请后,再无空闲筷子可分配,造成死锁,解决方法
semaphore mutex[5]={1,1,1,1,1}//5只筷子,互斥访问
semaphore count = 4;//最大可同时申请进餐的哲学家数——>不形成环路的最大值
philosopher(int i){
while(true){
//thinking
P(count);
P(mutex[i]);
P(mutex[(i+1)%5]);
//eating
V(mutex[i]);
V(mutex[(i+1)/5]);
V(count);
}
理发师问题
//理发店有一间工作室,有一名理发师,接待室内有n(n≥1)把椅子。如果没有顾客,理发师就去睡觉;如果理发师在睡觉;有顾客需要理发,则顾客会唤醒他;如果理发师在忙且接待室有空闲椅子,那么此顾客会坐在其中1把空闲的椅子上等待;如果来时所有椅子都有人,那么顾客离去。请采用信号量机制解决该理发师问题
//设置同步信号量service,只有有顾客,理发师才提供理发服务
//设置互斥信号量mutex,互斥访问顾客计数器
int chair=0;
semaphore mutex=1,semaphore service=0,customer=0;
Customer:
while(1){
P(mutex);
if(chair<n){
chair++;
V(mutex);
V(customer);//释放待理发信号
P(service);//等待被理发师服务
}else
{
V(mutex);
leave
}
}
Tony:
while(1){
P(customer);
V(service)//有客人来啦!开始营业
P(mutex);
chair--;//叫起一位客人,空出一个座位
V(mutex);
}
坐车问题
//假设有n个旅客和一辆汽车,旅客在汽车停靠的站点反复乘车,汽车一次可以乘坐C个旅客(C
//旅客能够上车和下车
//汽车能够载客、运行和卸客
//只有汽车处于载客状态后,旅客才可以上车
//只有C个旅客上车后,汽车才可以出发运行
//只有汽车处于卸客状态后,旅客才可以下车
//只有旅客都下车后,汽车才可以重新载客
semaphore load=0,unload=0,Full=0,Empty=0,mutex=1;
int count=0;
BUS:
while(1){
V(load);
P(Full);
出发;
V(unload);
P(Empty);
}
PEOPLE:
while(1){
P(load);
P(mutex);
count++;
if(count<n){
V(mutex);
V(load);
}else{
V(mutex);
V(Full);
}
坐车;
P(mutex);
P(unload);
count--;
if(count==0){
V(Empty);
}else{
V(unload);
}
V(mutex);
}
关于死锁错误的是:(多选)
A. 死锁预防是排除死锁的动态策略
B. 死锁避免是排除死锁的动态策略
C. 系统进入不安全状态必会产生死锁
D. 产生死锁后,系统一定处于不安全状态
答:A、C
死锁预防是排除死锁的静态策略,它使产生死锁的四个必要条件不能同时具备,从而对进程申请资源的活动加以限制,以保证死锁不会发生,A错误。死锁的避免是排除死锁的动态策略,它不限制进程有关资源的申请,而是对进程所发出的每一个申请资源命令加以动态地检查,并根据检查结果决定是否进行资源分配,B正确。系统进入不安全状态(四个死锁必要条件同时发生)也未必会产生死锁,产生死锁后系统一定处于不安全状态,C错误,D正确。
程序控制I/O
中断驱动方式
直接存储访问方式DMA
I/O通道控制设备
缓冲技术可以提高外设的利用率
缓冲池(buffer pool)
单缓冲(一个缓冲区)
双缓冲
把独享设备转变成具有共享特征的虚拟设备
提高设备利用率
在多道程序系统中,专门利用一道程序(SPOOLing程序)来完成对设备的I/O操作,无需使用外围I/O处理机
组成:扇面、磁道(柱面)、扇区、磁头
磁盘与操作系统启动:
磁盘调度算法
常见算法
考虑磁道距离+磁头移动方向
先来先服务:按照给出的访问顺序直接访问
最短寻道时间:每次寻道均寻找从当前磁道移动至目标磁道所需移动道数最短的磁道
扫描(SCAN)算法:在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,与电梯运行方式类似
SCAN算法对最近扫描过的区域不公平,因此,它在访问局部性方面不如前两种好
循环扫描算法:循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描
提高I/O速度的主要途径
廉价冗余磁盘阵列
利用冗余技术提高可靠性
利用并行提高性能
普通磁盘驱动器只能通过CRC(循环冗余校验)码提供简单的容错,RAID建立在每个磁盘驱动器的硬件容错功能之上,可提供更高的安全性
RIAD0 | RAID1 | RAID2 |
---|---|---|
无冗余校验功能,并行交叉存取提高I/O速度 | 镜像磁盘冗余阵列,读性能好,对应镜像盘同时读取;写性能由写速度最慢的盘决定,故写性能不一定好;有效容量仅50% | 采用海明码检错、纠错,数据位交叉写入磁盘,“按位条带化” |
RAID3 | RAID4 | RAID5 |
采用奇偶校验冗余的磁盘阵列,数据位交叉写入磁盘。将磁盘分组,采用字节级别的条带,读写要访问组中所有盘,每组中有一个盘作为校验盘。 | 数据块交叉,用一个校验盘,将数据按块交叉存储在多个磁盘上;使用较少的盘参与操作,以使磁盘阵列可以并行进行多个数据的磁盘操作 | 数据块交叉和分布的冗余校验,将数据和校验都分布在各个磁盘中,没有专门的奇偶校验去东区。 |
最少磁盘数量:
磁盘类型 | 最少磁盘数量 | 磁盘数量 |
---|---|---|
RAID0 | 2 | n |
RAID1 | 2 | n*2 |
0+1(组内条带化,组间镜像) | 4 | n*2 |
1+0(组内镜像,组间条带化) | 4 | n*2 |
2 | 7* | n + l o g 2 n n+log_{2}n n+log2n |
3 | 3 | n+1 |
4 | 3 | n+1 |
5 | 3 | n+1 |
6 | 4 | n+2 |
补充:
码距<=>海明距离,码距越大,纠错能力越强,但数据冗余也越大,编码效率低。
文件名.扩展名
提高检索效率、便于修改、降低文件存储代价
在存储介质上的存放方式,表示了一个文件在文件存储介质上的位置、链接和编目方法
连续结构——容易出现磁盘碎片,适合变化不大的文件;方便顺序存取和随机存取(有序)
索引结构
串联结构
空间利用率高,顺序存取效率高;
随机存取效率低,可靠性不强(指针出错);链接指针占用一定空间
在根目录下,每个用户对应一个目录,在用户目录下是该用户的文件,而不再有下级目录。(适用于多用户系统)
在较高的目录级,其目录表目为下一级目录名以及一个指向其目录的指针,在最后一级目录,这个指针指向文件的物理地址
特点:
目录的实现:
文件目录的查询:
便于共享的目录组织
文件的共享要求系统能提供一种方法:使存储空间内保存一份副本,而所有要共享该文件的用户可用相同的或不同的文件名来访问它
共享目录实例练习:
用户A有两个w文件 F 1 , F 2 , 用 户 B 有 三 个 文 件 F_{1},F_{2},用户B有三个文件 F1,F2,用户B有三个文件 F 1 , F 3 , F 5 F_{1},F_{3},F_{5} F1,F3,F5其中用户A的文件 F 1 F_{1} F1与用户B的文件 F 1 F_{1} F1不是同一个文件,用户B的文件 F 3 F_{3} F3和用户A的文件 F 2 F_{2} F2是同一个文件。
请针对以上需求,给出一种目录组织方案。画图辅助说明。
【分析】:
A − − − − F 1 A----F_{1} A−−−−F1与 B − − − − F 1 B----F_{1} B−−−−F1不是同一个文件,故各处于各自的文件目录下,映射向不同的文件物理地址即可;
是同一个文件的不同目录下的文件需通过同一个索引节点映射向同一个文件,针对进一步需求——A删除文件,仅删除自己目录下的文件/同时删去所有与A删除的文件相同的文件设置的计数器情况不同;
全局同步:count=1,任何目录下操作删去文件则count-1,系统负责删去文件,各目录下文件对应项删去
异步删去:count=共享该文件的目录数,任何目录下删去该文件,count-1,仅删去该目录下该文件对应项以及映射关系即可;当count=0时,系统负责删去文件
在采用索引的文件系统中,已知索引节点可设置为10个直接索引,1个一次间接索引,1个2次间接索引。文件块大小为s字节,文件块号为t字节。这个文件系统支持的最大文件是多大?
10个间接索引能索引10块数据
1个一次间接索引能够索引的数据块的数量为 s / t s/t s/t
一个二次间接索引能够索引的数据块数量为 ( s / t ) 2 (s/t)^{2} (s/t)2
故,文件最大为 ( 10 + s / t + ( s + t ) 2 ) ∗ s (10+s/t+(s+t)^{2})*s (10+s/t+(s+t)2)∗s
顺序执行
特征:顺序性、封闭性、可再现性
并发:设有两个活动a1和a2,如果在某一指定的时间t,无论a1和a2是在同一处理机上还是在不同的处理机上执行,只要a1和a2都处在各自的起点和终点之间的某一处,则称a1和a2是并发执行的——强调时间段
特征:
间断性:执行——暂停——执行
非封闭性:多个程序共享系统中的资源,程序间相互影响
不可再现性:在初始条件相同的情况下,程序的额执行结果依赖于执行的次序
并发程序的无关性是进程与时间无关的一个充分条件——Bernstein条件:
可并发当且仅当:
并行:强调时间点——两个程序,在同一时间度量下同时运行在不同的处理机上,则称这两个程序是并行执行的
并发可能是伪并行,也可能是真并行
进程控制的主要任务:创建、撤销进程、实现进程的状态转换——内核实现
进程控制的实现:原语*
进程的三种基本状态
进程控制块
系统为每个进程定义了一个数据结构:进程控制块PCB
作用:进程创建、撤销;进程的唯一标志;限制系统进程数目
内容:
组织方式:线性表、链接方式、索引方式
进程包含了两个概念:资源拥有者和可执行单元
现代操作系统将资源拥有者称为进程
可执行单元称为线程:CPU调度和分配的单位
引入线程的目的:
控制、协调多个进程对CPU的竞争
周转时间:作业从提交到完成所经历的时间
响应时间:用户输入一个请求到系统给出首次响应的时间
截止时间:开始截止时间和完成截止时间——实时系统
优先级
公平性
吞吐量:单位时间内所完成的作业数
把一个逻辑地址连续的程序分散存放到若干不连续的内存区域中,并保证程序的正确执行
不具备页面对换的分页存储管理方式,不支持虚拟存储器功能;在调度一个作业时,必须把它所有的页一次装到主存的页框内,如果当时页框数不足,则作业必须等待,系统再调度另外作业
页大小:与块大小一样是由硬件来决定的,通常为2 的幂
逻辑地址空间为 2 m 2^{m} 2m,且页大小为 2 n 2^{n} 2n,那么逻辑地址的高 m − n m-n m−n位表示页号,低n位表示页偏移
地址结构
地址 | 页号/块号 | 偏移 |
---|---|---|
逻辑地址 | 页号p | 页内偏移w |
物理地址 | 块号b | 块内偏移d |
页内偏移=块内偏移
页号和块号之间的联系?地址变化——页表查找
e.g 假设虚拟地址占8位,物理地址占10,每个页面的大小是64Bytes。问:
解答
将页表再进行分页,离散地将各个页表页面存放在不同的物理块中,同时再建立一张外部页表用以记录页表页面对应的物理块号(页表的页表)
正在运行的进程,必须把外部页表(页表的页表)调入内存,而动态调入内部页表。只将当前所需的一些内层页表装入内存,其余部分根据需要再陆续调入
逻辑地址:
页表页面号 | 页号 | 页内地址 |
---|
e.g 对于32位地址空间,页面大小为4K,如每个页表项占4个字节,则页表需占 4 M B 4MB 4MB空间,则页表页面号:10位,页号:10位,页内地址:12位
地址变换:
外部页表寄存器存放外部页表始址
与 页 表 页 面 号 × 页 表 项 大 小 页表页面号\times页表项大小 页表页面号×页表项大小相加得到外部页表中对应位置
取外部页表项(存放对应的第二级页表始址)与 页 号 × 页 表 项 大 小 页号\times页表项大小 页号×页表项大小得到对应第二级页表的页表项,取出数据(物理页框号)
与页内地址拼接得到物理地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bUVf38I3-1638973441538)(/Users/cleopatra/Library/Application Support/typora-user-images/image-20211116162559370.png)]
e.g 页面的大小为8 Bytes,物理内存为128 Bytes,虚拟地址空间为512 Bytes。假设每个页表项占一个字节,设计一个多级页表,并回答如何查询虚拟地址 0 x 3 A 0x3A 0x3A对应的物理地址
解答
页内偏移量: 8 = 2 3 8=2^{3} 8=23,3位
物理页框号: 128 / 8 = 16 = 2 4 128/8=16=2^{4} 128/8=16=24,4位
虚拟页号: 512 / 8 = 64 = 2 6 512/8=64=2^{6} 512/8=64=26,6位,逻辑地址 512 = 2 9 512=2^{9} 512=29,9位
页表项1 Bytes——一个页面存储8个页表项,一个页表最多管理8个页面——需要三位表示页号
一级页号 | 二级页号:3位 | 页内偏移:3位 |
---|
推出一级页号占3位
0 x 3 A = 0 b 000 111 010 0x3A=0b000\ 111\ 010 0x3A=0b000 111 010推出一级页号为0,二级页号为7,页内偏移为2
查询步骤:
多级页表
特殊的高速缓冲存储器Cache,内容是页表中的一部分或全部内容
CPU产生逻辑地址的页号,首先在快表中寻找,若命中就找出其中对应的物理块;若未命中,再到页表中找到其对应的物理块,并将相应的页表项复制到快表。若快表中内容满,则按某种算法淘汰某些页
快表一般包含
valid有效位 | Tag(virtual page number)虚拟页号 | page frame number物理页框号 |
---|
有效访问时间
假如查找TLB需要20ns,访问内存需要100ns,TLB命中率为80%
哈希页表、反置页表