现代操作系统 第一章 引论

现代操作系统 第一章 引论

本文为读书摘要(个人认为重要的知识点),穿插课后习题的选取(主要选取考察概念性的习题)

考察操作系统有两种观点:资源管理观点和扩展的机器观点。

  • 在资源管理观点中,操作系统的任务是有效地管理系统的各个部分。 (自底向上,对下管理资源)
  • 在扩展的机器观点中,系统的任务是为用户提供比实际机器更便于运用的抽象。 (自顶向下,对上提供抽象)
    这些抽象包括进程、地址空间以及文件。

计算机硬件介绍

CPU

古老的是流水线机制

**比流水线更先进的设计是超标量CPU,如图 1-7b所示。在这种设计中,有多个执行单元。例如,一 个CPU用干整数算术运算,ー个CPU用于浮点算术运算,ー个CPU用于布尔运算。两个或更多的指令被同时取出、解码并装入暂存缓冲区中,直至它们执行完毕。只要有一个执行单元空闲,就检査保持 缓冲区中是否还有可处理的指令,如果有,就把指令从缓冲区中移出并执行之。**这种设计存在ー种隐含的作用,即程序的指令经常不按顺序执行。在多数情况下,硬件负责保证这种运算的结果与顺序执行指令时的结果相同。

image-20220318162058510

超线程技术

  • 超线程技术允许CPU保持两个不同的线程状态,然后在纳秒级的时间尺度内来回切换。

    例如,如果某个进程需要从内存中读出ー个字(需要 花费多个时钟周期),多线程CPU则可以切换至另ー个线程。超线程技术不提供真正的并行处理。在ー个时刻只有一个进程在运行,但是线程的切换时间则减少到纳秒数量级。

存储器

存储器 理想情况下的三个特征(无法同时满足)

  • 便宜
  • 容量大

img

  • 存储器系统的顶层是CPU中的寄存器。 它们用与CPU相同的材料制成,所以和CPUー样快。显然,访问它们是没有时延的。其典型的存储容量是在32位CPU中为32 x 32位,而在64位CPU中为64 x 64位。

具体细节 可以看看 每个程序员都应该了解的内存知识【第一部分】 - OSCHINA - 中文开源技术交流社区

  • 主存被分割成高速缓存行(cache line),其典型大小为64字节,地址0至63对应高速缓存行0 ,地址64至127对应高速缓存行1,以此类推。最常用的高速缓存行放置在CPU内部或者非常接近CPU的高速缓存中。
    当某个程序需要读ー个存储字时,高速缓存硬件检査所需要的高速缓存行是否在高速缓存中。如果是,称为高速缓存命中,缓存满足了请求,就不需要通过总线把访问请求送往主存。高速缓存命中通常需要两个时钟周期。高速缓存未命中就必须访问内存,这要付出大量的时间代价。

一些存储类型:

RAM —— Random Access Memory
ROM —— Read Only Memory 非易失性随机访问存储器(出厂后就不能修改)
CMOS —— 易失性,通常用于计算机保存当前时间和日期,由一块小电池驱动

I/O 设备

I/O设备一般包括两个部分:设备控制器和设备本身。控制器是插在电路板上的ー块芯片或ー组芯片,这块电路板物理地控制设备。它从操作系统接收命令,例如,从设备读数据,并且完成数据的处理。

输入输出的三种方式:

第一种方式 :busy waiting

  • 在最简单的方式中,用户程序发出ー个系统调用,内核将其翻译成 ー个对应设备驱动程序的过程调用。 然后设备驱动程序启动i/o并在ー个连续不断的循环中检査该设备,看该设备是否完成了工作(一般有一些二进制位用来指示设备仍在忙碌中)。
  • 当i/o结束后,设备驱动程序把数据送到指定的地方(若有此需要),并返回。然后操作系统将控制返回给调用者。
  • 其缺点是要占据CPU,CPU一直轮询设备直到对应的I/O操作完成。

第二种方式 :中断

  • 第二种方式是设备驱动程序启动设备并且让该设备在操作完成时发出ー个中断。 设备驱动程序在这个时刻返回。操作系统接着在需要时阻塞调用者并安排其他工作进行。当设备驱动程序检测到该设备的操作完毕时,它发出ー个中断通知操作完成。

中断 I/O 具体过程

image-20220318170431812

在上图中,有一个I/O的三步过程。

  • 在第1步,设备驱动程序通过写设备寄存器通知设备控制器做什么。然后,设备控制器启动该设备。
  • 当设备控制器传送完毕被告知要进行读写的字节数量后,它在第2步中使用特定的总线发信号给中断控制器芯片。
  • 如果中断控制器已经准备接收中断(如果正忙于ー个更高级的中断,也可能不接收),它会在CPU芯片的ー个管脚上声明,这就是第3步。
  • 在第4步中,中断控制器把该设备的编号放到总线上,这样CPU可以读总线,并且知道哪个设备刚刚完成了操作(可能同时有许多设备在运行)。

与函数调用过程类似

  • 一旦CPU决定取中断,通常程序计数器和PSW就被压入当前堆栈中,并且CPU被切换到用户态。
    设备编号可以成为部分内存的ー个引用,用于寻找该设备中断处理程序的地址。这部分内存称为中断向量(interrupt vector)。

  • 当中断处理程序(中断设备的设备驱动程序的一部分)开始后,它取走已入栈的程序计数器和PSW,并保存之,然后査询设备的状态。在中断处理程序全部完成之后,它返回到先前运行的用户程序中尚未执行的头一条指令。

第三种方式:DMA芯片

  • 为I/O使用ー种特殊的直接存储器访问(Direct Memory Access, DMA)芯片,它可以控制在内存和某些控制器之间的位流,而无须持续的CPU干预。

CPU对DMA芯片进行设置,说明需要传送的字节数、有关的设备和内存地址以及操作方向,接着启动DMA。当DMA芯片完成时,它引发ー个中断,其处理方式如前所述。

中断会(并且经常会)在非常不合适的时刻发生,比如,在另ー个中断程序正在运行时发生。正由于此,CPU有办法关闭中断并在稍后再开启中断。在中断关闭时,任何已经发出中断的设备,可以继续保持其中断信号,但是CPU不会被中断,直至中断再次启用为止。 如果在关闭中断时,已有多个设备发出了中断,中断控制器将决定先处理哪个中断,通常这取决于事先赋予毎个设备的静态优先级。最高优先级的设备赢得竞争并且首先获得服务,其他设备则必须等待。

总线

随着处理器和存储器速度越来越快,到了某个转折点时,单总线(当然还有IBM PC总线)就很难处理总线的交通流量了,只有放弃。其结果是导致其他的总线出现,它们处理I/O设备以及CPU到存储器的速度都更快。这种演化的结果是,目前一台大型x86系统的结构如下图所示。

image-20220318171837264

图中的系统有很多总线(例如高速缓存、内存、PCIe. PCI、USB、SATA和DMI),每条总线的传输速度和功能都不同。操作系统必须了解所有总线的配置和管理。其中主要的总线是PCle (Peripheral Component Interconnect Express) 总线。

  • 共享总线架构(shared bus architecture) 表示多个设备使用一些相同的导线传输数据。因此,当多个设备同时需要发送数据时,需要仲裁器决定哪个设备可以使用总线。

  • PCIe恰好相反,它使用分离的端到端的链路。

  • 传统PCI使用的并行总线架构(parallel bus architecture) 表示通过多条导线发送数据的每ー个字。例如,在传统的PCI总线上,ー个32位数据通过32条并行的导线发送。

  • 与之相反,PCIe使用串行总线架构(serial bus architecture),通过一条被称为数据通路的链路传递集合了所有位的一条消息,这非常像网络包。这样做简单了很多,因为不用再确保所有32位在同一时刻精确地到达目的地。
    通过将多个数据通路并行起来, 并行性仍可有效利用。

在图中,CPU通过DDR3总线与内存对话,通过PCIe总线与外围图形设备对话,通过DMI (Direct Media Interface)总线经集成中心与所有其他设备对话。而集成中心通过通用串行总线与USB设备对话, 通过SATA总线与硬盘和DVD驱动器对话,通过PCIe传输以太网络帧。我们已经提到过使用传统PCI总线的旧的PCI设备。

不仅如此,每ー个核不仅有独立的高速缓存,而且还共享一个大得多的高速缓存。每ー种高速缓存都引入了又一条总线。

实时操作系统

  • 如果某个动作必须绝对地在规定的时刻(或规定的时间范围)发生,这就是硬实时系统。可以在工业过程控制、民用航空、军事以及类似应用中看到很多这样的系统。 这些系统必须提供绝对保证,让某个特定的动作在给定的时间内完成。
  • 另一类实时系统是软实时系统,在这种系统中,虽然不希望偶尔违反最终时限,但仍可以接受,并且不会引起任何永久性的损害。数字音频或多媒体系统就是这类系统。智能手机也是软实时系统。

由于在(硬)实时系统中满足严格的时限是关键,所以操作系统就是ー个简单的与应用程序链接的库,各个部分必须紧密耦合并且彼此之间没有保护。这种实时系统的例子有eCos。

微内核

在微内核设计背后的思想是,为了实现高可靠性,将操作系统划分成小的、良好定义的模块,只有其中一个模块——微内核——运行在内核态,其余的模块由于功能相对弱些,则作为普通用户进程运行。 特别地,由于把每个设备驱动和文件系统分别作为普通用户进程,这些模块中的错误虽然会使这些模块崩溃,但是不会使得整个系统死机。所以,音频驱动中的错误会使声音断续或停止,但是不会使整个计算机垮掉。相反,在单体系统中,由于所有的设备驱动都在内核中,ー个有故障的音频驱动很容易引起对无效地址的引用,从而造成恼人的系统立即停机。

习题

  • 为了使用高速缓存,主存被划分为若干cache行,通常每行长32或64字节。每次缓存一整个cache行,每次缓存一整行而不是一个字节或一个字,这样的优点是什么?

经验证据表明,存储器访问表现出引用局部原则,即如果读取某一个位置,则接下来访问这个位置的概率非常高,尤其是紧随其后的内存位置。 因此,通过缓存整个缓存行,接下来缓存命中的概率会增加。 此外,现代的硬件可以将32或64字节块整个传输到高速缓存行,比单个字节读取,总共读32或64字节的速度要快得多。

  • 在早期计算机中,每个字节的读写直接由CPU处理(即没有DMA)。对于多到程序而言这种组织方式有什么含义?

多道程序设计的主要原因是在某个程序等待I/O完成时,可以让CPU做一些其他操作。 如果没有DMA,则CPU完全占用I/O,因此通过多道程序设计没有任何收益增加获得(至少在CPU利用率方面)。 无论程序执行多少I/O,CPU都将100%处于忙碌。 这当然假设主要的延迟是数据被复制时的等待。 如果由于其他原因(例如,到达串行线路)I/O很慢,CPU可以执行其他工作。

  • 与访问I/O设备相关的指令通常是特权指令,也就是说,他们能在内核态执行而在用户态则不行,说明为什么这些指令是特权指令。

典型的例子(对I/O进行权限控制),比如对于I/O设备(例如,打印机)的访问,通常对不同用户限制也不同。某些用户可以允许打印任意数量的页面,某些用户可能根本不允许打印,而一些用户可能仅限于打印一定数量的页面。 这些限制由系统管理员根据某些策略设置。 需要强制执行此类策略,以便用户级别的程序不会干扰它们。

  • 内核态和用户态有哪些区别?解释在设计操作系统时存在两种不同的模式有什么帮助。

大多数现代CPU提供两种执行模式:内核态和用户态。 CPU可以执行其指令集中的每条指令,并在内核态下执行时使用硬件的各种功能。 但是用户态只能执行部分指令,执行时仅使用部分功能。 拥有两种模式的设计允许人员以用户态运行用户程序,从而拒绝他们访问关键指令。

  • 分时系统和多道程序系统的区别是什么?

分时系统一般指分时操作系统。 分时操作系统是使一台计算机采用时间片轮转的方式同时为几个、几十个甚至几百个用户服务的一种操作系统。

在分时系统中,多个用户可以使用他们自己的终端同时访问和执行计算系统上的计算。 多道程序设计系统允许用户同时运行多个程序。 所有分时系统都是多道程序设计系统,但并非所有多道程序设计系统都是分时系统,因为多道程序设计系统可以在只有一个用户的PC上运行。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值