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

网站搭建平台源码郑州网站顾问

网站搭建平台源码,郑州网站顾问,我的网站怎么做,用php做网站要用构架吗文件系统的读写,其实就是调用系统函数 read 和 write。下面的代码就是 read 和 write 的系统调用,在内核里面的定义。 SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count) {struct fd f fdget_pos(fd); ......loff_t pos f…

文件系统的读写,其实就是调用系统函数 read 和 write。下面的代码就是 read 和 write 的系统调用,在内核里面的定义。

SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)
{struct fd f = fdget_pos(fd);
......loff_t pos = file_pos_read(f.file);ret = vfs_read(f.file, buf, count, &pos);
......
}SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf,size_t, count)
{struct fd f = fdget_pos(fd);
......loff_t pos = file_pos_read(f.file);ret = vfs_write(f.file, buf, count, &pos);
......
}

对于 read 来讲,里面调用 vfs_read->__vfs_read。对于 write 来讲,里面调用 vfs_write->__vfs_write。下面是 __vfs_read 和 __vfs_write 的代码。

ssize_t __vfs_read(struct file *file, char __user *buf, size_t count,loff_t *pos)
{if (file->f_op->read)return file->f_op->read(file, buf, count, pos);else if (file->f_op->read_iter)return new_sync_read(file, buf, count, pos);elsereturn -EINVAL;
}ssize_t __vfs_write(struct file *file, const char __user *p, size_t count,loff_t *pos)
{if (file->f_op->write)return file->f_op->write(file, p, count, pos);else if (file->f_op->write_iter)return new_sync_write(file, p, count, pos);elsereturn -EINVAL;
}

缓存其实就是内存中的一块空间。因为内存比硬盘快得多,Linux 为了改进性能,有时候会选择不直接操作硬盘,而是读写都在内存中,然后批量读取或者写入硬盘。一旦能够命中内存,读写效率就会大幅度提高。

根据是否使用内存做缓存,我们可以把文件的 I/O 操作分为两种类型。

第一种类型是缓存 I/O。大多数文件系统的默认 I/O 操作都是缓存 I/O。对于读操作来讲,操作系统会先检查,内核的缓冲区有没有需要的数据。如果已经缓存了,那就直接从缓存中返回;否则从磁盘中读取,然后缓存在操作系统的缓存中。对于写操作来讲,操作系统会先将数据从用户空间复制到内核空间的缓存中。

第二种类型是直接 IO,就是应用程序直接访问磁盘数据,而不经过内核缓冲区,从而减少了在内核缓存和用户程序之间数据复制。

ext4 是一种日志文件系统,是为了防止突然断电的时候的数据丢失,引入了日志**(Journal)**模式。日志文件系统比非日志文件系统多了一个 Journal 区域。文件在 ext4 中分两部分存储,一部分是文件的元数据,另一部分是数据。元数据和数据的操作日志 Journal 也是分开管理的。你可以在挂载 ext4 的时候,选择 Journal 模式。这种模式在将数据写入文件系统前,必须等待元数据和数据的日志已经落盘才能发挥作用。这样性能比较差,但是最安全。

另一种模式是 order 模式。这个模式不记录数据的日志,只记录元数据的日志,但是在写元数据的日志前,必须先确保数据已经落盘。这个折中,是默认模式。

还有一种模式是 writeback,不记录数据的日志,仅记录元数据的日志,并且不保证数据比元数据先落盘。这个性能最好,但是最不安全。

每一个打开的文件都有一个 struct file 结构,每个 struct file 结构都有一个 struct address_space 用于关联文件和内存,就是在这个结构里面,有一棵树,用于保存所有与这个文件相关的的缓存页。

直接 I/O 读写的流程是一样的,调用 ext4_direct_IO,再往下就调用块设备层了。缓存 I/O 读写的流程不一样。对于读,从块设备读取到缓存中,然后从缓存中拷贝到用户态。对于写,从用户态拷贝到缓存,设置缓存页为脏,然后启动一个线程写入块设备。

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

http://www.khdw.cn/news/57771.html

相关文章:

  • 官方网站建设进度表百度网址大全 简单版
  • 阿里巴巴做网站的搜索软件排行榜前十名
  • wordpress修改源码seo研究中心学员案例
  • 徐州网站建设策划网站关键词排名优化客服
  • 衡水做网站电话免费域名的网站
  • 常州做网站一般多少钱能打开各种网站的搜索引擎
  • 做网站公司融资多少钱手机百度识图网页版入口
  • 优化器百度推广优化师是什么
  • 网站备案多少天免费网站
  • 福州建设网站公司windows优化大师可以卸载吗
  • 网站建设公司做销售前景好不好?上海企业推广
  • 个人网站建设优化品牌软文范文
  • 深圳餐饮网站建立经典软文广告
  • 高级wordpress搜索搜索引擎优化实训
  • 合肥市人民政府领导名单跟我学seo从入门到精通
  • 学校网站模板推广网站免费
  • 郑州企业网站排名优化长沙网站推广排名优化
  • 苏州做网站哪家公司好今日头条指数查询
  • 做的课件能做教育部网站查询码全网营销网络推广
  • 青海学会网站建设公司国外免费ip地址
  • 苏州专业做网站较好的公司有哪些百度指数官方版
  • 手游充值代理平台优化工具箱下载
  • 网站定位包括哪些内容抖音关键词优化
  • wordpress美女主题广州网页seo排名
  • 从零开始网站建设网站如何推广营销
  • 住房和城乡建设部网站建筑电工原创软文
  • 唐山业之峰装饰公司怎么样搜索引擎优化策略包括
  • 黄页88网b2b网站大全网络推广公司排名
  • 女女做的网站中国营销网
  • 温州市城乡建设职工中等专业学校官网seo中文意思