Operating System 简明教程

Operating System - Quick Guide

Operating System - Overview

操作系统 (OS) 是计算机用户和计算机硬件之间的接口。操作系统是一种执行所有基本任务的软件,例如文件管理、内存管理、进程管理、处理输入和输出以及控制外围设备(例如磁盘驱动器和打印机)。

一些流行的操作系统包括 Linux 操作系统、Windows 操作系统、VMS、OS/400、AIX、z/OS 等。

Definition

操作系统是一个充当用户与计算机硬件之间的接口的程序,并且控制各类程序的执行。

conceptual view

以下是操作系统的部分重要功能。

  1. Memory Management

  2. Processor Management

  3. Device Management

  4. File Management

  5. Security

  6. Control over system performance

  7. Job accounting

  8. Error detecting aids

  9. 协调其他软件和用户

Memory Management

内存管理是指对主内存或主存储器的管理。主内存由一组单词或字节组成,每个单词或字节拥有自己的地址。

主内存提供一种由 CPU 直接访问的快速存储器。程序需要在主内存中才能执行。操作系统针对内存管理执行以下活动:-

  1. 跟踪主内存的使用状况,例如有哪些部分由哪些进程使用,哪些部分未使用。

  2. 在多道程序设计中,操作系统决定哪个进程何时获得内存,以及获得多少内存。

  3. 在进程请求时分配内存。

  4. 在进程不再需要内存或已被终止时释放内存。

Processor Management

在多道程序设计环境中,操作系统决定哪个进程在何时获得处理器,以及获得多长时间的处理器。此功能称为 process scheduling 。操作系统针对处理器管理执行以下活动:-

  1. 跟踪处理器的状态和进程。负责此任务的程序称为 traffic controller

  2. 向进程分配处理器(CPU)。

  3. 在进程不再需要时释放处理器。

Device Management

操作系统通过各个驱动程序管理设备通信。操作系统针对设备管理执行以下活动:-

  1. 保持对所有设备的追踪。负责这项任务的程序被称为 I/O controller

  2. 决定进程何时、使用多长时间获得设备。

  3. 有效地分配设备。

  4. De-allocates devices.

File Management

文件系统通常根据目录进行整理,以方便浏览和使用。这些目录可能包含文件以及其他的方向。

操作系统对文件管理执行以下活动 -

  1. 保持对信息、位置、用途、状态等的追踪。这些集合功能通常被称为 file system

  2. 决定谁能够获得资源。

  3. Allocates the resources.

  4. De-allocates the resources.

Other Important Activities

以下是操作系统执行的部分重要活动 -

  1. Security - 通过密码及其他类似的技术,防止对程序和数据的未经授权访问。

  2. Control over system performance - 记录了对服务请求和系统响应之间的延迟。

  3. Job accounting - 保持对各种作业和用户使用的资源和时间进行追踪。

  4. Error detecting aids - 生成转储、跟踪、错误消息和其他调试和错误检测辅助信息。

  5. Coordination between other softwares and users - 为计算机系统的各种用户协调和分配编译器、解释器、汇编器和其他软件。

Types of Operating System

操作系统从第一台计算机开始就存在,并且随着时间的推移不断发展。在本章中,我们将讨论一些最常用的重要操作系统类型。

Batch operating system

批处理操作系统的用户不会直接与计算机交互。每个用户都会在脱机设备(如穿孔卡)上准备自己的作业,并将其提交给计算机操作员。为了加快处理速度,需求类似的作业会被批处理在一起并作为一组运行。程序员会将自己的程序留给操作员,然后操作员会将具有相似需求的程序分类到批处理中。

批处理系统的缺点如下 −

  1. 用户与作业之间缺乏交互。

  2. CPU 经常处于空闲状态,因为机械 I/O 设备的速度比 CPU 慢。

  3. 难以提供所需的优先级。

Time-sharing operating systems

分时是一种技术,它使许多位于不同终端的人员能够同时使用一个特定的计算机系统。分时或多任务处理是多道程序设计的逻辑扩展。同时在多个用户之间共享的处理器的時間称为分时。

多道程序批处理系统和分时系统之间的主要区别在于,在多道程序批处理系统的情况下,目标是最大化处理器使用率,而在分时系统中,目标是最小化响应时间。

CPU 通过在多个作业之间切换来执行多个作业,但切换发生得很频繁。因此,用户可以收到即时响应。例如,在事务处理中,处理器以短时间段或计算量子执行每个用户程序。也就是说,如果存在 n 个用户,那么每个用户都可以获得一个时间量子。当用户提交命令时,响应时间最多只有几秒钟。

操作系统使用 CPU 调度和多道程序设计为每个用户提供一小部分时间。最初主要设计为批处理系统的计算机系统已经修改为分时系统。

分时操作系统具有以下优点:

  1. 提供快速响应的优点。

  2. Avoids duplication of software.

  3. Reduces CPU idle time.

分时操作系统的缺点如下:

  1. Problem of reliability.

  2. 用户程序和数据的安全性和完整性问题。

  3. Problem of data communication.

Distributed operating System

分布式系统使用多个中央处理器为多个实时应用程序和多个用户提供服务。数据处理作业相应地分布在处理器之间。

处理器通过各种通信线路(例如高速总线或电话线)相互通信。这些被称为 loosely coupled systems 或分布式系统。分布式系统中的处理器在大小和功能上可能有所不同。这些处理器被称为站点、节点、计算机等。

分布式系统的优点如下:

  1. 具有资源共享功能,一个站点上的用户可以使用另一个站点上的可用资源。

  2. 通过电子邮件加速彼此之间的数据交换。

  3. 如果分布式系统中一个站点发生故障,则其余站点有可能继续运行。

  4. 更好地为客户提供服务。

  5. 减少主机计算机上的负载。

  6. 减少数据处理中的延迟。

Network operating System

网络操作系统在服务器上运行,并为服务器提供管理数据、用户、组、安全、应用程序和其他网络功能的能力。网络操作系统的主要目的是允许网络中多台计算机(通常是局域网 (LAN)、专用网络或其他网络)之间共享文件和打印机访问权限。

网络操作系统示例包括 Microsoft Windows 服务器 2003、Microsoft Windows 服务器 2008、UNIX、Linux、Mac OS X、Novell NetWare 和 BSD。

网络操作系统的优点如下 −

  1. 集中式服务器高度稳定。

  2. Security is server managed.

  3. 可以轻松地将新技术和硬件升级集成到系统中。

  4. 可以从不同位置和不同类型的系统远程访问服务器。

网络操作系统的缺点如下 −

  1. 购买和运行服务器的成本很高。

  2. 依赖于一个中心位置进行大多数操作。

  3. 需要定期维护和更新。

Real Time operating System

实时系统定义为一个数据处理系统,其中处理和响应输入所需的时间间隔非常小,以至于它控制着环境。系统响应输入并显示所需更新信息所花费的时间称为 response time 。因此,在这种方法中,与联机处理相比,响应时间非常少。

当对处理器的操作或数据流有严格的时间要求时,可以使用实时系统,并且可以在专用应用程序中将实时系统用作控制设备。实时操作系统必须具有明确定义的、固定的时间约束,否则系统将失败。例如,科学实验、医学影像系统、工业控制系统、武器系统、机器人、空中交通管制系统等。

实时操作系统有两种类型。

Hard real-time systems

硬实时系统保证关键任务按时完成。在硬实时系统中,辅助存储器受到限制或缺失,数据存储在 ROM 中。在这些系统中,几乎找不到虚拟内存。

Soft real-time systems

软实时系统的限制较少。关键实时任务优先于其他任务,并保留优先级,直到任务完成。软实时系统的实用性不如硬实时系统。例如,多媒体、虚拟现实、海底勘探和行星探测车等先进科学项目。

Operating System - Services

操作系统为用户和程序提供服务。

  1. 它为程序提供执行环境。

  2. 它为用户提供以方便的方式执行程序的服务。

以下是操作系统提供的几种常见服务 −

  1. Program execution

  2. I/O operations

  3. File System manipulation

  4. Communication

  5. Error Detection

  6. Resource Allocation

  7. Protection

Program execution

操作系统处理从用户程序到系统程序(如打印机后台程序、名称服务器、文件服务器等)的多种活动。这些活动中的每一个都封装为一个进程。

进程包括完整的执行上下文(要执行的代码、要处理的数据、寄存器、正在使用的操作系统资源)。以下是操作系统在程序管理方面的主要活动 −

  1. 将程序加载到内存中。

  2. Executes the program.

  3. Handles program’s execution.

  4. 提供进程同步机制。

  5. 提供进程通信机制。

  6. 提供死锁处理机制。

I/O Operation

I/O 子系统包含 I/O 设备及其相应的驱动程序软件。驱动程序向用户隐藏特定硬件设备的特性。

操作系统对用户和设备驱动器之间的通信进行管理。

  1. I/O 操作指的是对任何文件或任何特定 I/O 设备执行的读写操作。

  2. 当需要时,操作系统会提供访问所需 I/O 设备的权限。

File system manipulation

一个文件表示收集起来的相关信息。计算机可以将文件存储在磁盘(二级存储)上,以作长期存储之用。存储介质的示例包括磁带、磁头磁盘和光盘驱动器,如 CD、DVD。这些介质每一种都有其自己的属性,如速度、容量、数据传输速率和数据访问方法。

文件系统通常被组织成目录,以便进行轻松导航和使用。这些目录可能包含文件和其他方向。以下是操作系统在文件管理方面的几个主要活动 −

  1. 程序读取文件或写入文件。

  2. 操作系统授予程序对文件执行操作的权限。

  3. 权限因只读、读写和拒绝等而异。

  4. 操作系统为用户提供创建一个/删除文件的文件界面。

  5. 操作系统为用户提供创建一个/删除目录的文件界面。

  6. 操作系统提供了创建文件系统备份的文件界面。

Communication

在分布式系统的情况下,该系统是处理器集合,不共享内存、外围设备或时钟,操作系统管理所有进程之间的通信。多个进程通过网络中的通信线路互相通信。

操作系统处理路由和连接策略以及争用和安全问题。以下是操作系统在通信方面的几个主要活动 −

  1. 两个进程通常需要在它们之间传输数据

  2. 两个进程可以在一台计算机上或在不同的计算机上,但通过计算机网络相连接。

  3. 通信可以通过共享内存或通过消息传递两种方法实现。

Error handling

错误随时可能发生。错误可能发生在 CPU 中、在 I/O 设备中或在内存硬件中。以下是操作系统在错误处理方面的几个主要活动 −

  1. 操作系统持续检查可能存在的错误。

  2. 操作系统采取适当措施来确保进行正确的和一致的计算。

Resource Management

在多用户或多任务环境中,需要为每个用户或作业分配主存储器、CPU 周期和文件存储等资源。以下是操作系统在资源管理方面的主要活动−

  1. 操作系统使用调度器管理各种资源。

  2. CPU 调度算法用于提高 CPU 利用率。

Protection

对于具有多个用户且同时执行多个进程的计算机系统,必须保护各个进程免于彼此活动的影响。

保护是指控制程序、进程或用户访问计算机系统所定义的资源的一种机制或方法。以下是操作系统在保护方面的主要活动−

  1. 操作系统确保对系统资源的所有访问都得到控制。

  2. 操作系统确保外部 I/O 设备免受无效访问尝试的影响。

  3. 操作系统通过密码为每个用户提供身份验证功能。

Operating System - Properties

Batch processing

批处理是一种技术,在该技术中,操作系统在处理开始前先将程序和数据一起收集到一个批处理中。操作系统执行与批处理相关​​的以下活动:

  1. 操作系统定义一个作业,其中预定义的命令、程序和数据序列作为一个单元。

  2. 操作系统在内存中保留一定数量的作业,并在没有任何手动信息的情况下执行这些作业。

  3. 作业按提交顺序处理,即先到先得。

  4. 当一个作业完成执行时,其内存将会释放,并且作业的输出将被复制到输出池中以供稍后打印或处理。

batch processing

Advantages

  1. 批处理将操作员的大部分工作转移到计算机上。

  2. 当上一个作业完成时,下一个作业会立即开始,而无需任何手动干预,因此性能得到提高。

Disadvantages

  1. Difficult to debug program.

  2. 一个作业可能会进入无限循环。

  3. 由于缺乏防护方案,一个批处理作业可能会影响待处理的作业。

Multitasking

多任务是指 CPU 通过在多个作业之间进行切换来同时执行多个作业。切换发生得非常频繁,以至于用户可以在程序运行时与其交互。操作系统执行与多任务处理相关的以下活动:

  1. 用户直接向操作系统或程序发出指令,并立即收到响应。

  2. 操作系统处理多任务的方式是,它可以同时处理多个操作/执行多个程序。

  3. 多任务操作系统也被称为分时系统。

  4. 开发这些操作系统是为了以合理的价格提供计算机系统的交互式使用。

  5. 分时操作系统使用 CPU 调度和多编程的概念,为每个用户提供一小部分分时 CPU。

  6. 每个用户至少在内存中有一个独立的程序。

multitasking
  1. 加载到内存中并正在执行的程序通常被称为 process

  2. 当一个进程执行时,它通常只执行很短的时间,然后才会完成或需要执行 I/O。

  3. 由于交互式 I/O 通常以较慢的速度运行,因此可能需要很长时间才能完成。在此期间,CPU 可以被另一个进程使用。

  4. 操作系统允许用户同步共享计算机。由于在分时系统中,每个动作或指令往往很短,因此每个用户只需很少的 CPU 时间。

  5. 当系统快速地在各个用户/程序之间切换 CPU 时,每个用户都会得到这样一种印象,即他们有自己的 CPU,而实际上只有一个 CPU 在许多用户之间共享。

Multiprogramming

*多道程序设计*是指在两个及以上的程序同时驻留在内存中时共享处理器。多道程序设计假定有一个共享处理器。多道程序设计通过组织作业来提高 CPU 利用率,以便 CPU 始终有作业可执行。

下图显示了多道程序设计系统的内存布局。

memory layout

操作系统会执行与多道程序设计相关的一些活动。

  1. 操作系统会同时在内存中保留多个作业。

  2. 这组作业是作业池中的作业的一个子集。

  3. 操作系统选取内存中的其中一个作业并开始执行。

  4. 多道程序设计操作系统使用内存管理程序来监视所有活动程序和系统资源的状态,以确保 CPU 永远不会空闲,除非没有作业需要处理。

Advantages

  1. 高且高效的 CPU 利用率。

  2. 用户认为许多程序几乎同步分配了 CPU。

Disadvantages

  1. CPU scheduling is required.

  2. 为了在内存中容纳许多作业,需要内存管理。

Interactivity

交互性是指用户与计算机系统交互的能力。操作系统会执行与交互性相关的一些活动:

  1. 为用户提供与系统交互的界面。

  2. 管理输入设备以获取用户的输入。例如,键盘。

  3. 管理输出设备以向用户显示输出。例如,显示器。

操作系统的响应时间需要很短,因为用户会提交并等待结果。

Real Time System

实时系统通常是专用嵌入式系统。操作系统会执行与实时系统活动相关的一些活动。

  1. 在这样的系统中,操作系统通常从传感器数据中读取并对其做出反应。

  2. 操作系统必须在固定的时间范围内保证对事件的响应,以确保正确的性能。

Distributed Environment

分布式环境是指计算机系统中多个独立的 CPU 或处理器。操作系统对分布式环境执行以下活动:

  1. 操作系统在多个物理处理器之间分配计算逻辑。

  2. 处理器不共享内存或时钟。相反,每个处理器都有自己的本地内存。

  3. 操作系统管理处理器之间的通信。它们通过各种通信线路相互通信。

Spooling

Spooling 是在线同时外围操作的首字母缩写词。Spooling 指的是将各种 I/O 作业的数据放入缓冲区。此缓冲区是 I/O 设备可访问的内存或硬盘上的一个特殊区域。

操作系统对分布式环境执行以下活动:

  1. 处理 I/O 设备数据池,因为设备具有不同的数据访问速率。

  2. 维护提供等待站的池,数据可以在其中休息,而速度较慢的设备则可以赶上。

  3. 由于池处理过程,保持并行计算,因为计算机可以并行的方式执行 I/O。这样就可以让计算机在执行计算任务的同时从磁带读取数据、向磁盘写入数据以及向磁带打印机输出。

spooling

Advantages

  1. 池操作使用磁盘作为非常大的缓冲区。

  2. Spooling 能够将一个作业的 I/O 操作与另一个作业的处理器操作重叠。

Operating System - Processes

Process

进程基本上是一个正在执行的程序。进程的执行必须按顺序进行。

简单地说,我们以文本文件形式编写计算机程序,当我们执行该程序时,它将变成一个进程,执行程序中提到的所有任务。

当一个程序被加载到内存中并成为一个进程时,它可以被划分为四个部分 ─ 栈、堆、文本和数据。下图显示了主内存中一个进程的简化布局 −

process components

S.N.

Component & Description

1

Stack 进程栈包含临时数据,例如方法/函数参数、返回地址和局部变量。

2

Heap 这是在进程运行时动态分配给进程的内存。

3

Text 这包括由程控器值和处理器寄存器内容表示的当前活动。

4

Data 此部分包含全局变量和静态变量。

Program

程序是一段代码,可以是一行或数百万行代码。计算机程序通常由计算机程序员使用编程语言编写。例如,下面是一个用 C 编程语言编写的简单程序 −

#include <stdio.h>

int main() {
   printf("Hello, World! \n");
   return 0;
}

计算机程序是一组指令,执行时执行特定任务。如果将程序与进程进行比较,我们可以得出结论:进程是一个计算机程序的动态实例。

计算机程序中执行明确定义的任务的部分称为 algorithm 。计算机程序、库和相关数据的集合称为 software

Process Life Cycle

在进程执行期间会经历不同的状态。这些状态在不同的操作系统中可能有所不同,且这些状态的名称也没有进行标准化。

一般来说,一个进程每次可以处于以下五个状态之一。

S.N.

State & Description

1

Start 进程最初启动/创建时的初始状态。

2

Ready 进程在等待分配到处理器。就绪进程在等操作系统为其分配处理器,以便它们能够运行。进程可能在此状态后或在被调度程序中断向某个其他进程分配 CPU 时进入此状态。

3

Running 进程在被操作系统调度程序分配给处理器后,进程状态将设置为正在运行,且处理器执行其指令。

4

Waiting 如果进程需要等待一个资源(例如等待用户输入或等待文件进行)可用,则进程进入等待状态。

5

Terminated or Exit 一旦进程完成执行,或被操作系统终止,它将转到终止状态,并在此状态下等待从主内存中移除。

process state

Process Control Block (PCB)

进程控制块是由操作系统为每个进程维护的一个数据结构。进程控制块由整型进程 ID (PID) 标识。进程控制块保留所有所需的信息以跟踪一个进程,如下表所列 −

S.N.

Information & Description

1

Process State 进程的当前状态,即它就绪、正在运行、等待,或其他任何状态。

2

Process privileges 需要此权限才能允许/禁止访问系统资源。

3

Process ID 操作系统中每个进程的唯一标识符。

4

Pointer 指向父进程的指针。

5

Program Counter 程序计数器是指向要为此进程执行的下一条指令的地址的指针。

6

CPU registers 多种 CPU 寄存器进程需要存储在其中才能执行运行状态。

7

CPU Scheduling Information 进程优先级和其他计划信息,这些信息是计划进程所必需的。

8

Memory management information 这包括页表、内存限制、段表的信息,具体取决于操作系统使用的内存。

9

Accounting information 这包括用于进程执行的 CPU 量、时间限制、执行 ID 等。

10

IO status information 这包括分配给进程的 I/O 设备列表。

PCB 的架构完全依赖于操作系统,并且在不同的操作系统中可能包含不同的信息。这是一个简化的 PCB 图示 −

pcb

PCB 在整个生命周期中都维护着一个进程,并在进程终止时删除。

Operating System - Process Scheduling

Definition

进程调度是进程管理器的一种活动,负责从CPU中移除正在运行的进程,并根据特定策略选择另一个进程。

进程调度是多道程序操作系统的必然部分。此类操作系统允许一次将多个进程加载到可执行内存中,并且已加载的进程使用时分复用共享CPU。

Process Scheduling Queues

操作系统在进程调度队列中维护所有 PCB。操作系统为每个进程状态维护一个单独的队列,并且相同执行状态的所有进程的 PCB 都放置在同一个队列中。当进程的状态更改时,其 PCB 从其当前队列中取消链接,并移动到其新的状态队列。

操作系统维护着以下重要的进程调度队列−

  1. Job queue − 此队列保留系统中的所有进程。

  2. Ready queue − 此队列保留驻留在主内存中的所有进程的集合,这些进程已准备好并等待执行。新进程总是放入此队列中。

  3. Device queues − 由于I/O设备不可用而被阻塞的进程构成了此队列。

queuing diagram

操作系统可以使用不同的策略来管理每个队列(FIFO、循环优先级等)。操作系统调度程序确定如何在就绪队列和运行队列之间移动进程,这在系统上的每个处理器核上只能有一个条目;在上图中,它已与CPU合并。

Two-State Process Model

两态进程模型是指下面描述的运行态和非运行态:

S.N.

State & Description

1

Running 当一个新进程被创建时,它将进入系统中的运行状态。

2

Not Running 未运行的进程被保存在队列中,等待执行的轮次。队列中的每个条目都是指向一个特定进程的指针。队列是使用链表实现的。调度程序的使用如下。当一个进程被中断时,该进程被转移到等待队列中。如果进程已完成或已中止,则该进程会被丢弃。无论哪种情况,调度程序都会从队列中选择一个进程来执行。

Schedulers

调度程序是特殊系统软件,以各种方式处理进程调度。它们的主要任务是选择要提交给系统的作业并决定运行哪个进程。调度程序有三种类型:

  1. Long-Term Scheduler

  2. Short-Term Scheduler

  3. Medium-Term Scheduler

Long Term Scheduler

它也被称为 job scheduler 。长期调度程序确定哪些程序被允许进入系统进行处理。它从队列中选择进程并将它们加载到内存中以执行。进程加载到内存中以进行 CPU 调度。

作业调度程序的主要目标是提供平衡的作业组合,如 I/O 绑定和处理器绑定。它还控制多道程序设计的程度。如果多道程序设计的程度稳定,那么进程创建的平均速率必须等于离开系统的进程的平均离开率。

在某些系统上,长期的调度程序可能不可用或是最小的。分时操作系统没有长期调度程序。当进程将状态从新建更改为就绪时,则使用长期调度程序。

Short Term Scheduler

它也被称为 CPU scheduler 。其主要目的是根据所选的一组标准来提高系统性能。它是进程从就绪态变为运行态的变化。CPU 调度程序从准备执行的进程中选择一个进程并将 CPU 分配给其中之一。

短期调度程序(也称为分派程序)决定接下来执行哪个进程。短期调度程序比长期调度程序更快。

Medium Term Scheduler

中期调度是 swapping 的一部分。它从内存中删除进程。它降低了多道程序设计的程度。中期调度程序负责处理换出进程。

如果一个正在运行的进程发出 I/O 请求,则该进程可能会被挂起。被挂起的进程无法继续执行。在这种情况下,为了从内存中删除进程并为其他进程腾出空间,将被挂起的进程移到辅助存储器中。此过程称为 swapping ,并且该进程据说是被换出或注销的。交换可能需要改进进程组合。

Comparison among Scheduler

S.N.

Long-Term Scheduler

Short-Term Scheduler

Medium-Term Scheduler

1

它是作业调度程序

它是 CPU 调度程序

它是进程交换调度程序。

2

速度低于短期调度程序

速度在其他两者中最快

速度介于短期调度程序和长期调度程序之间。

3

它控制多道程序设计的程度

它对多道程序设计的程度控制较小

它减少了多道程序设计的程度。

4

在分时系统中几乎没有或极少

在分时系统中也是最小的

它是分时系统的一部分。

5

它从池中选择进程并将其加载到内存中执行

它选择那些准备好执行的进程

它可以重新将进程引入内存并继续执行。

Context Switch

上下文切换是存储和恢复进程控制块中 CPU 的状态或上下文的一种机制,以便以后从同一位置恢复进程执行。使用此技术,上下文切换程序允许多个进程共享单个 CPU。上下文切换是多任务操作系统功能的本质部分。

当调度程序将 CPU 从执行一个进程切换到执行另一个进程时,从当前正在运行的进程中的状态将被存储到进程控制块中。此后,要执行的下一次进程的状态将从其自身的 PCB 中加载并用于设置 PC、寄存器等。在这一点上,第二个进程可以开始执行。

context switch

上下文切换在计算上是密集的,因为必须保存和还原寄存器和内存状态。为了避免上下文切换时间,一些硬件系统采用两组或更多组处理器寄存器。当进程切换时,以下信息将被存储以供以后使用。

  1. Program Counter

  2. Scheduling information

  3. 基址和界限寄存器值

  4. Currently used register

  5. Changed State

  6. I/O State information

  7. Accounting information

Operating System Scheduling algorithms

进程调度程序根据特定调度算法将不同的进程调度到 CPU。本章将讨论六种流行的进程调度算法 −

  1. First-Come, First-Served (FCFS) Scheduling

  2. Shortest-Job-Next (SJN) Scheduling

  3. Priority Scheduling

  4. Shortest Remaining Time

  5. Round Robin(RR) Scheduling

  6. Multiple-Level Queues Scheduling

这些算法要么是 non-preemptive or preemptive 。非抢占式算法设计为,一旦进程进入运行状态,它就无法在完成规定时间之前被抢占,而抢占式调度基于优先级,其中调度程序可以在高优先级进程进入就绪状态的任何时候抢占低优先级正在运行的进程。

First Come First Serve (FCFS)

  1. 作业按先到先服务的基础执行。

  2. 这是一种非抢占式、抢占式调度算法。

  3. 易于理解和实现。

  4. 其实现基于 FIFO 队列。

  5. 性能较差,因为平均等待时间较长。

fcfs

每个进程的 Wait time 如下 −

Process

等待时间:服务时间 - 到达时间

P0

0 - 0 = 0

P1

5 - 1 = 4

P2

8 - 2 = 6

P3

16 - 3 = 13

平均等待时间:(0+4+6+13) / 4 = 5.75

Shortest Job Next (SJN)

  1. 这也被称为 shortest job first 或 SJF

  2. 这是一种不抢占式、抢占式调度算法。

  3. 最大程度减少等待时间的最佳方法。

  4. 易于在要求的 CPU 时间已知的批处理系统中实现。

  5. 不可能在要求的 CPU 时间未知的交互系统中实现。

  6. 处理器应预先知道进程将占用多少时间。

给定:进程表及其到达时间、执行时间

Process

Arrival Time

Execution Time

Service Time

P0

0

5

0

P1

1

3

5

P2

2

8

14

P3

3

6

8

shortest job next

每个进程的 Waiting time 如下:-

Process

Waiting Time

P0

0 - 0 = 0

P1

5 - 1 = 4

P2

14 - 2 = 12

P3

8 - 3 = 5

平均等待时间:(0 + 4 + 12 + 5)/4 = 21 / 4 = 5.25

Priority Based Scheduling

  1. 优先级调度是一种非抢占式算法,也是批处理系统中最常见的调度算法之一。

  2. 每个进程都会被分配一个优先级。优先级最高的进程将首先执行,以此类推。

  3. 优先级相同的进程按照先到先服务原则执行。

  4. 优先级可以根据内存需求、时间需求或任何其他资源需求来决定。

给定:进程表及其到达时间、执行时间和优先级。在这里,我们认为 1 是最低优先级。

Process

Arrival Time

Execution Time

Priority

Service Time

P0

0

5

1

0

P1

1

3

2

11

P2

2

8

1

14

P3

3

6

3

5

priority based sceduling

每个进程的 Waiting time 如下:-

Process

Waiting Time

P0

0 - 0 = 0

P1

11 - 1 = 10

P2

14 - 2 = 12

P3

5 - 3 = 2

平均等待时间:(0 + 10 + 12 + 2)/4 = 24/4 = 6

Shortest Remaining Time

  1. 最短剩余时间 (SRT) 是 SJN 算法的抢占版。

  2. 将处理器分配给最接近完成的任务,但它会被一个新生的就绪任务抢占,该任务完成时间更短。

  3. 不可能在要求的 CPU 时间未知的交互系统中实现。

  4. 它通常用于调度短任务优先的批处理环境。

Round Robin Scheduling

  1. 循环调度是一种抢占进程调度算法。

  2. 向每个进程提供固定时间执行,这被称为 quantum

  3. 一个进程执行一段时间后,它被抢占,其他进程执行一段时间。

  4. 上下文切换用于保存被抢占进程的状态。

round robin

每个进程的 Wait time 如下 −

Process

等待时间:服务时间 - 到达时间

P0

(0 - 0) + (12 - 3) = 9

P1

(3 - 1) = 2

P2

(6 - 2) + (14 - 9) + (20 - 17) = 12

P3

(9 - 3) + (17 - 12) = 11

平均等待时间:(9 + 2 + 12 + 11)/4 = 8.5

Multiple-Level Queues Scheduling

多级队列并不是一个独立的调度算法。它们利用其他现有算法对具有共同特征的任务进行分组和调度。

  1. 为具有共同特征的进程维护多个队列。

  2. 每个队列可以有自己的调度算法。

  3. 为每个队列分配优先级。

例如,CPU 绑定任务可以在一个队列中调度,所有 I/O 绑定任务在另一个队列中调度。然后进程调度器交替从每个队列中选择任务,并根据分配给该队列的算法将它们分配给 CPU。

Operating System - Multi-Threading

What is Thread?

一个线程是一个通过进程代码执行的流,它有自己的程序计数器,用来跟踪下一个要执行的指令,有用来保存当前工作变量的系统寄存器以及包含执行历史的堆栈。

一个线程与它的对等线程共享一些信息,例如代码段、数据段和打开的文件。当一个线程更改某代码段内存项时,其他所有线程都会看到。

一个线程也称为 lightweight process 。线程提供了一种通过并行性来提高应用程序性能的方法。线程代表了一种通过降低开销来提高操作系统性能的软件方法,线程相当于一个传统进程。

每一个线程都精确地属于一个进程,且没有一个线程能够存在于进程之外。每一个线程代表一个独立的控制流。线程已经在网络服务器和 Web 服务器的实现中得到了成功的应用。它们还为共享内存多处理机上应用程序的并行执行提供了一个合适的基石。下图显示了单线程和多线程进程的工作方式。

thread processes

Difference between Process and Thread

S.N.

Process

Thread

1

进程是重量级或资源密集型的。

线程是轻量级的,比进程占用更少的资源。

2

进程切换需要与操作系统交互。

线程切换不需要与操作系统交互。

3

在多个处理环境中,每个进程执行相同的代码,但有自己的内存和文件资源。

所有线程都可以共享同一组打开的文件、子进程。

4

如果一个进程被阻塞,那么在第一个进程未被解锁之前,其他进程都不能执行。

当一个线程被阻塞并等待时,同一个任务中的另一个线程可以运行。

5

不使用线程的多个进程使用更多的资源。

多线程进程使用更少的资源。

6

在多进程中,每个进程独立地运行于其他进程。

一个线程可以读取、写入或更改另一个线程的数据。

Advantages of Thread

  1. 线程最大程度地减少了上下文切换时间。

  2. 使用线程在进程内提供了并发性。

  3. Efficient communication.

  4. 创建和上下文切换线程更加经济。

  5. 线程允许更大规模、更高效地利用多处理器架构。

Types of Thread

线程通过以下两种方式实现:

  1. User Level Threads - 用户管理的线程。

  2. Kernel Level Threads - 在内核(操作系统核心)上工作的操作系统管理的线程。

User Level Threads

在这种情况下,线程管理内核不知道线程的存在。线程库包含用于创建和销毁线程、在线程之间传递消息和数据、调度线程执行以及保存和还原线程上下文的代码。该应用程序从单个线程开始。

user threads

Advantages

  1. 线程切换不需要内核模式权限。

  2. 用户级线程可以在任何操作系统上运行。

  3. 调度可以在用户级线程中特定于应用程序。

  4. 用户级线程创建和管理起来很快。

Disadvantages

  1. 在典型的操作系统中,大多数系统调用都是阻塞的。

  2. 多线程应用程序无法利用多进程。

Kernel Level Threads

在这种情况下,线程管理是由内核完成的。应用程序区域中没有线程管理代码。内核线程直接受操作系统支持。任何应用程序都能被编程为多线程的。应用程序中的所有线程都在一个单一进程中受到支持。

内核对进程整体和进程中的各个线程维护上下文信息。内核根据线程进行调度。内核在内核空间中执行线程创建、调度和管理。与用户线程相比,内核线程通常创建和管理的速度较慢。

Advantages

  1. 内核可以在多个进程上同时调度从同一进程中的多个线程。

  2. 如果进程中的一个线程被阻塞,则内核可以调度同一进程的另一个线程。

  3. 内核例程本身可以是多线程的。

Disadvantages

  1. 内核线程的创建和管理通常比用户线程的创建和管理更慢。

  2. 在同一进程中从一个线程将控制权转移到另一个线程需要切换到内核模式。

Multithreading Models

一些操作系统提供了一种组合的用户级线程和内核级线程工具。Solaris 就是这种方法的一个很好的示例。在组合系统中,同一个应用程序中的多个线程可以在多处理器上并行运行,并且一个阻塞系统调用不必阻塞整个进程。多线程模式有三种类型:

  1. Many to many relationship.

  2. Many to one relationship.

  3. One to one relationship.

Many to Many Model

多对多模型将任意数量的用户线程复用到相等或更少数量的内核线程上。

下图显示了多对多线程模型,其中 6 个用户级线程与 6 个内核级线程进行复用。在这个模型中,开发者可以创建任意数量必要的用户线程,而对应的内核线程可以在多处理器机器上并行运行。此模型可以最准确地反映并发性,当一个线程执行阻塞系统调用时,内核可以调度另一个线程执行。

many to many

Many to One Model

多对一模型将许多用户级线程映射到一个内核级线程上。线程管理在用户空间中通过线程库完成。当线程执行一个阻塞系统调用时,整个进程将被阻塞。一次只能有一个线程访问内核,因此多线程无法在多处理器上并行运行。

如果以系统不支持的方式在操作系统中实现用户级线程库,那么内核线程将使用多对一关系模式。

many to one

One to One Model

用户级线程和内核级线程之间是 一对一 关系。此模型比多对一模型提供了更高的并发性。它也允许在某个线程执行阻塞系统调用时运行另一个线程。它支持多线程在微处理器上并行执行。

这个模型的劣势是创建用户线程需要相应的内核线程。OS/2、Windows NT 和 Windows 2000 使用一对一关系模型。

one to one

Difference between User-Level & Kernel-Level Thread

S.N.

User-Level Threads

Kernel-Level Thread

1

用户级线程创建和管理的速度更快。

内核级线程创建和管理的速度较慢。

2

实现在用户级由线程库完成。

操作系统支持创建内核线程。

3

用户级线程是通用的,可以在任何操作系统上运行。

内核级线程特定于操作系统。

4

多线程应用程序无法利用多处理。

内核例程本身可以是多线程的。

Operating System - Memory Management

内存管理是指操作系统的功能,它会处理或管理主内存,并在执行期间在主内存和磁盘之间来回移动进程。内存管理会跟踪每个内存位置,无论它是否已分配给某个进程或它是空闲的。它检查为进程分配多少内存。它决定在什么时间将内存分配给哪个进程。它会跟踪何时释放或取消分配某个内存并相应地更新状态。

本教程将向您讲解内存管理相关基础概念。

Process Address Space

进程地址空间是由进程在其代码中引用的逻辑地址集。例如,当使用 32 位寻址时,地址范围可以从 0 到 0x7fffffff;换句话说,可能共有 2^31 个编号,理论大小总计为 2GB。

操作系统负责在将内存分配给程序时将逻辑地址映射到物理地址。在分配内存之前和之后,程序中会使用三种类型的地址 −

S.N.

Memory Addresses & Description

1

Symbolic addresses 源代码中使用的地址。变量名、常量和指令标签是符号地址空间的基本元素。

2

Relative addresses 在编译时,编译器会将符号地址转换为相对地址。

3

Physical addresses 加载器在将程序加载到主内存时生成这些地址。

在编译时和加载时地址绑定方案中,虚拟地址和物理地址相同。在执行时地址绑定方案中,虚拟地址和物理地址不同。

程序所生成的所有逻辑地址的集合被称为 logical address space 。相应于这些逻辑地址的所有物理地址的集合被称为 physical address space.

虚拟地址到物理地址的运行时映射是由内存管理单元 (MMU) 完成的,这是一个硬件设备。MMU 使用以下机制将虚拟地址转换为物理地址。

  1. 基本寄存器中的值会添加到用户进程所生成的每个地址,该地址在发送到内存时被视为偏移量。例如,如果基本寄存器值为 10000,那么用户尝试使用地址位置 100 将动态重新分配到位置 10100。

  2. 用户程序使用虚拟地址;它永远不会看到真实的物理地址。

Static vs Dynamic Loading

在开发计算机程序时必须在静态或动态加载之间进行选择。如果您必须静态加载程序,那么在编译时将编译并链接完整程序,而不会留下任何外部程序或模块依赖项。链接程序将目标程序与其他必需目标模块合并为绝对程序,其中也包括逻辑地址。

如果您正在编写一个动态加载程序,那么您的编译器将编译程序,并且对于您想要动态包含的所有模块,只会提供引用,其余工作将在执行时完成。

在加载时,使用 static loading ,绝对程序(和数据)将加载到内存中以便执行开始。

如果您使用 dynamic loading ,库的动态例程将以可重定位方式存储在磁盘上,并且仅当程序需要时才加载到内存中。

Static vs Dynamic Linking

如上所述,当使用静态链接时,链接器将程序所需的所有其他模块组合成一个可执行程序,以避免任何运行时依赖。

当使用动态链接时,不需要将实际的模块或库与程序链接,而是在编译和链接时提供对动态模块的引用。Windows 中的动态链接库 (DLL) 和 Unix 中的共享对象是动态库的良好示例。

Swapping

交换是一种机制,其中进程可以暂时从主内存(或移动)交换到辅助存储(磁盘),并使该内存可供其他进程使用。在稍后的某个时间,系统将从辅助存储器将进程换回主内存。

尽管性能通常会受到交换进程的影响,但它有助于并行运行多个大型进程,这就是 Swapping is also known as a technique for memory compaction 的原因。

process swapping

交换进程所花费的总时间包括将整个进程移动到辅助磁盘以及再将进程复制回内存所需的时间,以及进程重新获取主内存所需的时间。

让我们假设用户进程的大小为 2048KB,并且在交换将发生在其上的标准硬盘上,数据传输速率约为每秒 1 MB。从或到内存传输 1000K 进程的实际传输将花费

2048KB / 1024KB per second
= 2 seconds
= 2000 milliseconds

现在考虑到输入和输出时间,它将花费完整的 4000 毫秒加上其他开销,其中进程竞争以重新获取主内存。

Memory Allocation

主内存通常有两个分区:

  1. Low Memory − 操作系统驻留在该内存中。

  2. High Memory − 用户进程保存在高内存中。

操作系统使用以下内存分配机制。

S.N.

Memory Allocation & Description

1

Single-partition allocation 在这种分配类型中,重新定位寄存器方案用于保护用户进程彼此之间以及防止更改操作系统代码和数据。重新定位寄存器包含最小物理地址的值,而限制寄存器包含逻辑地址范围。每个逻辑地址都必须小于限制寄存器。

2

Multiple-partition allocation 在这种分配类型中,主内存被划分为多个固定大小的分区,每个分区只应包含一个进程。当一个分区可用时,将从输入队列中选择一个进程并将其加载到空闲分区中。当进程终止时,分区将可用于另一个进程。

Fragmentation

当进程从内存中加载并删除时,空闲内存空间会被分成小块。有时会发生这种情况:进程无法分配给内存块,因为它们的尺寸小,而且内存块仍然未使用。此问题称为碎片。

碎片有两种类型:

S.N.

Fragmentation & Description

1

External fragmentation 总内存空间足以满足请求或在其内部驻留一个进程,但它不连续,所以无法使用。

2

Internal fragmentation 分配给进程的内存块更大。由于无法由其他进程使用,因此会保留未使用的一部分内存。

下图显示了碎片如何导致内存浪费,以及如何使用压缩技术从碎片内存中创建更多可用内存−

memory fragmentation

可以通过压缩或混洗内存内容来减少外部碎片,从而将所有可用内存集中在一个大块中。为了使压缩可行,重定位应该是动态的。

可以通过有效分配最小的分区(但足以满足进程需要)来减少内部碎片。

Paging

计算机可以寻址超过系统上实际安装的内存量。此额外内存实际上称为虚拟内存,它是将硬盘的一部分设置为模拟计算机 RAM。分页技术在实现虚拟内存中扮演着重要角色。

分页是一种内存管理技术,其中进程地址空间被分成称为 pages 大小相同的块(大小是 2 的幂,介于 512 字节和 8192 字节之间)。进程的大小以页数来衡量。

类似地,主内存被分成称为 frames 的小型固定大小块(物理)内存,并且帧的大小与页的大小保持相同,以便最大程度地利用主内存并避免外部碎片。

paging

Address Translation

页地址称为 logical address ,由 page numberoffset 表示。

Logical Address = Page number + page offset

帧地址称为 physical address ,由 frame numberoffset 表示。

Physical Address = Frame number + page offset

名为 page map table 的数据结构用于跟踪进程页与物理内存中帧之间的关系。

page map table

当系统将帧分配给任何页面时,它会将此逻辑地址转换为物理地址,并在页表中创建条目,以便在整个程序执行期间使用。

当进程要执行时,其对应的页面将加载到任何可用的内存帧中。假设您有一个 8Kb 的程序,但您的内存只能在给定时间容纳 5Kb,那么分页概念就会出现。当计算机的 RAM 用完时,操作系统 (OS) 会将空闲或不需要的内存页移动到辅助内存,以释放其他进程的 RAM 并根据程序需要将其取回。

这个过程在程序的整个执行过程中继续进行,操作系统会不断从主内存中删除空闲页面并将它们写入辅助内存,并在程序需要时将它们取回。

Advantages and Disadvantages of Paging

以下是分页的优点和缺点列表−

  1. 分页减少了外部碎片,但仍然存在内部碎片。

  2. 分页实现简单,并被认为是一种有效的内存管理技术。

  3. 由于页面和帧大小相同,因此交换非常容易。

  4. 页表需要额外的内存空间,因此可能不适用于 RAM 较小的系统。

Segmentation

分段是一种内存管理技术,其中每个作业被分成多个不同大小的段,每个段对应一个模块,其中包含执行相关功能的部分。每个段实际上是程序的不同逻辑地址空间。

当一个进程要被执行时,对于任一代码段,尽管每个代码段被加载到一个可用的连续内存块中,其对应的分段会被加载到不连续的内存中。

分段内存管理的工作方式与分页非常相似,但是这里的代码段长度可变,而在分页中页面的大小是固定的。

一个程序代码段包含程序的主函数、实用函数、数据结构等。操作系统对每一个进程维护一个 segment map table 和一个空闲内存块列表以及代码段号、它们的大小和主内存中对应的内存位置。对于每一个代码段,该表储存代码段的起始地址和代码段的长度。对一个内存位置的引用包括一个标识代码段的值和一个偏移量。

segment map table

Operating System - Virtual Memory

计算机可以寻址比系统物理安装量更多的内存。此额外内存实际上称为 virtual memory ,它是设置用于模拟计算机 RAM 的硬盘一部分。

此方案的主要明显优点在于程序可以比物理内存更大。虚拟内存有两个用途。首先,它允许我们通过使用磁盘来扩展物理内存的使用。其次,它允许我们具有内存保护,因为每个虚拟地址都转换为一个物理地址。

以下情况不需要将整个程序完全加载到主内存中。

  1. 用户编写的错误处理例程仅在数据或计算中发生错误时才使用。

  2. 程序的某些选项和功能可能很少使用。

  3. 即使实际上只使用了少量表格,也会为许多表格分配固定数量的地址空间。

  4. 执行仅部分位于内存中的程序的能力会抵消许多好处。

  5. 将每个用户程序加载或换入内存所需的 I/O 数目将减少。

  6. 程序将不再受可用物理内存量的限制。

  7. 每个用户程序可以占用更少的物理内存,可以在同一时间运行更多的程序,从而相应提升 CPU 利用率和吞吐量。

面向通用用途的现代微处理器,内存管理单元或 MMU 已内置到硬件中。MMU 的工作是将虚拟地址转换为物理地址。以下是一个基本示例:

virtual memory

虚拟内存通常通过按需分页实现。它也可以在分段系统中实现。按需分段也可以用于提供虚拟内存。

Demand Paging

按需分页系统与交换分页系统非常相似,其中进程驻留在辅助内存中,并且仅在需要时加载页面,而不是预先加载。当发生上下文切换时,操作系统不会将任何旧程序的页面复制到磁盘或将任何新程序的页面复制到主内存。相反,它只在加载第一页后开始执行新程序,并在引用时获取该程序的页面。

demand paging

在执行程序时,如果程序引用了由于不久前交换出去而不在主内存中的页面,则处理器将这种无效内存引用视为 page fault ,并将控制权从程序转移到操作系统以要求将页面调回到内存。

Advantages

以下是按需分页的优点:

  1. Large virtual memory.

  2. 更有效地使用内存。

  3. 多道程序设计的程度没有限制。

Disadvantages

  1. 表的数量和处理器开销用于处理页面中断,比简单的分页管理技术更多。

Page Replacement Algorithm

页面替换算法是操作系统用来决定将哪些内存页面换出、在需要分配内存页时写入磁盘的技术。分页发生在页面错误发生且不能将空闲页面用于分配目的时,原因是页面不可用或空闲页面的数量低于所需页面。

当选择了要替换并换出的页面后,如果再次引用该页面,则必须从磁盘中读入,这需要 I/O 完成。此过程决定了页面替换算法的质量:等待页面输入所需的时间越少,算法就越好。

页面替换算法会查看硬件提供的有关访问页面的有限信息,并尝试选择应替换的页面以最小化页面缺失总数,同时平衡算法本身的存储器和处理器时间成本。存在许多不同的页面替换算法。我们通过在特定的内存引用字符串上运行算法并计算页面错误数来评估算法。

Reference String

内存引用字符串称为引用字符串。引用字符串是人工生成的,或通过跟踪给定系统并记录每个内存引用的地址而生成的。后一种选择会产生大量的数据,我们注意到两件事。

  1. 对于给定的页面大小,我们仅需考虑页码,而不必考虑整个地址。

  2. 如果我们有一个指向页面 p 的引用,那么任何紧随其后的指向页面 p 的引用都不会导致页面错误。在第一次引用后,页面 p 将驻留在内存中;紧随其后的引用不会发生错误。

  3. 例如,考虑以下一系列地址− 123,215,600,1234,76,96

  4. 如果页面大小为 100,则引用串为 1,2,6,12,0,0

First In First Out (FIFO) algorithm

  1. 主内存中最旧的页面是将被选为替换页面的页面。

  2. 简单易于实施,创建一个列表,从末尾替换页面,并在头部添加新页面。

fifo

Optimal Page algorithm

  1. 最优页面替换算法拥有所有算法中最低的页面错误率。最优页面替换算法是存在的,并且已被称为 OPT 或 MIN。

  2. 替换在最长时间内不会被使用的页面。在要使用该页面时可以使用。

opr

Least Recently Used (LRU) algorithm

  1. 在主内存中未使用最长时间的页面是将被选为替换页面的页面。

  2. 简单易于实施,创建一个列表,通过回溯时间替换页面。

lru

Page Buffering algorithm

  1. 为使一个进程快速启动,保留一个空闲帧池。

  2. 当出现页面错误时,选择一个页面进行替换。

  3. 在空闲池的帧中写入新的页面,标记页表,并重新启动进程。

  4. 现在将脏页面从磁盘中写出,并将所替换页面的持有帧放入空闲池中。

Least frequently Used(LFU) algorithm

  1. 计数最小的页面是将被选为替换页面的页面。

  2. 当一个页面在进程的初始阶段被大量使用,但之后不再被使用时,此算法会出现问题。

Most frequently Used(MFU) algorithm

  1. 此算法基于以下论点:计数最小的页面可能是刚刚被调入,尚未被使用。

Operating System - I/O Hardware

操作系统的一项重要任务是管理各种 I/O 设备,包括鼠标、键盘、触摸板、磁盘驱动器、显示适配器、USB 设备、位图屏幕、LED、模数转换器、开/关开关、网络连接、音频 I/O、打印机等。

需要一个 I/O 系统来接收应用程序 I/O 请求并将其发送到物理设备,然后接收设备发回的任何响应并将其发送到应用程序。I/O 设备可分为两类−

  1. Block devices − 块设备是驱动程序通过发送整个数据块与之通信的设备。例如,硬盘、USB 摄像头、Disk-On-Key 等。

  2. Character devices − 字符设备是驱动程序通过发送和接收单个字符(字节、八位字节)与之通信的设备。例如,串口、并口、声卡等

Device Controllers

设备驱动程序是可以插入操作系统以处理特定设备的软件模块。操作系统借助设备驱动程序来处理所有 I/O 设备。

设备控制器充当设备和设备驱动程序之间的接口。I/O 单元(键盘、鼠标、打印机等)通常由机械组件和电子组件组成,电子组件称为设备控制器。

对于每个设备,始终有一个设备控制器和一个设备驱动程序与操作系统通信。一个设备控制器可能会处理多个设备。作为接口,其主要任务是将串行比特流转换为字节块,根据需要执行纠错。

连接到计算机的任何设备都是通过插头和插槽连接的,插槽连接到设备控制器。以下是用于连接 CPU、内存、控制器和 I/O 设备的模型,其中 CPU 和设备控制器都使用公共总线进行通信。

device controllers

Synchronous vs asynchronous I/O

  1. Synchronous I/O − 在此方案中,CPU 执行在 I/O 进行时等待

  2. Asynchronous I/O − I/O 与 CPU 执行同时进行

Communication to I/O Devices

CPU 必须有一种方法来与 I/O 设备之间传递信息。有三种方法可用于与 CPU 和设备通信。

  1. Special Instruction I/O

  2. Memory-mapped I/O

  3. Direct memory access (DMA)

Special Instruction I/O

这使用专门用于控制 I/O 设备的 CPU 指令。这些指令通常允许将数据发送到 I/O 设备或从 I/O 设备读取数据。

Memory-mapped I/O

使用存储器映射 I/O 时,同一地址空间由内存和 I/O 设备共享。设备直接连接到某些主内存位置,以便 I/O 设备可以在不经过 CPU 的情况下将数据块传输到/从内存。

memory mapped io

使用存储器映射的 IO 时,操作系统在内存中分配缓冲区并通知 I/O 设备使用该缓冲区将数据发送到 CPU。I/O 设备与 CPU 异步操作,在完成后中断 CPU。

这种方法的优点是,可以访问内存的每条指令都可以用于操作 I/O 设备。存储器映射 IO 用于大多数高速 I/O 设备,如磁盘、通信接口。

Direct Memory Access (DMA)

像键盘这样的慢速设备将在传输每个字节后向主 CPU 生成一个中断。如果像磁盘这样的快速设备为每个字节生成中断,则操作系统将花费其大部分时间来处理这些中断。因此,一台典型的计算机使用直接内存访问 (DMA) 硬件来减少此开销。

直接内存访问 (DMA) 表示 CPU 授予 I/O 模块在不参与的情况下读写内存的权限。DMA 模块本身控制主内存和 I/O 设备之间的数据交换。CPU 只参与传输的开始和结束,并且仅在整个块传输完成后才中断。

直接内存访问需要一种称为 DMA 控制器 (DMAC) 的特殊硬件,它管理数据传输并仲裁对系统总线的访问。这些控制器使用源指针和目标指针(读取/写入数据的目的地)、用于跟踪传输字节数的计数器以及设置(包括 I/O 和内存类型、中断和 CPU 周期的状态)进行编程。

dma

操作系统使用 DMA 硬件如下所示 −

Step

Description

1

指示设备驱动程序将磁盘数据传输到缓冲区地址 X。

2

然后,设备驱动程序指示磁盘控制器将数据传输到缓冲区。

3

磁盘控制器开始DMA传输。

4

磁盘控制器将每个字节发送至DMA控制器。

5

DMA控制器将字节传输到缓冲区,增加内存地址,减小计数器C,直至C变为零。

6

当C变为零时,DMA中断CPU以指示传输完成。

Polling vs Interrupts I/O

计算机必须有办法检测到任何类型的输入的到达。有两种可能发生的情况,称为 pollinginterrupts 。这两种技术都可以让处理器处理随时可能发生并且与其当前正在运行的进程无关的事件。

Polling I/O

轮询是I/O设备与处理器通信最简单的方式。定期检查设备的状态的过程,以查看是否需要进行下一次I/O操作,称为轮询。I/O设备只需将信息放入状态寄存器中,处理器就必须来获取该信息。

大多数情况下,设备不需要关注,当设备需要关注时,它将不得不等到轮询程序下次对其进行询问。这是一种低效的方法,处理器的许多时间都会浪费在不必要的轮询上。

将此方法比作一位老师不断地一个个询问班级里的每位学生,看他们是否需要帮助。显然,更高效的方法是,当学生需要帮助时,由学生告知老师。

Interrupts I/O

处理I/O的另一种方案是中断驱动的方法。中断是设备发给微处理器的信号,表示需要关注。

当设备的CPU需要关注时,设备控制器将中断信号放到总线上;CPU接收到中断后,会保存其当前状态,并使用中断向量(处理各种事件的操作系统例程的地址)调用适当的中断处理程序。当处理完中断设备后,CPU将继续其原始任务,就好像从未中断一样。

Operating System - I/O Softwares

I/O 软件通常按以下层组织−

  1. User Level Libraries − 这为用户程序提供了执行输入和输出的简单界面。例如, stdio 是 C 和 C++ 编程语言提供的库。

  2. Kernel Level Modules − 这提供了设备驱动程序,用于与设备控制器交互,以及设备驱动程序使用的与设备无关的 I/O 模块。

  3. Hardware − 此层包括与设备驱动程序交互并使硬件生效的实际硬件和硬件控制器。

I/O 软件设计的一个关键概念是它应该与设备无关,即可能编写可以在访问任何 I/O 设备的情况下无需提前指定设备的程序。例如,一个将文件作为输入读取的程序应该能够在软盘、硬盘或 CD-ROM 上读取文件,而无需对每个不同的设备修改程序。

io software

Device Drivers

设备驱动程序是软件模块,可以插入操作系统以处理特定设备。操作系统从设备驱动程序获取帮助以处理所有 I/O 设备。设备驱动程序封装了与设备相关的代码,并实现了一个标准界面,这种方式下该代码包含特定于设备的寄存器读/写。设备驱动程序通常由设备制造商编写,并与设备一起在 CD-ROM 上交付。

设备驱动程序执行以下工作 −

  1. 接受来自设备无关软件的发出的请求。

  2. 与设备控制器交互,以获取和提供 I/O 并执行所需的错误处理

  3. 确保请求已成功执行

设备驱动程序处理请求的方式如下:假设有一个请求来读取块 N。如果驱动程序在请求到达时处于空闲状态,它将立即开始执行请求。否则,如果驱动程序已经忙于处理其他请求,它会将新请求放在待定请求队列中。

Interrupt handlers

中断处理程序也被称为中断服务例程或 ISR,是一段软件,更确切地说,是操作系统中的回调函数,或更确切地说,是设备驱动程序中的回调函数,其执行是由中断的接收触发的。

发生中断时,中断程序会执行它必须执行的所有操作来处理中断,更新数据结构并唤醒等待中断发生的进程。

中断机制接受一个地址 ─ 一个从一小组中选择特定中断处理例程/函数的数字。在大多数体系结构中,此地址是一个存储在称为中断向量表的表中的偏移量。此向量包含专用中断处理程序的内存地址。

Device-Independent I/O Software

与设备无关的软件的基本功能是执行所有设备通用的 I/O 功能,并向用户级软件提供一个统一的接口。虽然很难编写完全与设备无关的软件,但我们可以编写一些在所有设备中通用的模块。以下是设备无关 I/O 软件功能的列表 −

  1. 为设备驱动程序统一接口

  2. 设备命名 - 助记符名称映射到主次设备号

  3. Device protection

  4. 提供独立于设备的块大小

  5. 缓冲是因为来自设备的数据无法存储在最终目的地中。

  6. 在块设备上分配存储空间

  7. 分配和释放专用设备

  8. Error Reporting

User-Space I/O Software

这些是提供更丰富且简化的接口以访问内核的功能或最终与设备驱动程序交互的库。大多数用户级 I/O 软件都由库过程组成,但有些例外,比如后台处理系统,它是多道程序系统中处理专用 I/O 设备的一种方式。

I/O 库(例如 stdio)位于用户空间中,用于提供与驻留在操作系统中的与设备无关的 I/O SW 的接口。例如,putchar()、getchar()、printf() 和 scanf() 是 C 编程中可用的用户级 I/O 库 stdio 的示例。

Kernel I/O Subsystem

内核 I/O 子系统负责提供与 I/O 相关的许多服务。以下是一些提供的服务。

  1. Scheduling − 内核调度一组 I/O 请求,以确定执行它们的良好顺序。当应用程序发出阻塞 I/O 系统调用时,该请求将被放置在该设备的队列中。内核 I/O 调度程序重新安排队列的顺序,以提高系统的总体效率以及应用程序体验的平均响应时间。

  2. Buffering - 内核 I/O 子系统维护一个称为 buffer 的内存区域,用于在两个设备或带有应用程序操作的设备之间传输数据时存储数据。缓冲用于解决数据流的生产者和消费者之间的速度不匹配问题,或用于适应数据传输大小不同的设备。

  3. Caching - 内核维护高速内存区域的高速缓存内存,其中存储有数据的副本。访问缓存副本比访问原始副本更高效。

  4. Spooling and Device Reservation - 暂存区是用于存储输出数据的缓冲区,例如对于无法接受交织数据流的打印机。暂存系统将排队暂存文件依次复制到打印机。在某些操作系统中,暂存由系统守护进程管理。在其他操作系统中,它由内核线程处理。

  5. Error Handling - 使用受保护内存的操作系统可以防护多种硬件和应用程序错误。

Operating System - File System

File

文件是有名称的、相关信息的时间,记录在磁盘、磁带和光盘之类的二级存储设备上。一般来说,文件是比特、字节、行或记录的序列,其意义由文件的创建者和使用者定义。

File Structure

文件结构应遵照操作系统能够理解的所需格式。

  1. 文件根据其类型具有某种定义的结构。

  2. 文本文件是由组织成行的字符序列。

  3. 源文件是过程和函数的序列。

  4. 目标文件是按机器可以理解的块组织的字节序列。

  5. 当操作系统定义不同的文件结构时,它还包含支持这些文件结构的代码。Unix、MS-DOS 支持最少数量的文件结构。

File Type

文件类型是指操作系统区分不同类型文件的这种能力,例如文本文件、源文件和二进制文件等。许多操作系统支持多种类型文件。像 MS-DOS 和 UNIX 这样的操作系统具有以下类型的文件 -

Ordinary files

  1. 这些文件包含用户信息。

  2. 它们可能具有文本、数据库或可执行程序。

  3. 用户可对这些文件执行各种操作,如添加、修改、删除,甚至是移除整个文件。

Directory files

  1. 这些文件包含文件名列表及与这些文件相关的其他信息。

Special files

  1. 这些文件也称为设备文件。

  2. 这些文件表示磁盘、终端、打印机、网络、磁带驱动器等物理设备。

这些文件有两种类型——

  1. Character special files − 数据以字符为单位处理,如终端或打印机中的数据。

  2. Block special files − 数据以块为单位处理,如磁盘和磁带中的数据。

File Access Mechanisms

文件访问机制指的是访问文件记录的方式。访问文件有几种方式——

  1. Sequential access

  2. Direct/Random access

  3. Indexed sequential access

Sequential access

顺序访问是以某种顺序访问记录,即文件中的信息按顺序处理,逐条记录。这种访问方法是最原始的。示例:编译器通常以这种方式访问文件。

Direct/Random access

  1. 随机访问文件组织提供直接访问记录的功能。

  2. 每条记录在文件上都有自己的地址,可借助该地址直接访问该记录以进行读取或写入。

  3. 记录在文件中的顺序可以是不固定的,并且它们在存储介质上的位置也不必相邻。

Indexed sequential access

  1. 这种机制建立在顺序访问的基础之上。

  2. 为每个文件创建一个索引,其中包含指向各个块的指针。

  3. 按顺序搜索索引,并使用其指针直接访问文件。

Space Allocation

文件由操作系统分配磁盘空间。操作系统采用以下三种主要方式将磁盘空间分配给文件。

  1. Contiguous Allocation

  2. Linked Allocation

  3. Indexed Allocation

Contiguous Allocation

  1. 每个文件在磁盘上占据连续的地址空间。

  2. 分配的磁盘地址按线性顺序。

  3. Easy to implement.

  4. 这种分配技术的主要问题是产生外部碎片。

Linked Allocation

  1. 每个文件都包含指向磁盘块的链接列表。

  2. 目录包含指向文件第一个块的链接/指针。

  3. No external fragmentation

  4. 有效的用于顺序访问文件。

  5. 对于直接访问文件该方法效率低下。

Indexed Allocation

  1. 对相邻分配和链接分配问题提供了解决方案。

  2. 创建了一个索引块,其中包含指向文件的所有指针。

  3. 每个文件都有自己的索引块,其中存储文件占用的磁盘空间地址。

  4. 目录包含文件索引块的地址。

Operating System - Security

安全性是指为计算机系统资源(如 CPU、内存、磁盘、软件程序,最重要的是存储在计算机系统中的数据/信息)提供保护系统。如果计算机程序是由未经授权的用户运行的,那么他/她可能会对计算机或存储在其中的数据造成严重损坏。因此,必须保护计算机系统免遭未经授权的访问,对系统内存的恶意访问,病毒,蠕虫等。我们将在本章中讨论以下主题。

  1. Authentication

  2. One Time passwords

  3. Program Threats

  4. System Threats

  5. Computer Security Classifications

Authentication

身份验证是指识别系统的每个用户并将执行中的程序与这些用户相关联。操作系统负责创建一个保护系统,该系统确保运行特定程序的用户是经过身份验证的。操作系统通常使用以下三种方式识别/验证用户 -

  1. Username / Password − 用户需要输入经操作系统注册的用户名和密码才能登录到系统。

  2. User card/key − User need to punch card in card slot, or enter key generated by key generator in option provided by operating system to login into the system.

  3. User attribute - fingerprint/ eye retina pattern/ signature − User need to pass his/her attribute via designated input device used by operating system to login into the system.

One Time passwords

One-time passwords provide additional security along with normal authentication. In One-Time Password system, a unique password is required every time user tries to login into the system. Once a one-time password is used, then it cannot be used again. One-time password are implemented in various ways.

  1. Random numbers − 为用户提供印有数字和相应字母的卡片。系统随机要求对应于几个字母的数字。

  2. Secret key − 为用户提供一个硬件设备,该设备可以创建映射到用户 ID 的密钥 ID。系统每次在登录前都会要求提供此类密钥 ID。

  3. Network password − 一些商业应用程序在注册的移动电话/电子邮件上向用户发送一次性密码,该密码需要在登录前输入。

Program Threats

操作系统进程和内核按照指示执行指定的任务。如果用户程序让这些进程执行恶意任务,则称为 Program Threats 。程序威胁的常见示例之一是安装在计算机中的一段程序,它可以通过网络将用户凭据存储并发送给某些黑客。以下是某些众所周知的程序威胁的列表。

  1. Trojan Horse − 此类程序捕获用户登录凭据并将其存储以发送给恶意用户,该用户随后可以登录计算机并访问系统资源。

  2. Trap Door − 如果设计为按需工作但其代码中存在安全漏洞且在用户不知情的情况下执行非法操作的程序,则称之为具有陷阱门。

  3. Logic Bomb − Logic Bomb是一种当某些条件满足时才会出现错误行为的程序,否则它会像一个真正的程序一样工作。它更难被检测到。

  4. Virus − 如名称所示,病毒可以在计算机系统上自我复制。它们非常危险,并且可以修改/删除用户文件,导致系统崩溃。病毒通常是一个嵌入在程序中的小代码。当用户访问程序时,病毒开始嵌入到其他文件/程序中,并可能导致用户无法使用系统。

System Threats

系统威胁是指滥用系统服务和网络连接给用户带来麻烦。系统威胁可用于在称为程序攻击的整个网络上发起程序威胁。系统威胁创建这样的环境,以致于操作系统资源/用户文件被滥用。以下是某些众所周知的系统威胁的列表。

  1. Worm − 蠕虫是一个进程,它可以通过使用系统资源达到极端程度来抑制系统性能。蠕虫进程会生成其多个副本,其中每个副本都会使用系统资源,阻止所有其他进程获取所需的资源。蠕虫进程甚至可以关闭整个网络。

  2. Port Scanning − 端口扫描是一种机制或方法,黑客可以通过这种方式检测系统漏洞来攻击系统。

  3. Denial of Service - 拒绝服务攻击通常会阻止用户合法使用该系统。例如,如果拒绝服务攻击了浏览器的内容设置,用户可能无法使用互联网。

Computer Security Classifications

根据美国国防部可信计算机系统评估标准,计算机系统中有四种安全级别:A、B、C、D。这是一种广泛使用的规范,用来确定和模拟系统和安全解决方案的安全性。以下是每种级别的简要说明。

S.N.

Classification Type & Description

1

Type A 最高级别。使用正式的设计规范和验证技术。授予高度的进程安全性保证。

2

Type B 提供强制保护系统。具有 C2 级系统的所有属性。为每个对象附加一个敏感性标签。它有三种类型。 B1 - 维护系统中每个对象的安全性标签。该标签用于做出访问控制决策。 B2 - 将敏感性标签扩展到每个系统资源,例如存储对象,支持隐蔽信道和事件审计。 B3 - 允许创建用于访问控制的列表或用户组,以授予或撤销对给定命名对象的访问权限。

3

Type C 提供保护和用户问责制,并使用审计功能。它有两种类型。 C1 - 结合控制,以便用户可以保护其私人信息,并防止其他用户意外读取/删除其数据。UNIX 版本基本属于 Cl 级别。 C2 - 向 Cl 级系统功能添加一个个人级别访问控制。

4

Type D 最低级别。最低保护。MS-DOS、Window 3.1 属于此类别。

Operating System - Linux

Linux 是 UNIX 操作系统流行版本之一。它是开源的,因为它的源代码是免费提供的。它免费使用。Linux 的设计考虑了 UNIX 兼容性。它的功能列表与 UNIX 非常相似。

Components of Linux System

Linux 操作系统主要有三个组件

  1. Kernel - 内核是 Linux 的核心部分。它负责此操作系统的全部主要活动。它由各种模块组成,并与底层硬件直接交互。内核提供必要的抽象,以将底层硬件详细信息隐藏到系统或应用程序程序中。

  2. System Library - 系统库是使用应用程序程序或系统实用程序访问内核功能的特殊功能或程序。这些库实现了操作系统的多数功能,并不需要内核模块的代码访问权限。

  3. System Utility - 系统实用程序负责执行专门的、个人级别的任务。

linux os

Kernel Mode vs User Mode

内核组件代码在称为 kernel mode 的特殊特权模式下执行,可以完全访问计算机的所有资源。此代码表示一个进程,在单个地址空间中执行,不需要任何上下文切换,因此非常高效且快速。内核运行每个进程并向进程提供系统服务,向进程提供对硬件的受保护访问。

不需要在内核模式下运行的支持代码位于系统库中。用户程序和其他系统程序在 User Mode 中运行,它们无法访问系统硬件和内核代码。用户程序/实用程序使用系统库访问内核功能以获取系统的底层任务。

Basic Features

以下列出了 Linux 操作系统的一些重要功能。

  1. Portable − 移植性意味着软件可以在不同类型的硬件上以相同的方式工作。Linux 内核和应用程序支持其在任何类型的硬件平台上的安装。

  2. Open Source − Linux 源代码是免费提供的,它是一个基于社区的开发项目。多个团队协同工作以增强 Linux 操作系统的能力,并且它在不断发展。

  3. Multi-User − Linux 是一个多用户系统,这意味着多个用户可以同时访问系统资源,如内存/RAM/应用程序。

  4. Multiprogramming − Linux 是一个多道程序系统,这意味着多个应用程序可以同时运行。

  5. Hierarchical File System − Linux 提供了一个标准文件结构,其中安排了系统文件/用户文件。

  6. Shell − Linux 提供了一个特殊的解释器程序,可用于执行操作系统的命令。它可用于执行各种类型的操作,调用应用程序等。

  7. Security − Linux 使用身份验证功能提供用户安全,如密码保护/对特定文件的受控访问/数据加密。

Architecture

下图显示了 Linux 系统的架构 −

linux architecture

Linux 系统的架构由以下层组成 −

  1. Hardware layer − 硬件包括所有外围设备(RAM/HDD/CPU 等)。

  2. Kernel − 它是操作系统的核心组件,直接与硬件交互,为上层组件提供低级服务。

  3. Shell − 一个内核接口,向用户隐藏内核函数的复杂性。Shell 从用户接收命令并执行内核函数。

  4. Utilities − 实用程序提供了用户大多数操作系统的功能。