读书笔记-现代操作系统-7多媒体操作系统-7.6多媒体文件系统泛型7.7文件存放

来源:互联网 发布:珍珠丁子裤淘宝买家秀 编辑:程序博客网 时间:2024/05/16 01:35

7.6 多媒体文件系统泛型

多媒体系统和传统的文件系统有很大的不同,采用的是类似VCR工作方式一样的拉取型服务器(pull server):
用户进程发出start系统调用,指定要读取的文件和其他各种参数,然后用户进程以帧进来的速率对他们进行处理。直到用户发出stop停止命令停止数据退给用户。

7.6.1 VCR控制功能

视频服务通常也需要实现VCR控制功能,包括暂停、快进和倒带。

暂停:用户发送一个消息给视频服务器,告诉他停止,然后视频服务器记住当前帧就可以了。
但是这中间有一个问题是,为了保证服务的质量,服务器应该为每个流出的数据保留诸如磁盘带宽和内存缓冲区等资源。如何判断合适需要丢弃资源合适保留资源是一个问题

快进和快退:
通常来说如果不存在压缩的情况下只要以每10帧显示一帧的方式来实现快进或者倒退就可以了。但是由于压缩的问题,每一帧的大小是不不同的,无法进行随机访问。通常只能建立索引。
但是通常来说可以采用另一种方案在服务器端保存另一文件。它以10帧为一帧对图像进行抽样,这样只要播放这个文件看起来就好像是以10帧速率在前进一样。
这种方案是一种更为通用的方案。但是还需要注意几个问题:
1. 需要额外的磁盘块来存放额外的文件。
2. 快进和倒退只能以固定速率进行
3. 在常规文件和快进快退文件之间需要额外的算法。

7.6.2 近似点播

视频点播遇到的问题是用户可能在任意时刻点播电影,因此即使有很多用户同时观看一部电影,但是由于起始的时间不同,可能需要为每个用户提供一个专门的进程服务这大大提高了服务器的压力。
一个常用的方法是对电影进行分流。比如每5分钟送出去一个流,这样就可以重用数据流。而代价是稍微的调整了用户接受服务的时间,原理类似于公交车的运行情况。

7.6.3 具有VCR功能的近似视频点播

与近似点播的服务相同,但是需要增加一些内容:
要求每个客户机在本地缓冲前ΔT时间已经即将来临的ΔT时间的内容。当然缓冲前ΔT时间的内容是容易的,只有将显示之后的内容保存下来即可,但是缓冲即将来临的ΔT时间的内容就比较麻烦了。但是如果客户机又一次读取两个数据流的能力也可以实现(这句话没有理解清楚)

比如现在的播放点(play point)70到80分钟内的内部被缓冲。如果快进或者快退的内容在这个范围内则只有播放这个范围内的内容,然后将这个根据播放点缓冲新的内容就可以了。

如果新的播放点超出了缓冲的内容,则需要开启一个私有的进程从新的播放点缓冲数据,并且同样根据新的缓冲点来开启新的缓冲区,在实际中可以对播放速率稍加调整使得播放的时间逐渐迁移到最近的数据流中,以减小数据率。

7.7 文件存放

多媒体文件非常庞大,通常只写一次且读取多次,并且倾向于被顺序访问。它们的回访还必须满足严格的服务质量标准。

7.7.1 在单个磁盘上存放文件

  1. 将文件单独顺序存放
  2. 将同一帧的视频音轨和文本都放在一起。

需要说明的是在具有多个并发的视频服务器上。将文件连续的放在一起就失去了它原本的意义,因为需要同时发送多个视频的数据流,因此仍然需要不停的切换轨道。

7.7.2 两个代替的文件组织策略

  • 小块模型

    1. 磁盘块的大小比帧的大小要小的多。每部电影给一个索引,这是一个数据结构,每一帧有一个帧索引项,指向帧的开始。每一帧本身是一串连续的块,包含该帧的所有视频、音频和文本。
    2. 每次操作读取一帧,使用简单的双缓冲就可以工作的很好。
    3. 对于磁盘性能,单独读入小的帧效率是很低的,而且很难将单独的帧分解储存在多个驱动器上。
    4. 也称为恒定时间长度(constant time length)
    5. 可以通过只显示I帧实现快进。即使是通过额外的文件实现10被抽样后实现快速抽样,小块方式也更便于1倍帧和10倍帧的文件的映射。
  • 大块模型(剩余空闲)

    1. 磁盘块的大小远远大于块,并且在每一块中放入多个帧,当下一帧填不满块的时候,保留空余。这样产生了很多空闲空间,但是达到了最大的性能。然后建立一个块索引。可能还有额外的信息需要包含,比如哪一帧属于哪一块。
    2. 块的所有比帧索引小的多
    3. 每个缓冲区必须足够大已装得下最大可能的I帧。虽然双缓冲区也可以用于大块情形,但是通常不这样做而是使用一个循环传输缓冲区,当缓冲区内容小于一定阈值时读入一个新的帧。
    4. 对于磁盘性能,大块方式可以全速的运转磁盘,这一点很重要,另外也可以将块分解装到多个驱动器上。
    5. 也称为很定数据长度(constant data length)
  • 大块模型(填充空闲)

    1. 磁盘块的大小远远大于块,并且在每一块中放入多个帧,当下一帧填不满块的时候,依然用帧填充块然后将帧分裂开使其跨磁盘块。这样做降低了性能但是提高了使用空间率。然后建立一个块索引。可能还有额外的信息需要包含,比如哪一帧属于哪一块。
    2. 其余同上

如何权衡:

  1. 帧索引:电影在播放时使用大量RAM,磁盘浪费小
  2. 块索引(剩余空间):RAM用量低,磁盘浪费大
  3. 块索引(填充空闲):RAM用量低,无磁盘浪费,需要额外寻道

7.7.3 近似视频点播的文件存放

根据近似视频点播的播放方式这样的不同的磁盘文件存放方式也有不同的效果。将每个视频流的文件按照顺序依次排列可以依次读取得到全部的需要发送的全部数据流。这样的方式显然是理想的
这里写图片描述
简单的缓冲策略就是双缓冲,唯一需要靠的是双缓冲的大小。
要求缓冲区大于数据流数量*最大I帧大小显然是过量的,通常可以要求缓冲区足够装下第二大磁道可能更为明智。同时存在的数据流越多统计意义也更强。

7.7.4 在单个磁盘上存放多个文件

之前考虑的是单个电影的情况。如果考虑多个电影的情况。通常来说多部电影的命中率存在一定规律。通常对于N部电影,第n部电影的命中率通常是C/N其中N是n,C是一个常数。满足

C/1+C/2+C/3+...+C/N=1

这样的条件。
通常来说视频服务器上的文件存放因此满足管风琴分布。这样在实际中可以保留将磁头保持在磁盘的中央,以减小移动的时间。
这里写图片描述

7.7.5 在多个磁盘上存放文件

当然可以采用RAIDD的方式。但是这样RAID控制器有时会成为高速处理的瓶颈。关于RAID的方式需要额外的讨论

  1. 无条带方式:每个文件单独放在一个磁盘上。顺序存放
  2. 所有文件采用相同的条带模式:每一部电影在多块次上成条带。因为每个磁盘都从第一个磁盘开始,负载不均衡
  3. 交错的条带模式,如c所示。随机的条带模式,如d所示。平衡了负载。

当然以上都是针对帧是相同大小的,实际上真是不同的。解决这一问题有两个方案

  1. 按帧分条带
  2. 按块分条带

最后一个问题是在多少磁盘上分条带

  1. 宽条带:如果在极大的范围内分条带,虽然可以得到很好地负载平衡,但是如果一个磁盘坏了则导致无法播放。
  2. 窄条带:有相反的情况。通常可能会遭遇到热点问题。

因此需要一定的平衡机制。

1 0