地址转换(装入内存的三种方式)

装入模块 装入 内存

绝对装入

只适用于单道程序环境,编译链接后得到的装入模块的指令直接使用了绝对地址

静态重定位

一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存运行期间就不能移动也不能申请内存空间

动态重定位

重定位寄存器:存放装入模块存放的起始位置

链接的三种方式

进程的内存映像

内存中的一个进程

虚拟内存请求分页

文件

文件是以计算机硬盘为载体的存储在计算机上的信息集合,它的形式多样。

文件的逻辑结构是用户可见的结构,即从用户角度看到的文件的全貌。文件的物理结构是文 件在存储器上的组织结构。

1. 文件的逻辑结构(用户视角)

逻辑结构探讨的是文件内部的数据是如何组织起来呈现给用户的。它主要分为两大类:

无结构文件(流式文件)

概念:文件内部就是一连串毫无规则的、毫无结构的字节流。

特点:操作系统根本不管你里面存的是什么,它只看到一堆 0 和 1。你想读取哪里的数据,只能通过读写指针的偏移量来定位。

典型应用:这是 Linux/Unix 系统的核心哲学。你日常接触的 .txt 文本文件、.cpp 源代码文件、甚至 .mp4 视频,在 OS 眼里统统都是无结构文件。

有结构文件(记录式文件)

概念:文件由一条条具有相同格式的** 记录(Record)**组成,每条记录包含多个数据项。

分类:

顺序文件:记录按顺序一条条紧挨着排列(又分定长和可变长)。

索引文件:为文件建立一张“索引表”,通过关键字快速找到对应记录的指针。

直接/哈希文件:通过哈希函数,直接把记录的键值映射到逻辑地址。

典型应用:数据库表(如 MySQL 的 .ibd 数据文件)、早期的员工考勤记录表。

2. 文件的物理结构(硬盘/OS 视角)

物理结构(又称文件分配方式)探讨的是逻辑上连续的文件,在物理磁盘上到底是怎么摆放的。

它主要有三种经典的分配方式:

① 连续分配 (Contiguous Allocation)

原理:要求为每一个文件分配一段连续的物理磁盘块。。

优点:**速度极快,**支持顺序访问和直接(随机)访问。磁头在读取时不需要频繁寻道,是所有分配方式中读取性能最高的。

缺点:极其僵硬。文件如果想动态增加内容,后面要是没有连续的空闲块就完蛋了;并且会产生大量的磁盘外部碎片。

适用场景:只读的光盘(CD-ROM),或者对读取速度要求极高的某些早期的实时系统。

② 链接分配 (Linked Allocation)

原理:文件可以被打散存放在离散的物理块中,块与块之间通过指针连接。

隐式链接:指针藏在每个数据块的末尾。致命缺点是只能顺序访问(想看第 100 块的数据,必须把前 99 块全读一遍),且如果某个块坏了,后面的数据就全丢了。

显式链接:把所有物理块的指针提取出来,集中存放在内存的一张表里。这张表就是的 FAT(File Allocation Table,文件分配表)。有了 FAT,OS 就可以在内存中顺藤摸瓜,极大地提高了检索速度,并支持了逻辑上的随机访问。

③ 索引分配 (Indexed Allocation)

原理:系统为每个文件单独分配一个**“索引块”**,这个块里不存具体数据,而是存一个“目录(索引表)”,记录了该文件所有数据块的物理块号。

优点:既支持随机访问(直接查索引表),又极易扩展文件大小(分配新的物理块,把块号填进索引表即可),而且不会产生外部碎片。

缺点:索引块本身会消耗额外的存储空间。如果文件很小,为了存几个字节还要专门浪费一个索引块,很不划算。如果文件极大,一个索引块装不下所有指针,还需要搞“多级索引”。

IO接口

I/O接口(又称设备控制器)是CPU 与设备之间的接口,以实现设备和计算机之间的数据交换。

IO控制方式