还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
操作系统原理与实践欢迎来到《操作系统原理与实践》课程本课程将深入探讨操作系统的核心概念、设计原则和实际应用,帮助学生建立坚实的理论基础,并通过实践案例培养解决实际问题的能力通过本课程的学习,你将了解操作系统如何有效管理计算机资源、协调并发任务、实现文件存储以及提供用户界面我们将结合理论与实践,探索从早期操作系统到现代多核系统的发展历程课程介绍操作系统定义与作用发展历史操作系统是计算机硬件与用从早期的批处理系统到现代户之间的中间层,负责管理的分布式操作系统,操作系计算机资源、提供用户接统经历了数十年的演变每口,以及协调各种程序的执一次技术革新都推动了操作行它是计算机系统最基础系统功能和性能的提升,满的软件,为应用程序提供服足不断变化的计算需求务和运行环境学习目标通过本课程,学生将掌握操作系统的基本原理、设计思想和实现技术,能够分析和解决操作系统相关问题,为后续的系统开发和优化奠定基础操作系统的分类按处理方式分类按应用环境分类批处理系统一次性处理多个作业,无需用户交互,适合大桌面操作系统面向个人用户,提供图形界面和多任务处理规模数据处理能力,如Windows、macOS和Linux桌面版分时系统允许多用户同时共享计算机资源,每个用户轮流移动操作系统针对智能手机和平板电脑优化,注重能耗控获得处理器时间,创造交互式体验制和触摸交互,如Android和iOS实时系统对时间有严格要求,必须在规定时限内完成任嵌入式操作系统运行在专用设备中,资源受限,功能专务,常用于工业控制、医疗设备等关键场景一,如智能家电、可穿戴设备中的系统操作系统结构单体结构所有功能组合成一个大程序层次化结构将系统划分为多个层次微内核架构核心功能最小化,服务模块化操作系统结构决定了系统组件如何组织和交互单体结构简单高效但难以维护;层次化结构清晰但可能影响性能;微内核架构灵活可扩展但实现复杂系统调用是应用程序访问内核服务的标准接口,各操作系统提供特定的API让开发者使用这些功能操作系统的基本功能资源管理进程管理协调各硬件资源的分配与回收创建、调度多任务并处理并发设备管理存储管理控制I/O设备与文件系统管理内存分配和虚拟存储操作系统的核心功能是管理和协调计算机系统的各种资源通过进程管理,系统能够同时运行多个程序;通过存储管理,高效利用有限的物理内存;通过设备管理,简化外部设备的访问和控制这些功能共同构成了操作系统的基础架构硬件基础与操作系统中央处理器CPU内存系统作为计算机的大脑,执行指提供程序运行所需的临时存储令、进行计算并控制系统运空间操作系统负责内存分行操作系统通过调度算法决配、回收和保护,通过虚拟内定哪些进程获得CPU时间,实存技术扩展物理内存容量,并现多任务处理现代多核处理防止程序间相互干扰,保障系器要求操作系统能够有效利用统稳定性并行计算能力中断与异常机制中断是硬件向CPU发出的请求信号,异常是程序执行过程中的非正常事件操作系统通过中断处理程序响应这些事件,实现I/O设备控制、定时器功能和错误处理,是硬件与软件交互的关键机制操作系统发展简史早期批处理系统20世纪50-60年代,计算机以批处理方式运行程序,操作系统仅提供基本的作业控制功能DOS到Windows从80年代的命令行DOS到图形界面Windows,微软系统逐渐成为个人计算机的主流选择Unix到LinuxUnix系统奠定了现代操作系统设计基础,Linux作为开源替代品迅速发展,成为服务器和嵌入式系统的重要选择移动与云时代智能手机催生了Android和iOS等移动操作系统,云计算推动了分布式操作系统的发展进程与程序的区别比较项程序进程作业定义静态的指令集合程序的一次执行用户提交的任务实例单元状态二进制文件,存动态实体,具有系统中的调度单储在磁盘上运行状态位资源不占用系统资源拥有独立的地址包含资源需求描空间和资源述生命周期创建后长期存在创建、运行、终提交到完成的管止的完整生命周理过程期程序是静态的指令和数据集合,而进程是程序的动态执行实例,包含执行环境和资源一个程序可以对应多个进程,多个进程可以执行同一程序作业则是从用户角度描述的任务单元,包含程序和数据,以及执行要求进程的生命周期创建状态进程被创建但尚未准备就绪,系统正在为其分配所需资源和初始化PCB就绪状态进程已获得除CPU以外的所有必要资源,只需分配处理器即可运行运行状态进程正在CPU上执行,可能因时间片用完返回就绪状态,或因I/O请求进入阻塞状态阻塞状态进程等待某个事件发生,如I/O完成或信号到达,无法继续执行,需要等待条件满足后转为就绪终止状态进程执行完毕或出现错误被强制终止,系统将回收其占用的资源进程控制块()PCB进程标识信息处理器状态信息进程控制信息包括进程ID、父进程ID、存储CPU寄存器的内容、记录进程当前状态、优先用户ID等唯一标识进程的程序计数器、状态寄存器级、调度参数、事件等控信息,系统通过这些标识等,用于进程切换时保存制信息,系统根据这些信符区分和管理不同的进和恢复执行环境息进行进程调度和管理程资源管理信息包括内存指针、打开文件列表、分配设备等资源管理数据,确保进程能够正确访问所需资源进程的创建与销毁进程创建在Linux系统中,通过fork系统调用创建子进程fork复制当前进程创建一个几乎完全相同的子进程,子进程获得父进程的数据和代码段副本,但拥有独立的地址空间子进程创建后,可以通过exec系统调用加载新程序,替换当前进程映像,实现程序切换父子关系管理子进程继承父进程的大部分属性,但拥有唯一的进程ID父进程可以等待子进程终止,通过wait/waitpid系统调用获取子进程的退出状态如果父进程先于子进程终止,子进程将成为孤儿进程,被init进程PID=1收养,确保资源能够正确回收进程销毁进程可以通过exit系统调用主动终止,也可能因为异常或收到终止信号而结束进程终止时,系统会关闭所有打开的文件,释放分配的内存和其他资源如果进程终止后父进程未调用wait回收,则成为僵尸进程,只保留最小的进程信息,等待父进程回收进程切换保存当前进程上下文将CPU寄存器状态保存到PCB中选择新进程调度算法确定下一个运行的进程恢复新进程上下文从PCB加载寄存器状态到CPU进程切换是操作系统中最耗时的操作之一,因为它涉及到CPU上下文的变更,包括通用寄存器、程序计数器、栈指针等数据的保存与恢复频繁的进程切换会导致系统性能下降,这被称为上下文切换开销现代处理器提供硬件支持来加速上下文切换,例如多寄存器组和快速保存/恢复指令操作系统设计者也通过减少不必要的切换和优化调度策略来降低切换开销多进程编程实践案例Linux Fork/Exec示例典型应用场景Web服务器使用多进程处理并发连接,每个客户端连接由独立进程处理,确保安全隔离#include#include Shell命令执行shell通过fork/exec执行用户命令,可以方便地实现管道和重定向#include后台服务守护进程通常使用fork创建子进程执行实际任务,主进程继续监听请求int main{并行计算将复杂任务分解为多个独立子任务,由多个进程并行处理,提高性能pid_t pid=fork;if pid0{//创建失败perrorfork;return1;}else ifpid==0{//子进程代码printf子进程PID:%d\n,getpid;execl/bin/ls,ls,-l,NULL;//如果execl执行成功,不会到达这里perrorexecl;return1;}else{//父进程代码printf父进程PID:%d\n,getpid;waitNULL;//等待子进程结束printf子进程已完成\n;}return0;}线程基础线程是进程内的轻量级执行单元,共享所属进程的地址空间和资源与创建新进程相比,创建线程的开销更小,线程间通信更简单高效,适合需要频繁交互的并发任务用户级线程完全由应用程序管理,对操作系统透明,调度灵活但无法利用多处理器;内核级线程由操作系统直接支持和管理,能够实现真正的并行执行,但创建和切换开销相对较大现代系统通常采用混合实现,结合两者优点线程的生命周期创建状态调用pthread_create等函数创建线程,分配必要资源执行状态线程获得CPU并执行指令阻塞状态等待某事件(如I/O或同步)完成终止状态执行完毕或被调用pthread_exit终止线程的生命周期与进程类似,但更加轻量化线程可以在创建后立即进入执行状态,也可能需要等待调度;在执行过程中,可能因等待资源或同步事件而阻塞;完成任务后,线程可自行终止或被外部终止线程实现方式1:N1:1用户级线程模型内核级线程模型多个用户线程映射到一个内核线程,线程管每个用户线程对应一个内核线程,线程创建理在用户空间完成,系统调用会阻塞整个进和切换开销较大,但能充分利用多处理器,程,无法利用多处理器并行执行一个线程阻塞不影响其他线程执行M:N混合线程模型多个用户线程映射到多个内核线程,兼顾灵活性和性能,应用程序可以根据需要调整映射关系,平衡开销和并行度各种操作系统采用不同的线程实现方式Windows和Linux主要使用1:1模型;某些Unix变种采用M:N模型;早期的Java线程库使用用户级线程,现代JVM则更多依赖内核级线程实现选择合适的线程模型需要考虑应用场景、性能需求和平台特性线程编程实例POSIX线程示例代码线程共享与私有资源共享资源#include#include•代码段(程序指令)#include•数据段(全局和静态变量)•堆内存(动态分配的内存)#define NUM_THREADS5•打开的文件描述符void*thread_functionvoid*arg{•信号处理器int thread_id=*int*arg;私有资源printf线程%d正在执行\n,thread_id;•线程ID//模拟工作负载•寄存器集合(包括程序计数器)forint i=0;i1000000;i++{}•栈(局部变量)printf线程%d完成工作\n,thread_id;•线程特有数据TLSpthread_exitNULL;•错误码errno}int main{pthread_t threads[NUM_THREADS];int thread_args[NUM_THREADS];int rc,i;fori=0;iNUM_THREADS;i++{thread_args[i]=i;printf创建线程%d\n,i;rc=pthread_createthreads[i],NULL,thread_function,void*thread_args[i];if rc{printf错误无法创建线程,%d\n,rc;exit-1;}}//等待所有线程完成fori=0;iNUM_THREADS;i++{pthread_jointhreads[i],NULL;}printf所有线程已完成!\n;pthread_exitNULL;}线程同步概述同步的必要性竞争条件在多线程环境中,多个线程可能同时访问竞争条件是指多个线程以不可预期的顺序和修改共享数据,导致不可预测的结果访问共享资源,最终结果依赖于执行时线程同步机制确保并发操作的正确性,防序这种情况通常导致程序错误和不一致止数据竞争和不一致状态状态•保护共享资源的完整性•检查-然后-操作序列•确保操作按正确顺序执行•读取-修改-写入操作•协调线程间的依赖关系•不可分割操作的中断同步原语现代操作系统提供多种同步机制,开发者可以根据具体需求选择合适的工具•互斥锁保护临界区•信号量控制资源访问•条件变量线程间通知•屏障同步执行点临界区与互斥临界区定义互斥机制实现临界区是访问共享资源的代码段,需要保证在任一时刻最多只有一个线程执行不正确的临界互斥锁(Mutex)是最常用的互斥机制,提供对临界区的控制区保护会导致数据竞争,产生不可预测的程序行为//使用互斥锁保护共享数据临界区设计原则pthread_mutex_t mutex=•互斥性确保临界区的互斥访问PTHREAD_MUTEX_INITIALIZER;•有限等待线程不应无限期等待int shared_counter=0;•进步性不应阻碍无关线程的执行void*thread_functionvoid*arg{//进入临界区前加锁pthread_mutex_lockmutex;//临界区代码shared_counter++;printf计数器值:%d\n,shared_counter;//退出临界区,释放锁pthread_mutex_unlockmutex;return NULL;}信号量应用二元信号量值只能为0或1,用于实现互斥功能,类似于互斥锁,但提供更多灵活性二元信号量可用于控制对单一资源的访问,或在多个线程间传递控制权计数信号量值可以为任意非负整数,表示可用资源数量,用于控制有限资源的分配计数信号量适用于管理有多个实例的资源,如连接池、内存块等生产者消费者问题使用两个信号量协调生产者和消费者之间的同步关系一个表示空槽位数量,另一个表示已填充项目数量,确保生产者在缓冲区满时等待,消费者在缓冲区空时等待信号量由P(减少,也称为wait或acquire)和V(增加,也称为signal或release)两个原子操作控制P操作尝试减少信号量值,如果结果为负则阻塞;V操作增加信号量值,可能唤醒等待的线程与互斥锁不同,信号量更适合复杂的同步场景,尤其是需要控制执行顺序或资源计数的情况但使用不当可能导致死锁、饥饿或竞争条件经典同步问题哲学家进餐问题读者写者问题五位哲学家围坐在圆桌旁,每人面前有一碗面,两人之间有一根筷多个进程共享一个数据库,读者只读取数据,写者需要修改数据子,哲学家要么思考,要么吃饭,吃饭需同时拿起左右两边的筷多个读者可以同时读取,但写者必须独占访问子问题变种问题挑战•读者优先只要有读者在读,新到的读者可以直接开始读,写•死锁若所有哲学家同时拿起左边筷子,都无法拿到右边筷子者等待•饥饿某些哲学家可能一直无法获取两根筷子•写者优先一旦有写者等待,新到的读者必须等待,防止写者饥饿•性能过于保守的解决方案可能导致并发度降低•公平策略按到达顺序处理读写请求,避免偏向任何一方解决策略实现方式•资源分级为筷子分配编号,按顺序获取•使用读写锁区分共享模式和独占模式•引入仲裁者限制同时进食的哲学家数量•信号量组合记录活跃读者数量和写者状态•改变行为部分哲学家先拿左边,部分先拿右边•条件变量用于读者/写者之间的通知机制死锁原理互斥条件占有并等待资源不能同时被多个进程使用进程持有部分资源又请求新资源循环等待不可抢占形成等待资源的环路已分配资源不能强制回收死锁是指两个或多个进程因竞争资源而永远阻塞的状态只有同时满足上述四个条件,死锁才会发生系统可以通过资源分配图来检测死锁,如果图中存在环路,且资源只有一个实例,则系统处于死锁状态当系统处于死锁状态时,受影响的进程无法继续执行,必须通过外部干预(如重启进程或系统)来解决因此,理解和预防死锁对系统设计至关重要死锁预防与避免死锁预防策略死锁避免银行家算法通过破坏死锁的必要条件来预防死锁发生银行家算法是一种著名的死锁避免算法,基于安全状态的概念•破坏互斥条件使资源可以共享(并非所有资源都可行)
1.在资源分配前进行检查•破坏占有并等待一次性申请所有资源或
2.仅当分配后系统仍处于安全状态时才分配在申请新资源前释放已有资源资源•破坏不可抢占允许资源被强制回收,如
3.安全状态指存在一个进程执行序列,使所超时机制有进程能完成•破坏循环等待对资源类型进行编号,按
4.算法维护三个向量可用资源、最大需顺序申请求、已分配资源死锁检测与恢复如果预防和避免策略代价过高,可以允许死锁发生,但提供检测和恢复机制•定期运行死锁检测算法,寻找等待图中的环•发现死锁后,通过进程终止或资源抢占来解除•选择牺牲进程时考虑进程优先级、运行时间和完成进度•需要实现回滚机制,确保系统状态一致性进程调度概述调度目标进程调度旨在优化系统性能和资源利用,需要平衡多种因素公平性确保每个进程获得合理的CPU时间;高效性最大化CPU利用率;响应性保证交互式应用的快速反馈;吞吐量提高单位时间内完成的作业数量批处理系统调度批处理系统注重吞吐量和资源利用率,而不强调响应时间适合后台计算、数据处理等非交互式任务调度策略倾向于减少进程切换,让每个进程运行较长时间,提高整体效率实时系统调度实时系统必须满足时间约束,保证任务在截止期限内完成硬实时系统要求绝对不能超过截止时间(如飞行控制),软实时系统允许偶尔延迟(如视频播放)调度算法需要考虑任务优先级和截止时间交互式系统调度交互式系统(如桌面操作系统)需要平衡响应时间和吞吐量用户体验是关键指标,调度器通常为前台任务分配更高优先级,使用抢占机制确保系统响应迅速,同时兼顾后台任务的处理效率调度算法先来先服务I FCFS算法原理按进程到达就绪队列的顺序分配处理器实现方式使用队列数据结构,新进程加入队列尾部调度过程当前进程完成或阻塞时,选择队首进程执行先来先服务(FCFS)是最简单的调度算法,非抢占式,一旦进程获得CPU,就会一直执行直到完成或被阻塞算法实现简单,公平性好,适合后台批处理系统,但不适合交互式环境FCFS的主要缺点是平均等待时间可能很长,尤其是当短进程排在长进程之后时这种现象称为护航效应(Convoy Effect),会导致CPU和I/O设备的利用率降低例如,若一个需要长时间CPU处理的进程先到达,后续的短进程都必须等待,即使这些短进程很快就能完成调度算法短作业优先II SJF调度算法时间片轮转III RR时间片分配时间片用完为每个进程分配固定长度的CPU时间当前进程被放回就绪队列尾部循环往复选择下一进程持续循环直到所有进程完成从队首选择下一个进程执行时间片轮转Round Robin,RR算法是一种专为分时系统设计的抢占式调度策略,每个进程分配一个时间片,时间片用完后无论任务是否完成都被强制切换这确保了所有进程都能公平地获得CPU时间,特别适合交互式环境时间片大小的选择是RR算法的关键太大会退化为FCFS,响应性降低;太小则引起过多的上下文切换开销通常,时间片设置为10-100毫秒,平衡响应时间和系统开销相比FCFS,RR提供了更好的响应时间,但平均周转时间通常较长调度算法多级反馈队列IV多队列结构多个优先级队列,较高优先级先执行时间片递增低优先级队列分配更长时间片优先级下降用完时间片的进程降至低优先级队列IO提升频繁IO的进程可能提升优先级多级反馈队列调度算法结合了多种调度策略的优点,通过动态调整进程优先级,既照顾短进程和交互式进程,又不会导致长进程饥饿新进程首先进入最高优先级队列,如果无法在分配的时间片内完成,则降至下一级队列Linux的O1调度器是多级反馈队列的实际应用,它维护140个优先级队列,包括实时和普通优先级通过动态优先级调整机制,平衡响应时间和吞吐量,特别适合同时运行交互式应用和后台任务的系统环境调度算法实践时间片轮转调度实现算法分析与应用上述代码实现了基本的时间片轮转调度算法,通过模拟进程执行过程,计算等待时间和完成顺序真实操作系统中的实现要复杂得多,#include需要考虑进程优先级、I/O操作、资源依赖等因素#include调度算法的实际应用需要考虑typedef struct{•系统类型和应用场景int pid;//进程IDint burst_time;//执行所需时间•工作负载特性int remaining_time;//剩余执行时间•性能指标优先级int waiting_time;//等待时间•硬件资源限制}Process;现代操作系统通常实现复杂的混合调度策略,如Linux的CFS完全公平调度器使用红黑树维护进程运行时间,确保调度公平性同时保持//轮转调度实现Olog n的性能void roundRobinProcessprocesses[],int n,Windows使用基于优先级的多级队列调度,结合动态优先级提升,平衡响应性和吞吐量int quantum{int total_time=0;int completed=0;//初始化剩余时间for inti=0;in;i++{processes[i].remaining_time=processes[i].burst_time;}printf执行顺序\n;//循环直到所有进程完成while completedn{for inti=0;in;i++{if processes[i].remaining_time0{printfP%d,processes[i].pid;//确定本次执行时间int execute_time=processes[i].remaining_time;if execute_timequantumexecute_time=quantum;//更新剩余时间和总时间processes[i].remaining_time-=execute_time;total_time+=execute_time;//检查进程是否完成if processes[i].remaining_time==0{completed++;processes[i].waiting_time=total_time-processes[i].burst_time;}}}}//计算平均等待时间float avg_waiting_time=0;for inti=0;in;i++{avg_waiting_time+=processes[i].waiting_time;}avg_waiting_time/=n;printf\n平均等待时间:%.2f\n,avg_waiting_time;}内存管理概述基本需求内存管理的核心目标是高效利用有限的物理内存,为进程分配内存空间,在进程结束时回收内存同时需要隔离进程之间的内存访问,防止相互干扰,保障系统安全和稳定抽象层次操作系统提供内存抽象,使应用程序看到的是连续的虚拟地址空间,而非分散的物理内存这种抽象简化了程序开发,使程序员无需关心内存的物理分布,只需在逻辑地址空间中操作内存碎片问题随着内存分配和释放,系统会产生内存碎片,包括外部碎片(空闲块之间的碎片)和内部碎片(分配单元内的未使用空间)碎片会降低内存利用率,影响系统性能有效的内存管理机制需要平衡多种因素最小化碎片、支持动态内存分配、保护进程地址空间、优化性能和提供良好的抽象现代操作系统通常采用分页、分段或两者结合的方式来实现这些目标连续内存分配固定分区分配可变分区分配将物理内存划分为固定大小的分区,每个分区可分配给一个根据进程需求动态分配连续内存块,常用分配策略包括进程根据划分方式可分为•首次适应First-fit选择第一个足够大的空闲块•等大小分区每个分区尺寸相同,实现简单但灵活性差•最佳适应Best-fit选择最小的足够大的空闲块•不等大小分区分区大小不同,满足不同进程需求•最差适应Worst-fit选择最大的空闲块优点实现简单,分配和回收速度快优点灵活适应不同大小进程,减少内部碎片缺点内部碎片严重,内存利用率低,限制进程大小缺点产生外部碎片,需要复杂的管理算法,如伙伴系统或碎片整理连续内存分配要求进程占用连续的物理内存空间,这在早期操作系统中很常见但随着多道程序设计的发展和内存需求的增加,非连续内存分配方式(如分页和分段)逐渐成为主流,以提高内存利用率和系统灵活性分页管理页与帧分页系统将虚拟地址空间分为固定大小的页,物理内存分为同样大小的帧典型页大小为4KB,但现代系统支持多种页大小页表结构页表保存虚拟页号到物理帧号的映射关系,每个进程拥有独立页表基本结构包括页号、帧号、有效位、修改位、访问位等控制信息地址转换虚拟地址分为页号和页内偏移两部分系统通过页表查找页号对应的帧号,与页内偏移组合形成物理地址地址转换通常由内存管理单元MMU硬件支持性能优化为加速地址转换,系统使用快表TLB缓存最近使用的页表项TLB命中可直接获得帧号,显著提高访问速度;TLB缺失则需访问内存中的页表分段管理分段基本概念段表结构分段是面向逻辑单位的内存管理方段表记录每个段的基址(起始物理地式,将进程地址空间划分为不同长度址)和长度(界限),以及访问权限的段,每段对应一个逻辑上独立的单等控制信息段地址由段号和段内偏元,如代码段、数据段、栈段等分移组成,系统通过段表将其转换为物段支持程序的模块化和代码共享,与理地址,并检查偏移是否超出段长程序的逻辑结构更贴合度,实现段的保护机制分段与分页结合纯分段系统同样面临外部碎片问题,因此现代系统常采用分段与分页结合的方式先将程序划分为逻辑段,再将每段分页管理Intel x86架构使用这种段页式管理,段用于权限控制,页用于实际内存分配分段相比分页的优势在于更好地支持共享和保护不同进程可以共享代码段或库段,同时对不同段设置不同访问权限(如代码段只读,数据段可读写)然而,分段难以解决外部碎片问题,且段大小不固定,管理复杂度更高虚拟内存原理概念基础需求分页使程序可使用大于物理内存的地址空间按需将页面从辅存调入内存地址保护页面置换防止进程访问未授权内存内存紧张时选择淘汰页面虚拟内存是现代操作系统的核心技术,将物理内存和磁盘空间结合形成更大的地址空间它基于程序局部性原理程序在执行过程中,总是集中访问一小部分代码和数据因此,只需将当前正在使用的部分加载到物理内存,而其余部分可保存在磁盘上,需要时再调入虚拟内存主要优势包括扩大可用内存空间,使大型程序能在有限物理内存下运行;简化程序开发,程序员无需考虑内存大小和管理;提高物理内存利用率,通过多个进程共享物理内存;增强系统安全性,隔离进程地址空间页面置换算法22%12%8%FIFO置换率LRU置换率OPT置换率先进先出算法,置换最早调入内存的页面,实现简最近最少使用算法,置换最长时间未被访问的页最优置换算法,置换最长时间不会被访问的页面,单但性能一般面,性能较好但实现复杂性能最佳但无法实际实现页面置换算法在物理内存已满而需要调入新页面时,决定淘汰哪个页面理想的置换算法应该最小化缺页率(页面不在内存中的比例),减少I/O操作和等待时间除了FIFO和LRU,常用的置换算法还包括时钟算法Clock,LRU的近似实现,使用访问位标记最近使用情况;最不常用算法LFU,根据页面被访问的频率决定;改进型二次机会算法,同时考虑访问时间和修改状态实际系统通常采用这些算法的变种或组合,平衡实现复杂度和置换性能分页实践案例Linux进程分页典型页面置换流程Linux采用四级页表结构管理虚拟内存当进程访问虚拟地址时的处理流程•全局页目录PGD
1.MMU检查虚拟地址在TLB中是否有映射•上层页目录PUD
2.如TLB命中,直接获得物理地址•中间页目录PMD
3.TLB缺失则访问多级页表•页表PT
4.若页表项无效(页面不在内存),触发缺页中断
5.缺页处理程序从磁盘读取页面每个进程拥有独立的页表结构,CR3寄存器指向当前进程的页表基址使用多级页表减少页表占用的内存空间,仅需为
6.若内存已满,使用页面置换算法选择牺牲页实际使用的地址空间分配页表项
7.若牺牲页被修改过,先写回磁盘
8.加载新页面,更新页表和TLBLinux支持多种页面大小,包括标准4KB页,以及2MB和1GB的大页,用于提高TLB效率和减少页表开销
9.恢复进程执行,重新尝试访问文件系统基本概念文件对象目录对象文件是存储在外部介质上的相关目录是管理文件的特殊文件,包信息的命名集合,是数据持久化含其下属文件和子目录的名称及的基本单位从用户角度,文件属性信息目录提供命名空间管可以是文本文档、程序源码、可理,实现文件的层次化组织,帮执行程序、图像等;从系统角助用户和系统有效定位文件现度,文件是一系列逻辑相关的记代文件系统通常采用树形目录结录或字节序列,具有唯一标识符构,从根目录开始向下扩展和一组属性文件的属性与操作文件除了内容外,还包含各种属性(元数据),如名称、创建时间、修改时间、所有者、访问权限、大小等操作系统提供一系列文件操作,包括创建、打开、读取、写入、定位、截断、关闭和删除,通过系统调用接口向应用程序提供服务文件系统的结构应用程序接口文件操作系统调用逻辑文件系统文件操作和组织管理文件组织模块物理块与逻辑文件映射基本文件系统设备驱动交互IO控制层5硬件驱动程序文件系统采用层次化结构,各层功能分离,提供从高级文件抽象到底层存储设备的完整访问路径索引节点inode是Unix/Linux文件系统的核心概念,存储文件的元数据和数据块指针,但不包含文件名目录项将文件名与inode号关联,形成完整的文件访问路径现代文件系统通常使用缓存机制提高性能,包括数据块缓存、元数据缓存和目录缓存系统使用日志或写时复制等技术确保文件系统在崩溃后能够恢复一致状态,提高可靠性文件分配方式分配方式优点缺点适用场景连续分配实现简单,顺序访外部碎片问题,文只读媒体,如CD-问性能高件大小难以扩展ROM链接分配无外部碎片,支持随机访问性能差,需频繁增长的文件动态扩展可靠性问题索引分配支持随机访问,易额外空间开销,多需随机访问的大文于文件扩展次访问索引件混合分配兼顾上述优点实现复杂现代通用文件系统连续分配将文件存储在连续的磁盘块中,只需记录起始块和长度;链接分配将文件分散存储,每块包含下一块的指针,形成链表结构;索引分配使用索引块存储文件块的位置信息,支持直接访问任意块现代文件系统如ext
4、NTFS和XFS通常采用混合策略,结合多种分配方式的优点,如使用多级索引、区段extent映射或B树等高效数据结构,平衡性能、灵活性和空间利用率文件访问控制文件访问控制是保护数据安全的重要机制,限制用户对文件的访问权限传统的Unix权限模型将访问权限分为读r、写w和执行x三种,并区分所有者、所属组和其他用户三类身份例如,rwxr-x--x表示所有者拥有全部权限,组用户可读可执行,其他用户只能执行访问控制列表ACL是对传统权限模型的扩展,允许为特定用户或组设置更精细的权限现代系统如Windows NTFS和Linux的ext4都支持ACL,提供更灵活的权限管理此外,强制访问控制MAC和基于角色的访问控制RBAC等机制在高安全级别系统中应用广泛,提供更严格的访问控制策略磁盘存储管理磁盘调度算法块分配与回收RAID技术FCFS先来先服务算法按请求到达顺序处文件系统需要跟踪磁盘空闲块,常用方RAID冗余磁盘阵列通过多块磁盘组合提理磁盘I/O,公平但可能导致磁头剧烈移法包括位图,用位的值表示块是否空高性能、可靠性或两者兼顾RAID0实动;SCAN电梯算法使磁头按一个方向闲;空闲链表,将空闲块链接成链表;现数据条带化,提高性能但无冗余;移动,处理所有请求后反向,减少平均位向量,类似位图但以向量形式存储;RAID1实现镜像,提供完整备份;RAID5寻道时间;C-SCAN类似SCAN但只在一个空闲块计数,记录连续空闲块的数量使用分布式奇偶校验,平衡性能与冗方向处理请求,返回时直接移至起点分配策略影响系统性能和碎片程度余;更高级别RAID组合多种技术满足不同需求输入输出系统概述/I/O设备类型输入/输出设备是计算机与外部世界交互的接口,按数据传输特性可分为块设备(如磁盘),以固定大小数据块为单位传输,支持随机访问;字符设备(如键盘、鼠标),以字符为单位传输,通常是串行设备;网络设备,具有特殊协议和缓冲需求通信方式中断驱动中断驱动I/O是最常用的设备通信机制CPU发出I/O请求后继续执行其他任务,设备完成操作后通过中断通知CPU中断处理程序保存当前上下文,处理I/O完成事件,然后恢复原任务这种方式平衡了CPU利用率和响应时间,但每次数据传输都需CPU干预通信方式直接内存访问DMADMA允许设备直接与内存交换数据,无需CPU参与每次传输CPU只需设置DMA控制器参数(源地址、目标地址、传输长度等),然后继续其他工作传输完成后,DMA控制器发出中断通知CPUDMA大幅减少了CPU开销,适用于高速数据传输设备如磁盘和网卡缓冲与缓存管理缓冲区目的缓冲策略缓冲区是内存中的临时存储区域,用于数据传输过程中的中转缓冲策略决定了数据如何在缓冲区中存储和传输设置缓冲区的主要目的有•单缓冲使用一个缓冲区,简单但效率较低,设备和处理器•处理速度差异协调快速处理器与慢速I/O设备之间的速度不交替工作匹配•双缓冲使用两个交替的缓冲区,一个用于处理器操作,另•数据批处理积累小数据包成批量传输,减少系统调用和中一个用于I/O传输断开销•循环缓冲多个缓冲区形成环形队列,适用于数据流处理•数据适配处理不同数据单元大小(如字节流与数据块)的•分层缓冲不同层次的缓冲区满足不同性能需求转换•提供回滚能力支持数据操作的撤销或重做缓存是一种特殊的缓冲区,存储频繁访问的数据副本以加速访问操作系统使用页缓存Page Cache缓存文件数据,和块缓存BufferCache缓存底层磁盘块缓存命中率是评估缓存性能的关键指标,受缓存大小、替换算法和工作负载模式影响高效的缓存管理能显著提升系统整体性能设备管理与驱动设备驱动基本结构连接操作系统与硬件的专用接口模块驱动功能与接口初始化、I/O操作、状态管理、中断处理驱动开发流程规格分析、编码、调试、测试、发布设备驱动程序是操作系统与硬件设备之间的桥梁,负责将高级、通用的I/O请求转换为特定硬件的底层操作驱动程序隐藏了设备的复杂性和特殊性,向上层提供统一的接口,使应用程序能够以一致的方式访问不同类型的设备在模块化的操作系统中,设备驱动通常实现为可加载内核模块,支持热插拔功能,无需重启系统即可添加或移除驱动Linux系统遵循一切皆文件的理念,通过文件操作接口统一访问各类设备,简化了应用程序开发不同操作系统提供各自的驱动开发框架和API,如Linux的设备驱动框架,Windows的WDM和WDF系统安全基础用户认证认证是验证用户身份的过程,确保系统资源仅被授权用户访问常见认证机制包括密码认证、生物识别(指纹、面部)、令牌认证(智能卡、OTP)以及多因素认证(结合多种方法)强认证系统需要防范暴力破解、钓鱼和会话劫持等攻击权限管理权限管理控制用户可执行的操作范围,遵循最小权限原则,确保用户只能访问必要的资源操作系统实现权限隔离,包括用户空间与内核空间隔离,进程间地址空间隔离,以及文件和系统资源的访问控制有效的权限管理是防止权限提升攻击的关键常见攻击方式操作系统面临多种安全威胁,包括缓冲区溢出攻击(利用编程漏洞执行恶意代码)、注入攻击(SQL、命令注入)、拒绝服务攻击(耗尽系统资源)、特权提升(获取更高权限)以及恶意软件(病毒、蠕虫、木马)理解攻击原理是设计防护措施的基础访问控制与防护授权机制安全审计与日志授权决定用户可以对资源执行的操作,是安全系统的核心组件主要安全审计跟踪系统活动,记录谁在何时访问了什么资源,执行了什么授权模型包括操作有效的审计系统应•自主访问控制DAC资源所有者控制访问权限,如Unix文件权限•全面记录关键事件登录尝试、权限变更、资源访问•强制访问控制MAC系统强制执行预定义的安全策略,用户无•保护日志完整性防止未授权修改或删除法更改,如SELinux•提供搜索和分析工具快速识别可疑活动•基于角色的访问控制RBAC基于用户角色分配权限,简化管理•实施日志轮换管理存储空间同时保留历史记录•基于属性的访问控制ABAC根据用户、资源和环境属性动态评日志分析可以识别异常行为模式,检测入侵尝试,并在安全事件后进估权限行取证分析现代操作系统通常结合多种授权模型,平衡安全性与灵活性操作系统防护需采用纵深防御策略,在多个层面实施安全措施定期更新和补丁管理至关重要,修复已知漏洞;内核强化技术如ASLR(地址空间布局随机化)和DEP(数据执行保护)增加攻击难度;沙箱机制限制应用程序权限,减小潜在危害范围操作系统案例分析内核结构I Linux应用层用户应用程序和实用工具系统调用接口内核功能的标准化访问点内核子系统3进程管理、内存管理、文件系统等设备驱动硬件抽象接口硬件层5实际计算机硬件Linux内核采用宏内核设计,但通过模块化实现了良好的扩展性内核模块可在运行时动态加载和卸载,常用于设备驱动和文件系统系统调用是应用程序访问内核服务的标准接口,Linux提供约380个系统调用,涵盖进程控制、文件操作、设备管理等功能Linux进程调度采用完全公平调度器CFS,使用红黑树数据结构跟踪进程运行时间,确保公平分配CPU资源实时进程使用FIFO或轮转调度策略,优先级高于普通进程内存管理支持虚拟内存、按需分页和页面置换,采用伙伴系统和SLAB分配器管理物理内存操作系统案例分析内核结构II WindowsWindows内核架构Windows采用混合内核设计,结合了微内核和宏内核的特点核心组件包括•硬件抽象层HAL隔离硬件差异•内核基本系统功能(中断、线程等)•执行管理器进程和线程管理•I/O管理器设备和文件系统访问内核对象Windows使用对象模型管理系统资源•进程、线程、文件等表示为对象•对象管理器维护对象的创建和访问•对象安全描述符控制访问权限•句柄表引用用户模式对象驱动模型Windows驱动程序框架•Windows驱动模型WDM•内核模式驱动框架KMDF•用户模式驱动框架UMDF•即插即用和电源管理集成安全机制Windows综合安全架构•安全账户管理器SAM•本地安全策略•安全引用监视器•Windows Defender和防火墙课程回顾与实际应用核心知识点行业应用技术前景进程管理、内存管理、文件系统、I/O系统和操作系统原理在各个领域有广泛应用数据中操作系统技术持续发展容器化和微服务架构安全机制构成操作系统的基础框架这些子系心服务器优化需要深入理解进程调度和内存管改变了应用部署方式;非易失性内存技术模糊统协同工作,为上层应用提供抽象、资源管理理;移动设备开发依赖电源管理和资源优化;了存储层次;多核和异构计算架构推动并行计和保护服务理解这些机制不仅有助于更好地嵌入式系统要求实时性和高效资源利用;虚拟算模型革新;人工智能加速器需要专门的调度使用计算机系统,也是设计和优化软件的基化和云计算技术直接构建在操作系统概念之和内存管理策略;量子计算未来可能引入全新础上,扩展了资源抽象和共享能力的操作系统设计范式结束及答疑问答时间推荐资源课程内容涵盖了操作系统的核心概念和关经典教材《操作系统概念》键技术,欢迎同学们提出问题,分享学习Silberschatz等、《现代操作系统》过程中的困惑和见解讨论不仅限于课程Tanenbaum、《操作系统原理》内容,也可以探讨操作系统在实际项目中Stallings的应用,或者最新的技术发展趋势在线资源MIT、Stanford和Berkeley的开放课程,Linux内核文档,OSDEV Wiki实践项目xv6教学操作系统,Linux内核模块开发,Docker容器技术研究后续学习方向深入学习特定操作系统内核(Linux、FreeBSD等)探索分布式系统和云原生技术研究系统安全和虚拟化技术参与开源操作系统项目贡献代码。
个人认证
优秀文档
获得点赞 0