云计算百科
云计算领域专业知识百科平台

操作系统与虚拟化安全重点 1.1.操作系统原理和设计

操作系统原理和设计

    • 一、操作系统主流结构:宏内核(Monolithic Kernel)与微内核(Microkernel)的区别
    • 二、从资源管理角度,操作系统主要功能划分
    • 三、操作系统设计技术
      • 1. 操作系统中文件相关的三种表之间的关系
      • 2. 操作系统的进程结构设计

一、操作系统主流结构:宏内核(Monolithic Kernel)与微内核(Microkernel)的区别

宏内核(Monolithic Kernel) 与 微内核(Microkernel) 是操作系统内核的两种主要架构模式,其核心区别在于功能模块的组织方式和运行模式:

比较维度宏内核(Monolithic Kernel)微内核(Microkernel)
设计哲学 大而全,内核集中实现所有操作系统功能 小而精,内核仅提供最基本服务,其他功能运行在用户态
功能分布 文件系统、设备驱动、内存管理、进程调度等均在内核态实现 仅进程通信、低级内存管理、中断处理等核心功能在内核态
系统调用方式 通过内核态的系统调用直接执行 通过消息传递机制,内核作为消息中转站
运行效率 高(模块间调用无需跨越用户态/内核态边界) 相对较低(频繁的上下文切换与消息传递带来开销)
稳定性与安全性 一个模块崩溃可能导致整个系统崩溃 单个服务崩溃不影响内核与其他服务,系统更稳定、安全
可扩展性与维护 扩展需修改内核,较复杂;版本升级常需重启 模块可独立开发、加载、更新,易于扩展和维护
典型系统 Linux、UNIX、早期Windows Windows NT(现代版本)、macOS(基于Mach)、Minix、HarmonyOS

补充说明: 现代操作系统常采用混合内核(Hybrid Kernel)设计,在微内核基础上将部分关键服务(如文件系统、驱动)仍置于内核态以提升性能,如Windows NT与macOS实际为混合内核结构。


二、从资源管理角度,操作系统主要功能划分

操作系统作为计算机系统的资源管理器,其主要功能可划分为以下五大类,对应于管理的核心硬件与软件资源:

功能模块管理对象主要任务关键机制/技术
CPU管理 处理器资源 1. 进程与线程的创建、同步、通信与撤销2. CPU调度(决定哪个进程/线程使用CPU)3. 中断处理与异常响应 进程控制块(PCB)、调度算法(FCFS、RR、MLFQ等)、中断向量表
存储管理 内存与存储层次 1. 内存分配与回收2. 地址映射与内存保护3. 虚拟内存实现(页面置换、段页式管理)4. 缓存与交换空间管理 页表、TLB、页面置换算法(FIFO、LRU等)、分段与分页
设备管理 输入输出设备 1. 设备驱动管理与抽象(统一接口)2. 设备分配与回收(独占/共享/虚拟)3. 缓冲区管理与I/O调度4. 中断处理与DMA控制 设备控制器、驱动程序、SPOOLing、I/O队列、缓冲池
文件管理 文件系统与存储介质 1. 文件存储与目录结构组织2. 文件操作(创建、读写、删除、权限控制)3. 磁盘空间管理(分配与回收)4. 文件备份、恢复与加密 文件控制块(FCB)、目录树、文件分配表(FAT)、索引节点
用户接口 用户与系统交互 1. 命令接口(CLI)2. 图形接口(GUI)3. 程序接口(系统调用API) Shell、图形窗口管理器、系统调用库(如libc)

补充说明: 上述五大功能并非孤立,而是协同工作。例如,打开一个文件(文件管理)可能涉及磁盘I/O(设备管理)、内存缓存(存储管理)和进程等待(CPU管理)。操作系统的核心目标正是通过这五大功能的协调,实现资源的高效、公平、安全、透明共享与管理。


三、操作系统设计技术

1. 操作系统中文件相关的三种表之间的关系

(1)三种表的定义与作用

  • 用户文件描述符表

    • 性质:进程私有,位于用户区(实际为进程的内核数据结构一部分)。
    • 结构:通常是一个数组(如 files_struct 中的 fd_array[]),索引就是文件描述符。
    • 作用:进程通过文件描述符(一个整数)来访问其所有已打开的文件。该表项指向系统文件表中的一个条目。
  • 系统文件表

    • 性质:全局共享,位于内核区。
    • 结构:一个全局内核结构数组(如 file 结构体数组)。
    • 作用:记录一个打开实例的详细信息,包括:
      • 文件偏移指针:下一次读/写操作开始的位置。
      • 访问模式:只读、只写、读写等。
      • 状态标志:如 O_APPEND, O_NONBLOCK。
      • 引用计数:有多少个文件描述符指向它。
      • 指向内存索引节点表项的指针(f_inode 或 vnode)。
  • 内存索引节点表

    • 性质:全局共享,位于内核区。
    • 结构:一个缓存活动文件 inode 的内核结构数组(如 inode 结构体)。
    • 作用:缓存从磁盘索引节点(存储文件元数据)读取的信息,包含:
      • 磁盘inode副本:所有者、权限、大小、时间戳、数据块位置等。
      • 内存状态:是否被锁定、是否与磁盘不同(脏)、是否为挂载点。
      • 引用计数:有多少个系统文件表项指向它(即该文件被打开的次数)。
      • 所属文件系统信息。

(2)三者之间的逻辑关系与数据流

  • 进程打开文件:当进程调用 open(“/path/file”) 时:

    • 内核通过路径查找(namei)找到或创建(ialloc)对应的磁盘inode,并将其载入内存索引节点表(iget)。
    • 内核在系统文件表中分配一个空闲的 file 结构体,初始化其文件偏移(通常为0)、访问模式,并使其指向刚载入的内存inode。该 file 结构的引用计数置为1。
    • 内核在进程的用户文件描述符表中找一个空闲的最小索引号(如 fd=3),令其指向刚分配的 file 结构。最后将 fd=3 返回给用户进程。
  • 关系图示(从进程视角):

    进程A 内核区(全局)
    ┌─────────────────────┐ ┌─────────────────────────────────────┐
    │ 用户文件描述符表 │ │ │
    │ fd0 ──────────────┐ │ │ 系统文件表 (file结构体) │
    │ fd1 ───────────┐ │ │ │ entry1: mode=r, pos=0, count=2 ──┐│
    │ fd2 │ │ │ │ entry2: mode=rw, pos=120, count=1││
    │ fd3 ─────────┐ │ │ │ └────────────────┬──────────────────┘│
    └──────────────│─│──│──┘ │ │
    │ │ └─────────────────────────────┘ │
    │ │ │
    │ └──────────────────────────────────────────────────┘ │
    │ │
    │ ┌─────────────────────────────────────┐ │
    └─────────┤ 内存索引节点表 (inode结构体) │ │
    │ inodeX: (文件A元数据), count=3 ◄────┘ │
    │ inodeY: (文件B元数据), count=1 │
    └────────────────────────────────────────────┘

  • 关键特性与实例分析:

    • 不同进程打开同一文件:进程A和进程B都打开 /etc/passwd,则它们各自拥有不同的文件描述符,指向两个不同的系统文件表项,但这两个表项都指向同一个内存inode。这样,两个进程对文件的读写通过各自的偏移指针独立进行(除非使用 O_APPEND)。
    • 同一进程多次打开同一文件:进程A两次调用 open(“/etc/passwd”, …),会获得两个不同的fd,指向两个独立的系统文件表项(拥有各自独立的文件偏移),但同样指向同一个内存inode。
    • fork产生的子进程继承文件描述符:当进程A调用 fork 创建子进程B时,子进程B复制父进程的整个用户文件描述符表。因此,B中的fd指向与A相同的系统文件表项,导致这些表项的引用计数增加。不需要为子进程重新建立系统文件表项,这就是“共享打开文件状态”的由来。父进程和子进程可以共用同一个文件偏移指针。
  • (3)与虚拟文件系统的联系

    • 内存索引节点是VFS层的抽象(inode),其底层的 i_op 和 i_fop 指针指向具体文件系统(如ext4、NTFS)的实现函数。
    • 系统文件表中的 file 结构体,其 f_op 指针同样指向具体文件系统的操作函数集(file_operations),从而通过“文件系统总线”实现通用接口。

    2. 操作系统的进程结构设计

    操作系统的进程结构设计体现在其进程控制块中,PCB是进程存在的唯一标志,集中存储了管理与控制进程所需的全部信息。课件的设计可归纳如下:

    (1)标识信息

    • 进程ID:唯一标识进程的整数(PID)。
    • 用户/组ID:用于权限控制。
      • 真实UID/GID:进程所有者的身份。
      • 有效UID/GID:用于实际权限检查,setuid 程序可改变此ID以提升权限。

    (2)状态与调度信息

    • 进程状态:运行、就绪、睡眠(可中断/不可中断)、僵死等。
    • 调度信息:优先级、调度策略(普通、实时)、时间片、累计运行时间(用于动态优先级计算)。

    (3)进程间关系(树状组织)

    • 父子指针:parent 指向父进程,children 链表或兄弟指针维护子进程列表。
    • 进程0:内核启动时手工创建的空闲进程,是所有进程的始祖。
    • 进程1:由进程0创建的 init 进程,负责启动用户空间服务,是所有用户进程的祖先。

    (4)内存管理信息

    • 内存描述符:指向 mm_struct,描述进程的整个虚拟地址空间。
    • 内存映射:页表、段表等硬件相关结构,用于虚拟地址到物理地址的转换。
    • 内存区域列表:描述代码段、数据段、堆、栈、共享库等各个虚拟内存区域(VMA)的属性。

    (5)文件系统信息

    • 文件描述符表:指向 files_struct,管理所有打开的文件。
    • 文件系统信息:指向 fs_struct,包含根目录(root)、当前工作目录(pwd)的vnode/inode。

    (6)进程上下文 这是进程能够“暂停-恢复”执行的核心,分为三级:

    • 用户级上下文:进程的正文(代码)、数据、用户栈和共享内存区。
    • 寄存器上下文:当进程被切换时,必须保存/恢复的CPU硬件状态,包括:
      • 程序计数器:下一条要执行的指令地址。
      • 处理器状态字:条件码、中断屏蔽位等。
      • 栈指针、通用寄存器。
    • 系统级上下文:进程在内核中的运行环境。
      • 进程表项/U区:即PCB本身,是进程的静态信息。
      • 内核栈:进程在内核态执行时使用的栈。
      • 内存管理数据结构:页表、区表等。

    上下文切换仅发生在内核态,当内核决定调度另一个进程时,它会保存当前进程的寄存器上下文和必要的系统级上下文,并恢复下一个进程的上下文。

    (7)进程间通信信息

    • 信号处理表:记录每个信号的处理方式(忽略、默认、捕获)。
    • 信号屏蔽字:当前被阻塞的信号集合。
    • IPC结构指针:指向该进程使用的消息队列、共享内存段、信号量集等System V IPC对象。

    (8)时间与定时器

    • 时间统计:用户态时间、内核态时间、子进程时间。
    • 定时器:实时定时器、虚拟定时器(CPU时间)、Profiling定时器,超时后发送信号。

    (9)其他资源信息

    • 审计与控制信息:会话ID、进程组ID、控制终端。
    • 资源限制:对CPU时间、文件大小、堆栈大小等的软硬限制。

    (10)设计思想总结 操作系统的进程结构设计是一个分层的、模块化的信息集合体:

    • 身份层:标识与关系。
    • 资源层:CPU、内存、文件的分配状态。
    • 现场层:保证执行连续性的上下文。
    • 通信层:与其他进程的交互手段。 这种设计使得内核能够高效地隔离、调度、保护和恢复各个进程的执行,是实现多任务并发的基石。U区(进程私有内核数据)和进程表项(全局可见信息)的分离,以及通过系统区表和进程区表实现内存区域共享的间接映射,都体现了对安全性和灵活性的精心考量。
    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 操作系统与虚拟化安全重点 1.1.操作系统原理和设计
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!