• 【操作系统导论】操作系统介绍 - Introduction


    💭 写在前面

    本系列博客为复习操作系统导论的笔记,内容主要参考自:

    • 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)下一条指令,以此类推直到程序最终完成:

    \begin{vmatrix} \, \, \, \, fetch\rightarrow decode\rightarrow execite\, \\ \, \, \, \leftharpoondown \end{vmatrix}

    当然了,现代处理器为了让程序运行的更快,在这背后做了很多骚操作。比如一次性执行多条指令,甚至扰乱执行顺序执行并完成它们,为了让程序运行的更快处理器不择手段,只要能让程序运行得更快,其目的也就达到了。但这并不是我们关心的问题,我们只关心大多数程序所假设的简单模型 —— 指令似乎按照有序和顺序得方式逐条执行。

    这样,我们就描述了冯诺依曼计算机模型的基本概念。如果只是反复做以上三件事,那这看上去似乎很简单。但是为了让系统更易于使用,一个程序运行的同时其实还有很多疯狂的事情也在同时进行!

    操作系统也是软件,操作系统就是负责让程序运行起来更容易、同时运行多个程序、允许程序共享内存、让程序能够与设备交互等一系列有趣的工作的载体。这就是操作系统(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):

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include "common.h“ // Contains Spin() function
    6. int main(int argc, char *argv[])
    7. {
    8. if (argc != 2) {
    9. fprintf(stderr, "usage: cpu \n");
    10. exit(1);
    11. }
    12. char *str = argv[1];
    13. while (1) {
    14. Spin(1); // Repeatedly checks the time and returns once it has run for a second
    15. printf("%s\n", str);
    16. }
    17. return 0;
    18. }

    🚩 运行结果如下:

    尽管我们只有一个处理器,这四个程序似乎都在同时运行!这都归功于操作系统将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)

    • 高度的可靠性

    1. 📌 [ 笔者 ]   王亦优
    2. 📃 [ 更新 ]   2022.9.5
    3. ❌ [ 勘误 ]   /* 暂无 */
    4. 📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
    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/.

  • 相关阅读:
    计算机四级网络-网络技术-第六章 网络管理与网络安全
    可视化设计:一文读懂桑基图,从来处来,到去出去。
    java创建指定分辨率的图片或修改图片的分辨率(DPI)
    springboot实现websocket
    Vue在外部配置打包文件夹名称和url地址前缀
    Docker 笔记
    Unity 阴影——阴影平坠(Shadow pancaking)
    基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板
    (附源码)spring boot投票系统 毕业设计 261136
    【AI应用】海康威视iVMS-4200软件安装
  • 原文地址:https://blog.csdn.net/weixin_50502862/article/details/126637950