操作系统概述

操作系统概述

操作系统(operation system,OS)是一个最基本也是最重要的系统软件。从虚拟机的角度来看,软件是分层次的。系统软件位于底层,应用软件位于最高层。

Windows资源监视器

当我们打开资源监视器可以发现一个计算机在工作的时候不仅包括正在运行的软件,还包括许多下层系统进程在工作,我们软件的运行离不开这些进程的工作。

作用

有以下两个重要作用:

  • 管理系统中的各种资源:在计算机系统中同时有多个程序在执行。这些程序在执行过程中会要用到系统中的各种资源。比如当程序1和程序2都要用到同一个地址的打印机进行输出,这就产生了冲突,这就需要一个“资源仲裁者“来负责在各个程序之间的调度,从而提高资源运行效率。
  • 为用户提供友好的界面:我们知道早期的计算机是没有图形界面的,如果要操作就非常的繁琐,如果需要编写一个c语言程序是相当困难的。有了操作系统之后,我们只需要在终端上输入几行代码就可以完成运行。随着商业化发展,操作系统提供了图形用户界面(graphic user interface, GUI),使得计算机的操作更加简单,方便。

特性

操作系统也是一个程序,其主要有4个特性:

  • 并发性(concurrency)
  • 共享性(sharing)
  • 异步性(asynchronous)
  • 虚拟性(virtuality)

并发性

所谓并发就是计算机系统中同时存在多个程序。具体可以体现在下面3个方面:

  • 用户程序与用户程序之间并发执行;
  • 用户程序与操作系统之间并发执行;
  • 操作系统与操作系统之间并发执行。
并发与并行的区别

程序并行要求微观上的同时,就是在同一个时刻有多个程序同时向前推进。

程序并发则是只需要在宏观上多个程序都在向前推进。

显然,要实现程序并行必须要有多个处理器,但是在单处理器环境中可以实现程序并发。这是由于并发执行的程序时按照某种次序交替地获得处理器并运行的。由于处理器的速度很快,因此从微观上看,这些程序都是在向前推进的。这些程序仿佛都有属于自己的处理器,即虚处理器。

共享性

所谓资源共享,其实就是操作系统与多个用户程序公用系统中的各种资源,这种共享是在操作系统下控制实现的。对于一个给定的计算机系统来说,它的资源配置情况是相对固定的,而程序对于资源的需求则是变化的。操作系统要掌握系统中当前资源的使用情况并据此决定各个程序进入系统的次序以及使用资源的次序。

异步性

在操作系统之上,宏观上同时运行的程序有多个,这些程序是交替执行的。异步的反义词即同步,一个程序的执行并不是一直都顺利的,有时候会发生中断并切换到另一端操作系统程序。

虚拟性

利用某种技术把一个物理实体变为若干个逻辑实体。例如:为在单处理器系统中同时运行多个程序,操作系统把一个实体的CPU改造成多个虚拟的CPU,每个用户仿佛拥有一个属于自己的CPU。

分类

  • 多道批处理操作系统:多道批处理系统允许多个作业(程序)同时存储在内存中,并通过操作系统的管理,交替在CPU上执行。这提高了CPU的利用率和系统吞吐量。

  • 分时操作系统:分时系统允许多个用户通过各自的终端同时访问计算机系统,每个用户感觉像是独占系统资源。系统通过时间片轮转等方式公平地分配CPU时间给各个用户。

  • 实时操作系统:实时操作系统(RTOS)设计用于处理对时间要求极为严格的任务。它确保关键操作能够在给定的时间限制内完成,常用于航空航天、工业控制等领域。

  • 通用操作系统:通用操作系统是一种没有明确特定应用领域的操作系统,如Windows、Linux等,它们支持广泛的应用程序和多样化的用户群体。

  • 单用户操作系统:单用户操作系统一次只允许一个用户访问系统资源。这种系统通常用于个人计算机,如早期的DOS系统。

  • 网络操作系统:网络操作系统(NOS)负责管理网络上的硬件和软件资源,提供网络通信、资源共享和分布式处理等服务。

  • 分布式操作系统:分布式操作系统管理分布在不同计算机上的资源,这些计算机通过网络相互连接,形成一个逻辑上统一的系统。

  • 多处理操作系统:多处理操作系统能够管理多个CPU(或处理器核心),通过并行或并发执行提高系统的处理能力

  • 集群操作系统:集群操作系统将多个计算节点(服务器)连接成一个集群,通过集群管理软件来协调节点间的资源和工作负载,以提供高可用性和可扩展性。

  • 云计算操作系统:云计算操作系统是专为云计算环境设计的,它管理虚拟资源(如虚拟机、存储、网络),提供弹性计算、按需付费等特性。

  • 嵌入式操作系统:嵌入式操作系统是专为嵌入式系统设计的,这些系统通常具有特定的硬件和实时要求,如智能家居设备、手机等。

  • 多媒体操作系统:多媒体操作系统支持多媒体数据的处理、存储和传输,如音频、视频和图像的实时处理。

  • 智能卡操作系统:智能卡操作系统是运行在智能卡(如IC卡、SIM卡)上的微型操作系统,管理卡上的资源,提供安全的数据存储和访问控制。

硬件环境

包括:定时装置、堆与栈、寄存器、特权指令与非特权指令、处理器状态及状态转换、地址映射机构、存储保护装置、中断装置、通道与DMA控制器。

-以下进行选择性说明。

堆与栈

(Stack)

  1. 设计目的‌:栈主要用于存储局部变量和方法调用的上下文信息(如参数、返回地址等)。它遵循后进先出(LIFO, Last In First Out)的原则。
  2. 管理方式‌:栈由操作系统自动管理,包括内存的分配和释放。每当一个函数被调用时,它的参数、局部变量和返回地址等信息就会被压入栈中;当函数返回时,这些信息会从栈中弹出。这种自动管理机制简化了内存管理,但也限制了栈的使用方式。
  3. 存储特性‌:栈的大小在程序运行时通常是固定的,或者有一个最大限制(这取决于操作系统和程序的设计)。因此,栈上能够存储的数据量是有限的。如果尝试在栈上分配过多的数据,将会导致栈溢出(Stack Overflow)错误。
  4. 使用方式‌:程序员通常不需要(也无法)直接控制栈内存的分配和释放,这是由编译器和操作系统自动完成的。

(Heap)

  1. 设计目的‌:堆主要用于存储程序运行期间动态分配的内存。与栈不同,堆上的内存分配和释放是由程序员控制的,这提供了更大的灵活性。
  2. 管理方式‌:堆的管理更加复杂,需要程序员手动管理内存的分配和释放(尽管有些现代语言如Java、C#等提供了垃圾回收机制来自动管理堆内存)。程序员可以通过调用特定的库函数(如C语言中的mallocfree,C++中的newdelete)来在堆上分配和释放内存。
  3. 存储特性‌:堆的大小通常比栈大得多,并且可以在程序运行时动态地增长和缩小(取决于操作系统的内存管理策略和可用内存)。然而,这也意呀着堆上的内存管理更加复杂,容易出现内存泄漏等问题。
  4. 使用方式‌:程序员需要负责在堆上分配和释放内存,这增加了程序的复杂性但也提供了更大的灵活性。堆上的内存可以用于存储各种类型的数据结构,如链表、树、图等。

寄存器

程序切换时,一般需要把寄存器的当前值保存起来,再次运行前再恢复。

  • 程序状态字(program status word, PSW):

  • 状态字(Status Word)是计算机科学中常用于表示程序、设备或系统当前状态的一种数据结构或变量。它通常包含了一系列的标志位(Flag bits),每个标志位用来表示不同的状态或条件是否被满足。通过检查这些标志位,程序可以了解系统或设备的当前状况,并据此做出相应的处理。

    状态字的设计可以根据不同的应用场景而有所不同,但一般来说,它们都会包含以下几种类型的信息:

    1. 错误码‌:用来指示操作是否成功执行,如果失败,则可能包含具体的错误代码或类型。
    2. 操作模式‌:指示设备或系统当前处于何种操作模式(如读模式、写模式、待机模式等)。
    3. 硬件状态‌:反映硬件组件(如内存、磁盘、传感器等)的当前状态(如满、空、就绪、错误等)。
    4. 权限级别‌:在安全敏感的应用中,可能包含用户或进程的权限级别信息。
    5. 特殊条件‌:如中断是否被启用、特定资源是否被锁定等。

    示例

    假设我们有一个简单的状态字,用于表示一个数据处理模块的状态,这个状态字是一个8位的字节,设计如下:

    • 位0(最低位):0 表示没有错误,1 表示发生错误。
    • 位1:0 表示模块处于空闲状态,1 表示模块正在处理数据。
    • 位2-3(共2位):用于表示模块当前的工作模式(假设有4种模式)。
    • 位4-7(共4位):保留,将来可能用于其他目的或特定条件。

    在这个例子中,如果我们想检查模块是否处于空闲状态并且没有错误,我们可以读取状态字,并检查位0和位1是否为00

    编码示例(伪代码):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    pseudofunction check_status(status_word):
    if (status_word & 0x01) == 0 and (status_word & 0x02) == 0:
    return True # 空闲且无错误
    else:
    return False

    # 假设 status_word 是从某处获取的
    status_word = 0x00 # 假设的示例值
    if check_status(status_word):
    print("模块处于空闲状态且没有错误。")
    else:
    print("模块不在空闲状态或存在错误。")

    注意:上面的示例使用的是位操作(位与&)来检查特定位的值。0x01是二进制0000 00010x02是二进制0000 0010,它们分别用于检查状态字的最低两位。

处理器状态及状态转换

处理器状态:

为构造一个可靠的系统,硬件至少要区分两种状态:管态和目态。它由一位触发器标识,通常属于程序状态字的一部分,即由程序状态字中的一位标识。

目态(Object Mode)

定义‌:
目态,也称为用户态或常态,是用户程序执行时CPU所处的状态。

特点‌:

  1. 指令限制‌:在目态下,程序只能执行非特权指令,即那些不会直接影响到系统硬件或安全性的指令。这包括大部分的计算和数据处理指令,但不包括如I/O操作、内存保护寄存器访问、中断控制等特权指令。
  2. 资源访问限制‌:用户程序不能直接使用系统资源,也不能改变CPU的工作状态。它们通常只能访问自己被分配的内存空间,而不能访问其他用户程序或操作系统的内存。
  3. 安全性‌:这种限制机制有助于保护系统免受恶意用户程序的破坏,确保系统的稳定性和安全性。

管态(Supervisor Mode)

定义‌:
管态,也称为特权态、系统态或核心态,是CPU在执行操作系统内核程序或进行低级硬件操作时所处的状态。

特点‌:

  1. 指令全集执行‌:在管态下,CPU可以执行指令系统的全集,包括特权指令和非特权指令。这使得操作系统能够执行必要的硬件管理任务,如设备驱动、内存管理、进程调度等。
  2. 资源访问无限制‌:操作系统在管态下可以访问计算机的任何资源,包括所有内存空间、硬件设备以及系统级的配置信息。这种无限制的资源访问权限使得操作系统能够有效地管理整个系统。
  3. 系统稳定性与安全性‌:虽然管态下的权限非常广泛,但操作系统的设计和实现需要确保这些权限的合理使用,以避免系统崩溃或安全漏洞。

状态转换:

  • 目态→管态:目态程序无法直接控制处理器状态的转换(修改处理器状态是个特权命令),故需要中断。中断之后处理器状态字就处于管态。
  • 管态→目态:可以通过修改程序状态字(置PSW)来实现

操作系统的界面形式

  • 交互终端命令
  • 图形用户界面
  • 触屏用户界面
  • 作业控制语言

运行机理

操作系统是中断驱动的,这么说,当考虑一个系统并发执行P1和P2两个程序时,若:”在t1时刻P1程序执行,在t2时刻P2程序执行,t1<t2“,那么在t1-t2之间一定发生过中断,即中断时程序切换的必要条件。

实际上,P1本人并不能直接把CPU使用权交给P2,这过程需要操作系统。而操作系统取代P1成为处理器持有者的唯一途径是中断

中断将引出新的程序状态字并导致系统由目态转到管态(即进入操作系统)(目态,也称为用户态或常态,是用户程序执行时CPU所处的状态;管态,也称为特权态、系统态或核心态,是CPU在执行操作系统内核程序或进行低级硬件操作时所处的状态)。

当系统中断之后,通过CPU的调度再决定执行P1或P2。

系统举例

Linux系统

源代码开放,免费;系统稳定、可靠;速度快,效率高;内核模块化程度高,允许第三方配置文件系统及设备管理程序;功能完善;具有网络支持优势;标准化程度高。

Windows 10系统

Windows10是基于NT技术构建的面向个人计算机平台的操作系统,本质上属于单用户系统,但可以组网并提供网络服务。

  • 具有多任务(包括多线程、多进程)管理功能,支持对称多处理,操作系统进程可以在任何可获得的处理器上运行,同一进程中的多个线程可以在不同处理器上同时运行。
  • 支持客户-服务器计算模式,一台PC或工作站与一个主系统合作完成特定的服务程序。
  • 提供友好图形化界面

操作系统概述
https://bayeeaa.github.io/2024/09/24/操作系统概述/
Author
Ye
Posted on
September 24, 2024
Licensed under