操作系统(测开基础)

基础知识

操作系统(OS)是管理计算机硬件和软件资源的核心软件,负责进程调度、内存管理、文件处理等功能。


进程与线程

进程是程序的执行实例,如运行的浏览器是一个进程。线程是进程内的轻量级单位,可并发执行,如同时下载和播放视频。

同步是指任务按照顺序依次执行,后一个任务依赖于前一个任务的完成;
异步是指任务可以并发执行,任务之间没有固定的顺序,互不干扰。

  • 独立性
    进程是独立运行的单位,它有自己的独立空间和资源。
    线程是进程内部的执行单元,虽然它有自己的执行路径,但它不像进程那样完全独立。
  • 资源共享
    默认情况下,进程之间是相互隔离的,它们不能直接访问彼此的内存空间或其他资源。
    线程是共享进程资源的,它们可以方便地访问进程内的资源。
  • 开销
    创建、切换和销毁进程的开销比较大。
    创建、切换和销毁线程的开销比较小。

调度算法

操作系统通过调度算法决定进程执行顺序。调度算法是操作系统用来决定“谁先干活、谁后干活”的方法。想象你家开饭店,有好多顾客(进程或线程)等着吃饭,服务员(CPU)只能一次服务一个,调度算法就是服务员决定“先给谁上菜”的规则。

调度算法的对比

算法规则优点缺点
FCFS谁先来谁先跑,就像排队买奶茶,按顺序来。简单公平长任务拖后腿
SJF谁干得快谁先跑,像饭店先给点饮料的顾客服务(1分钟),再给炒菜的(5分钟)。效率高长任务饥饿
Round Robin每个人轮流跑一小会儿,像饭店服务员每桌送一口菜,循环跑。每次跑的时间叫“时间片”(比如1秒)。公平,多任务好切换开销大
Priority谁重要谁先跑,像饭店先服务VIP顾客。重要任务优先低优先级饥饿
MFQ多个队列,每个队列优先级不同,任务可以换队列。跑得快的优先,跑得慢的降级,像饭店先服务快餐顾客,慢餐的往后排。灵活平衡实现复杂

**测试开发里关心什么?**
1、响应时间:用户点一下按钮,多久有反应?FCFS可能慢,RR可能快。
2、公平性:所有任务都能跑吗?优先级调度可能让小任务等太久。
3、吞吐量:单位时间干多少活?SJF效率高,但不公平。
4、死锁或饥饿:任务会不会卡住或永远跑不了?测优先级和MFQ时要注意。
5、切换开销:RR时间片太小,CPU老切换,效率低,测切换频率影响。


内存管理

内存管理是操作系统负责管好RAM(随机存取内存)。它就像一个大仓库,程序要跑就得在里面占个地方,内存管理决定“谁放哪儿、怎么放、用完怎么收”。
目标:让内存用得高效(不浪费)、程序跑得顺(不卡)、多个程序能一起跑(不打架)。
为什么重要:内存不够或管不好,程序会崩,系统会慢。
内存管理的任务

  • 分配:给程序分块地方跑,比如QQ要200MB,游戏要1GB。
  • 回收:程序不用了,把地方收回来给别人用。
  • 保护:别让QQ偷看游戏的数据。
  • 优化:尽量少浪费空间,别让内存乱七八糟。

常见的内存管理方法

方法怎么分优点缺点测试点
固定分区固定块简单内部碎片浪费空间
动态分区按需分,要多少给多少灵活外部碎片碎片影响
分页固定小页无外部碎片内部碎片、管理复杂页面表效率
虚拟内存内存+硬盘跑大程序换出慢、颠簸换入换出性能
段式按逻辑分段符合程序外部碎片段管理复杂性
段页式按逻辑分段再分页符合程序内部碎片(主要)+外部碎片段页管理复杂性

内存管理常见问题
1、碎片

  • 内部碎片:分块太大,程序用不完(固定分区、页面)。内存分块大小固定,程序用不完就空着。
  • 外部碎片:小块空隙拼不出大空间(动态分区、段式)。程序用完释放内存后,留下的空隙不连续。
    解决:分页少碎片,压缩内存(把空隙挪一起)。
    2、内存泄漏
    程序用完不还内存,像借书不还,内存越用越少。
    3、页面置换
    虚拟内存不够时,挑页面换出去。常用算法:
  • FIFO(先入先出):最早进来的先换。
  • LRU(最近最少使用):最久没用的换。

文件系统

文件系统是什么?
文件系统是操作系统管理存储设备(像硬盘、U盘)上数据的方法。它负责怎么存文件、找文件、读写文件,就像图书馆的书架和目录,帮你整理和查找书。
常见文件系统
FAT32简单、NTFS安全、ext4稳定、APFS快。

  1. FAT32(文件分配表)U盘常用FAT32
  2. NTFS(新科技文件系统)Windows的C盘用NTFS
  3. ext4(第四代扩展文件系统)Linux常用
  4. APFS(苹果文件系统)

文件系统中一些概念
1、分区:硬盘可以分成几块(像C盘、D盘),每块有自己的文件系统
2、块(Block):硬盘分成小格子(比如4KB一个块),文件存在这些格子里。
3、元数据:记录文件的信息(名字、大小、位置),像书的标签。
4、目录:文件夹里记着有哪些文件,像书架上的目录表。

文件系统的任务

  • 存储:把文件放进硬盘,分好位置。
  • 命名:给文件起名字,方便找。
  • 组织:用目录(文件夹)把文件分组,像书架分层。
  • 读写:让程序能打开、改、存文件。
  • 保护:不让别人随便动你的文件。
    硬盘和文件系统的关系
  • 硬盘是“仓库”,存一堆原始数据(0和1)。
  • 文件系统是“管理员”,把数据整理成文件和文件夹。

文件系统的关键功能
1、文件存储

  • 文件分成块存硬盘,块大小(4KB、8KB)影响效率。
  • 小文件占一块,大文件占多块。

2、目录结构: 树形结构
3、权限管理:控制谁能读、写、执行,像NTFS能设“只读”。
4、日志:记下每次操作,像日记本,断电也能恢复。

文件存储和内存管理中的存储方式是一样的吗?

相似点:都分块存(块或页),都有连续和非连续方式,用表管位置。
不同点

  • 文件存储管硬盘,长期存,有目录和元数据。
  • 内存管理管RAM,临时用,靠页表,没目录。
  • 文件存储更重连续性,内存管理更重灵活性
    文件存储:像家里的储物柜,东西(文件)分格子(块)放,有标签(元数据)和清单(目录),一直留着。
    内存管理:像课桌上的草稿纸,写作业(程序)时用小块纸(页),写完就扔,没标签和清单。

死锁

死锁发生当两个或更多进程相互等待资源,形成循环依赖,如A等待B释放资源,而B等待A。这种情况会导致系统冻结。
死锁产生条件(缺一不可)
1、互斥条件:资源只能一个人用,像饭店里只有一双筷子,你拿了别人就不能拿。
2、持有并等待:你拿着一支筷子,还等着另一支,像你有左筷子,等右筷子。
3、不可抢夺:没人能抢你的筷子,除非你自己放手,像筷子粘手上,别人拿不走。
4、循环等待:你等我,我等你,绕圈圈,像你拿左筷子等我放右筷子,我拿右筷子等你放左筷子。

没有循环等待,资源请求就不会“卡成圈”,总有人能拿到所有资源,干完活放手,打破僵局。

避免死锁
1、打破互斥
2、不许持有并等待
3、允许抢夺
4、打破循环等待

  • 常用算法:银行家算法(系统像银行,检查资源够不够才借给你,确保不会死锁。)

检测死锁
现象:程序没反应,CPU利用率高但没进展
工具:

  • 用调试器(GDB)查看线程在等啥
  • 画资源分配图,找循环

生产者-消费者问题

什么是生产者-消费者问题?

  • 定义:生产者(Producer)生成数据,消费者(Consumer)处理数据,中间有个缓冲区(像仓库),要保证生产和消费平衡,不让仓库溢出(满了)或空闲(没东西)。
  • 例子:像饭店厨房(生产者)做菜,服务员(消费者)端菜,中间有个桌子(缓冲区),不能菜堆满桌子,也不能桌子空了没人吃。
  • 目标:生产者和消费者同时跑,效率高,不卡住。

怎么发生的?

  • 生产太快:生产者塞满缓冲区,溢出,像厨房菜做太多,桌子放不下。
  • 消费太慢:消费者拿得慢,缓冲区满,生产者得等。
  • 生产太慢:缓冲区空了,消费者没事干,得等。

解决方法

  • 锁和条件变量(同步工具):
    1. 互斥锁(Mutex):保证一次只有一个人动缓冲区。
    2. 条件变量:生产者等“缓冲区不满”,消费者等“缓冲区不空”。
  • 例子(伪代码):
    缓冲区大小 = 10
    生产者:
      锁住缓冲区
      如果满了,等(条件:不满)
      放数据
      通知消费者(有东西了)
      解锁
    
    消费者:
      锁住缓冲区
      如果空了,等(条件:不空)
      拿数据
      通知生产者(有空位了)
      解锁
    

I/O管理与假脱机(Spooling)

什么是I/O管理与假脱机?

  • I/O管理:操作系统管输入输出设备(像打印机、硬盘),让程序和设备顺畅交流。
  • 假脱机(Spooling):把慢速I/O任务放后台,像打印文件时,先存硬盘,打印机慢慢打,不让程序等。

怎么工作?

  • 直接I/O:程序直接跟设备打交道,像你自己拿文件去打印机,等它打完。
  • Spooling
    1. 程序把任务给Spooling系统(存硬盘)。
    2. Spooling后台管设备,程序不用等。
  • 例子
    • 你打印10页Word:
      • 没Spooling:等打印机10分钟。
      • 有Spooling:文件存硬盘,1秒给你解放,打印机后台跑。

优点

  • 效率高:程序不等慢设备。
  • 多任务:多个程序共用设备。

分布式系统中的死锁检测

什么是分布式系统中的死锁?

  • 定义:分布式系统是多个节点(电脑)一起工作,死锁是节点间互相等资源,像A节点等B放锁,B等A放锁。
检测方法
  1. 资源分配图(Wait-For Graph, WFG)
    • 画图:节点和资源连线,谁拿啥、等啥。
    • 找圈:有循环就是死锁。
    • 例子:
      • A→资源2(B拿)→B→资源1(A拿)→A,有圈,死锁。
  2. 分布式算法
    • 发起探测
      – 节点A等资源等太久,觉得自己可能死锁了,发探测消息。[A等B的资源2,只发给B:(A, A, B)。如果广播也能找到节点,但是会浪费网络]
      – 消息格式:(发起者, 发送者, 接收者),比如(A, A, B)。
    • 传递探测:收到消息的节点B检查。
      – 如果B也在等谁(比如C),把消息传给C,更新为(A, B, C)。
      – 如果B不等谁,丢掉消息。
    • 检测死锁:
      – 如果消息传回A,比如(A, C, A),说明A→B→C→A有圈,死锁。
      – 没传回来,说明没圈。
挑战
  • 网络延迟:消息慢,检测不准。
  • 一致性:节点状态变快,图可能错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值