💭 写在前面
本系列博客为复习操作系统导论的笔记,内容主要参考自:
" 一个正在运行的程序会做一件非常简单的事情:执行指令 "
处理器从内存中获取(fetch)一条指令,对其进行解码(decode),然后执行。完成这条指令后,处理器继续执行(execute)下一条指令,以此类推直到程序最终完成:
当然了,现代处理器为了让程序运行的更快,在这背后做了很多骚操作。比如一次性执行多条指令,甚至扰乱执行顺序执行并完成它们,为了让程序运行的更快处理器不择手段,只要能让程序运行得更快,其目的也就达到了。但这并不是我们关心的问题,我们只关心大多数程序所假设的简单模型 —— 指令似乎按照有序和顺序得方式逐条执行。
这样,我们就描述了冯诺依曼计算机模型的基本概念。如果只是反复做以上三件事,那这看上去似乎很简单。但是为了让系统更易于使用,一个程序运行的同时其实还有很多疯狂的事情也在同时进行!
操作系统也是软件,操作系统就是负责让程序运行起来更容易、同时运行多个程序、允许程序共享内存、让程序能够与设备交互等一系列有趣的工作的载体。这就是操作系统(Operating System, OS)。
操作系统的另一个早期名称叫监管程序(super visor),也叫主控程序(master control program),其实叫这样的名字能更容易突出它是一款软件,理解他在做什么 —— 监管程序的软件、主要控制程序的软件。但最后大家还是去叫他 Operating System —— 操作系统的软件,这么一看似乎也挺合理的。
运行程序执行的指令:
操作系统是一种在计算机用户之间起媒介作用的程序(或程序)和计算机硬件。
操作系统负责的事:
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 (操作系统为程序运行提供各种服务)。
System Call(系统调用)允许用户告诉操作系统要做什么(服务)。
📚 概念:The OS is a Resource Manager - 操作系统是一个资源管理器。
操作系统可以:
为了实现共享,操作系统将物理资源虚拟化(To implement sharing, the OS virtualizes physical resource)。
The OS takes a physical resource and transforms it into a virtual form of itself.
操作系统利用物理资源,将其转化为自身的虚拟形式。
有时,我们可以把操作系统当作是一个虚拟机:
系统有非常多的虚拟CPU,我们可以把一个CPU变成一个看似无限多的CPU,允许许多程序貌似同时运行。 → CPU虚拟化
A program that loops and prints (cpu.c):
- #include
- #include
- #include
- #include
- #include "common.h“ // Contains Spin() function
- int main(int argc, char *argv[])
- {
- if (argc != 2) {
- fprintf(stderr, "usage: cpu
\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虚拟化了!
物理内存是个字节数组
一个程序将其所有数据结构保存在了内存中:
🚩 运行结果1:
新分配的内存在地址00200000处,它更新数值并打印出结果。
每个运行的程序都有其私有内存(own private memory)。
每个进程都有其自己的虚拟内存空间 - virtual address space (VAS)
操作系统将虚拟地址空间映射到物理内存上。一个正在运行的程序中的内存引用并不影响其他进程的地址、其他进程的地址空间。物理内存是一种共享资源,由操作系统管理。
操作系统会立即决议许多事情,决定先跑谁,后跑谁……
现代的多线程程序也显现了并发性问题,多线程是指一个进程中的控制流可以同时运行。
A Multi-threaded Program (thread.c):
循环决定了两个任务在一个循环中各自增加多少次共享计数器。
❓ 怎会如此?
增加一个共享计数器(counter++)→ 需要三条指令。
1. 将计数器的值从内存加载到寄存器(reg ← 内存)。
2. 增加它(reg ← reg + 1)。
3. 将其存回内存(memory ← reg)。
这三条指令不是原子执行的(也就是交错执行)。
→ 发生并发的问题。
操作系统提供了一个机制来处理这个问题。
像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
为了向磁盘写入,操作系统会做什么?
文件系统在写入时处理系统崩溃。
操作系统设计目标(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/. |