考研复试(六)-操作系统(文件、IO)

本文介绍了文件系统的基本操作,包括创建、写入、读取等,并探讨了磁盘调度算法,如先来先服务、最短寻道时间优先、扫描算法等。还讨论了I/O控制方式和Spooling技术的工作原理。

1、文件的基本操作?

文件属于抽象数据类型。为了恰当地定义文件,就需要考虑有关文件的操作。操作系统提供系统调用,它对文件进行创建、写、读、定位和截断。
①创建文件:创建文件有两个必要步骤,一是在文件系统中为文件找到空间;二是在目录中为新文件创建条目,该条目记录文件名称、在文件系统中的位置及其他可能信息。
②写文件:为了写文件,执行一个系统调用,指明文件名称和要写入文件的内容。对于给定文件名称,系统搜索目录以查找文件位置。系统必须为该文件维护一个写位置的指针。每当发生写操作,便更新写指针。
③读文件:为了读文件,执行一个系统调用,指明文件名称和要读入文件块的内存位置。同样,需要搜索目录以找到相关目录项,系统维护一个读位置的指针。每当发生读操作时,更新读指针。一个进程通常只对一个文件读或写,所以当前操作位置可作为每个进程当前文件位置指针。由于读和写操作都使用同一指针,节省了空间也降低了系统复杂度。
④文件重定位(文件寻址):按某条件搜索目录,将当前文件位置设为给定值,并且不会读、写文件。
⑤删除文件:先从目录中找到要删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。
⑥截断文件:允许文件所有属性不变,并删除文件内容,即将其长度设为0并释放其空间。
这6个基本操作可以组合执行其他文件操作。例如,一个文件的复制,可以创建新文件、 从旧文件读出并写入到新文件。

2、磁盘调度算法有哪些?

1、先来先服务算法(FCFS)First Come First Service
这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。

2、最短寻道时间优先算法(SSTF) Shortest Seek Time First
该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。

3、扫描算法(SCAN)电梯调度
扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间
变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。

4、循环扫描算法(CSCAN)
循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。

3、I/O控制方式有哪些?

1.程序 I/O 方式
早期的计算机系统中, 没有中断系统,所以CPU和I/O设备进行通信,传输数据时CPU速度远快于I/O设备,于是CPU需要不断测试I/O设备,看其是否完成了传输。

2.中断驱动方式
当某进程要启动某个 I/O 设备工作时,便由 CPU 向相应的设备控制器发出一条 I/O 命令,然后立即返回继续执行原来的任务。仅当输完一个数据时,才需 CPU 花费极短的时间去做些中断处理。

3.DMA方式(直接存储器访问)
通过在I/O设备和内存之间开启一个可以直接传输数据的通路,采用DMA控制器来控制一个数据块的传输,CPU只需在一个数据块传输开始阶段设置好传输所需的控制信息,并在传输结束阶段做进一步处理。

4.I/O通道控制方式
虽然DMA方式比起中断方式来已经显著地减少了CPU的干预,即已由以字(节)为单位的干预减少到以数据块为单位的干预。但CPU每发出一条I/O指令,也只能去读/写一个连续的数据块。而当我们需要一次去读多个数据块且将它们分别传送到不同的内存区域,或者相反时,则需由CPU分别发出多条I/O指令及进行多次中断处理才能完成。

---- 通道控制方式与DMA控制方式类似,也是一种以内存为中心,实现设备与内存直接交换数据的控制方式。
---- 与DMA控制方式相比,通道方式所需要的CPU干预更少,而且可以做到一个通道控制多台设 备,从而进一步减轻了CPU负担。
---- 通道本质上是一个简单的处理器,专门负责输入、输出控制,具有执行I/O指令的能力,并通过执行通道I/O程序来控制I/O操作。
---- 通道的指令系统比较简单,一般只有数据传送指令、设备控制指令等。

4、Spooling技术?

虚拟性是OS的四大特性之一。如果说可以通过多道程序技术将一台物理CPU虚拟为多台逻辑CPU,从而允许多个用户共享一台主机,那么,通过SPOOling技术便可将一台物理I/O设备虚拟为多台逻辑I/O设备,同样允许多个用户共享一台物理I/O设备。SPOOLing技术是对脱机输入、输出系统的模拟。相应地,SPOOLing系统必须建立在具有多道程序功能的操作系统上,而且还应有高速随机外存的支持,这通常是采用磁盘存储技术。

SPOOLing系统主要有以下三部分:
(1)输入井和输出井。这是在磁盘上开辟的两个大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存I/Q设备输入的数据;输出井是模拟脱机输出时的磁盘,用于暂存用户程序的输出数据。
(2)输入缓冲区和输出缓冲区。为了缓和和CPU和磁盘之间速度不匹配的矛盾,在内存中要开辟两个缓冲区;输入缓冲区和输出缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用与暂存从输出井送来的数据,以后在传送给输出设备。
(3)输入进程SPi 和输入进程SP0。这里利用两个进程来模拟脱机I/O时的外围控制机。其中,进程SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井,当CPU需要输入数据时,直接从输入井读入内存;进程SP0模拟脱机输出时的外围控制机,把用户要求输出的数据从先内存送到输出井,待输出设备空闲时,在将输出井中的数据经过输出缓冲区送到输出设备上。

SPOOLing技术的特点:
(1)提高了I/O速度。从对低速I/O设备进行的I/O操作变为对输入井或输出井的操作,如同脱机操作一样,提高了I/O速度,缓和了CPU与低速I/O设备速度不匹配的矛盾。
(2)将独占设备改造为共享设备。因为在SPOOLing系统的系统中,实际上并没为任何进程分配设备,而知识在输入井或输出井中为进程分配一个存储区和建立一张I/O请求表。这样,便把独占设备改造为共享设备。
(3)实现了虚拟设备功能。多个进程同时使用一独享设备,而对每一进程而言,都认为自己独占这一设备,从而实现了设备的虚拟分配。不过,该设备是逻辑上的设备。

<think>好的,用户需要创建一个关于考研操作系统复试高频问答的文档模板。首先,我需要确定用户的具体需求。用户可能正在准备考研复试,特别是计算机相关专业,操作系统是其中的核心科目之一。用户希望整理高频问题,以便系统复习。 接下来,我需要参考用户提供的引用内容。引用[1]提到了复试评分维度,包括专业课笔试、英语面试、综合面试和机试,其中操作系统属于专业课的一部分。引用[3]中有关于测试和开发的问答,但可能不直接相关,但可以借鉴问答的结构。 用户需要的是模板结构,所以应该先确定文档的主要部分。通常,高频问答文档可以按主题分类,比如进程管理、内存管理、文件系统等。每个大类下细分具体问题,每个问题包含答案和可能的扩展知识点。 然后,要考虑每个问题的回答是否符合引用中的评分标准,比如知识体系完整性、计算思维能力等。答案需要简明扼要,同时涵盖关键点,可能需要公式或代码块。根据系统级指令,数学公式要用$...$,独立公式用$$...$$,并检查LaTeX语法正确。 此外,用户可能希望问题覆盖常见的考点,如进程与线程的区别、死锁条件、页面置换算法等。需要确保问题具有代表性,并且答案准确,引用相关知识点。例如,死锁的必要条件可以引用教材中的四个条件,并用LaTeX列出。 还需要注意文档的格式,使用标题、子标题、列表等,使结构清晰。可能的话,添加备考建议部分,结合引用[1]中的复习要点,比如分阶段复习、模拟面试等。 最后,生成相关问题,帮助用户进一步扩展复习范围。比如关于虚拟内存的实现原理,或者同步机制的具体应用场景。这些问题应该引导用户深入理解,而不仅仅是记忆答案。 检查是否有遗漏的考点,确保覆盖操作系统的主要章节。同时,答案中适当加入示例代码或公式,如银行家算法的步骤用编号列表,进程状态转换用箭头符号,符合用户的格式要求。 总结,文档模板需要结构清晰,分类合理,问题高频且答案准确,符合复试评分标准,同时格式规范,使用正确LaTeX语法,并附带相关问题帮助复习。</think># 考研操作系统复试高频问答文档模板 ## 一、基础概念类 ### 1. 进程与线程的区别 - **核心答案**: (1) 资源分配:进程是资源分配的基本单位,线程是CPU调度的基本单位 (2) 开销差异:线程上下文切换开销远小于进程($$T_{switch}^{thread} \ll T_{switch}^{process}$$) (3) 通信方式:进程间通信需要IPC机制,线程可直接共享进程内存[^1] ### 2. 死锁的必要条件 1. 互斥条件:资源独占使用 2. 请求与保持:持有资源并继续申请 3. 不可剥夺:资源只能自愿释放 4. 循环等待:存在进程资源环形链 ## 二、核心机制类 ### 3. 页面置换算法比较 | 算法 | 特点 | 缺页率 | |-----------|-------------------------|-------| | FIFO | 实现简单,存在Belady现象 | 较高 | | LRU | 堆栈型算法,时间局部性原理 | 较低 | | OPT | 理论最优,需预知访问序列 | 最低 | ### 4. 银行家算法步骤 ```python 1. 检查Request <= Need? 否则报错 2. 检查Request <= Available? 否则等待 3. 试探性分配资源 4. 执行安全性算法检测系统状态 ``` ## 三、综合应用题 ### 5. 生产者-消费者问题 **同步要求**: - 缓冲区满时阻塞生产者 - 缓冲区空时阻塞消费者 - 互斥访问缓冲区 **伪代码实现**: ```python semaphore mutex = 1; // 缓冲区互斥锁 semaphore empty = N; // 空槽位 semaphore full = 0; // 满槽位 生产者进程: while(True): produce() P(empty) P(mutex) add_to_buffer() V(mutex) V(full) 消费者进程: while(True): P(full) P(mutex) remove_from_buffer() V(mutex) V(empty) consume() ``` ## 四、前沿技术关联 ### 6. 操作系统与分布式系统 - 扩展调度算法到集群环境 - 分布式锁服务(如ZooKeeper) - 容器化技术(Docker/K8s)的资源隔离机制 §§高频扩展问题§§ 1. 如何设计支持百万级并发的IO多路复用模型? 2. 虚拟内存与物理内存的映射原理? 3. 文件系统崩溃恢复的常见方法? 4. 多核处理器调度算法有何特殊考量? 5. 如何用信号量实现读写锁? --- **备考建议** 1. **三阶复习法**:基础概念→算法推导→综合应用(参考引用[1]阶段划分) 2. **真题演练**:近五年目标院校真题重复率通常>40% 3. **模拟面试**:重点训练算法推导的口述表达能力 : 专业课笔试40%-50%知识体系完整性、计算思维能力 [^2]: 考研成绩出来后需及时调整准备策略 [^3]: 面试要准备技术问题应对方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王不叫小王叭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值