计算机操作系统

计算机操作系统知识点总结(有这一篇就够了!!!)_原来如此呀的博客-CSDN博客


一、计算机系统概述

1 基本概念

定义:

  • 操作系统(Operation System, OS) 是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织和调度计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境,它是计算机系统中最基本的系统软件。

  • 操作系统是计算机系统中最基本的系统软件。

  • 多道程序系统:多道、宏观上并行、微观上串行。

基本特征:并发、共享、虚拟、异步:

  1. 并发:两个或多个事件在同一时间间隔内发生。并行:同一时刻发生。
  2. 共享:互斥共享方式,临界资源。同时访问方式。
  3. 虚拟:
    • 虚拟化:对资源的逻辑抽象,隔离,再分配,管理的一个过程。
    • 虚拟机:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境的完整计算机系统中。
  4. 异步:程序执行走走停停。

目的和功能:

  • 目的:处理机管理、存储器管理、文件管理、设备管理。
  • 命令接口:联机命令接口(cmd),脱机命令接口(bat脚本)。
  • 程序接口:由一组系统调用命令(也称广义指令)组成。例:GUI。GUI不是操作系统一部分,但他调用的命令是。
  • 裸机:没有任何软件支持(包括操作系统)。覆盖了软件的机器称为扩充机器或虚拟机。

2 发展

手工操作阶段:

  • 特点:无操作系统。用户独占全机,CPU等待手工操作。

批处理阶段:

  • 目的:解决人机矛盾及CPU和 I/O 设备之间速度的不匹配
  • 单道批处理:自动性(自动下一个任务),顺序性,单道性。
  • 多道批处理:多道,宏观上并行,微观上串行。

分时操作系统:

  • 原理:时间片导致分时,人机交互。
  • 特点:同时性(多个终端用户同时用一台计算机),交互性,独立性(用户间互不干扰),及时性。

实时操作系统:

  • 目的:为了能在某个时间限制内完成某些紧急任务。
  • 硬实时系统:某个动作必须在规定时刻完成。
  • 软实时系统:偶尔违反时间规定且不会引起永久性损害。

网络系统:

  • 网络操作系统:利用网络把计算机连接起来,实现各台计算机间数据共享。
  • 分布式计算机系统:协同工作的计算机系统。
  • 两者区别:分布式可以协同工作。

个人操作系统:

  • PC机

3 操作系统运行环境

模式:

  • 程序分类:内核程序,自编程序。
  • 指令分类:特权分类,非特权分类。
  • 状态:用户态(目态),核心态(管态、内核态)。
  • 时钟:计时。通过时钟中断的管理,可以实现进程的切换。
  • 中断:中断机制中,只有一小部分功能属于内核,它们负责保护和恢复中断现场的信息,转移控制权相关的处理程序。
  • 原语:不可中断。

访管指令:是一条可以在目态下执行的指令,用户程序中凡是要调用操作系统功能时就安排一条访管指令。当处理器执行到访管指令时就产生一个中断事件(自愿中断),暂停用户程序的执行,而让操作系统来为用户服务。

切换到用户态的指令也是特权指令。所以访管指令不是特权指令。

切换到核心态的指令是访管指令,从而产生一个中断事件将操作系统切换成核心态。

用户程序需要用到系统指令先需要切换到核心态再执行指令。

中断:

  • 中断(Interruption):外中断,CPU外中断,分为可屏蔽中断和不可屏蔽中断。可屏蔽中断如:键盘输入、网络数据包接收。不可屏蔽中断如:点断掉电。
  • 异常(Exception):内中断,CPU内中断,异常是不可屏蔽中断。故障(Fault),自陷(Trap),终止(Abort)。
  • 故障(Fault):指令引发的异常,例:除以0。
  • 自陷(Trap):事先安排的 “ 异常 ”,例:条件陷进指令。
  • 终止(Abort):CPU硬件故障,例:控制器出错。

4 操作系统结构

分层法:

  • 定义:将操作系统划分为若干层次(链表),每一层提供不同的功能,并通过定义明确的接口来相互通信,实现高度模块化和层次化的设计。
  • 优点:易于系统调试验证,扩充和维护。
  • 缺点:各层合理定义困难,效率较差。

模块化:

  • 定义:采用模块化设计(多叉树),将操作系统划分为多个独立的模块,每个模块负责不同的功能,模块之间通过接口进行通信,易于维护和扩展。
  • 独立性衡量:内聚性(模块内各部分联系的紧密程度)越高,耦合度(不同模块间的影响和联系程度)越低,独立性越好。
  • 优点:易开发、易维护。
  • 缺点:确保模块间的同步和全局状态一致性可能需要复杂的同步机制,增加设计复杂性。

宏内核:

  • 定义:在内核空间中实现大部分操作系统功能,将各种服务集成到内核中,提高系统性能和效率,但内核较庞大,扩展性较差。
  • 优点:由于服务直接在内核态执行,避免了频繁的上下文切换和用户态/内核态通信开销,从而提供较高的系统响应速度。
  • 缺点:内核庞大,包含大量代码,增加了设计、调试和维护的复杂性。一个服务中的漏洞可能影响整个内核,导致严重的安全问题。

微内核:

  • 定义:将操作系统的基本功能划分为若干独立的服务,每个服务运行在用户态,通过消息传递进行通信,实现更好的灵活性和可扩展性,但性能相对较低。
  • 优点:服务进程可在用户态动态加载、卸载或更新,无需重启系统,增强了系统的可配置性和适应性。安全性好。
  • 缺点:频繁的消息传递和上下文切换可能导致一定的性能下降,尤其对于需要高频交互的服务。

外核:

  • 定义:在外核模式下,操作系统被设计为一个用户态的应用程序,与硬件直接通信,实现更好的灵活性和可定制性,但对性能和安全性要求较高。

目前Windows和Linux主要是宏内核架构。

5 操作系统引导

定义:计算机系统启动时,通过引导加载程序(Boot Loader)将操作系统从存储设备(如硬盘、固态硬盘、光盘等)加载到内存中,并启动操作系统的过程。

操作系统引导的流程一般如下:

  1. 激活CPU,并进行硬件自检,确保硬件正常工作。
  2. BIOS程序加载带有操作系统的硬盘,查找主引导记录(Master Boot Record,MBR)。
  3. 主引导记录包含引导加载程序,它被加载到内存中执行。
  4. 引导加载程序扫描硬盘分区表,确定活动分区,加载分区引导记录(Partition Boot Record,PBR)。
  5. 分区引导记录包含启动管理器信息,启动管理器负责加载可用的操作系统。
  6. 启动管理器显示引导菜单,让用户选择要启动的操作系统。
  7. 启动管理器加载所选操作系统的内核和相应文件系统,启动操作系统。

6 虚拟机

定义:一种通过软件模拟的、与真实计算机类似的完整计算环境。它能够在宿主硬件之上创建一个或多个独立的、逻辑上隔离的虚拟计算实例,每个虚拟机拥有自己的虚拟CPU、内存、磁盘、网络适配器等资源,并能够在其上安装和运行完整的操作系统及应用程序,就像它们是在真正的物理硬件上一样。

第一类虚拟机管理程序:也称为裸金属虚拟机管理程序,直接安装在物理硬件之上,不需要任何宿主操作系统的支持。它直接与底层硬件(如CPU、内存、I/O设备)交互,负责管理和调度硬件资源,为上层虚拟机提供硬件虚拟化服务。

第二类虚拟机管理程序:第二类虚拟机管理程序则运行在已有的宿主操作系统之上,作为该操作系统上的一个应用程序来提供虚拟化功能。这意味着虚拟机管理程序和虚拟机都需要借助宿主操作系统的内核来间接访问物理硬件资源。


二、进程与线程

1 基本概念

1.1 进程

进程定义:系统进行资源分配和调度的基本单位。

PCB:Process Control Block,进程控制块。PCB是进程存在的唯一标识。

PCB包含的内容:

  • 进程描述信息:PID、UID。
  • 进程控制和管理系统:当前状态、优先级、代码入口地址、程序外存地址、进入内存时间、处理机占用时间、信号量使用。
  • 资源分配清单:代码段指针、数据段指针、堆栈段指针、文件描述符、鼠标键盘。
  • 处理机相关信息:通用寄存器值、地址寄存器值、控制寄存器值、标志寄存器值、状态字。

一个进程实体(进程映像)由程序段、相关数据段、PCB共同构成。创建进程实际上是创建PCB,撤销则是撤销PCB。所以进程映像是静态的,进程则是动态的。

进程特性:动态、并发、独立、异步。

进程状态:创建态,就绪态,运行态,阻塞态,终止态。

进程控制执行过程:

  1. 创建:分配一个PID和申请一个PCB,失败则创建失败。分配资源,初始化PCB,等待就绪队列接纳。
  2. 终止:根据PID检索出PCB,如果是运行态则立刻终止,若还有子孙进程也一并终止。归还资源给父进程或操作系统,将PCB从所在队列中删除。
  3. 阻塞:依照PID获得PCB,若是运行态则保护现场并将其转换成阻塞态,将PCB插入等待队列。
  4. 唤醒:在等待队列中找到PCB,然后将其移出等待队列并插入就绪队列。

进程通信

  • 共享存储(Shared Memory)
    • 创建共享区域:通过系统调用(如 shmget()CreateFileMapping() 等)创建一块可供多个进程访问的共享内存区域。所有参与通信的进程对该区域享有相同的访问权限(读、写或读写)。
    • 映射到地址空间:每个参与通信的进程使用系统调用(如 shmat()MapViewOfFile() 等)将共享内存区域映射到自己的地址空间,这样就可以像操作普通内存一样访问共享数据。
    • 同步与互斥:由于多个进程可能同时访问共享内存,需要使用同步机制(如互斥锁、信号量等)来确保数据一致性。进程在访问共享数据前获取锁,在访问完成后释放锁,防止竞态条件和数据冲突。
    • 优点:共享内存通信方式直接、高效,无须额外的数据拷贝,适合大量数据的快速交换。缺点是对同步机制的正确使用要求较高,否则可能导致死锁或数据不一致问题。
  • 消息传递(Message Passing)
    • 消息队列:通过系统调用(如 msgget()CreateQueue() 等)创建一个消息队列,进程间通过发送(msgsnd()SendMessage())和接收(msgrcv()ReceiveMessage())消息来进行通信。消息队列可以实现一对多、多对一或多对多的通信,并支持优先级排序和容量限制。
    • 套接字:在网络环境下,进程通过套接字(Socket)进行消息传递。进程可以创建套接字,绑定到本地端口,然后通过发送(send()WriteFile())和接收(recv()ReadFile())消息与其他进程(本地或远程)通信。套接字支持多种网络协议(如TCP、UDP),适用于分布式系统和互联网通信。
    • 信号:简单的一对一通信方式,通过发送信号(如 kill()RaiseException())通知目标进程某一事件的发生。信号通常携带有限的信息,主要用于进程间的简单同步或异常通知。
    • 优点:消息传递方式易于实现进程间逻辑解耦,天然支持异步通信和跨平台通信。缺点是相对于共享内存,消息的封装和传输可能会带来一定的开销,特别是对于小规模、高频的数据交换。
  • 管道通信(Pipes)
    • 匿名管道(Anonymous Pipes):在同一台计算机上,通过系统调用(如 pipe()CreatePipe())创建一对单向或双向连接的管道,用于父进程与其直接创建的子进程之间的通信。匿名管道的生命期与创建它的进程相关联,不能跨越进程边界。
    • 命名管道(Named Pipes/FIFOs):除了支持父子进程通信外,命名管道还可以用于任意两个有亲缘关系或无关的进程之间的通信。命名管道通过路径名在文件系统中标识,可以在不同进程中通过打开同一路径名建立通信连接。
    • 操作方式:进程通过标准的读写操作(如 read()write()ReadFile()WriteFile())在管道两端进行数据交换。管道通常有固定大小的缓冲区,满缓冲会导致写入阻塞,空缓冲会导致读取阻塞。
    • 优点:管道通信简单直观,特别适用于命令行工具的链式处理(pipeline)。缺点是功能相对有限,不适合大规模数据交换,且生命期管理较为复杂。

1.2 线程

线程定义:操作系统进行运行调度的最小单位。进程中实际工作的对象是线程。

进程状态:就绪、执行、阻塞。

TCB:Thread Control Block。线程控制块。

TCB包含的内容:线程标识符,一组寄存器,线程运行状态,优先级,线程专用存储区,堆栈指针。

因为同一进程中所有线程完全共享进程的地址空间和全局变量,所以一个线程可以读写另一个线程的堆栈。

线程的控制:创建、终止。

线程实现方式:

  • 用户级线程(User-Level Thread,UTL):完全由用户空间的线程库(如Pthreads、Java线程等)在应用程序层面实现和管理的线程。UTL的创建、调度、同步等操作均在用户态完成,无需内核介入。优点是轻量级、创建销毁速度快、上下文切换效率高;缺点是线程调度受应用程序控制,无法利用多处理器,一个UTL阻塞会导致整个进程阻塞。
  • 内核级线程(Kernel-Level Thread,KLT):由操作系统内核直接支持和管理的线程,每个KLT对应一个内核线程实体(如Linux的task_struct)。KLT的创建、调度、同步等操作涉及系统调用,由内核负责。优点是能充分利用多处理器,线程间相互独立,一个KLT阻塞不会影响其他KLT;缺点是创建销毁成本相对较高,上下文切换比UTL慢。
  • 组合方式:结合用户级线程和内核级线程的特点,实现一种混合模型。通常在一个进程中同时存在若干个内核级线程(KLT),每个KLT上进一步运行多个用户级线程(UTL)。这种方式兼顾了轻量级线程的高效性和内核级线程的并发性。当一个UTL阻塞时,内核可以调度同一KLT上的其他UTL继续执行,避免整个进程阻塞;同时,多个KLT可以并行运行在多处理器上,提升系统整体性能。这种模型常见于现代操作系统(如Solaris的N:M模型、Windows的 fibers over threads 等)。

多线程模型:

  • 多对一模型:多个用户级线程(UTL)映射到一个内核级线程(KLT)。在这种模型中,UTL的创建、调度、同步等操作完全在用户空间进行,非常高效。但当任何一个UTL阻塞(如I/O操作、系统调用等),整个进程(对应的唯一KLT)都会被阻塞,无法利用多处理器。此模型适用于线程大部分时间在用户态执行且阻塞较少的应用场景。
  • 一对一模型:每个用户级线程(UTL)严格对应一个内核级线程(KLT)。每个UTL的创建、调度、同步等操作都转化为对相应KLT的操作,由内核直接管理。这种模型下,UTL的阻塞不会影响其他UTL,且能充分利用多处理器。然而,创建销毁线程的成本较高,上下文切换频繁时性能下降明显。适用于对线程并发性和独立性要求较高的应用。
  • 多对多模型:多个用户级线程(UTL)映射到多个内核级线程(KLT)上,形成灵活的映射关系。可以根据应用程序需求和系统负载动态调整UTL与KLT的对应关系。当一个UTL阻塞时,内核可以调度同一KLT上的其他UTL继续执行,或调度其他KLT上的UTL,有效避免进程整体阻塞,同时利用多处理器。此模型兼具轻量级线程的高效性和内核级线程的并发性,适用于对性能、并发性和响应性有较高要求的复杂应用。典型的例子如Solaris的N:M模型、Windows的fibers over threads等。

2 处理机调度

3 同步与互斥

4 死锁


三、内存管理

1 内存管理

2 虚拟内存管理


四、文件管理


五、输入输出管理


六、常见操作系统

1 Windows

text::Windows操作系统

2 Linux

text::Ubuntu Linux


七、操作系统安全

删库跑路