![[读书笔记|OS|1]Operating Systems: Three Easy Pieces](http://pic.xiahunao.cn/yaotu/[读书笔记|OS|1]Operating Systems: Three Easy Pieces)
我阅读的是中文pdf可以在这里找到 操作系统导论中文版1.计算机程序程序运行时会发生什么简单来说就是执行指令获取——解码——执行fetch从内存中获取decode弄清楚这是哪条指令execute做它该做的事。如两数相加、访问内存、检查条件、跳转到函数…循环以上步骤直到程序运行结束不断执行下一条指令以上我们描述了冯·诺依曼计算模型的基本概念但是一个程序运行时还有很多其它事在同步进行——主要为了让系统易于使用这就是操作系统(OS)的主要职能。2.操作系统的用处操作系统(OS)让程序运行变得容易// 允许同时运行多个程序// 允许程序共享内存// 让程序能够与设备交互…确保系统易于使用且正确高效地运行。总结操作系统这个软件的目的是让系统更易于使用3.虚拟化 深入操作系统“关键crux问题”——引出 构建 操作系统(OS)时想要解决的问题关键问题1如何将资源虚拟化我们先来看看操作系统扮演着哪些角色操作系统利用虚拟化(virtualization)技术将物理(physical)资源如处理器、内存、磁盘转换为更通用、强大、易于使用的虚拟形式。所以有时我们也称操作系统为虚拟机(virtual machine)。操作系统提供接口(API)供用户调用用户可以将需求传达给操作系统如运行程序、分配内存或访问文件运行/停止程序告诉操作系统 运行哪些程序…典型的操作系统会提供几百个系统调用(system call)来调用应用程序。因此说操作系统为应用程序提供了一个标准库(standard library)。虚拟化使程序共享CPU多程序同时运行共享内存多程序同时访问自己的指令和数据共享磁盘多程序访问设备所以操作系统有时被称为资源管理器(resource manager)。每个CPU、内存和磁盘都是系统的资源(resource)所以操作系统扮演的主要角色就是管理以做到高效、公平。总结操作系统的三个功能虚拟机资源转化提供接口调用为应用程序提供标准库资源管理器接下来我们看一些具体的例子。3.1虚拟化CPU代码:循环打印用户输入的字符串任务在单处理器(CPU)的系统上编译和运行运行不同实例利用 符号同时运行4个进程命令之间的分号允许我们在 tcsh 中同时运行多个程序。如果使用的是不同的shell例如bash工作原理会稍有不同。观察结果在硬件的帮助下操作系统提供系统拥有非常多的虚拟CPU的假象(illusion)。将单个CPU或其中一部分转换为看似无限数量的CPU从而让许多程序看似同时运行这就是虚拟化CPU(virtualizing the CPU)而API是大多数用户与操作系统交互的主要方式。一次运行多个程序的能力会引发各种新问题。eg. 如果两个程序想要在特定时间运行应该运行哪个操作系统在不同地方采用一些**策略policy**来回答这类问题。所以我们将在学习操作系统实现的基本机制mechanism例如一一运行多个程序的能力时研究这些策略。call back: 因此操作系统承担了资源管理器resource manager的角色。3.2虚拟化内存物理内存模型内存是一个字节数组。读取read内存必须指定一个地址address才能访问存储在那里的数据。要写入write或更新update内存还必须指定要写入给定地址的数据。程序运行时一直要访问内存。程序将所有 数据结构保存在内存中甚通过各种指令来访问它们例如加载和保存或利用其他明确的指令在工作时访问内存。程序的每个指令都在内存中因此每一读取指令都会访问内存。代码 malloc 分配内存再次运行同一个程序的多个实例得到结果这正是操作系统虚拟化内存virtualizing memory时发生的情况。每个进程访问自己的私有虚拟地址空间virtual address space有时称为地址空间address space操作系统以某种方式映射到机器的物理内存上。一个正在运行的程序中的内存引用不会影响其他进程或操作系统本身的地址空间。对于正在运行的程序它完全拥有自己的物理内存。但实际情况是物理内存是由操作系统管理的共享资源。所有这些是如何完成的也是本书第1部分的主题属于虚拟化virtualization的主题。4.并发“并发”一词用来指代一系列问题这些问题在**同时并发地处理很多事情时出现**且必须解决。在上面关于虚拟化的例子中操作系统同时处理很多事情首先运行一个进程然后再运行一个进程等等。事实证明这样做会导致一些深刻而有趣的问题。现在并发问题不再局限于操作系统本身。现代多线程multi-threaded程序也存在相同的问题。我们来看一个多线程程序的例子未完待续…