#blogTitle{ background-color:#0FF; }

计算机操作系统--学习心得

第一周:

**第一章 计算机操作系统概述**

1.1 计算机系统概览

1.2 计算机硬件系统

1.3 计算机软件系统

1.4 计算机操作技术的发展

1.5 计算机操作系统

1.6 资源管理的角度

1.7 程序控制的角度

第二周:

第一章 计算机操作系统概述

1.8 操作系统控制计算机的角度

1.9 人机交互的角度

1.10 程序接口的角度

1.11 系统结构的角度

**第二章 处理器管理**

2.1 处理器与寄存器

2.2 指令与处理器模式

2.3 中断

2.4 中断源

第三周:

第二章 处理器管理

2.5 中断系统1

2.6 中断系统2

2.7 多中断的响应与处理

2.8 进程及其状态

2.9 进程的数据描述

2.10 进程的管理

2.11 进程切换与模式切换

第四周:

第二章 处理器管理

2.12 多线程技术概述

2.13 KLT与ULT

2.14 多线程实现的混合策略

2.15 处理器调度的层次

2.16 处理器调度算法1

2.17 处理器调度算法2

第五周:

第三章 存储管理

3.1 存储管理的主要模式

3.2 存储管理的功能

3.3 虚拟存储器的概念

3.4 存储管理的硬件支撑

3.5 单连续分区存储管理

3.6 可变分区存储管理

第六周:

第三章 存储管理

3.7 页式存储管理的基本原理

3.8 页式存储管理的地址转换

3.9 页式虚拟存储管理

3.10 页面调度

3.11 反置页表

3.12 段式存储管理

3.13 段式虚拟存储管理

3.14 段页式存储管理

第七周:

第四章 设备管理

4.1 设备管理概述

4.2 I/O控制方式

4.3  总线与I/O

4.4  I/O软件的实现层次

4.5 I/O软件的实现

4.6 I/O缓冲区

4.7 设备独立性

4.8 独占型外设的分配

第八周:

第四章 设备管理

4.9 磁盘的物理结构

4.10 磁盘的驱动调度

4.11 SPOOLing系统

4.12 批处理系统的作业管理

第五章 文件管理

5.1 文件的概念

5.2 文件系统及其功能

5.3 文件的存储

5.4 文件的逻辑结构

5.5 文件的物理结构

第九周:

第五章 文件管理

5.6 文件目录结构

5.7 文件目录的管理

5.8 文件共享

5.9 文件保护和保密

5.10 文件的保护

5.10 存取方法

5.11 文件的使用

5.12 辅存空间管理

5.13 文件操作的执行过程

第十周:

第六章 并发程序设计

6.1 并发程序设计的概念

6.2 并发进程的制约关系

6.3 临界区

6.4 临界区管理实现的尝试

6.5 临界区管理实现的硬件方式

第十一周:

6.6 PV操作与进程互斥

6.7 PV操作与进程同步

6.8 生产者消费者问题探究

6.9 管程概述

6.10 霍尔管程

6.11 霍尔管程的例

第十二周:

6.12 进程通信

6.13 高级进程通信机制

6.14 死锁的产生

6.15 死锁的防止

6.16 死锁的避免

6.17 死锁的检测


计算机操作系统学习心得:从迷茫到精通的蜕变之路


一、为什么学操作系统?—— 找到学习的意义

操作系统(OS)是计算机领域的“基石学科”,它不仅是程序运行的舞台,更是理解计算机系统全貌的钥匙。

  • 对程序员的意义
    • 深入底层逻辑:理解代码如何与硬件交互(如系统调用、中断处理),写出更高效的代码。
    • 解决复杂问题:多线程竞争、内存泄漏等难题的根源往往在OS层,掌握原理才能快速定位问题。
  • 对计算机体系的价值
    OS连接硬件与软件,学习它如同掌握“上帝视角”,能看透从CPU指令到应用软件的完整链条。

二、我的学习路径:理论 + 实践双轮驱动

1. 理论筑基:从教材到思维导图
  • 教材选择
    • 入门必读:《计算机操作系统(汤小丹)》—— 知识点全面,适合搭建知识框架。
    • 进阶拓展:《现代操作系统(Tanenbaum)》—— 对比Linux、Windows设计差异,培养系统思维。
  • 学习方法
    • 每章画思维导图:将进程管理、内存管理等模块拆解为子问题(如“进程通信方式有哪些?”),标注关联性。
    • 对比记忆法:将易混淆概念(如分页 vs 分段、进程 vs 线程)整理成表格,强化区别点。
2. 实践突破:从实验到开源项目
  • 必做实验清单
    实验类型 具体内容 工具/语言
    进程调度 实现RR、优先级调度算法 C/Python
    内存管理 模拟LRU页面置换,对比缺页率 C++
    文件系统 设计简单FAT表结构,支持文件读写 Linux内核模块
  • 实战项目推荐
    • 手写Mini OS内核:参考《操作系统实战45讲》,从引导程序开始,逐步实现中断、内存分页、多进程调度。
    • 参与开源项目:如xv6(MIT教学系统),通过阅读和修改源码,理解系统调用、文件系统的实现细节。

三、核心难点与破解之道

1. 进程与线程:理解并发的本质
  • 关键问题
    • 如何保证多线程安全?→ 锁机制(互斥锁、信号量) + 无锁编程(CAS原子操作)
    • 死锁如何预防?→ 银行家算法动态检测资源分配状态。
  • 学习技巧
    • 用“生产者-消费者”问题模拟资源竞争,通过GDB调试观察线程状态变化。
    • 阅读Linux内核源码(如kernel/fork.c),理解fork()pthread_create()的底层实现。
2. 虚拟内存:揭开地址转换的面纱
  • 核心逻辑
    CPU访问虚拟地址 → MMU查页表 → 物理地址 → 数据读写。
  • 实践验证
    • 编写C程序打印变量地址,对比进程间地址差异,理解“虚拟化”效果。
    • valgrind工具检测内存泄漏,分析页错误(Page Fault)日志。
3. 文件系统:从数据存储到高效管理
  • 设计哲学
    • FAT32:简单易实现,但碎片化严重 → 适合U盘等小容量设备。
    • ext4:日志+多级索引 → 兼顾性能与可靠性 → 适合服务器。
  • 动手实验
    在Linux下使用dd命令创建虚拟磁盘,用mkfs格式化并挂载,手动创建文件验证inode分配。

四、踩坑与反思:避开学习的“天坑”

  1. 误区:重理论轻代码
    • 症状:死记页面置换算法步骤,遇到实际调优束手无策。
    • 破解:用Python模拟FIFO/LRU算法,统计不同访问模式的缺页率差异。
  2. 误区:忽视硬件关联
    • 症状:不理解“原子操作”依赖CPU指令(如x86的LOCK前缀)。
    • 破解:通过内联汇编(Inline Assembly)实现自旋锁,对比加锁前后的性能损耗。
  3. 误区:盲目追求复杂度
    • 症状:初学即啃Linux内核全书,陷入细节无法自拔。
    • 破解:从简化模型(如xv6)入手,先掌握核心机制,再逐步深入。

五、资源推荐:高效学习的秘密武器

  • 网课
    • 王道考研操作系统:应试利器,重点突出,适合快速复习。
    • MIT 6.S081(英):实验驱动,手写OS组件,适合进阶挑战。
  • 工具
    • QEMU + GDB:动态调试内核,观察内存和寄存器状态。
    • OS Simulator:可视化模拟进程调度、内存分配过程。
  • 社区
    • OSDev.org:全球OS开发者的“圣地”,提供从Bootloader到GUI的全套指南。
    • GitHub开源项目:如ToyOS(国人开发)、zCore(Rust实现),适合借鉴代码思路。

六、总结:操作系统学习的三个境界

  1. 见山是山:理解基础概念,能复述进程状态转换、页面置换算法。
  2. 见山不是山:通过代码和实验,发现理论背后的权衡(如性能 vs 安全、空间 vs 时间)。
  3. 见山还是山:将OS思维迁移至数据库、分布式系统等领域,领悟“万物皆资源,一切可抽象”。

最后寄语
操作系统如同计算机世界的“哲学”,既需要严谨的逻辑推演,又需直面硬件的真实与粗糙。愿每位学习者都能在源码与电路间,找到属于自己的“悟道时刻”。

posted @ 2017-06-09 08:59  甘雨火光  阅读(3720)  评论(1)    收藏  举报