Java技术八股学习Day24

操作系统

操作系统基础

(1)操作系统的定义与核心功能

操作系统(OS)是管理计算机硬件与软件资源的核心软件,内核(Kernel)是其核心部分,负责内存、设备、文件、进程等管理,屏蔽硬件复杂性,为应用程序提供统一接口。核心功能包括 6 点:进程 / 线程管理(创建、调度、通信)、存储管理(内存 / 外存分配回收)、文件管理(读写、创建删除)、设备管理(硬件请求处理、设备启动)、网络管理(网络配置、通信、安全)、安全管理(身份认证、访问控制)。

(2)常见操作系统
  • Windows:桌面端主流,界面易用,软件生态完善;
  • Unix:早期多用户多任务系统,为后续系统提供参考;
  • Linux:开源类 Unix 系统,基于 Linux 内核,有多个发行版,适用于服务器场景;
  • Mac OS:苹果专属,兼顾编程体验与用户体验,界面和生态优秀。

用户态与内核态

(1)核心定义
  • 用户态:进程权限低,仅能访问自身数据,无法直接操作硬件资源,需通过系统调用请求内核服务;
  • 内核态:进程权限高,可访问计算机所有资源(内存、设备、驱动等),执行特权指令(如内存分配、IO 处理)。
(2)划分意义

避免危险指令被随意调用,防止应用程序破坏系统稳定性;同时减少资源竞争冲突,提升系统性能和安全性,若仅保留内核态,所有程序共享资源,易导致混乱和安全风险。

(3)切换方式
  • 系统调用(主动切换):用户态进程需执行特权操作时(如读写磁盘),通过系统调用触发 Trap 中断,切换到内核态;
  • 中断(被动切换):外围设备完成操作后(如硬盘读写完成),向 CPU 发送中断信号,触发内核态切换;
  • 异常(被动切换):用户态程序执行时出现不可预知错误(如缺页异常),自动切换到内核态执行异常处理程序。

系统调用

(1)定义与作用

系统调用是应用程序与操作系统内核的交互接口,用户态程序需访问底层资源(如文件、内存、设备)时,通过系统调用向内核发起请求,由内核代为执行特权操作,再将结果返回给应用程序。系统调用按功能分为设备管理、文件管理、进程管理、内存管理等类别。

(2)执行流程
  1. 用户态程序发起系统调用,触发 Trap 中断;
  2. CPU 暂停当前用户程序,跳转到内核态的中断处理程序,执行系统调用;
  3. 系统调用完成后,通过特权指令(如 iret、sysret)切换回用户态,恢复程序上下文并继续执行。

进程与线程

(1)核心定义
  • 进程:正在运行的程序实例(如打开的微信),是资源分配的基本单位,拥有独立的内存空间、文件句柄等资源;
  • 线程:轻量级进程,是调度执行的基本单位,多个线程共享所属进程的资源(堆、元空间),但拥有独立的程序计数器、虚拟机栈、本地方法栈。
(2)核心区别
  • 资源占用:进程资源独立,占用多;线程共享进程资源,占用少;
  • 切换开销:进程切换需切换资源上下文,开销大;线程切换仅切换执行上下文,开销小;
  • 独立性:进程间独立,互不影响;同一进程内线程可能相互干扰;
  • 管理成本:进程管理和保护成本高;线程管理成本低,不利于资源保护。
(3)引入线程的原因
  • 降低切换开销:线程切换成本远低于进程,提升系统并发效率;
  • 高效利用多核 CPU:多线程可映射到多个 CPU 核心并行执行,提升任务处理速度;
  • 优化资源利用率:进程阻塞(如 IO 等待)时,其他线程可继续执行,充分利用 CPU 和 IO 资源;
  • 简化通信:同一进程内线程共享资源,通信无需依赖内核,更高效。
(4)线程同步方式
  • 互斥锁(Mutex):保证同一时间仅一个线程访问共享资源(如 Java 的 synchronized、Lock);
  • 读写锁(Read-Write Lock):允许多线程同时读,仅允许一个线程写,提升读操作并发效率;
  • 信号量(Semaphore):控制同时访问共享资源的最大线程数;
  • 屏障(Barrier):等待所有线程到达指定点后再共同执行(如 Java 的 CyclicBarrier);
  • 事件(Wait/Notify):通过通知机制实现线程同步,支持优先级控制。
(5)进程核心相关概念
  • PCB(进程控制块):管理进程的数据结构,包含进程描述信息(名称、ID)、调度信息(状态、优先级、阻塞原因)、资源需求(CPU、内存、IO 设备)、文件信息(文件描述符)、处理器状态信息(寄存器、程序计数器)等;
  • 进程状态:分为创建态(new)、就绪态(ready,已获资源等待 CPU)、运行态(running,正在 CPU 执行)、阻塞态(waiting,等待事件完成)、结束态(terminated),状态间通过调度、IO 事件、时间片用完等触发切换;
  • 进程间通信方式:管道(匿名管道,亲缘进程间)、有名管道(FIFO,任意进程间,先进先出)、信号(通知进程事件发生)、消息队列(内核中的消息链表,支持随机查询)、信号量(进程同步,避免竞争)、共享内存(多进程访问同一块内存,高效)、套接字(网络通信,跨主机进程间);
  • 进程调度算法:FCFS(先到先服务,简单但不利于短进程)、SJF(短作业优先,提升短进程效率)、RR(时间片轮转,公平,适用于分时系统)、优先级调度(按优先级执行,优先级相同按 FCFS)、MFQ(多级反馈队列,兼顾高优先级和短进程,UNIX 采用);
  • 特殊进程:僵尸进程(子进程终止但父进程未调用 wait () 回收 PCB)、孤儿进程(父进程终止,子进程由 init 进程接管回收)。

死锁

(1)定义

多个进程 / 线程同时阻塞,互相等待对方释放所需资源,导致程序无法继续执行,无限期阻塞。

(2)产生的四个必要条件
  • 互斥条件:资源一次仅能被一个进程使用;
  • 占有并等待:进程占有部分资源,同时等待其他进程的资源;
  • 非抢占条件:资源不能被强制抢占,仅能由持有进程主动释放;
  • 循环等待条件:多个进程形成资源等待环路(如 A 等 B 的资源,B 等 A 的资源)。
(3)死锁的解决方法
  • 预防:破坏四个必要条件之一,常用策略为静态分配(进程执行前申请所有资源,破坏占有并等待)、层次分配(资源分层次,仅能申请更高层次资源,破坏循环等待);
  • 避免:允许必要条件存在,通过算法预判分配资源后是否安全,典型为银行家算法(试探分配资源,判断系统是否处于安全状态,不安全则拒绝分配);
  • 检测:不限制资源分配,定时运行死锁检测程序,通过进程 - 资源分配图判断是否存在死锁(有环路且资源类仅一个资源则死锁,多资源需进一步判断);
  • 解除:检测到死锁后,通过终止所有死锁进程、逐个撤销死锁进程、抢占死锁进程资源等方式恢复系统。
相关推荐
Scott9999HH3 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔3 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社4 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海4 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖5 小时前
JDK 26 新特性详解
java·开发语言
马优晨5 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a1117767 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao7 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区7 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大8 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf