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

汽车门户网站源码网站营销网站营销推广

汽车门户网站源码,网站营销网站营销推广,如何评价一个网站做的是否好,视频制作网站推荐对于 ext4 文件系统,最后调用的是 ext4_file_write_iter,它将 I/O 的调用分成两种情况: 第一是直接 I/O。最终我们调用的是 generic_file_direct_write,这里调用的是 mapping->a_ops->direct_IO,实际调用的是 e…

对于 ext4 文件系统,最后调用的是 ext4_file_write_iter,它将 I/O 的调用分成两种情况:

第一是直接 I/O。最终我们调用的是 generic_file_direct_write,这里调用的是 mapping->a_ops->direct_IO,实际调用的是 ext4_direct_IO,往设备层写入数据。

第二种是缓存 I/O。最终我们会将数据从应用拷贝到内存缓存中,但是这个时候,并不执行真正的 I/O 操作。它们只将整个页或其中部分标记为脏。写操作由一个 timer 触发,那个时候,才调用 wb_workfn 往硬盘写入页面。

接下来的调用链为:wb_workfn->wb_do_writeback->wb_writeback->writeback_sb_inodes->__writeback_single_inode->do_writepages。在 do_writepages 中,我们要调用 mapping->a_ops->writepages,但实际调用的是 ext4_writepages,往设备层写入数据。

do_direct_IO 里面有两层循环,第一层循环是依次处理这次要写入的所有块。对于每一块,取出对应的内存中的页 page,在这一块中,有写入的起始地址 from 和终止地址 to,所以,第二层循环就是依次处理 from 到 to 的数据,调用 submit_page_section,提交到块设备层进行写入。

电梯算法有很多种类型,定义为 elevator_type。

  • struct elevator_type elevator_noopNoop 调度算法是最简单的 IO 调度算法,它将 IO 请求放入到一个 FIFO 队列中,然后逐个执行这些 IO 请求。

Noop 调度算法是最简单的 IO 调度算法,它将 IO 请求放入到一个 FIFO 队列中,然后逐个执行这些 IO 请求。

  • struct elevator_type iosched_deadline

Deadline 算法要保证每个 IO 请求在一定的时间内一定要被服务到,以此来避免某个请求饥饿。为了完成这个目标,算法中引入了两类队列,一类队列用来对请求按起始扇区序号进行排序,通过红黑树来组织,我们称为 sort_list,按照此队列传输性能会比较高;另一类队列对请求按它们的生成时间进行排序,由链表来组织,称为 fifo_list,并且每一个请求都有一个期限值。

  • struct elevator_type iosched_cfq

又看到了熟悉的 CFQ 完全公平调度算法。所有的请求会在多个队列中排序。同一个进程的请求,总是在同一队列中处理。时间片会分配到每个队列,通过轮询算法,我们保证了 I/O 带宽,以公平的方式,在不同队列之间进行共享。

elevator_init 中会根据名称来指定电梯算法,如果没有选择,那就默认使用 iosched_cfq。

我们用两块硬盘组成 RAID,两个 RAID 盘组成 LVM,然后我们就可以在 LVM 上创建一个块设备给用户用,我们称接近用户的块设备为高层次的块设备,接近底层的块设备为低层次(lower)的块设备。这样,generic_make_request 把 I/O 请求发送给高层次的块设备的时候,会调用高层块设备的 make_request_fn,高层块设备又要调用 generic_make_request,将请求发送给低层次的块设备。虽然块设备的层次不会太多,但是对于代码 generic_make_request 来讲,这可是递归的调用,一不小心,就会递归过深,无法正常退出,而且内核栈的大小又非常有限,所以要比较小心。

对于块设备的 I/O 操作分为两种,一种是直接 I/O,另一种是缓存 I/O。无论是哪种 I/O,最终都会调用 submit_bio 提交块设备 I/O 请求。

对于每一种块设备,都有一个 gendisk 表示这个设备,它有一个请求队列,这个队列是一系列的 request 对象。每个 request 对象里面包含多个 BIO 对象,指向 page cache。所谓的写入块设备,I/O 就是将 page cache 里面的数据写入硬盘。

对于请求队列来讲,还有两个函数,一个函数叫 make_request_fn 函数,用于将请求放入队列。submit_bio 会调用 generic_make_request,然后调用这个函数。

另一个函数往往在设备驱动程序里实现,我们叫 request_fn 函数,它用于从队列里面取出请求来,写入外部设备。

此文章为11月Day15学习笔记,内容来源于极客时间《趣谈Linux操作系统》,推荐该课程。

http://www.zhongyajixie.com/news/48001.html

相关文章:

  • 公众号编辑器哪个好青岛建站seo公司
  • hibernate适合网站开发吗百度快速排名软件下载
  • wordpress 卡通插件智能优化网站
  • 可以做网页的网站chatgpt 网址
  • 在线生成app免费seo网络推广员招聘
  • 搭建什么网站好长春seo优化
  • 如何建设电商网站商品标题关键词优化
  • 做任务网站建设新产品市场推广方案
  • 手机网站定制开发费用网站的推广方案的内容有哪些
  • 我的网站 学校 power by dedecms交易链接
  • 大岭山镇做网站2023网站seo
  • 做婚恋网站挣钱吗91
  • 提供手机网站建设哪家好网站页面优化内容包括哪些
  • WordPress分页加载更多ajax长春seo排名
  • 平台网站开发是什么意思流量购买网站
  • 成都专业网站建设价格低手游代理平台哪个好
  • wordpress建站知乎浙江网络科技有限公司
  • 做网站遇到的问题推特最新消息今天
  • wordpress一键浙江关键词优化
  • 品牌商品怎么做防伪网站孔宇seo
  • 莆田网站关键词优化整合营销什么意思
  • 广州什么地方好玩的景点推荐seo运营工作内容
  • 做网站需要了解什么百度主页入口
  • ps做的网站保存不了jpg建立网站需要什么
  • 网上做设计的网站有哪些百度推广开户免费
  • 西安建设网站排名下载百度地图2022最新版官方
  • 网站建设成本分析市场调研报告500字
  • 网站开发设计课程深圳龙岗区布吉街道
  • 咸阳网站推广哪有培训seo
  • 在线黑科技网站百度搜索引擎优化详解