1.考频
1.中断、异常、系统调用
2.进程、调度、进程的状态转换、PCB
3.虚拟页式存储管理、页面置换算法
4.文件的逻辑结构、物理结构,文件的目录、FCB、文件操作
5.磁盘、I/O方式
2.文件物理/逻辑结构
1.文件系统格式与文件的逻辑结构(用户视角看到的样子)无关,逻辑结构只和文件的格式有关(可以理解为文件的后缀),即不同的文件系统下(UFS、APFS、NTFS等等)同一文件的逻辑结构相同:文件的格式规定了文件的逻辑结构,比如某种文件的某些固定部分一定会用来存储特定信息
2.文件系统格式与文件的物理结构有关,同一文件在不同的文件系统下的保存方式不一样(文件的最终存储都是要被拆分为若干个块,以块为存储单位,而不同的文件系统规定的块大小可能不同),可能是块大小不一样,也可能是索引方式不一样,例如FAT文件系统下,文件的索引方式为文件分配表(类似静态链表);UFS文件系统下,文件的索引方式为混合索引(inode结点,包括直接索引、一级间接索引、二级间接索引等等)
3.文件在磁盘中的存放方式取决于文件系统的格式,而文件系统的格式决定文件在磁盘中的物理结构,用户视角看是连续存放,但实际上可能是离散存放
3.打开文件的过程
1.双击文件(exe):操作系统为被双击打开的文件创建一个进程,同时创建一个与之对应的PCB
2.从虚拟内存视角看好像是为该文件分配了一块连续的存储空间,而实际上在物理内存中它一定会被分页,即离散存放
3.文件在运行过程中它的视角看到的是虚拟内存,而不是物理内存;当物理内存不够用时,就采用页面置换算法进行页面置换,将不用的页面暂时淘汰,需要使用的页面替换进来
(1)exe文件打开一个文件时,先使用open系统调用,需要指明该文件的存储路径
(2)open系统调用根据该文件的存储路径逐级查询文件目录(目录由若干的目录项组成,即FCB,保存了文件物理结构的相关信息),在该文件的目录项中存放该文件的索引结点编号(UFS文件系统下)
(3)索引结点在系统中的某个固定的位置开始(所有索引结点的起始位置相同),采用连续存储的存储方式(每个索引结点的大小相同,类似数组),且操作系统知道这些索引结点的起始位置,即操作系统可以根据索引结点的编号找到该文件的索引结点,并根据该索引结点将该文件相对应的数据读入内存
(4)操作系统根据读入的该文件的索引结点(inode,采用混合索引方式)就可以找到其的数据部分(所有)分别存放在哪些物理块中(操作系统可以找到该文件的所有数据,但是通常情况下不需要一次将其全部读入,按需要读入)
(5)操作系统使用read调用读入需要的数据
4.系统调用的执行过程 / 异常的处理过程
4.1.系统调用的执行过程
1.用户发出某个系统调用请求
2.CPU执行Trap指令
3.改变指令执行流 → 跳转到特定的系统调用入口程序的物理地址(Trap指令执行后,固定会跳转到此区域执行内核代码):进程发出系统调用请求后,操作系统需要判断执行具体哪一段内核程序(不同系统调用所需执行的内核程序不同)
4.根据系统调用入口的执行结果再次改变指令执行流 → 跳转到对应的系统调用代码区
5.执行完系统调用后 → 返回
4.2.异常的处理过程
1.当CPU执行过程中发生异常时(缺页异常、除数0等等),将会导致某些寄存器的值发生改变(PSW或者专门记录异常的寄存器)
2.CPU检测到异常后,将会跳转到异常处理的入口程序,通过一系列指令判断当前发生何种异常(本质上和系统调用入口程序相同),根据结果跳转到相对应的异常处理程序处执行
5.缺页处理的过程
1.访问某个页面,在进行逻辑地址到物理地址的转化时,查页表发现缺页,引发缺页异常
2.CPU检测到异常后,将会跳转到异常处理入口程序处运行,得到异常号(异常类型)
3.CPU知道是缺页异常后,再跳转到缺页异常的处理程序处运行
4.在进行缺页处理异常时,发现给进程分配的驻留集已满,缺页异常处理程序调用页面置换算法(保存在操作系统内核区的一段代码)
5.页面置换算法根据操作系统的页面置换规则(FIFO、CLOCK等等)选择某一个页面置换出去,并且需要判断该被置换的页是否被修改(即是否需要写回外存),然后再将目标页面放进页框中
6.内存映射文件
6.1.传统打开文件的方式
每次都需要发出系统调用指令,并且指明将要进行的操作、地址等参数
1.整个系统范围内会有一张系统打开文件表:可以将新读入文件的文件名、INODE和一个记录当前有几个进程打开的变量设置成打开文件表的表项,其中的INODE并不是编号,而是具体的INODE信息,即该INODE已经读入内存
2.①当使用OPEN系统调用打开一个并不在系统打开文件表的新文件时,在系统打开文件表中增加一个对应该文件的表项
②当OPEN系统调用打开的是已经在系统打开文件表中的文件时,只会增加当前打开进程数这个变量的值,而不是进行OPEN系统调用
3.①每个进程的有自己独立的进程打开文件表(存放在PCB中),进程的打开文件表的本质是一个指针,指向的是系统打开文件表中与该文件对应的表项
②进程的打开文件表中还包含进程的对该文件的打开方式(读/写/执行等):不同进程对同一文件的权限不一致,当进程想要对某一文件进行某种操作时(进程发出OPEN系统调用时指明),操作系统要判断该进程是否有对此文件进行这种操作的权限,当进程拥有此权限时,才将指向系统打开文件表中该文件的指针写入进程的打开文件表
③OPEN系统调用向进程返回的FD本质上就是指向进程打开文件表中对应该文件的表项的指针,该指针再指向系统打开文件表中该文件的表项:FD→进程打开文件表的该文件表项(该表项是指针)→系统打开文件表的该文件的表项(该表项是已经调入内存的INODE结点,记录该文件完整的信息)
④进程对某个文件进行操作时,就是通过OPEN系统调用返回的这个FD(指针)进行具体操作
6.2.内存映射文件打开文件方式
建立起进程的虚拟地址空间和目标文件的映射关系,用户直接对该虚拟空间进行操作,操作系统对目标文件进行同步操作
1.进程使用OPEN系统调用方式,指明打开的文件,将要对该文件进行的操作
2.当OPEN系统调用执行完毕后,返回指向该文件的FD(1、2与传统打开文件方式相同)
3.进程使用mmap系统调用,参数为指向该文件的FD和映射地址(指向进程内部的某个虚拟地址,从该地址开始建立起和目标文件的映射关系,即映射的起始地址)
4.操作系统建立起进程的这片虚拟地址和目标文件的映射关系
5.用户使用该进程对该文件进行操作时就可以使用指针的方式,指针指向该虚拟地址,通过偏移量访问对该文件的特定区域进行修改,用户通过指针对该虚拟地址进行操作时,操作系统将会把这些操作同步施加到外存的文件中
7.I/O操作处理过程
1.用户层I/O软件:进程发出系统调用,并指明将要操作的逻辑地址,然后将进入阻塞态,等待I/O操作结束被唤醒
2.设备独立性软件:处理进程发出的系统调用,并将逻辑地址转换为物理地址 → 查询INODE、FAT等转换为物理块 → 调用相应I/O设备的设备驱动程序,并向其指明物理地址完成具体操作
操作系统只知道要读取哪个物理块,但是不知道该物理块最终是在磁盘的具体哪个位置(扇区号、盘面号、柱面号等等
3.设备驱动程序:将物理地址转换为具体的磁盘的扇区号、盘面号、柱面号等物理设备信息,根据磁盘调度算法响应不同的请求,并给硬件控制器发出命令
4.中断处理程序:CPU检测到中断信号后,执行相应的中断处理程序,而中断处理程序只能知道是哪个设备发来的,具体的操作需要调用相应的设备驱动程序完成处理操作,并逐层往上返回
5.硬件:硬件收到设备驱动程序的命令后开始工作,当完成时给CPU发出中断信号