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)死锁的解决方法
  • 预防:破坏四个必要条件之一,常用策略为静态分配(进程执行前申请所有资源,破坏占有并等待)、层次分配(资源分层次,仅能申请更高层次资源,破坏循环等待);
  • 避免:允许必要条件存在,通过算法预判分配资源后是否安全,典型为银行家算法(试探分配资源,判断系统是否处于安全状态,不安全则拒绝分配);
  • 检测:不限制资源分配,定时运行死锁检测程序,通过进程 - 资源分配图判断是否存在死锁(有环路且资源类仅一个资源则死锁,多资源需进一步判断);
  • 解除:检测到死锁后,通过终止所有死锁进程、逐个撤销死锁进程、抢占死锁进程资源等方式恢复系统。
相关推荐
Nan_Shu_6142 小时前
学习: 尚硅谷Java项目之尚庭公寓(4)
学习
LYS_06182 小时前
RM专用赛事c型板IMU9轴解算(1)(对于IST8310和BMI088的直接使用)
c语言·开发语言
yubo05092 小时前
Python 包、模块、导入规则
开发语言·python
f狐0狸x2 小时前
C++ vector 从入门到上手:核心基本用法全解析
开发语言·c++
淘源码d2 小时前
基于Spring Cloud Alibaba的智慧工地微服务源码实战:快速构建与二次开发指南
java·源码·二次开发·saas·智慧工地
韩立学长2 小时前
【开题答辩实录分享】以《志愿者公益网站的设计与实现》为例进行选题答辩实录分享
android·java·开发语言
yong99902 小时前
基于MATLAB的激光器锁模技术仿真
开发语言·matlab
Easonmax2 小时前
小白学习React Native 鸿蒙跨平台开发:实现一个简单的商品评价页面
学习·react native·harmonyos
Easonmax2 小时前
小白学习React Native 鸿蒙跨平台开发:静态文章详情页面实现
学习·react native·harmonyos