自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 从“多设备抢网”说起:NAT与PAT如何让一个公网IP供全家上网?

本文深入浅出地讲解了家庭网络如何通过NAT(网络地址转换)和PAT(端口地址转换)技术实现多设备共享一个公网IP上网。NAT作为地址翻译官,将私网IP转换为公网IP,而PAT更进一步,通过为每个连接分配唯一端口号,解决了多设备并行上网的识别难题。文章详细解析了三种NAT类型的差异、PAT的工作流程及能力边界,并解答了常见问题。最终指出,NAT与PAT的协同运作,是家庭网络实现"一个公网IP供全家上网"的技术基础。

2025-10-14 17:29:22 863

原创 【笔记】磁盘

知识点磁盘驱动是设备管理的核心部分,通过文件视图抽象磁盘中断处理和I/O指令三部分协同工作。口语化解释就像炒菜最后放盐一样,磁盘管理是操作系统课程的"收官之作"。虽然原理和键盘/显示器驱动类似,但复杂度高了好几个档次!

2025-07-29 19:00:00 265

原创 【笔记】磁盘->文件

操作系统通过**文件控制块(FCB)**建立字符流位置与磁盘块的映射关系,实现文件抽象层。访问第200字节:200/100=2 → 6+2=8号块。像寻宝游戏,每个纸条告诉你下一个藏宝点,扩容方便但读取慢。示例:test.c文件占用盘块6-8,每个块100字节。示例:索引块记录[9,17,25]对应逻辑块0,1,2。访问第200字节需依次读取1、10、17号块。像书本目录,小文件直接查,大文件多级目录跳转。示例:test.c的块分布为1→10→17。就像快递柜:小包裹放主柜,大件货物用扩展柜。

2025-07-29 19:00:00 197

原创 【笔记】文件系统

想象文件就像一卷录音带,用户只看磁带头的位置(f_pos),而系统需要把"第200秒"转换成"磁带第3圈第5格"的物理位置,这就是inode干的事!设备文件就像"魔术文件"——看起来是普通文件,实际读写的可能是内存数据、硬件寄存器,但用户无感知,这就是UNIX"一切皆文件"的魔法!就像快递柜取件:用户说"我要第200号包裹",系统先算出在第2层(200/100=2),再查楼层索引表找到具体柜子编号(789号柜)将磁盘读写转化为对连续字节序列的操作,核心是完成字符流位置到物理盘块号的映射。

2025-07-29 19:00:00 249

原创 【笔记】目录与文件系统

聪明做法只记名字+学号(dentry),按学号去档案柜查具体资料(inode)- 每层目录是子柜编号(A-1-3对应/home/user)- 最终找到的inode就是快递格密码(能打开具体文件数据)- 笨办法是把每个学生的档案都复印一份贴墙上(FCB方案)(而非完整FCB),减少磁盘IO(如Linux的。- 每个货物贴二维码(inode)链接到具体货架。- 最后的inode才是真正的宝藏(文件数据)- 超级块是总控台(告诉你1号柜是根目录)- 门口贴仓库地图(超级块)文件系统将磁盘抽象为。

2025-07-29 19:00:00 361

原创 【笔记】目录解析

就像查快递柜:先拿总柜钥匙(根inode),找到某层柜子编号(var的inode),再打开对应柜子找具体包裹(data文件)。每步都要拿着上一级的"钥匙"才能继续往下找!装系统就像布置新家:先看户型图(超级块),标记哪些房间能用(位图),然后把家具(inode)摆到指定位置,最后才能开始住人(存数据)。- 左手控制CPU和内存(多进程视图)- 决定谁什么时候用什么资源。- 右手协调各种外设(文件视图)- 让所有硬件和谐"演奏"过程加载磁盘超级块,建立根inode的内存映像。

2025-07-29 19:00:00 333

原创 【笔记】段页结合的内存管理

概念将分段(面向用户)和分页(面向硬件)机制结合,形成段页式内存管理。- 前两行说"给你64MB虚拟空间随便玩"(实际物理内存可能才4MB)- 快递站先查分区表转成"海淀区编号60040"(虚拟地址)- 中介(操作系统)用虚拟地址当"合同"把两边需求对接上。- 再根据分拣表拆解成"3号仓库A区40架"(物理地址)- 弟弟想改答案时,老师才给发新本子(触发缺页异常)- 你告诉快递员"送到中关村5号楼"(逻辑地址)- 这样既省纸(内存)又避免互相干扰(进程隔离)❗ 字幕中"枫叶机制"统一修正为"分页机制"

2025-07-29 18:45:00 454

原创 【笔记】内存换入-请求调页

就像商场展示样品,货架上只放部分商品(物理内存),但顾客通过产品目录(虚拟内存)能看到所有商品,真要买时再调货(换入)通过映射机制让用户程序看到统一的地址空间(如32位系统的0-4GB),而实际物理内存可能更小。是换入的核心:当CPU访问的虚拟页不在物理内存时,触发缺页中断,由操作系统从磁盘加载该页。❗ 关键寄存器:CR2(缺页地址)、CR3(页目录基址)商家现做(读磁盘)、打包(申请内存)、送餐(建映射)❗ 术语统一:使用"换入/换出"而非"调入/调出"你下单(访问地址)发现没库存(缺页)

2025-07-29 18:45:00 294

原创 【笔记】内存换出

就像店铺货架有限,新商品要上架时,得把很久没人买的旧商品退回仓库。操作系统也是这样,内存满了就把不常用的页换到磁盘,腾地方给新页。就像教室值日表,R位相当于"最近被使用"的标记。班长定期擦掉旧记录(清除R位),大扫除时优先赶走最近没值日的同学(R=0)。FIFO就像排队买奶茶,先来的先被淘汰,但可能把常喝的款下架了;就像课桌太小,课本频繁换进换出,学生光整理书本没时间学习。内存换出(Swap Out)与换入(Swap In)必须协同工作,通过页面置换算法选择淘汰页,实现虚拟内存管理。理论最优但无法实现,

2025-07-29 18:45:00 407

原创 【笔记】IO与显示器

快递站(文件系统)根据地址(/dev/tty0)决定派送区域。- 显示器就是终端的"收货点",显卡寄存器是具体的"门牌号"3. 最后包装成统一面板(所有家电都用开关按钮)→文件视图。- 原本快递员(tty_write)直接送原包裹(字符c)1. 先写核心操作(怎么开机/调温度)→对应out指令。统一管理外设,显示器驱动核心是向显卡寄存器写入数据(- 你下单(printf)时不用管快递车走哪条路。2. 再写状态提醒(滴滴声提示)→对应中断处理。),收货人(屏幕)永远看到星号*指令或内存映射写入)

2025-07-29 18:45:00 344

原创 【笔记】键盘

就像食堂打饭:生食材先到后厨(read_q),厨师处理完(cook)才放到取餐区(secondary)就像快递员按门铃(中断),你通过猫眼(60h端口)确认是谁(扫描码),再决定要不要开门(处理输入)与CPU通信,核心流程包括:扫描码获取、ASCII码转换、缓冲队列管理。这就像摩斯密码本,听到"滴答"(扫描码)得查表才知道是字母A还是数字1。通过将输入字符同时写入write_q实现,形成"输入→显示"闭环。把室友的输入全变成星号,就像密码输入框那样!就像你打字时屏幕实时显示,其实是系统在对你"复读"

2025-07-29 18:45:00 406

原创 【笔记】多级页表

多级页表解决空间问题像书的“章-节”目录,只存实际使用的页表项TLB解决时间问题缓存热点映射,利用局部性减少访存次数硬件协同TLB用相联存储器实现并行查找(比顺序查快100倍)最终效果:既节省内存(多级页表),又加速查询(TLB),完美适配现代操作系统!

2025-07-29 14:23:44 547

原创 【笔记】内存分区分页

这就好比搬家时家具乱放,最后剩下一堆小空隙,想放个大沙发都塞不进去,得把所有家具重新挪一遍,期间房子没法用!分页就像把面包预切成片,你要多少给多少片,永远不会有碎渣。CPU里的MMU就是个自动切片机,按需拼装地址。分段是程序员视角,分页是硬件视角。就像写文章既要分章节(段),又要控制每页字数(页),两者结合才能印成书!- 分页是把每本书拆成固定页数,方便上架。- 分段是给书分类(编程书、小说)

2025-07-29 14:22:01 185

原创 【笔记】程序加载与分段机制

但程序里的地址都是"理想值"(比如main函数在40),实际内存可能被占用,这时候就得玩"地址翻译"的把戏了。就像图书馆把书分类存放:工具书(代码段)锁在玻璃柜里只能看,笔记本(数据段)可以随便写,而留言板(栈)只能从顶部增删。操作系统就像魔术师,通过段表玩了一出精彩的内存"乾坤大挪移"!程序就像租房客,操作系统可以随时给你换房子(修改基址),你只需要记住自己物品在屋里的相对位置(逻辑地址)就行!卫星控制程序烧录时固定加载到0x3000地址,所有指令中的地址都提前加上0x3000。

2025-07-28 16:41:23 298

原创 【笔记】死锁

缺点:可能打乱正常执行逻辑(如必须先申请打印机再申请磁盘)- 你等我先过,我等你先过,结果谁都动不了(环路等待)- 要么必须按"先买水泥后买瓷砖"的顺序采购(不灵活)- 每个司机都占着车道还要申请新路口(请求与保持)缺点:资源利用率低(如提前申请打印机但可能不用)- 要么一次性买齐所有材料(可能多花钱)- 检测:堵死后拖走几辆车(车主不乐意)- 忽略:等司机自己吵架解决(PC常用)- 避免:每个路口派交警指挥(成本高)- 路口一次只能过一辆车(互斥使用)- 预防:禁止某些车辆上路(不现实)

2025-07-28 16:30:18 725

原创 【笔记】信号量3

内核的做法就像突然通知:"所有等奶茶的人注意!而普通信号量是机械地按排队顺序发奶茶,可能让VIP等太久。解决优先级反转问题,通过完全唤醒等待队列让调度器选择最高优先级进程执行。实现的同步机制,包含P操作(申请资源)和V操作(释放资源)- 每个睡觉的进程手里攥着下个人的电话号码(tmp)- 虽然藏在栈里,但切换进程时这些"小纸条"会跟着走。- 被叫醒的人要负责叫醒下一个(形成唤醒链)- P操作是拿牌子(没牌子就排队睡觉)- V操作是还牌子(叫下个人来取餐)- 会员(高优先级)可以插队。

2025-07-28 16:29:22 312

原创 【笔记】信号量2

信号量就像红绿灯,empty=-1表示"车位已满",但若这个值被错误修改成0,生产者就会误判能继续停车,整个同步机制就崩了!就像两个人同时改Excel表格,A刚删了行,B不知道又删同一行,最后少删了一行数据。test-and-set就像瞬间完成的"抢凳子"游戏:一条指令完成"看凳子空不空+坐下"两个动作,根本不给别人打断的机会!就像两个人进门:先举手说"我要进",然后把门把手指向对方。若轮到进程A但A阻塞,进程B即使就绪也无法进入,违反"有空让进"原则。本质是共享的整型变量,通过PV操作实现进程同步。

2025-07-28 16:26:19 1119

原创 【笔记】信号量1

V操作:办完业务叫号(value++),看到还有人等(value=-2)就喊"下一个"- P操作:取个号(value–),发现前面还有3人等(value=-3)就坐着等。- 室友用完出来喊一声"用完了"(value=1),你才能进去(wakeup)- 你要洗澡时发现门锁着(value=0),就得等着(sleep)- 工人(生产者)要等空箱子(empty>0)才能放产品。- 快递员(消费者)要等有货(full>0)才能取货。- 同时只能一个人操作传送带(mutex保证)的机制,让多个进程合理有序地协作。

2025-07-28 16:25:14 413

原创 【笔记】CPU调度

就像银行排队,单纯"先来先办"会让只问一句话的客户等太久,而"短业务优先"又会让填长表格的客户饿死——操作系统调度也得在公平和效率间找平衡!就像交通信号灯:早晚高峰时公交优先,但平峰期也要给货车通行机会,还得动态监测车流调整红绿灯!让快的人先过闸机,整体通关速度确实快了,但拿大行李箱的旅客可能永远挤不上地铁!就像食堂打饭不插队,但万一前面有人点了满汉全席…就像老师课堂提问:每人轮流答10秒,既能照顾所有学生,又避免学霸独占黑板。任务队列:P1(10ms)、P2(30ms)、P3(5ms)

2025-07-28 16:23:08 250

原创 【笔记】内核级线程实现

选手A(当前线程)把接力棒(寄存器状态)放进盒子(内核栈)返回值区分父子进程:父进程返回PID,子进程返回0。- 最后按下启动键(iret)就变成新角色了!- 裁判(调度器)指定选手B(新线程)接棒。- 关键就是这个"盒子"要设计得严丝合缝!- 这样两人虽然长得一样,但知道自己是谁!- 选手B从盒子里取出自己的接力棒继续跑。- 然后把它零件全换成大黄蜂(exec)- 先做个空白躯体(申请PCB内存)- 但给克隆人打上标记(eax=0)- 先复制一个擎天柱(fork)- 复制大脑记忆(寄存器状态)

2025-07-28 16:10:23 285

原创 【笔记】内核级线程

用户线程就像超市一个收银员假装多窗口服务(快速切换),内核线程才是实打实开了多个收银台!,每个线程拥有独立的用户栈和内核栈,通过中断机制实现用户态与内核态的切换。必须通过内核级线程发挥,因为只有内核能感知硬件拓扑并分配计算资源。❗ 步骤4的switch_to是纯汇编代码(直接操作寄存器)- 用户栈是游戏进度(比如打到Boss半血)- 内核栈是通话记录(来电号码+通话时长)- 内核栈是后台控制台(吊威亚的机关)- 用户栈是演员表演区(自己蹦跶)4. 换传送带(栈切换)1. 包裹到达(中断)

2025-07-28 16:03:45 496

原创 【笔记】进程切换

用户级线程像小组内部轮班——组长(用户程序)说了算,但一旦有人摸鱼(阻塞),全组停摆!内核级线程像公司考勤系统——HR(内核)能看到每个人,谁摸鱼就让别人顶上。- 如果两人共用一把钥匙(单栈),会拿错快递!必须各配一把(多栈)- 线程A是快递员往货架(缓冲区)放包裹(数据)把当前演员的台词本(ESP)收好(存TCB)新演员接着上次的台词继续演(ret弹出PC)- 线程B是你从货架取包裹(显示内容)拿出新演员的台词本(从TCB读ESP):为每个线程分配独立栈空间。:多个线程共享同一调用栈。

2025-07-28 16:00:04 296

原创 【笔记】多进程图像

组织:用PCB队列分类管理进程状态切换:通过schedule和寄存器保存/恢复实现流畅交替隔离:内存映射表防止进程互相干扰,同步机制保证合作有序下一讲预告:我们将深入fork()和exec()系统调用,看进程如何"生孩子"和"变身"!

2025-07-28 15:56:48 277

原创 【笔记】时间管理大师CPU

口语化解释程序是菜谱,进程是照着菜谱做饭的过程——锅碗瓢盆(资源)用到哪步(状态)都得记清楚!

2025-07-27 13:14:34 332

原创 【笔记】系统调用

实现内存隔离,用户态(CPL=3)无法直接访问内核段(DPL=0)。- 你先把菜单编号(eax=4)给服务员(int 0x80)- 普通员工卡(CPL=3)刷不开总裁办公室(DPL=0)- 厨房(内核)查菜单表找到对应厨师(sys_write)内核司机(system_call)根据订单号(eax)接单。瞬间切换到内核马甲(CS=8,CPL=0)开始干活。- 柜员窗口(int 0x80)是唯一合法入口。用户态通过唯一合法入口(int 0x80)叫车。用户程序喊"芝麻开门"(int 0x80)

2025-07-27 13:05:42 1169

原创 【笔记】操作系统

操作系统通过**系统调用(System Call)**向应用程序提供硬件访问能力,表现为一组预定义的函数接口(如open/read/write)。POSIX就像手机充电口的USB-C标准——只要操作系统支持POSIX,就像手机有Type-C口,各种APP(充电器)都能即插即用。库函数是外卖平台,把订单转给餐厅(内核),内核再指挥厨师(驱动)做汉堡。就像那个学生做的小鸟游戏,操作系统开发就是搭积木——只要理解系统调用,你也能创造新功能!就像插座隐藏了电网的复杂细节,系统调用封装了硬件操作。

2025-07-27 12:57:56 424

原创 操作系统启动过程

初始化是整理厨具、清点食材(硬件管理准备)- 加载阶段是把菜谱从仓库搬到厨房(内存)

2025-07-27 11:19:56 298

原创 操作系统笔记

引导程序必须亲手收拾,否则袜子(指令)可能塞错抽屉(地址)!的取指执行循环,BIOS固件(地址0xFFFF0)首先运行,加载引导扇区(0x7C00)。就像改手机开机动画,只不过这里要用汇编在512字节的小房间里跳舞,多一个字节都会踩到脚!- 中间夹的肉饼是操作系统,把生硬的硬件"加工"成应用能吃的形式。编写,以实现对内存地址(如DS:SI寄存器组合)的精确控制。(如fork/open)是操作系统的外在表现,而。- 最下层是面包片(硬件),没有它啥都撑不住。引导程序(bootsect.s)必须用。

2025-07-27 10:48:27 255 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除