[操作系统] 文件管理

文章目录

      • 5.1 磁盘调度算法
        • 1. 先来先服务算法( First Come First Served, FCFS) 算法
        • 2. 最短寻道时间优先算法( Shortest Seek Time First, SSTF) 算法
        • 3. 扫描算法( SCAN ) 算法
        • 4. 循环扫描算法( Circular Scan, CSCAN ) 算法
        • 5. LOOK 与 CLOOK 算法
      • 5.2 进程写文件时,进程发生了崩溃,已写入的数据会丢失吗?
      • 5.3 进程写文件时,断电了,文件内容会丢失吗?
      • 5.4 Linux 脏页刷盘的参数有哪些?
        • 1. 根据脏数据的绝对大小
        • 2. 根据脏数据占可用内存的比例
        • 3. 定时起线程刷新

5.1 磁盘调度算法

1. 先来先服务算法( First Come First Served, FCFS) 算法

顾名思义,先到来的请求,先被服务。

2. 最短寻道时间优先算法( Shortest Seek Time First, SSTF) 算法

最短寻道时间优先(Shortest Seek First,SSF)算法的工作方式是,优先选择从当前磁头位置所需寻道时间最短的请求。

3. 扫描算法( SCAN ) 算法

最短寻道时间优先算法会产生饥饿的原因在于:磁头有可能再一个小区域内来回得移动。
为了防止这个问题,可以规定:磁头在一个方向上移动,访问所有未完成的请求,直到磁头到达该方向上的最后的磁道,才调换方向,这就是扫描(Scan)算法
这种算法也叫做电梯算法,比如电梯保持按一个方向移动,直到在那个方向上没有请求为止,然后改变方向。

4. 循环扫描算法( Circular Scan, CSCAN ) 算法

循环扫描(Circular Scan, CSCAN )规定:只有磁头朝某个特定方向移动时,才处理磁道访问请求,而返回时直接快速移动至最靠边缘的磁道,也就是复位磁头,这个过程是很快的,并且返回中途不处理任何请求,该算法的特点,就是磁道只响应一个方向上的请求

5. LOOK 与 CLOOK 算法

我们前面说到的扫描算法和循环扫描算法,都是磁头移动到磁盘「最始端或最末端」才开始调换方向。
那这其实是可以优化的,优化的思路就是磁头在移动到「最远的请求」位置,然后立即反向移动。
那针对 SCAN 算法的优化则叫 LOOK 算法,它的工作方式,磁头在每个方向上仅仅移动到最远的请求位置,然后立即反向移动,而不需要移动到磁盘的最始端或最末端,反向移动的途中会响应请求。

5.2 进程写文件时,进程发生了崩溃,已写入的数据会丢失吗?

大概就是,进程写文件(使用缓冲 IO)过程中,写一半的时候,进程发生了崩溃,已写入的数据会丢失吗?
答案,是不会的。
image.png
因为进程在执行 write (使用缓冲 IO)系统调用的时候,实际上是将文件数据写到了内核的 page cache,它是文件系统中用于缓存文件数据的缓冲,所以即使进程崩溃了,文件数据还是保留在内核的 page cache,我们读数据的时候,也是从内核的 page cache 读取,因此还是依然读的进程崩溃前写入的数据。
内核会找个合适的时机,将 page cache 中的数据持久化到磁盘。但是如果 page cache 里的文件数据,在持久化到磁盘化到磁盘之前,系统发生了崩溃,那这部分数据就会丢失了。
当然, 我们也可以在程序里调用 fsync 函数,在写文文件的时候,立刻将文件数据持久化到磁盘,这样就可以解决系统崩溃导致的文件数据丢失的问题。
7.2 进程写文件时,进程发生了崩溃,已写入的数据会丢失吗?

5.3 进程写文件时,断电了,文件内容会丢失吗?

写文件的时候,操作系统为了加快写的效率,通常会使用 page cache 技术,也就是先把数据写到内存,然后在某个时机再进行统一刷盘,已到达空间换时间的目的。
如果在写的过程中,断电了,存在内存中的数据是会丢失的,至于丢失多少,主要取决于刷盘的时机,也就是 kernel 的参数(可以使用 sysctl -a | grep dirty )进行查看。

5.4 Linux 脏页刷盘的参数有哪些?

  • image.png

  • 如上参数分三组,任何一组参数的条件满足即会将脏数据刷新到磁盘

1. 根据脏数据的绝对大小
  • vm.dirty_background_bytes : 触发会刷的脏数据大小,单位:byte,默认:0
  • vm.dirty_bytes : 触发回刷的脏数据大小(会阻塞应用进程异步写数据到cache),默认:0
2. 根据脏数据占可用内存的比例

vm.dirty_background_ratio : 内存中脏数据达到系统可用内存的百分比时,会触发内核会启 flush进程将内存中的脏数据刷新到磁盘。此时应用进程不会被阻塞。默认:10
vm.dirty_ratio : 内存中脏数据达到系统可用内存的百分比时,会触发使系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存);在此过程中很多应用进程可能会因为OS处理文件IO而阻塞。默认:20

PS:XXX_bytes 参数如果设置,则XXX_ratio的参数会被忽略

3. 定时起线程刷新

vm.dirty_expire_centisecs : 脏数据超时回刷时间。下一次刷新线程唤醒时,内存中脏数据的时间超过此间隔的数据将会刷新到磁盘 。单位:1/100s,默认:3000,
dirty_writeback_centisecs : 脏数据回刷进程定期唤醒时间,单位:1/100s,默认:500

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

禁奥义·SQL秘籍

sql secret scripts sql 语法顺序、执行顺序、执行过程、要点解析、优化技巧。 1、语法顺序 如上图所示,为 sql 语法顺序与执行顺序对照图。其具体含义如下: 0、select: 用于从数据库中选取数据,即表示从数据库中查询到的数据的…

MySQL 大表设计

存储大规模数据集需要仔细设计数据库模式和索引,以便能够高效地支持各种查询操作。在面对数亿条数据,每条数据包含数百个字段的情况下,以下是我能想到的在设计数据库的时候需要注意的内容 1. 数据库设计 表结构设计 垂直分割:将大…

Golang WebSocket Ping Pong

在 Web 开发中,实时通信是一项非常重要的功能。通过实时通信,我们可以实现一些实时更新的功能,如实时聊天、实时数据更新、多人游戏等。而 WebSocket 是一种在 Web 开发中常用的实现实时通信的技术。本文将介绍如何使用 Golang 实现 WebSocke…

[架构之路-255]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 软件架构风格

目录 前言: 一、建筑风格 1.1 什么是建筑风格 1.2 常见的建筑风格 1.3 如何区分不同的建筑风格 二、软件架构风格概述 2.1 什么是软件架构风格 2.2 如何区分不同的软件架构风格 2.3 软件架构风格的发展阶段 2.4 软件架构风格与软件架构的区别 2.5 常见的…

数字图像处理(实践篇)十五 基于傅里叶变换的高通滤波和低通滤波

目录 一 Numpy 实现傅里叶变换 1 涉及的函数 2 实践 二 OpenCV 实现傅里叶变换 1 涉及的函数 2 实践 为了有效地和快速地对图像进行处理和分析,常常需要将原定义在图像空间的图像以某种形式转换(正变换)到另外一些空间,并利…

使用gparted进行ubuntu虚拟机的磁盘扩容(解决gparted无法拖动分区的问题)

在学习内核编译下载linux内核源码的时候,由于源码非常大,下载的时候提示磁盘空间不足,我才意识到刚开始创建虚拟机的时候分配了20GB的空间现在已经快用光了。在VM的设置里可以进行扩容,我扩展到了30GB重启却发现空间并没有加到我使…

数据库应用:MongoDB 文档与索引管理

目录 一、理论 1.MongoDB文档管理 2.MongoDB索引管理 二、实验 1.MongoDB文档管理 2.MongoDB索引管理(索引添加与删除) 3.MongoDB索引管理(全文索引) 4.MongoDB索引管理(多列索引) 5.MongoDB索引管…

【PyTorch】(一)简介

1. PyTorch是什么? PyTorch是一个深度学习框架,由Facebook于2016年开源发布。PyTorch是基于Torch框架的Python接口,旨在提供易用的强大工具来进行神经网络的构建和训练。PyTorch使用动态计算图,使得开发人员可以以类似于NumPy的方…

虚拟数字人有什么用?有哪些应用场景?

​​过去三年,元宇宙概念进入到大众视野,虚拟数字人备受关注。抖音达人柳夜熙、洛天依、网红虚拟偶像AYAYI等,随着元宇宙的流行,数字人也逐渐成为一种趋势。据行业预测,到2030年,中国的数字人总市场规模将达…

APITable免费开源的多维表格与可视化数据库本地部署公网远程访问

APITable免费开源的多维表格与可视化数据库公网远程访问 文章目录 APITable免费开源的多维表格与可视化数据库公网远程访问前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c…

Oracle很好的自动拼接某个字段的函数listagg使用实例

with mes1 as ( select c.cugrnname,cdd.cuassociatepackingname,c.cuReceiveTime,c.cuReceivePerson, CASE WHEN c.custatus 1 THEN N已发送 ELSE N已接收 END custatus ,c.cuSendTime, c.cuSendPerson,cdd.cupackingworkcenter,cdd.cuqty,pb.PRODUCTNAME,p.description…

关于高校电子邮件系统开通双因素认证的经验分享-以清华大学为例

清华大学信息化技术中心 马云龙 作者简介: 马云龙,男,清华大学信息化技术中心高级工程师;Coremail管理员社区大咖嘉宾 深耕高校计算机网络/信息化/网络安全岗位20年,对大规模计算机网络及信息系统规划,开发/建设,运维有深刻体会。 目前,越来越多的高校/企业/政府机关…

我与开源的历程

我在2000年开始接触开源,当时在松下航空电子美国总部工作。我负责将 IFE 系统从 Win31 迁移到 Linux。作为一个完全不懂 Linux 的小白,我不得不找到一台笔记本电脑安装并自学 Redhat Linux 6.1。2003年回到新加坡后,我发现没有一个凝聚 Linux…

最新AI创作系统ChatGPT系统运营源码+DALL-E3文生图+支持OpenAI-GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

ros来保存图像和保存记录视频的方法---gmsl相机保存视频和图片

1,保存图片 rosrun image_view image_view image:=/myimg_topic这个命令只是用来查看图像的,它并不会保存图像。如果你想要保存图像,你需要使用image_saver节点,并指定保存路径。例如: 下面指令就可以了,可以用 rosrun image_view image_saver image:=/myimg_topic _fi…

centos7下执行yum命令报错

前言 在Linux系统中,安装nginx时候,需要先安装环境。 Nginx是使用C语言开发,安装nginx需要先从官网上将源码下载,然后编译,编译需要gcc环境,但是在安装gcc环境的时候,执行命令报错。 yum install –y gcc-…

Java零基础——Redis篇

1.【熟悉】NoSQL的简介 1.1 什么是NoSQL NoSQL 是 Not Only SQL 的缩写,意即"不仅仅是SQL"的意思,泛指非关系型的数据库。强调Key-Value Stores和文档数据库的优点。 NoSQL产品是传统关系型数据库的功能阉割版本,通过减少用不到或…

易宝OA ExecuteSqlForSingle SQL注入漏洞复现

0x01 产品简介 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、 流程管理 、知识管理(档案和业务管理)、协同办公等多种功能。 0x02 漏洞概述 易宝OA ExecuteSqlForSingle接口处存在SQL注入漏洞&a…

正则表达式(Regular Exprerssion)in Python

之前帮一位朋友面大模型微调实习岗位的时候,人家面试官考到了正则表达式,感觉这块知识还是挺重要的,所以浅浅的学习一下,每个小部分的代码在后面 目录 0.先从一个案例入手(提取文本中的电子邮件地址) 代码…

qt 5.15.2压缩和解压缩功能

qt 5.15.2压缩和解压缩功能 主要是添加qt项目文件.pro内容: 这里要先下载quazip的c项目先编译后引入到本项目中/zip目录下 INCLUDEPATH ./zip CONFIG(debug, debug|release) {win32:win32-g: PRE_TARGETDEPS $$PWD/zip/libquazipd.awin32:win32-g: LIBS -L$$PWD…