打开文件,向文件写数据,我们的计算机都干了什么

打开文件

调用高级语言库函数(例如C语言的fopen),库函数内部调用系统调用接口open,操作系统为其分配文件描述符

写入数据

先将数据写入编程语言自己维护的缓冲区,在合适的时间将其刷新到内核缓冲区。内核缓冲区通过一个类似字典树的结构,找到文件逻辑地址(虚地址)对应的内存数据块(物理地址),再将IO请求放到IO请求队列(计算机可能同时存在多个IO请求),通过LBA(逻辑块寻址)的方式写入磁盘。

补充:

cache,主存,辅存等存储的硬件设备,内部空间都被操作系统分为一个个大小相等的数据块(一般是4KB)。

原因:时间和空间的局部性原理。未来要读取的数据可能是现在正在读取的数据;读取某个位置的数据,与其相邻的数据在未来可能也会读取。所以4KB为单位可以提高效率。

如何分块呢?

假设存储设备大小为4GB,每个数据块的大小为4KB,那么一共可以分成(4*2^30/4*2^10)2^20个数据块。

这些数据块都有各自的名称:

页框:主存的数据块 

页:进程的数据块

页表存储了逻辑地址的页号和物理地址的块号(页框号)

逻辑地址 = 页号+偏移量(页内地址)

物理地址 =  框号(块号)+ 偏移量(块内地址)

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值