存储篇(2)

本文详细介绍了SCSI与ATA两种主流磁盘接口技术的特点与工作机制,包括它们的寻址机制、传输层协议及磁盘控制器的作用。此外,还深入探讨了SCSI总线的仲裁、选择阶段以及数据传输过程。
磁盘接口技术
  • 用于ATA指令系统的IDE接口
  • 用于ATA指令系统的SATA接口
  • 用于SCSI指令系统的并行SCSI接口
  • 用于SCSI指令系统的串行SCSI接口
  • 用于SCSI指令系统的IBM专用串行SCSI接口
  • 用于SCSI指令系统并承载FabreChannel协议的串行FC接口

scsi和ata是目前现行的两大主机和外设通信的协议规范,它们有各自的物理接口定义。对于ata协议对应就是ide接口,scsi协议对应的是scsi接口。scsi接口可以有8个到16个scsi设备接入到一个scsi通道上,一般接入的机器必须拥有scsi控制卡。scsi控制卡上一个相当于cpu的芯片,它对scsi设备进行控制,能处理大部分的工作,减少cpu的负担。

scsi协议

对于一个完整的数据传输协议,必然是能够跨越osi7层协议。

  1. 链路层,scsi协议中利用crc校验码来检验每个指令和数据帧的完整性。
  2. 网络层,一条scsi总线上最多允许接入16个设备,其中scsi控制器占用一个节点,scsi id恒为7,在这16个id中,7具有最高的优先级,当7需要发起传输,其他id需要让出总线的使用权。有总线的地方就会涉及到总线仲裁。一般普通主板不会有scsi控制器,要想接入scsi磁盘,需要加入scsi卡,scsi卡一边接入主机pci总线,另一端用一个scsi控制器接入scsi总线,卡上有主机的cpu,通过执行rom中的代码控制整个scsi卡的工作,scsi卡将scsi总线上的所有设备经过pci总线传递给内存中的scsi卡的驱动程序,这样cpu就会知道scsi总线上的所有设备。当scsi卡不止一个scsi控制器,则是一个多通道的scsi卡。
scsi寻址机制和几个阶段

(1) 空闲阶段
总线一开始处于一种空闲状态,没有节点发起通信,总线空闲时,bsy和sel这两条控制信号线的状态都是false。
(2) 仲裁阶段
节点通过8条或者16条数据总线上提升主机对应的那条线的电位申请总线的使用权,提升主机id对应线路电位同时提升bsy电位,但多个节点发起仲裁,其根据总线上的信号情况,如果非高优先级则撤销自身信号,如果某节点仲裁获胜,则获取总线的使用权,然后将sel信号线提升电位。scsi总线的寻址方式按控制器-通道-scsi id-lun id来寻址。
(3) 选择阶段 仲裁阶段完成后,获胜节点会将bsy和sel信号线置位,然后将8到16条数据总线上对应主机id的线路和目标id线路电位提升,这样目的节点可以感知到自己线路有信号,做好接受准备。 (一般从总线上一个硬盘复制数据到另外一个硬盘的过程是cpu将数据发送给控制器,控制器再复制到内存,经过cpu运算后再次发送给控制器,控制器再写入另外一块硬盘。因为对于硬盘而已,本身没有文件这个概念,所以必须返回到操作系统层面才可以感知)

scsi传输层

scsi传输层是提供端到端的保障机制,这个是保障通信双方。
发送方获取总线仲裁后,会发送一个scsi command写的命令帧,其中包含了lun以及lba地址段,接收端接受后,就知道对方准备发送数据,接收方准备好后,向发起方发送一个xfer_rdy帧,表示准备好,随机可以发送。
发送方收到xfer_RDY帧后,立即发送数据,每发送一帧,接收方就回应一个xfer_rdy,最后接收方发送一个resonse帧表示这条scsi命令执行完毕。

磁盘控制器

磁盘的接口包括物理接口,就是磁盘要接入磁盘控制器所需要的接口,除了物理接口规范外,还定义一套指令系统,指令集定义怎么向磁盘发送数据和读取数据以及控制其他行为,比如SCSI和ATA指令。指令的内容是由运行在操作系统内核的驱动程序生产,而物理的连接则是磁盘控制器负责的,磁盘控制器负责底层总线初始化,仲裁等过程以及指令传输过程,指令传输状态机,重传,ack确认等,将这些太过底层的机制过滤后,向驱动程序提供一个简洁的接口。

磁盘驱动器

磁盘控制器和磁盘驱动器是两个不同的东西,对于cpu而言,其操作控制器就可以,cpu通过运行磁盘控制器的驱动程序,生产指令发送给磁盘控制器,磁盘控制器收到这些cdb后,会做一定程度的翻译映射工作,生成最底层磁盘可接受的纯scsi指令,然后通过底层的物理操作,总线仲裁,编码,再在线缆上将指令传递给对应的磁盘。

磁盘控制器的驱动程序

机器刚通电,还没有载入操作系统,那么操作系统是如何载入呢,所以在系统bios中存放初始化系统所需要的基本代码,bios初始化中有一步就是去执行磁盘控制器的ooptional rom,该rom包含了该控制器最原始,可在主bios下执行的驱动程序,主bios去载入并执行rom,从而加载了驱动程序,并可以与控制器交互。最后bios通过驱动程序使得cpu可以发送对应的读指令,提取磁盘0磁道第一个扇区的代码并载入到内存中,从而加载os。

在 Java 中存储博客可以采用以下几种方式: 1. 使用 String 类型:可以将博客的内容以字符串的形式存储在内存中,这种方式简单方便,但是对于较长的博客可能会占用大量的内存。 2. 使用文件:可以将博客的内容存储到文件中,这种方式可以有效地减少内存占用,但是需要考虑文件的读写性能和安全性等问题。 3. 使用数据库:可以将博客的内容存储到数据库中,这种方式可以方便地进行数据的管理和查询,但是需要考虑数据库的选型、性能和安全性等问题。 下面是一个使用文件存储博客的示例代码: ```java import java.io.File; import java.io.FileWriter; import java.io.IOException; public class BlogStorage { public static void saveBlogToFile(String title, String content) throws IOException { // 构造文件名 String fileName = title.replaceAll("\\s+", "_") + ".txt"; // 创建文件对象 File file = new File(fileName); // 将博客内容写入文件 try (FileWriter writer = new FileWriter(file)) { writer.write(content); } } public static void main(String[] args) throws IOException { String title = "Java 存储博客示例"; String content = "在 Java 中存储博客可以采用以下几种方式:\n" + "1. 使用 String 类型\n" + "2. 使用文件\n" + "3. 使用数据库\n" + "本示例演示了如何将博客内容存储到文件中。\n"; saveBlogToFile(title, content); } } ``` 这个示例代码中,我们将博客的标题和内容作为参数传入 saveBlogToFile() 方法中,方法内部会将博客内容写入到以标题为文件名的文件中。实际应用中,需要根据具体需求,选择合适的存储方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值