美文网首页操作系统
文件操作及磁盘调度

文件操作及磁盘调度

作者: Nefelibatas | 来源:发表于2022-04-19 09:11 被阅读0次

文件基本操作

打开文件open()

头文件:
<sys/types.h> <sys/stat.h>
原型:
    int open(const char *pathname,int flags);
    int open(const char *pathname,int flags,mode_t mode);
    pathname:打开文件的路径名字
    flags:一个或多个标志位的按位或组合
    mode:表示文件的权限,如果flags位为0_CREAT则一定要有文件权限
返回值:成功返回fd,失败<0

flags 有一系列的常数值可以选择,可以同时选择多个使用按位或运算符连接起来,所以这些宏定义都是以0_开头的,表示or。

  • 必选项
    • O_RDONLY、O_WRONLY、O_RDWR中选一个表示打开文件的方式
  • 可选项:O_CREAT、O_EXCL、O_TRUNC、O_APPEND
  • mode: 指定文件权限可以用八进制表示也可以用表示常数的宏按位

关闭文件close()

头文件:
<unistd.h> 
原型:
    int close(int fd);
    fd:文件描述符
返回值:成功0,失败-1

close会取消当前进程的文件描述符fd与其关联的文件之间的映射

当一个进程终止时,内核会对该进程所有尚未关闭的文件描述符调用close

open的返回值一定是该进程所未使用的最小描述符

创建文件create()

头文件:
<sys/types.h> <sys/stat.h><fcntl.h>
原型:
    int create(const char *pathname,model_t mode);
    pathname:打开文件的路径名字

    mode:表示文件的权限,同open()
返回值:成功返回fd,失败<0

读文件read()

头文件:
<unistd.h> 
原型:
    ssize_t read(int fd, void *buf,size_t_t count);
    fd:文件描述符
    buf:一块内存的首地址,存放写入fd的数据
    count:写入的字节数
返回值:写入的字节数,0表示什么也没写

写文件write()

头文件:
<unistd.h> 
原型:
    ssize_t write(int fd, void *buf,size_t_t count);
    fd:文件描述符
    buf:一块内存的首地址,存放写入fd的数据
    count:写入的字节数
返回值:读取到的字节数,0表示文件结束

阻塞与缓存

阻塞block

在阻塞文件中进程执行系统调用如scanf,该进程将会被设置为睡眠状态,因为资源不可达这时内核可以调度其他进程允许,直到该进程等待的事情发生才有可能继续运行。

缓冲buffer

缓冲区,又称为缓存。是内存的一部分。在内存中预留一定的存储空间就是缓冲区。

磁盘结构

每个盘面对应一个磁头,所有的磁头都是连在一个磁臂上,所有磁头只能共进退。

需要把磁头移动到想读/写的扇区所在的磁道。

磁盘会转起来让目标扇区从磁头下面划过才能完成对扇区的读、写操作。

磁盘的表面由一些磁性物质组成,用这些磁性物质记录二进制数据。

磁盘结构

按磁头是否可以活动分类

  • 活动头磁盘
  • 固定头磁盘

按盘片是否可以更换分类

  • 可换盘磁盘

  • 固定盘磁盘

磁盘调度算法

寻道时间TS:在读写数据前将磁头移动到指定磁道所花的时间。

启动磁头臂需要时间s。

移动磁头也是需要时间,假设磁头匀速移动每跨越一个磁道耗时m,总共需要跨越n条磁道,则:

寻道时间T_s = s + m*n

延迟时间TR:通过旋转磁盘使磁头定位到目标扇区所需要的时间,设磁盘转速r(单位:转/秒或转/分)。则平均所需的延迟时间:
T_R = \frac{1}{2} * \frac{1}{r} = \frac{1}{2r}
传输时间T_t: 从磁盘读出或向磁盘写入数据所经历的时间,假设磁盘转速r,此次读/写的字节数为b,每个磁盘上的字节数N。
传输时间T_t = \frac{1}{r}*\frac{b}{N} = \frac{b}{rN} \\ 总的平均存取时间 T_a = T_s+\frac{1}{2r}*\frac{b}{rN}

先来先服务算法FCFS

根据进程请求访问磁盘的先后顺序进行调度。

优点:公平、如果请求访问的磁道比较集中,算法性能还算过得去。

缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很分散则FCFS在性能上很差寻道时间长。

最短寻找时间优先SSTF

优先处理的磁道是与当前磁头最近的磁道,可以保证每次的寻道时间最短,但并不能保证总的寻道时间最短。

优点:性能较好,平均寻道时间短

缺点:产生饥饿现象,磁头在一个小区域来回移动。

扫描算法SCAN

只有磁头移动到最外侧磁道才能往内移动,移动到最内侧磁道才能往外移动,也叫电梯算法。

优点:性能较好,平均寻道时间短,不会产生饥饿现象。

缺点:对各个位置磁道的响应频率不平均。

LOOK调度算法

如果在磁头移动方向上已经没有别的请求就可以立即改变磁头移动方向。

循环扫描算法C-SCAN

返回时直接快速移动至起始阶段而不处理任何请求。

C-LOOK调度算法

如果磁头移动方向上已经没有磁道访问请求就可以立即让磁头返回,并且磁头只需返回到有磁道访问请求的位置即可。

相关文章

  • 文件操作及磁盘调度

    文件基本操作 打开文件open() flags 有一系列的常数值可以选择,可以同时选择多个使用按位或运算符连接起来...

  • 操作系统&文件系统优化

    操作系统优化 推荐Linux系统关闭swap磁盘调度算法设置为deadline 文件系统 推荐xfs/ext4no...

  • [操作系统]磁盘调度

    problem 实验内容:编写一个磁盘调度程序,模拟操作系统对磁盘的调度。 实验目的:本实验要求学生独立设计并实现...

  • Linux云计算命令整理

    线上查询及帮助命令 文件和目录操作命令 查看文件及内容处理命令 有关磁盘与文件系统的命令 内置命令及其它 关机/重...

  • 【2017-09-28】文件与IO(一)

    文件的读写操作 前导 python内置了读写文件的函数。读写文件,不是直接操作磁盘,现代操作系统不允许,所以在磁盘...

  • 【MOOC:操作系统】第一讲 操作系统概述

    教学内容 操作系统结构​ 中断及系统调用 内存管理 进程及线程 处理机调度 同步互斥 文件系统 I/O子系统 操作...

  • Windows API的系统基本服务

    1.文件系统:包括文件的创建,打开,读写,关闭,删除.文件属性的设置与获取.目录操作及磁盘分卷,镜像文件,加密文件...

  • 操作系统基础知识--01 计算机操作系统概述

    主要考点: 操作系统的作用 进程管理及PV 死锁 存储系统 磁盘管理 文件系统

  • 基于C++的类UNIX文件系统

    磁盘文件结构 定义自己的磁盘文件结构 SuperBlock 结构 磁盘 Inode 节点结构,包括:索引结构及逻辑...

  • Redis与磁盘IO阻塞

    内存中的数据写到磁盘,会经过vfs~fs~逻辑卷/软raid~pagecache~块操作调度~磁盘等一系列过程。磁...

网友评论

    本文标题:文件操作及磁盘调度

    本文链接:https://www.haomeiwen.com/subject/jnqsertx.html