大二下 计算机操作系统 第一次课 20250221

前情提要(C,C++,计算机组成原理)

1.操作系统的定义

操作系统实际上是一套软件,负责让程序更容易运行,允许程序共享内存,使程序能够与设备交互,以及其他类似有趣的事务。(OSTEP)
操作系统是为用户及其应用程序管理计算机资源的软件层。(OSPP)
操作系统是一个在计算机用户和计算机硬件之间充当中介的程序。(OSC)
操作系统是在内核模式下运行的软件。(MOS,由 Tanenbaum 编著)
操作系统是对硬件进行管理和抽象,并为应用提供服务并进行管理的程序。(现代操作系统)

操作系统中危险的操作(不安全的操作),如访问硬盘等,都要操作系统陷入内核态。每个程序都可以看作享有整个计算机。
第一部分:操作系统基本概念思维导图

老师说:什么是操作系统?

操作系统是一个典型的 “system”——它完成对计算机硬件系统的抽象,提供应用程序的运行环境:

从应用程序的视角看,操作系统定义了一系列的对象 (进程/线程、地址空间、文件、设备……) 和操纵它们的 API (系统调用)。这组强大的 API 把计算机的硬件资源有序地管理起来,它不仅能实现应用程序 (浏览器、游戏……),还支持着各类神奇的系统程序 (容器、虚拟机、调试器、游戏外挂……)
从硬件的视角看,操作系统是一个拥有访问全部硬件功能的程序 (操作系统就是个 C 程序,不用怕)。硬件会帮助操作系统完成最初的初始化和加载,之后,操作系统加载完第一个程序后,从此作为 “中断处理程序” 在后台管理整个计算机系统

课程组织

操作系统使用正确的抽象使构造庞大的计算机软件/硬件生态从不可能变为可能。这门课围绕操作系统是如何设计 (应用程序视角)、怎样实现 (硬件视角) 两个角度展开,分为两个主要部分:

原理课 (并发/虚拟化/持久化):以教科书内容为主,介绍操作系统的原理性内容。课程同时注重讲解操作系统相关的代码实现和编程技巧,包括操作系统中常用的命令行/代码工具、教学操作系统 xv6 的代码讲解等
理解操作系统最重要的实验部分
Mini labs (应用程序视角;设计):通过实现一系列有趣的 (黑科技) 代码理解操作系统中对象存在的意义和操作系统 API 的使用方法、设计理念
OS labs (计算机硬件视角;实现):基于一个简化的硬件抽象层实现多处理器操作系统内核,向应用程序提供一些基础操作系统 API
前导知识

2.不同视角下的操作系统

什么是程序? 程序=状态机 栈与栈帧概念
应用视角的操作系统:syscall系统调用。中断处理程序。操作系统提供与其他对象交互的API

3.状态机

什么是状态机?
状态机是一种数学模型,用来描述一个系统在不同状态之间转换的过程。它就像一个有多个“房间”的房子,每个“房间”代表一种状态,而从一个房间到另一个房间的“门”代表状态之间的转换。
状态机的组成部分
状态机主要由以下几个部分组成:
状态(State):系统在某个时刻所处的“位置”。比如,一个进程可以处于“运行”状态、“就绪”状态或“等待”状态。
事件(Event):触发状态转换的“信号”。比如,一个进程运行结束,或者等待的资源被释放。
转换(Transition):从一个状态到另一个状态的过程。比如,进程从“就绪”状态转换到“运行”状态。
状态机在操作系统中的应用
在操作系统中,状态机最常见的应用是进程管理。操作系统需要管理很多进程(程序的运行实例),而进程的状态会随着运行过程不断变化。我们可以用状态机来描述进程的状态变化。
进程状态机示例
一个进程通常有以下几种状态:
就绪(Ready):进程已经准备好运行,但正在等待CPU分配给它时间。
运行(Running):进程正在CPU上执行。
等待(Waiting):进程因为某些原因(如等待磁盘数据)而暂停运行。
这些状态之间的转换如下:
当进程从就绪状态被分配到CPU时,它会从“就绪”状态转换到“运行”状态。
如果进程运行结束,它会从“运行”状态转换到“终止”状态。
如果进程需要等待某些资源(如磁盘数据),它会从“运行”状态转换到“等待”状态。
当等待的资源可用时,进程会从“等待”状态转换回“就绪”状态。
状态机的作用
状态机的作用是帮助我们清晰地描述和管理系统的运行过程。在操作系统中,它可以帮助我们:
高效管理资源:比如,通过状态机,操作系统可以合理分配CPU时间给不同的进程。
避免错误:状态机的规则可以防止系统进入不合法的状态,比如一个进程不能直接从“等待”状态跳到“终止”状态。
简化设计:通过状态机,我们可以用图形化的方式(状态图)来表示复杂的系统行为,让设计和理解变得更加容易。
总结
状态机是一个非常有用的工具,它帮助我们理解系统的行为和状态变化。在操作系统中,状态机主要用于管理进程、资源分配等复杂任务。你可以把它想象成一个“交通灯”,根据不同的信号(事件)来控制状态的转换。

4.本节课总结

程序 = 状态机
源代码S:状态迁移 = 执行语句
二进制代码C:状态迁移 = 执行指令
编译器 C = Compiler(S)
应用视角的操作系统:syscall
计算机系统没有魔法(不存在玄学),一切都建立在确定的机制上
你的武器:gcc, gdb, binutils, strace…

posted @ 2025-02-21 14:22  陆舟LandBoat  阅读(21)  评论(0)    收藏  举报