为什么那么多人建网站做博客,白山网站seo,wordpress家具主题,邯郸网络宣传公司文章目录 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 进程写文件时#xff0… 文章目录 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 FirstSSF算法的工作方式是优先选择从当前磁头位置所需寻道时间最短的请求。
3. 扫描算法( SCAN ) 算法
最短寻道时间优先算法会产生饥饿的原因在于磁头有可能再一个小区域内来回得移动。 为了防止这个问题可以规定磁头在一个方向上移动访问所有未完成的请求直到磁头到达该方向上的最后的磁道才调换方向这就是扫描Scan算法。 这种算法也叫做电梯算法比如电梯保持按一个方向移动直到在那个方向上没有请求为止然后改变方向。
4. 循环扫描算法( Circular Scan, CSCAN ) 算法
循环扫描Circular Scan, CSCAN 规定只有磁头朝某个特定方向移动时才处理磁道访问请求而返回时直接快速移动至最靠边缘的磁道也就是复位磁头这个过程是很快的并且返回中途不处理任何请求该算法的特点就是磁道只响应一个方向上的请求。
5. LOOK 与 CLOOK 算法
我们前面说到的扫描算法和循环扫描算法都是磁头移动到磁盘「最始端或最末端」才开始调换方向。 那这其实是可以优化的优化的思路就是磁头在移动到「最远的请求」位置然后立即反向移动。 那针对 SCAN 算法的优化则叫 LOOK 算法它的工作方式磁头在每个方向上仅仅移动到最远的请求位置然后立即反向移动而不需要移动到磁盘的最始端或最末端反向移动的途中会响应请求。
5.2 进程写文件时进程发生了崩溃已写入的数据会丢失吗
大概就是进程写文件使用缓冲 IO过程中写一半的时候进程发生了崩溃已写入的数据会丢失吗 答案是不会的。 因为进程在执行 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 脏页刷盘的参数有哪些 如上参数分三组任何一组参数的条件满足即会将脏数据刷新到磁盘
1. 根据脏数据的绝对大小
vm.dirty_background_bytes 触发会刷的脏数据大小单位byte默认0vm.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