操作系统 Chap.1 介绍
写在前面:
本部分章节的几乎全部内容来自于博主大学中的课程: 操作系统. 由于博主所参与的课程是英文PPT授课, 因此会尽可能将对应内容结合书本进行中文的整理. 但文中用词不当等问题, 还敬请读者海涵.
本部分文章应当会涉及到以下内容: (1)数据结构(Data Structure); (2)计算机组成原理(Computer Hardware Foundations); (3)C++相关内容
我们正式开始.
1. 引入
1.1 什么是操作系统?
操作系统(Operating System) 这个名词我们都不陌生. 其系统定义却显得有些模糊.
Operating System acts as an intermediary between a user of a computer and the computer hardware.
操作系统在计算机中作为中介存在于电脑用户与电脑硬件之间.
一个合格的操作系统的目标是很明确的:
- 能够运行用户的程序, 使用户解决问题的过程变得更简单
- 将计算机变得更加简单易用
- 以一种有效率的方式利用计算机的硬件
1.2 操作系统的作用?
为什么我们几乎必须需要一个操作系统? 以英文的简写来描述的话, 可以归纳为: RIPS
- Resource Management: 资源管理
- Inter-process Communication(IPC): 进程间通信
- Protection(Isolation & Access Control): 必要的保护工作(如隔离 / 权限控制)
- Services to User Programs(System Calls): 为用户程序提供服务(如System Calls系列命令)
我们需要注明的是: 不同的设备, 所配备的操作系统的侧重点必然不同.
例如: 个人计算机(PC)只需要供给某一个用户的需求, 因此它只需要全力照顾这一个用户的需求即可; 但如果是服务器(Server)等场景, 它就需要同时处理, 分配资源给多个用户, 这二者的操作系统需要达成的目标不同, 其功能侧重点也必然有所差距.
1.3 计算机系统结构
从系统的划分来看, 计算机系统能够被划分为以下四个部分:
- Hardware: 硬件, 提供最基础的计算资源
- CPU
- Memory
- I/O Devices
- Operating System: 操作系统, 控制 / 协调各个用户与应用对底层硬件资源的使用
- Application programs: 用户程序, 定义应当使用何种资源来解决使用者的问题
- Word Processors
- Web Browsers
- Video Games
- Users: 使用者
- People
- Machines
- Other Computers
1.4 操作系统的子系统?
操作系统手下按照功能, 分出了四个子系统:
- Process Management: 进程管理
- Processes: 进程
- Threads: 线程
- Synchronization: 同步
- Memory Management: 内存管理
- Physical Memory: 物理内存
- Virtual Memory: 虚拟内存
- Device Management: 设备管理
- Networks: 网络
- Display: 显示设备
- Information Managent: 信息管理
- File Systems : 文件管理系统
- File Sharing & Protection: 文件共享 / 保护
1.5 所以, 究竟怎么总结操作系统这么个玩意?
其实, 并没有系统的定义. 但我们可以大致将其看成:
- A Resource allocator: 一个资源分配者, 为其他所有程序分配资源
- A Control Program: 一个控制程序, 管理着所有其他程序的执行.
“The one Program running at all time on the computer” is the Kernel. Everything else if either a System Program or an Application Program.
我们需要明确, 在电脑上始终运行着的程序是 内核 , 任何其它的程序要么是系统程序, 要么是应用程序.
2. 内存管理 / 中断
2.1 内存的分配方式
通常而言, CPU 以及 全部设备的控制器通过总线与一片公用的内存相连, 这代表着所有的CPU与设备需要争夺内存的访问周期. 争夺结果需要由操作系统决定.
2.2 本地缓冲区
我们上文提到, 每种设备都涉及到自己的控制器.
事实上, 每种设备控制器都下属着自己的一类设备类型, 同时, 每种设备类型都拥有自己的缓冲区, 用于存放数据.
这个缓冲区被称为设备的 本地缓冲区(Local Buffer) , CPU / 设备控制器通过本地缓冲区 向 / 从 设备 发送 / 接受 数据.
当然, CPU与设备控制器之间也需要移交控制权, 因此, 产生了 中断机制(Interrupt) .
2.3 中断
通常而言, 中断 代表着设备将控制权通过 中断向量 转移至 终端服务进程 . 相对应的, 中断向量拥有计算机全部服务的中断进程地址.
我们需要指出, 并不是只有程序运行完毕后才会产生中断, 当出现了用户请求 / 异常时, 也会产生中断, 这种中断我们一般称之为 陷阱(Trap) / 异常(Exception)
当中断产生时, 操作系统会 保护现场 , 通常表现为 存储寄存器 / 程序计数器的值 . 随后, 会判断产生中断的类型, 通常由两类:
- Polling: 轮询
- Vectored Interrupt: 向量中断
不同类型的中断会通过不同的代码(Vector Number)进行标识, 操作系统根据代码类型决定如何处理中断.
通常而言, 现代操作系统是 中断驱动 的.
2.4 DMA(Direct Memory Access)
在计算机组成原理中提及过这个概念.
Device Controller transfers blocks of data from buffer storage directly to main memory without CPU intervention.
设备控制器可以直接将数据块从缓冲存储直接传输到主内存, 而不需要CPU的干预.
之所以这样做, 是为了避免过多的中断影响某些高速IO设备的效率, 尽可能地让数据传输速率接近内存读写速度.
2.5 内存结构
内存的结构可大致划分为四个部分:
- Main memory: 主内存
- 是CPU可以直接访问的唯一大型存储器
- 随机存储
- 通常易失
- Secondary storage: 二级存储
- 主内存的扩展, 提供非易失存储空间
- Hard Disk Drives(HDD): 硬盘
- Non-volatile memory: 非易失性内存
回过头来, 我们给一张现代计算机的运行方式图:
对于操作系统, 它所涉及到的内存管理活动主要有:
- 监视当前内存的使用情况, 具体而言, 哪块内存被哪个程序所使用?
- 分配 / 释放内存, 决定哪个进程的数据能够被放入 / 移出内存?
3. 多核 / 多进程
3.1 多处理器系统
虽然大多数计算机如今仍然是单处理器的, 但不可否认, 多处理器系统已经出现, 并被广泛应用.
这样的系统也被称为 并行系统(Parallel System) .
- SMP(Symmetric Multiprocessing) : 对称多处理器系统
- ASMP(Asymmetric Multiprocessing) : 非对称多处理器系统
当然, 多处理器系统并不是我们介绍的重点, 我们这部分暂且先行掠过.
3.2 多道程序设计(Multiprogramming)
多道程序设计 指的是操作系统通过维护内存中的任务列表, 来保证CPU的资源能够时刻被利用, 是一种提高资源利用率的做法.
具体而言, OS会将当前计算机需要执行的所有任务统一压入内存中, 并通过 调度器(Scheduler) 来决定当前CPU应该执行哪个任务. 如果当前执行的任务需要等待中断(如I/O操作), 则调度器会切换至下一个任务.
3.3 多任务(Timesharing / Multitasking)
多任务 是现代操作系统的一大扩展, 不同于多道程序设计, 它保证CPU会在当前电脑的所有任务之间频繁切换, 保证每个任务都能够获取到部分CPU资源, 以达到用户同时与多个程序交互的目的.
3.4 多模式设计(Multimode Operation)
最普遍为人所知的设计被称作 Dual-mode , 即 用户模式(User Mode) 和 内核模式(Kernel Mode) . 这种设计的出现是为了使系统更加安全, 防止用户程序对系统造成破坏.
具体而言, 硬件自身会根据当前所处模式给出模式位, 操作系统会根据模式位来决定是否允许当前程序访问某些资源.
有些指令(Instructions)被标记为 特权指令(Privileged Instructions) , 这代表着它们只能在内核模式下才能被运行.
当用户程序需要调用相关的指令时, 往往通过System Call的方式, 将当前模式切换至内核模式; 当特权指令执行完毕后, 会将模式切换回用户模式.
当然, 对于操作系统来说, 它需要保证用户程序不会无限期的通过System Call来占用CPU资源. 因此, 操作系统会为每个程序设置一个计时器, 当计时器到期时, 操作系统会强制收回权限, 严重时直接终止程序.
3.5 进程管理(Process Management)
进程管理是操作系统的一大核心, 我们需要先搞清楚两个概念的区别.
A process is a program in execution, it is a unit of work within the system. Program is a Passive Entity, Process is a Active Entity.
一个进程是一个正在被执行的程序, 表现为系统中的一系列任务集合. 程序是一个被动实体, 而进程是一个主动实体.
线程与进程不同, 线程是进程的一个子集, 一个进程可以包含多个线程, 但一个线程只能属于一个进程.
通常而言, 进程分 单线程进程(Single-threaded Process) 和 多线程进程(Multi-threaded Process) 两种. 对于前者, 它只有一个 程序计数器(Program Counter) , 负责记录下一个要执行的指令的位置; 对于后者, 它的每个线程都有一个程序计数器.
对于操作系统, 它在进程管理过程中的主要作用如下:
- 创建(Create) / 终止(Terminate) 用户 / 系统进程
- 暂停(Suspend) / 恢复(Resume) 进程
- 提供进程同步(Synchronization) / 通信(Communication) 机制
- 提供死锁(DeadLock)处理机制
4. 信息管理
现代操作系统将各类物理属性抽象成了信息存储单元, 我们称之为 文件(File) . 因此, 对信息的管理实质上很大程度上依赖于 文件系统(File System) .
4.1 文件系统(File System)
操作系统对于文件管理的参与主要有:
- 创建 / 删除文件(夹)
- 操作 文件 / 目录 的属性
- 将文件映射到辅助存储(Secondary Storage)上
- 文件的备份 / 恢复
本章节仅是一个引入章节, 目的在于对操作系统的一系列功能做出一些最基本的说明.
更细节的部分将在后续章节中进行详细讨论.
本篇博文就到这里~