当前位置: 首页 > news >正文

操作系统知识

操作系统基础概念

操作系统是管理计算机硬件与软件资源的系统软件,为用户和应用程序提供接口。主要功能包括进程管理、内存管理、文件系统管理、设备管理和用户界面。

进程与线程

进程是程序的一次执行实例,拥有独立的地址空间和系统资源。线程是进程内的执行单元,共享进程资源但拥有独立的栈和寄存器。多线程能提高程序并发性,但需注意线程同步问题。

线程的运行状态:新建、就绪、运行、阻塞、等待、超时等待、死亡

内存管理

操作系统通过虚拟内存技术扩展物理内存空间。分页机制将内存划分为固定大小的页,通过页表实现虚拟地址到物理地址的映射。页面置换算法如LRU(最近最少使用)用于处理缺页中断。

文件系统

文件系统负责数据的存储和检索。常见结构包括FAT32、NTFS和ext4。文件系统通过目录树组织文件,提供权限控制和数据冗余机制。

设备管理

操作系统通过设备驱动程序与硬件交互。中断机制和DMA(直接内存访问)技术用于提高I/O效率。设备管理还包括缓冲区和SPOOLing技术。

同步与死锁

进程同步机制包括信号量、互斥锁和条件变量。

死锁指多个进程因争夺资源而相互等待的现象。

死锁预防策略包括资源有序分配和银行家算法。

死锁的发生必须同时满足以下四个必要条件:

  1. 互斥条件
    资源一次只能被一个进程占用,其他进程必须等待该资源被释放。

  2. 占有并等待
    进程已经持有至少一个资源,同时又在等待获取其他被占用的资源。

  3. 不可抢占条件
    已分配给进程的资源不能被其他进程强行剥夺,必须由进程自行释放。

  4. 循环等待条件
    存在一个进程等待的循环链,每个进程都在等待下一个进程所占用的资源。

死锁解决方案

预防死锁

通过破坏死锁的四个必要条件之一来避免死锁的发生:

  • 破坏互斥条件
    允许某些资源被共享访问,例如只读文件。但许多资源(如打印机)无法共享。

  • 破坏占有并等待
    要求进程在开始执行前一次性申请所有所需资源,或释放已有资源后再申请新资源。

  • 破坏不可抢占条件
    若进程无法获取所需资源,则释放已占用的资源,等待后续重新申请。

  • 破坏循环等待
    对资源类型进行线性排序,强制进程按顺序申请资源。

避免死锁

通过动态检查资源分配状态确保系统不会进入不安全状态:

  • 银行家算法
    模拟资源分配过程,仅当分配后系统仍处于安全状态时才允许分配。
检测与恢复

允许死锁发生,但定期检测并采取措施恢复:

  • 资源分配图检测
    通过图论方法检测是否存在循环等待。

  • 恢复方法
    终止部分进程或强制释放资源以打破死锁。

忽略死锁

某些系统(如某些嵌入式系统)可能选择忽略死锁,认为其发生概率极低或影响较小。

实际应用建议

  • 在编程中,尽量按固定顺序获取锁以减少循环等待的可能性。
  • 使用超时机制,避免无限期等待资源。
  • 减少锁的粒度,缩短持有锁的时间。

系统调用

系统调用是用户程序与操作系统内核交互的接口。常见调用包括文件操作(open/read/write)、进程控制(fork/exec)和网络通信(socket)。

常见操作系统架构

  • 单体内核:如Linux,所有功能模块运行在内核空间
  • 微内核:如QNX,仅核心功能在内核,其他模块运行在用户态
  • 混合内核:如Windows NT,结合单体与微内核特点

性能优化技术

  • 缓存机制:减少磁盘I/O操作
  • 预读取:提前加载可能访问的数据
  • 写时复制:减少内存复制开销
  • 负载均衡:在多核系统中合理分配任务

安全机制

操作系统安全包括用户认证、访问控制列表(ACL)、能力机制和防火墙。现代系统还采用地址空间布局随机化(ASLR)和数据执行保护(DEP)防范攻击。

虚拟化技术

虚拟化通过Hypervisor创建多个虚拟机实例。类型1 Hypervisor直接运行在硬件上(如Xen),类型2运行在主机OS上(如VirtualBox)。容器技术(Docker)提供更轻量级的虚拟化方案。

虚拟机和Docker区别

Docker基于容器化技术,直接共享宿主机的操作系统内核,通过命名空间和控制组(cgroups)实现隔离。虚拟机(VM)依赖Hypervisor虚拟化硬件,每个VM运行独立的完整操作系统。

虚拟机提供完整的硬件级隔离,不同VM间完全独立。容器使用进程级隔离,共享操作系统内核,存在潜在安全风险(需配合Seccomp、AppArmor等增强)。

性能表现:容器因直接调用宿主机内核,性能接近原生。虚拟机需通过Hypervisor层转换,存在约5-15%的性能损耗。

http://www.dtcms.com/a/347877.html

相关文章:

  • (一)算法(big O/)
  • claude-code+kimi实测
  • 当AI成了“历史笔迹翻译官”:Manus AI如何破解多语言手写文献的“密码锁”
  • Redis优缺点
  • leetcode80:删除有序数组中的重复项 II(快慢指针法)
  • 历史数据分析——半导体
  • 5.在云服务器上部署RocketMQ以及注意点
  • 双指针:三数之和
  • SQL注入1----(sql注入原理)
  • 深入理解 OPRF 技术:盲化伪随机函数的原理、对比与应用
  • UE 官方文档学习 C++TArray 移除操作
  • C++11: std::weak_ptr
  • 单片机的输出模式推挽和开漏如何选择呢?
  • leetcode算法刷题的第十六天
  • std::exchange详解
  • 智慧交通夜间逆光误检率↓81.4%!陌讯多模态融合算法在主干道监测的落地优化
  • 暴雨环境漏检率下降78%!陌讯动态融合算法在道路积水识别的工程突破
  • 电感反射特性
  • dinov3使用介绍
  • 【51单片机】【protues仿真】 基于51单片机储物箱系统
  • 企业智脑智能体开发全解析
  • docker的基础配置
  • SEO优化工具学习——Ahrefs进行关键词调研(包含实战)
  • 元宇宙的未来展望:机遇、风险与人类社会的新形态
  • FLOPs、TFLOPs 与 TOPS:计算能力单位
  • pig框架导入总结
  • Claude Code 新手使用入门教程
  • 第2题 - 登山鞋(C++实现)
  • 计算机组成原理(12) 第二章 - 主存储器的基本组成
  • 遥感机器学习入门实战教程|Sklearn案例⑨:数据预处理(Processing)