💭 写在前面
本系列博客为复习操作系统导论的笔记,内容主要参考自:
- Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau, Operating Systems: Three Easy PiecesA. Silberschatz, P. Galvin, and G. Gagne,
- Operating System Concepts, 9th Edition, John Wiley & Sons, Inc., 2014, ISBN 978-1-118-09375-7.Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .
0x00 引入:程序运行时会发生什么?
" 一个正在运行的程序会做一件非常简单的事情:执行指令 "
处理器从内存中获取(fetch)一条指令,对其进行解码(decode),然后执行。完成这条指令后,处理器继续执行(execute)下一条指令,以此类推直到程序最终完成:
当然了,现代处理器为了让程序运行的更快,在这背后做了很多骚操作。比如一次性执行多条指令,甚至扰乱执行顺序执行并完成它们,为了让程序运行的更快处理器不择手段,只要能让程序运行得更快,其目的也就达到了。但这并不是我们关心的问题,我们只关心大多数程序所假设的简单模型 —— 指令似乎按照有序和顺序得方式逐条执行。
这样,我们就描述了冯诺依曼计算机模型的基本概念。如果只是反复做以上三件事,那这看上去似乎很简单。但是为了让系统更易于使用,一个程序运行的同时其实还有很多疯狂的事情也在同时进行!
操作系统也是软件,操作系统就是负责让程序运行起来更容易、同时运行多个程序、允许程序共享内存、让程序能够与设备交互等一系列有趣的工作的载体。这就是操作系统(Operating System, OS)。
操作系统的另一个早期名称叫监管程序(super visor),也叫主控程序(master control program),其实叫这样的名字能更容易突出它是一款软件,理解他在做什么 —— 监管程序的软件、主要控制程序的软件。但最后大家还是去叫他 Operating System —— 操作系统的软件,这么一看似乎也挺合理的。
运行程序执行的指令:
- fetch Instruction:
- Decode:
- Get Data:
- Excute instruction:
0x01 操作系统的作用
操作系统是一种在计算机用户之间起媒介作用的程序(或程序)和计算机硬件。
操作系统负责的事:
Making it easy to run programs - 使得运行程序变得容易。
Allowing programs to share memory - 允许程序共享内存。
Enabling programs to interact with devices - 使程序能够与设备交互。
🔺 总结:OS is in charge of making sure the system operates correctly and efficiently(操作系统负责确保系统正确、有效地运行)
OS provides various services for programs to run (操作系统为程序运行提供各种服务)。
0x02 如何使用操作系统
System Call(系统调用)允许用户告诉操作系统要做什么(服务)。
- 操作系统提供了一些接口(API、标准库)。
- 一个典型的操作系统输出几百个系统调用。
- 运行程序、访问内存、访问设备等。
📚 概念:The OS is a Resource Manager - 操作系统是一个资源管理器。
操作系统可以:
- 让你同时跑多个程序 → Sharing the CPU(CPU共享)。
- 让许多程序同时访问自己的指令和数据 → Sharing Memory(共享内存)。
- 让许多程序访问设备 → Sharing disks(共享磁盘)。
为了实现共享,操作系统将物理资源虚拟化(To implement sharing, the OS virtualizes physical resource)。
0x03 操作系统是一个虚拟机
The OS takes a physical resource and transforms it into a virtual form of itself.
操作系统利用物理资源,将其转化为自身的虚拟形式。
有时,我们可以把操作系统当作是一个虚拟机:
0x04 CPU虚拟化
系统有非常多的虚拟CPU,我们可以把一个CPU变成一个看似无限多的CPU,允许许多程序貌似同时运行。 → CPU虚拟化
A program that loops and prints (cpu.c):
#include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <assert.h> #include "common.h“ // Contains Spin() function int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "usage: cpu <string>\n"); exit(1); } char *str = argv[1]; while (1) { Spin(1); // Repeatedly checks the time and returns once it has run for a second printf("%s\n", str); } return 0; }
🚩 运行结果如下:
尽管我们只有一个处理器,这四个程序似乎都在同时运行!这都归功于操作系统将CPU虚拟化了!
0x05 虚拟化内存(Virtualizing Memory)
物理内存是个字节数组
一个程序将其所有数据结构保存在了内存中:
- 读取内存 - Read memory (load):指定一个地址,以便访问数据。
- 写入内存 - Write memory (store):指定要写到给定地址的数据。
🚩 运行结果1:
新分配的内存在地址00200000处,它更新数值并打印出结果。
每个运行的程序都有其私有内存(own private memory)。
- 每个运行的程序都在相同的地址上开辟内存空间。
- 他们似乎都在独立更新 00200000 的值。
0x06 虚拟内存空间
每个进程都有其自己的虚拟内存空间 - virtual address space (VAS)
操作系统将虚拟地址空间映射到物理内存上。一个正在运行的程序中的内存引用并不影响其他进程的地址、其他进程的地址空间。物理内存是一种共享资源,由操作系统管理。
0x07 并发的问题(The Problem of Concurrency)
操作系统会立即决议许多事情,决定先跑谁,后跑谁……
现代的多线程程序也显现了并发性问题,多线程是指一个进程中的控制流可以同时运行。
A Multi-threaded Program (thread.c):
循环决定了两个任务在一个循环中各自增加多少次共享计数器。
❓ 怎会如此?
增加一个共享计数器(counter++)→ 需要三条指令。
1. 将计数器的值从内存加载到寄存器(reg ← 内存)。
2. 增加它(reg ← reg + 1)。
3. 将其存回内存(memory ← reg)。
这三条指令不是原子执行的(也就是交错执行)。
→ 发生并发的问题。
操作系统提供了一个机制来处理这个问题。
0x08 持久性(Persistence)
像DRAM这样的设备以易失性(volatile)的方式存储数值,需要硬件和软件来持久地(persistently)存储数据。
与CPU和内存不同,操作系统不会为每个应用程序创建一个私有的、虚拟化的磁盘。
相反,它假定用户会想要共享文件中的信息。
❓ 操作系统对持久性有什么作用?
What OS does in order to write to disk?
Figure out where on disk this new data will reside.
Issue I/O requests to the underlying storage device with a device driver.
File system handles system crashes during write.
Journaling or copy-on-write.
Carefully ordering writes to disk to ensure that if a failure occurs during the write sequence, the system can recover to reasonable state afterwards
为了向磁盘写入,操作系统会做什么?
- 弄清新数据在磁盘上的位置。
- 用设备驱动程序向底层存储设备发出I/O请求。
文件系统在写入时处理系统崩溃。
- 写入日志或写时拷贝。
- 谨慎地安排写入磁盘的顺序,以确保如果在写入序列中发生故障,系统可以恢复到
- 写入序列时发生故障,系统可以在事后恢复到合理状态
0x09 文件系统(What is File System?)
操作系统设计目标(OS Design Goals):
建立抽象(abstraction)
- 使系统更方便使用。
提供高性能(performance)
- 将操作系统的开销降到最低。
- 操作系统要在保持没有过多开销的前提下提供虚拟化。
保护(Protection)
- 高度的可靠性
📌 [ 笔者 ] 王亦优 📃 [ 更新 ] 2022.9.5 ❌ [ 勘误 ] /* 暂无 */ 📜 [ 声明 ] 由于作者水平有限,本文有错误和不准确之处在所难免, 本人也很想知道这些错误,恳望读者批评指正!
📜 参考资料 Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau, Operating Systems: Three Easy Pieces A. Silberschatz, P. Galvin, and G. Gagne, Operating System Concepts, 9th Edition, John Wiley & Sons, Inc., 2014, ISBN 978-1-118-09375-7. Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. . 百度百科[EB/OL]. []. https://baike.baidu.com/. |