当前位置: 首页 > news >正文

网站建设开发技术天津展板模板网站

网站建设开发技术天津,展板模板网站,什么网站可以找试卷做,福州网络科技有限公司SCSI子系统概况 SCSI#xff08;Small Computer System Interface#xff09;子系统是 Linux 中的一个模块化框架#xff0c;用于提供与存储设备的通用接口。通过 SCSI 子系统#xff0c;可以支持不同类型的存储协议#xff08;如 UFS、SATA、SAS#xff09;#xff0c…SCSI子系统概况 SCSISmall Computer System Interface子系统是 Linux 中的一个模块化框架用于提供与存储设备的通用接口。通过 SCSI 子系统可以支持不同类型的存储协议如 UFS、SATA、SAS使操作系统能够通过相同的命令集与这些设备交互。 驱动的分工 UFS 驱动负责与 UFS 主控直接交互包括初始化、配置和电源管理。UFS 驱动会解析设备树DTS中的信息启动并配置硬件使其进入工作状态。SCSI 子系统提供一个上层的抽象层将对存储设备的访问抽象为标准 SCSI 命令如读、写、格式化。应用程序和文件系统通过 SCSI 子系统向存储设备发出 I/O 请求而 SCSI 子系统负责将请求传递给对应的驱动。 初始化阶段 UFS 驱动注册到SCSI系统 UFS驱动会等待调用调用的话他就是接收或者发送通用SCSI的命令处理这些操作就需要一个主机所以首先scsi_host_alloc 会分配一个主机适配器scsi host。 代码在**/** drivers / scsi / hosts.cscsi_add_host 注册主机适配器使得SCSI 子系统得知有一个新的 SCSI 主机适配器即 UFS 设备已经上线并准备接受命令。 设备扫描和初始化 代码在drivers / scsi / scsi_scan.c一旦确认设备在线SCSI 子系统会为每个检测到的 UFS 存储设备分配一个 struct scsi_device 结构体。这一结构体包含设备的基本信息和状态使系统可以通过这个结构体与 UFS 设备进行读写操作。发现到 UFS 设备后SCSI 子系统会为其分配 SCSI 设备结构struct scsi_device并准备好用于与操作系统和文件系统交互抽象成操作系统或文件系统能够交互的设备。 void scsi_scan_host(struct Scsi_Host *shost) {struct async_scan_data *data;if (strncmp(scsi_scan_type, none, 4) 0 ||strncmp(scsi_scan_type, manual, 6) 0)return;if (scsi_autopm_get_host(shost) 0)return;data scsi_prep_async_scan(shost);if (!data) {do_scsi_scan_host(shost);scsi_autopm_put_host(shost);return;}/* register with the async subsystem so wait_for_device_probe()* will flush this work*/async_schedule(do_scan_async, data);/* scsi_autopm_put_host(shost) is called in scsi_finish_async_scan() */ } EXPORT_SYMBOL(scsi_scan_host);文件IO的处理流程 系统发起读写请求时SCSI子系统和UFS 驱动协同合作将请求传递到UFS 设备。 请求创建系统通过读写命令的系统调用来调用虚拟文件系统虚拟文件进一步调用具体的文件系统例如F2FS, F2FS的读写操作进一步传达到SCSI 子系统SCSI最终调用 UFS子系统所以请求在SCSI这块生成SCSI命令描述块。 请求处理SCSI 子系统封装命令描述块为SCSI命令并调用ufshcd_queuecommand函数 static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) {// 获取 UFS 主控Host Bus Adapter, HBA的私有数据struct ufs_hba *hba shost_priv(host);// 从 SCSI 命令提取请求的 tag用于定位 UFS 请求块LUN/队列标识int tag scsi_cmd_to_rq(cmd)-tag;struct ufshcd_lrb *lrbp;int err 0;struct ufs_hw_queue *hwq NULL;// 检查 UFS 主控当前的状态switch (hba-ufshcd_state) {case UFSHCD_STATE_OPERATIONAL:// 如果 UFS 处于正常操作状态则继续处理命令break;case UFSHCD_STATE_EH_SCHEDULED_NON_FATAL:/** SCSI 错误处理程序可能在 UFS 错误处理中调用此命令队列函数。* 当错误处理中状态从 RESET 转到 EH_SCHEDULED_NON_FATAL 时防止* 在此情况下发出新的请求。*/if (ufshcd_eh_in_progress(hba)) {err SCSI_MLQUEUE_HOST_BUSY; // 主机忙碌暂时无法处理命令goto out;}break;case UFSHCD_STATE_EH_SCHEDULED_FATAL:/** 在错误处理准备阶段会调用 pm_runtime_get_sync()。* 若从 HBA 的电源管理操作发送 SCSI 命令如 SSU 命令* 如果 UFS 状态不佳而允许命令通过可能导致超时阻塞。* 因此直接返回错误以便错误处理程序恢复 PM 错误。*/if (hba-pm_op_in_progress) {hba-force_reset true;set_host_byte(cmd, DID_BAD_TARGET); // 设置命令目标状态为 BADscsi_done(cmd); // 完成命令goto out;}fallthrough; // 继续往下执行到 RESETcase UFSHCD_STATE_RESET:err SCSI_MLQUEUE_HOST_BUSY; // 主机忙碌goto out;case UFSHCD_STATE_ERROR:set_host_byte(cmd, DID_ERROR); // 设置错误状态scsi_done(cmd); // 结束命令goto out;}// 重置请求的中止计数hba-req_abort_count 0;// 保持 UFS 资源ufshcd_hold(hba);// 初始化逻辑请求块Logical Request Block, LRB信息lrbp hba-lrb[tag];lrbp-cmd cmd; // 设置 SCSI 命令lrbp-task_tag tag; // 任务标识lrbp-lun ufshcd_scsi_to_upiu_lun(cmd-device-lun); // 逻辑单元号转换lrbp-intr_cmd !ufshcd_is_intr_aggr_allowed(hba); // 检查是否允许中断聚合// 准备加密信息ufshcd_prepare_lrbp_crypto(scsi_cmd_to_rq(cmd), lrbp);// 标记该请求不跳过中止lrbp-req_abort_skip false;// 构建 SCSI UPIUUFS 协议单元数据包ufshcd_comp_scsi_upiu(hba, lrbp);// 映射 Scatter-Gather 列表准备传输数据err ufshcd_map_sg(hba, lrbp);if (err) {// 如果映射失败释放 UFS 资源并退出ufshcd_release(hba);goto out;}// 如果启用了多队列 (MCQ)则将请求映射到硬件队列if (is_mcq_enabled(hba))hwq ufshcd_mcq_req_to_hwq(hba, scsi_cmd_to_rq(cmd));// 发送 UFS 命令执行传输ufshcd_send_command(hba, tag, hwq);out:// 如果需要触发错误处理程序进行调度if (ufs_trigger_eh(hba)) {unsigned long flags;// 锁定主机的自旋锁以安全调度错误处理程序spin_lock_irqsave(hba-host-host_lock, flags);ufshcd_schedule_eh_work(hba); // 调度错误处理工作spin_unlock_irqrestore(hba-host-host_lock, flags);}// 返回错误代码如果有return err; }主控与UFS驱动的交互 传入的SCSI 命令会写入到 UFS 主控寄存器中。存储命令后进一步执行命令与存储介质通信执行具体的读写操作。**状态反馈**操作完成时UFS 主控会通过中断或者状态寄存器通知UFS操作结果。 数据返回和错误处理 数据返回如果命令执行成功数据会通过UFS 主控返回 ufs驱动驱动则将数据放到缓冲区通知SCSI 子系统完成。 **错误处理**设备没有空闲空间UFS 报告错误状态SCSI子系统重新执行或终止请求。 SCSI 子系统传递到上层 其中的过程应该是 块设备—文件系统—**应用程序**类似U型锁一样往复从底层到上层。 详细文件构造过程 用户空间open()** 系统调用** 在用户空间应用程序调用 open(filename, O_CREAT | O_RDWR, 0644)。这里的 O_CREAT 标志告诉系统要创建文件。此调用通过 glibc 传递到内核进入 VFS 层处理。 VFS 层调用 open() 方法 VFS 层解析路径并在目标目录中检查文件是否存在 如果文件不存在则调用文件系统特定的 create 方法如 EXT4 文件系统的 ext4_create来创建文件。如果文件系统支持 journaling如 EXT4会在 journal 中记录创建文件的元数据操作。 文件系统驱动层更新元数据 具体文件系统驱动如 EXT4负责管理和更新文件元数据包括文件的 inode、目录项等 分配 inode调用 inode 分配函数分配一个新的 inode。更新目录项在父目录的目录表中添加一个新的条目指向新创建的文件 inode。提交元数据更新如果文件系统使用 journaling则会将元数据变更提交到 journal 中并在适当时写入磁盘。 块层分配并写入数据块 文件系统驱动调用块层将分配给文件的 inode 及数据块标记为已使用。然后数据写入请求被传递到块层由块设备驱动负责分配块并将数据写入存储设备。 SCSI 子系统封装请求并调度 块层的请求被传递到 SCSI 子系统。在这里块 I/O 请求会被封装为 SCSI 命令。SCSI 子系统负责 命令封装将 I/O 请求转换成合适的 SCSI 命令如 WRITE。命令调度根据 I/O 调度算法如 CFQ、Deadline 等安排命令的执行顺序。错误处理如果命令执行失败SCSI 子系统可以重试请求或返回错误。 UFS 驱动**处理 SCSI 命令 SCSI 子系统将封装好的 SCSI 命令传递给 UFS 驱动层。UFS 驱动会执行以下步骤 解析命令UFS 驱动解析 SCSI 命令将其转换为 UFS 协议UPIU命令。发送命令UFS 驱动将 UPIU 命令通过寄存器写入 UFS 主控Host Controller启动数据传输。等待传输完成UFS 主控完成操作后会通过中断通知 UFS 驱动。状态返回UFS 驱动解析状态并将结果返回给 SCSI 子系统。 UFS 存储设备执行写入操作 最终UFS 主控接收并处理 UPIU 命令UFS 存储设备执行数据写入操作并返回状态信息成功或错误将结果返回给 UFS 驱动。 返回结果 UFS 驱动将操作结果返回给 SCSI 子系统。SCSI 子系统通知块层请求已完成或者进行错误重试。块层通知文件系统写入成功文件系统驱动层更新状态。VFS 层完成文件创建过程将成功结果返回给用户空间应用。 小结 我们再回顾一下创建文件的整体流程吧从用户态到硬件层起始并没有我们想象的哪么简单需要涉及到用户端—系统调用open or write—文件系统vfs)—实际文件系统f2fs_open or f2fs_write—块设备处理-封装IO请求封装 IO—SCSI— UFS ,真的再一次感受代码改变世界。
http://www.hkea.cn/news/14415113/

相关文章:

  • 网站制作三站万站霸屏
  • 上海域名icp海网站建设龙岗网站建设价位
  • it运维外包公司龙岗网站seo
  • 网站页面设计具体步骤2345游戏盒子
  • pw域名网站北京装修公司口碑
  • 上海市建设工程信息报送网站网站建设分金手指专业五
  • 网站需求分析的重要系统开发需要的技术
  • 平邑县建设局网站wordpress 微信 论坛
  • 如何做好网站宣传wordpress自动添加关键字
  • 小程序开发兼职的小知识seo整站优化的思路及步骤
  • 企业做网站有什么作用网络推广公司
  • 网站建设实验分析总结哈尔滨百度网站排名
  • 彩票网站开发与建设影视剪辑培训班
  • 建站wordpress 基础免费的seo教程
  • 银行的网站怎么做洛阳恒凯做的网站有哪些
  • 网站建设中的安全问题wordpress模板编辑
  • 建设部投诉网站信息流优化师是干什么的
  • 宝安公司网站制作哪家公司好烟台网站设计单位
  • 电子商务网站建设服务小程序appid格式
  • 做网站前端上海企业招聘信息
  • 网站图片翻页怎么做北京建设银行网站首页
  • 网站企业制作做一个代驾小程序要多少钱
  • 网站开发和游戏开发移动网站建设厂家
  • 跨境电商网站建设成本网络规划设计师教程第二版电子书
  • 秀山微信网站建设免费咨询皮肤医生
  • 网站体验步骤wordpress 自定义注册
  • 如何在自己网站添加链接哪里有做网站服务商
  • 做网站可以参考的网站深圳网站设计小程序
  • 美食网站首页怎么做怎么做网页设计的页面
  • 做网站图片大小不合适怎么调西域电商平台官网