计算机操作系统学习笔记

一、操作系统概述

(一)定义与功能

操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。其主要功能包括:

  1. 进程管理:负责对进程进行创建、调度、终止等操作。例如,在多任务操作系统中,同时运行着浏览器、音乐播放器、文本编辑器等多个进程,操作系统需要合理分配 CPU 时间,让各个进程都能有序执行。
  2. 内存管理:管理计算机的内存资源,包括内存的分配、回收以及地址映射等。比如,当启动一个大型游戏程序时,操作系统会为其分配足够的内存空间,确保游戏能够正常运行。
  3. 文件管理:对计算机中的文件和目录进行组织、存储、检索和保护。像我们在电脑上保存的文档、图片、视频等各类文件,都由文件管理模块进行管理。
  4. 设备管理:负责管理计算机的外部设备,如键盘、鼠标、打印机、硬盘等。例如,当我们插入 U 盘时,操作系统会自动识别并进行相应的驱动加载等操作。

(二)操作系统分类

  1. 批处理操作系统:用户将作业成批地提交给计算机,计算机自动依次处理各个作业。这种系统适合处理大量重复性的任务,但用户不能实时干预作业的执行。
  2. 分时操作系统:将 CPU 时间划分成时间片,轮流分配给多个用户程序使用。每个用户感觉自己独占计算机,可及时交互。常见的 Unix 系统早期就采用分时技术。
  3. 实时操作系统:能在规定的时间内对外部事件做出及时响应并处理。常用于工业控制、航空航天、军事等领域,如飞机的飞行控制系统。
  4. 网络操作系统:主要用于管理网络中的资源和通信,提供网络服务,如文件共享、打印共享、用户管理等。Windows Server 系列就是典型的网络操作系统。
  5. 分布式操作系统:将多个分散的计算机节点通过网络连接起来,统一管理资源,协调工作。云计算环境中就常采用分布式操作系统。

二、进程管理

(一)进程的概念

进程是程序的一次执行过程,是操作系统进行资源分配和调度的基本单位。它由程序段、数据段和进程控制块(PCB)组成。例如,当我们双击打开一个应用程序时,操作系统就会为其创建一个进程,该进程包含了运行程序所需的代码、数据以及用于管理进程状态的 PCB 信息。

(二)进程状态

  1. 就绪状态:进程已获得除 CPU 之外的所有必要资源,只要获得 CPU 资源,就可以立即执行。就像运动员在起跑线上准备就绪,只等发令枪响(获得 CPU)就起跑。
  2. 执行状态:进程正在 CPU 上运行。此时进程占用 CPU 资源,执行程序指令。
  3. 阻塞状态:进程因等待某一事件(如 I/O 操作完成、等待信号量等)而暂时无法执行。比如,当进程需要从硬盘读取数据时,在数据未读取完成前,进程会进入阻塞状态。

(三)进程调度

  1. 先来先服务(FCFS)调度算法:按照进程到达的先后顺序进行调度,先到达的进程先获得 CPU 资源。这种算法简单公平,但对于短进程可能不太友好,可能导致短进程等待时间过长。
  2. 短作业优先(SJF)调度算法:优先调度运行时间最短的进程。可以提高系统的整体效率,但难以准确预知进程的运行时间,且可能导致长进程饥饿(长时间得不到调度)。
  3. 时间片轮转调度算法:将 CPU 时间划分成固定大小的时间片,就绪队列中的进程轮流在 CPU 上运行一个时间片。若时间片结束时进程未完成,就回到就绪队列末尾等待下一次调度。这种算法适用于分时系统,能保证每个进程都有机会得到 CPU 时间。
  4. 优先级调度算法:为每个进程分配一个优先级,优先级高的进程优先获得 CPU 资源。可以根据进程的重要性、资源需求等因素确定优先级,但可能会出现低优先级进程长期得不到调度的情况。

三、内存管理

(一)内存分配方式

  1. 静态分配:在程序运行前,就为其分配固定大小的内存空间,在程序运行过程中,内存空间大小不再改变。这种方式简单,但内存利用率较低,可能导致内存浪费。例如早期的一些简单程序可能采用静态分配方式。
  2. 动态分配:在程序运行过程中,根据程序的实际需求动态地分配和回收内存。可以提高内存利用率,但实现相对复杂,需要操作系统进行有效的管理和控制。现代操作系统大多采用动态分配方式。

(二)虚拟内存技术

虚拟内存是操作系统利用硬盘空间模拟的一块内存区域,使得程序可以运行在比实际物理内存更大的空间中。其原理是将暂时不用的内存数据存储到硬盘上,当需要时再调回内存。比如,我们在运行一个大型游戏时,游戏程序的代码和数据可能很大,超过了物理内存容量,但通过虚拟内存技术,游戏可以正常运行。虚拟内存技术包括请求分页存储管理、请求分段存储管理等方式。

(三)页面置换算法

当内存空间不足,需要将一些页面置换出去时,就要用到页面置换算法。常见算法有:

  1. 最佳置换算法(OPT):理论上最优的算法,它选择未来最长时间内不会被访问的页面进行置换。但由于无法预知未来,该算法实际难以实现,主要用于理论分析和性能比较。
  2. 先进先出(FIFO)置换算法:按照页面进入内存的先后顺序进行置换,先进入的页面先被置换出去。这种算法简单,但可能会置换掉经常使用的页面,导致性能下降。
  3. 最近最少使用(LRU)置换算法:选择最近一段时间内最少使用的页面进行置换。它基于局部性原理,认为最近少用的页面未来也可能少用。实现 LRU 算法可以采用栈、计数器等多种方式。

四、文件管理

(一)文件系统结构

文件系统通常采用层次化的目录结构,如树形目录结构。根目录下可以包含多个子目录和文件,子目录下又可以进一步包含子目录和文件。这种结构类似于我们电脑中的文件夹结构,方便用户对文件进行分类管理和查找。例如,在 Windows 系统中,C 盘根目录下有 “Program Files”“Windows” 等子目录,每个子目录下又有众多文件和子目录。

(二)文件的逻辑结构

  1. 顺序文件:文件中的记录按照顺序依次排列,读写操作按顺序进行。比如文本文件,通常是顺序存储的,从文件开头依次读取内容。
  2. 索引文件:为文件建立一个索引表,索引表中记录了文件记录的关键字和对应的物理地址。通过索引可以快速定位到需要的文件记录,适用于频繁进行随机访问的文件。
  3. 索引顺序文件:结合了顺序文件和索引文件的优点,先对文件记录进行分组,为每组建立一个索引项,既保持了顺序文件的顺序特性,又可以通过索引快速定位组内记录。

(三)文件的物理结构

  1. 连续分配:在磁盘上为文件分配一组连续的物理块,文件的逻辑块号与物理块号是连续对应的。这种分配方式简单,读写速度快,但不利于文件的动态增长和删除,容易产生磁盘碎片。
  2. 链接分配:采用链表的方式将文件的各个物理块链接起来。分为隐式链接和显式链接,隐式链接中每个物理块中包含指向下一个物理块的指针;显式链接则通过一张文件分配表(FAT)来记录文件各物理块的链接关系。链接分配便于文件的动态增长和删除,但不适合随机访问。
  3. 索引分配:为每个文件建立一个索引块,索引块中记录了文件各个物理块的地址。通过索引块可以快速找到文件的物理块,既适合顺序访问,也适合随机访问。

五、设备管理

(一)I/O 设备分类

  1. 输入设备:用于向计算机输入数据和信息,如键盘、鼠标、扫描仪等。键盘通过按键操作将字符信息输入计算机,鼠标则用于控制屏幕上的光标位置和进行选择操作。
  2. 输出设备:将计算机处理的结果输出显示或存储,如显示器、打印机、音箱等。显示器将计算机处理后的图像、文字等信息展示给用户,打印机则将文档等内容打印到纸张上。
  3. 存储设备:用于存储数据,如硬盘、U 盘、光盘等。硬盘是计算机中最主要的存储设备,用于长期存储操作系统、应用程序和用户数据等。

(二)I/O 控制方式

  1. 程序直接控制方式:由 CPU 直接控制 I/O 设备的数据传输,CPU 不断查询 I/O 设备的状态,直到数据传输完成。这种方式简单,但 CPU 利用率低,在数据传输过程中 CPU 一直处于等待状态。
  2. 中断驱动方式:当 I/O 设备完成数据传输准备工作时,向 CPU 发送中断请求,CPU 响应中断后进行数据传输操作。相比程序直接控制方式,提高了 CPU 利用率,CPU 无需一直查询设备状态。
  3. DMA 方式(直接内存访问):在 DMA 控制器的控制下,I/O 设备直接与内存进行数据传输,无需 CPU 干预。只有在数据传输开始和结束时才需要 CPU 进行一些初始化和收尾工作,大大提高了数据传输效率和 CPU 利用率。
  4. 通道方式:通道是一种特殊的处理器,专门用于管理 I/O 操作。通道可以独立执行通道程序,控制 I/O 设备与内存之间的数据传输,进一步减轻了 CPU 的负担,适用于大型计算机系统。

(三)设备分配与调度

  1. 设备分配:操作系统根据进程的请求,将 I/O 设备分配给相应的进程使用。分配方式有静态分配和动态分配,静态分配在进程运行前就分配好设备,直到进程结束才收回;动态分配则在进程运行过程中根据需要分配设备。
  2. 设备调度:当多个进程请求使用同一设备时,操作系统需要按照一定的策略进行调度,决定哪个进程先使用设备。常见的调度算法有先来先服务、优先级调度等,原理与进程调度类似。