操作系统——基础认识——内存管理
操作系统——基础认识每天一个计算机知识操作系统基础一、定义站在用户视角操作系统是一个为用户提供便捷、高效使用计算机环境的软件集合。但它的真正使命是高效地管理硬件资源并为上层软件提供统一且便捷的服务接口。它的四个核心设计目标1、方便性****隐藏底层硬件细节用户不必直接操控磁盘磁头或外设寄存器。2、有效性****既要提升CPU、内存等资源的利用率又要通过多道程序设计等技术提高系统吞吐量。3、可扩充性****能够方便地增添新功能、支持新硬件这要求系统架构具有良好的模块化与可修改性。4、开放性****遵循国际标准支持不同厂商的硬件与软件协同工作如POSIX标准确保了UNIX系操作系统的互通。二、功能从资源管理的角度看操作系统就是各类硬件资源的管理者主要分为五大功能1、处理机管理决定哪个程序可以使用CPU何时使用这对应着进程调度。2、存储器管理负责内存的分配与回收、地址转换、内存保护以及实现虚拟存储器让程序拥有比物理内存大得多的地址空间。3、设备管理对所有的I/O设备统一控制处理中断、提供缓冲、实现设备的分配与虚拟化如SPOOLing技术让独占打印机变为多用户共享。4、文件管理把外部存储器上的数据组织为文件提供按名存取、权限控制、空间分配等功能。5、用户接口提供用户与系统交互的途径包括命令接口命令行、程序接口系统调用和图形用户接口GUI。三、特征这四个特征互为因果共同定义了操作系统的运行方式。并发并发是操作系统最根本的特征。它指两个或多个事件在同一时间间隔内发生。宏观上“同时进行”微观上交替执行。注意区分并发与并行并行是两个事件在同一时刻严格同时执行需要多核硬件支持而并发是单核条件下通过快速轮转实现的多任务假象。操作系统正是为了让多道程序并发执行而引入的也因此引发了进程同步、互斥、死锁等一系列核心问题。共享共享指系统中的资源可供多个并发执行的进程共同使用。分为两种互斥共享一段时间内只允许一个进程访问如打印机、某些共享数据。同时共享宏观上允许多个进程同时访问但微观上可能仍交替进行如磁盘可以多个进程的请求交替读写。并发与共享互为条件没有并发共享失去意义没有共享并发无法实现有效的资源共享。虚拟虚拟是将一个物理实体映射为若干个逻辑上的对应物使用户感觉到独占使用。这是通过复用技术实现的时分复用如CPU分时调度让每个进程感觉独占CPU虚拟存储器将磁盘空间当内存用让程序觉得拥有超大连续内存。空分复用如将内存划分成多个逻辑独立的分区每个进程都觉得自己独占了整个内存区域。虚拟技术极大地提升了资源利用率和用户体验是操作系统魔法般的抽象能力。异步异步也称不确定性。由于进程的并发执行它们会以不可预知的速度推进随时可能被打断或挂起。所以进程的每次执行顺序和完成时间都是不确定的。操作系统必须确保任何时刻都能正确响应任意时刻到来的中断并保证程序在多次执行下的最终结果一致。这一特性使得设计时必须考虑同步与互斥机制确保结果的确定性。四、核心运行机制如果说并发是操作系统的表象那么中断就是支撑并发的物理基石而系统调用则是程序通往内核的唯一大门。中断现代CPU只有在发生中断或异常时才会从用户态强制切回内核态从而为操作系统执行的机会。没有中断操作系统就无法重新获得CPU控制权多道程序并发也就无从谈起。中断分为以下几类1、外中断硬中断来自CPU外部如I/O设备完成通知、时钟中断。时钟中断尤其重要它为操作系统提供了定期夺回CPU的能力是实现时间片轮转调度的基础。2、内中断异常/陷入来自CPU内部指令执行时发生的意外如除以零、非法指令、访存越界、缺页等。此外程序故意触发的软件中断陷入指令就是系统调用的进入点。中断处理流程系统调用操作系统通过内核提供一组精确定义的“应用程序编程接口”即系统调用。例如创建进程fork、读写文件read/write、申请内存brk等。应用程序绝对不能直接执行特权指令必须通过系统调用委托内核代为执行。典型执行过程以Linux为例系统调用的存在既保证了内核的安全又为程序提供了功能强大的服务是用户程序与操作系统沟通的桥梁。五、操作系统体系结构根据内核功能的组织方式主要分为两大流派大内核宏内核将所有基本功能进程调度、内存管理、文件系统、设备驱动都集成在一个内核进程中共享内核空间。优点是各模块通信开销小性能高缺点是结构庞大一个模块的错误可能导致整个系统崩溃。Linux、Unix是典型代表。微内核只将最核心的功能如中断处理、进程通信、基本调度放入内核其他如文件系统、设备驱动都作为用户进程运行通过内核提供的消息传递机制通信。优点是结构清晰、可靠性高、易于扩展缺点是频繁的消息传递会带来较大的运行开销性能相对较低。鸿蒙系统内核、Mach曾为Mac OS X所用是代表。许多现代操作系统还融合了分层、可加载模块等思想实现兼顾性能与灵活性的混合内核但万变不离其宗。操作系统——内存管理每天一个计算机知识点内存管理操作系统内存管理是计算机系统的核心功能之一主要负责对计算机内存资源进行分配、回收、保护及优化以确保多道程序高效、安全地运行。其根本目标是在有限的物理内存中为多个进程提供逻辑上独立且充足的地址空间同时最大化内存利用率并减少访问延迟。一、内存地址内存地址有两种分别是逻辑地址和物理地址。逻辑地址相对地址/虚拟地址程序在编译、链接后形成的地址空间从0开始连续编址是程序视角的地址。物理地址绝对地址实际内存单元的硬件地址从内存芯片的0号存储单元开始。程序只有在运行时才分配到实际的物理内存因此需要地址重定位即把逻辑地址转换为物理地址也就是常说的地址映射。地址重定位的方式有两种分别是静态重****定位和动态重定位。静态重定位在程序装入内存时由软件装入程序一次性将所有逻辑地址修改为物理地址。这种方式要求程序装入后地址固定不能移动灵活性差。动态重定位在程序执行过程中每次访存前由硬件地址变换机构把逻辑地址加上一个重定位寄存器基址寄存器的值形成物理地址。基址寄存器存放程序在内存中的起始物理地址。这样程序装入后仍可在内存中移动是实现虚存的基础。二、内存分配早期的内存管理采用连续分配方式即为一个进程分配连续的内存空间。这种方式简单但容易产生外部碎片导致内存利用率低下。现代操作系统普遍采用非连续分配方式主要包括分页存储管理和分段存储管理以及两者的结合段页式存储管理。分页存储管理的基本思想是将逻辑地址空间分成固定大小的页物理内存分成同样大小的页框帧。页面大小通常为4KB。分配时以页框为单位进程的页面可以装入任何空闲页框不要求连续。页表是系统为每个进程建立一张页表记录页号到页框号的映射。逻辑地址高位为页号低位为页内偏移。地址变换时用页号查页表得到页框号再拼接偏移量形成物理地址。硬件提供****页表寄存器存放页表起始物理地址和长度。每次访存先查页表再做实际内存访问因此至少两次访存一次取页表项一次读写数据。这个速度问题由快表TLB解决。TLB是高速缓存存放最近使用的页表项命中则只需一次访存。多级页表当逻辑地址空间很大时页表本身可能极大。采用两级或多级页表将页表再分页只把用到的部分调入内存节省页表占用空间。例如32位地址两级页表页目录10位页表索引10位页内偏移12位。反置页表整个系统维护一张按物理页框号索引的表记录每个页框被哪个进程的哪个页面占用。查找时需遍历可结合哈希加速可减少页表总内存占用但地址变换稍复杂。分段存储管理的产生是因为分页缺乏逻辑意义一个程序通常由主程序、函数库、数据段、堆栈等逻辑单元组成。分段就是按这些逻辑单元将程序划分成不同段每段从0编址有独立名称和长度。段表是每个进程一张记录段号到段基址和段长度的映射。逻辑地址由段号和段内偏移组成。段号查段表获得段起始物理地址加上段内偏移。段表也有寄存器指示位置。若偏移超界产生越界中断。段页式存储是先分段再分页每个段拥有自己的页表。逻辑地址由段号、段内页号、页内偏移组成。地址变换需三次访存段表→页表→数据同样靠TLB加速。它兼有段的逻辑优势与分页的物理管理优势。三、虚拟内存如果程序必须全部装入内存才能运行可运行的程序大小就被物理内存牢牢限制。虚拟存储器突破了这个限制它基于局部性原理时间局部性和空间局部性允许进程只装入部分页面或段即可运行其余部分保留在磁盘用到时再动态载入。当进程访问不在内存中的页面时触发“缺页中断”操作系统再从磁盘调入所需页面 。请求分页系统是最常用的虚拟存储器实现方式在基本分页基础上增加了页置换功能。页表项扩展是除了页框号还需状态位P标识页面是否已装入内存、访问字段A记录访问情况用于置换算法、修改位M指示页面是否被修改决定换出时是否需写回磁盘、外存地址页面在磁盘上的位置。缺页中断是当程序访问的页面不在内存P0时硬件触发缺页中断。处理流程缺页中断与一般中断的关键区别它可以在指令执行中间产生且处理后必须返回重新执行该指令因为缺页导致指令未完成。页面置换算法核心必会计算缺页率当需要调入页面而无空闲页框时必须选择某一页淘汰。目标降低缺页率。最佳置换算法OPT淘汰未来最长时间不再被访问的页面。需要预知未来无法实现仅用作评价其他算法的理论标杆。先进先出FIFO淘汰最早调入的页。实现简单但可能淘汰常用页。注意Belady异常给进程分配的物理块增多缺页次数反而可能增加FIFO特有。最近最久未使用LRU淘汰最近最久没有访问的页面。性能接近OPT需要硬件记录访问次序如栈或移位寄存器开销大常用近似实现。时钟算法Clock又称NRU给每页关联一个访问位A页面被访问时硬件置A1。置换时循环扫描页面遇到A1则清0并跳过直到找到A0的页面淘汰。这是LRU的近似性能较好实现开销小实际系统常用。改进型时钟算法同时考虑访问位A和修改位M。优先淘汰(A0,M0)的页其次(0,1)然后(1,0)最后(1,1)。减少写回磁盘的开销。工作集模式是进程在某一时间间隔Δ内需要访问的页面集合。W(t, Δ)。如果分配给进程的物理块数小于其工作集进程将频繁缺页大部分时间都在等待页面调入。多道度太高分配给每个进程的物理块不足以容纳其工作集时系统频繁出现缺页中断大部分CPU时间都花在页面换入换出上吞吐量急剧下降。就出现了抖动预防抖动的方法采用工作集策略动态调整物理块分配。控制多道度监测CPU利用率和缺页率必要时挂起部分进程通过中级调度。采用“LS”准则使缺页平均时间L等于页面换出时间S。四、内存保护与共享保护防止进程非法访问其他进程或操作系统的内存。分页系统中页表项中添加保护位读/写/执行地址变换时硬件检查。分段系统中段表拥有段长和权限控制越界或越权即中断。共享多个进程的页表项映射到相同的物理页框实现代码或数据共享。分段因逻辑段独立共享更方便分页则需让共享页出现在各进程页表中的相同页框号。