玩命加载中 . . .

操作系统总结


以下内容是近期复习操作系统的整理,用于随时随地自己复习,欢迎各位提出错误并指正。

操作系统概述

操作系统的概念相关

操作系统的概念

出于严谨,此处需要声明,操作系统的概念实际上并没有明确的定义。

定义:操作系统是管理计算机硬件的程序,因其为应用程序提供了基础,并且充当了计算机用户和硬件的中介。

也有部分书籍进行了总结:操作系统是指控制和管理整个计算机系统的硬件和软件资源,合理的组织,调度计算机的工作资源分配,进而为用户和其他的软件提供方便快捷的接口和环境程序的集合。

引用原文(《OSC》)

In general, we have no completely adequate definition of an operating system.

Operating systems exist because they offer a reasonable way to solve the problem of creating a usable computing system. The fundamental goal of computer systems is to execute programs and to make solving user problems easier.

The common functions of controlling and allocating resources are then brought together into one piece of software: the operating system.

In addition, we have no universally accepted definition of what is part of the operating system. A simple viewpoint is that it includes everything a vendor ships when you order “the operating system.”

A more common definition, and the one that we usually follow, is that the operating system is the one program running at all times on the computer—usually called the kernel. Along with the kernel, there are two other types of programs: system programs, which are associated with the operating system but are not necessarily part of the kernel, and application programs, which include all programs not associated with the operation of the system.

操作系统的特征

  1. 并发(concurrence):两个或多个时间在同一时间段内/时间间隔内发生;注意与并行(parallel)(指两个或多个事件在同一时间点/时刻内发生)的区别;
  2. 共享(share):指同一内存在某一时刻同时被多个进程使用,使用途径包括”互斥共享方式“和”同时访问方式“。注意资源共享是以程序的并发为前提的,而对共享的处理会反过来影响并发;
  3. 虚拟(virtualization):将物理上的关系通过一种映射关系使之对于OS呈现另外一种关系的过程,使用的技术包括但不限于虚拟处理器,虚拟内存和虚拟外部设备,对其的使用分为时分复用和空分复用
  4. 异步(Asynchronies):进程并发导致其执行速率的无法预知

功能及服务

引用OSC的部分原文

  1. 关于用户视角

    User View

    The user’s view of the computer varies according to the interface being used. The goal is to maximize the work or play that the user is performing.

    In this case, the operating system is designed mostly for ease of use, with some attention paid to performance and security and none paid to resource utilization—how various hardware and software resources are shared.

  2. 关于系统视角

    System View

    From the computer’s point of view, the operating system is the program most intimately involved with the hardware.

    In this context, we can view an operating system as a resource allocator. A computer system has many resources that may be required to solve a problem: CPU time, memory space, storage space, I/O devices, and soon.

    The operating system acts as the manager of these resources. Facing numerous and possibly conflicting requests for resources, the operating system must decide how to allocate them to specific programs and users so that it can operate the computer system efficiently and fairly.

    A slightly different view of an operating system emphasizes the need to control the various I/O devices and user programs.

    An operating system is a control program which manages the execution of user programs to prevent errors and improper use of the computer. It is especially concerned with the operation and control of I/O devices.

操作系统的发展和分类

  1. 手工(带孔纸带):繁琐,资源利用率低且对CPU的使用不充分
  2. 批处理系统:
    1. 单道批处理:虽然能够自动,且能够顺序运行,且具备单道性,但是其资源利用率依旧较低,且吞吐率低
    2. 多道批处理:虽然多道能够实现宏观并行微观串行,资源利用率高且吞吐量大,但是由于用户响应过场且无人机交互
  3. 分时操作系统:能够实现同时,交互,独立且及时
  4. 实时操作系统:其由软实时和硬实时,由于内容篇幅较大故省略
  5. 如今的网络操作系统,分布式操作系统和PC操作系统:同上

操作系统的运行环境

  1. 现代OS是以中断驱动的:OS执行的事件总是由trap和interrupt引起的。其中陷阱(trap)(或异常exception)是有软件生成的中断:其或源于出错,或源于程序的特定请求。
  2. 双重模式:指用户模式和内核模式(user/kernel mode)(模式为为1/0)
    1. 作用:保护作用——防止OS和用户程序受到其他错误的用户程序的影响
    2. 实现:将可能对机器造成损害的机器指令作为特权指令,且对硬件仅在内核模式才可以执行特权指令
  3. 系统调用:为用户提供手段,以请求OS完成某些特定任务,其通常会陷入中断向量的某个特定的位置,同时硬件将其视为软件中断
  4. 定时器:指设定在指定周期自中断的计算器,其中可变定时器铜鼓一个固定速率的时钟和计数器实现。
  5. 中断处理:关中断->保存断点->中断服务寻址->保存现场和屏蔽字->开中断->执行中断服务程序->关中断->恢复现场->开中断->中断返回

操作系统的体系结构

  1. 简单结构(例如MS-DOS和传统的UNIX)
    $$
    \quad
    \begin{CD}
    APP @>^{}>> ROM\
    @V^{}VV\
    常驻系统程序 @>^{}>> BIOS设备\
    @V^{}VV\
    设备驱动 @>^{}>> 驱动
    \end{CD}
    $$

  2. 分层方法(图略,后期补上)

  3. 微内核:从kernel中删除所有不是必要的不捡,而将其视作系统级和用户级的实现,其主要功能是提供通信:通过消息传递为客户端程序和运行在用户控件中各种服务提供通信。其优点是方便扩展且有更好的安全性和可靠性,但是使用微内核可能导致新能受损

  4. 模块:可加载的内核模块(loadable kernel module),讷河中由一族核心组件,无论启动或者运行,均可通过模块链接进其他的服务

  5. 混合系统

进程管理

进程

  1. 进程:用于称呼所有的CPU活动(例如任务,作业等)这一相似集合的名称
  2. 进程的非正式定义:执行中的程序,其包括代码段(文本段),也包括了程序计数器PC的值等当前活动,通常的进程可能与同一进程族关联
  3. 进程控制块(PCB):是唯一代表进程的数据结构,包括但不限于有:进程状态,PC,CPU,寄存器,CPU的调度信息,内存管理信息,I/O状态信息和记录(记账)信息
  4. 进程的特征:动态并发独立异步结构。

进程状态和转换:

$$
\begin{CD}
new \stackrel{allow}\longrightarrow ready\ \ \ \ \ \ \ \ \ \ \stackrel{schedule}{\rightleftharpoons} \ \ \ \ \ \ \ \ \ \ run \stackrel{exit}\longrightarrow End\
\ \ \ \ \ \ \stackrel{I/O\ or\ task\ finish}\nwarrow\ \ \stackrel{I/O\ or\ task\ wait} \swarrow \
\ \ \ wait\
\end{CD}
$$

进程控制和调度

  1. 进程调度器:将可用进程集合中选择一个到CPU上运行

  2. 调度队列

    1. 进程在进入系统是会被加到作业队列中,就绪队列上包括系统内的所有进程,驻留在内存中的就绪或等待运行的进程。其通过链表来实现
    2. 设备队列:等待I/O设备的进程列表
    3. 进程调度采用队列图
      1. 新进程:加入就绪队列
      2. 等待进程:直至被选中执行或者被分派
      3. 运行进程:
        1. I/O请求后进入I/O队列
        2. 创建一个新的子进程,等待被中值
        3. 由于时间片用完等中断而强制释放CPU,重回就绪队列
      4. 循环终止:从所有队列删除,资源释放
  3. 调度程序:进程通过适当调度器或调度程序来执行

    1. 批处理系统:长期调度程序/作业调度程序从缓冲池选择进程加载内存以便执行;而短期调度程序/CPU调度程序从内存中的进程选择一个并分配CPU。两者区别分别是短期调度必须经常为CPU选择新的进程,而长期调度程序控制多道程序调度且I/O密集和CPU密集的合理进程组合
    2. 分式系统:引入额外的中期调度程序——核心是将进程从内存中移出,降低多道程序进程可被重新调入内存你,并从中断处继续执行(亦称交换
  4. 上下文切换:中断时,OS需要保存保存当前运行在CPU上进程的上下文,之后进行恢复。其采用PCB表示(状态保存或状态恢复)(挂起进程->恢复进程)

    定义:A进程保存当前状态,再回复B进程的状态的过程

  5. 进程运行:

    1. 进程创建:
      1. 创建进程的进程称为父进程,新进程为子进程,如此递归得到了一个进程树;
      2. 识别进程:通过创建进程获得的进程ID(pid)(注意和PCB的区别,pid负责识别,而PCB负责辨别)
      3. 子进程资源:从父进程或者系统处获得
      4. 创建子进程时
        1. 父进程和子进程进行并行/并发;
        2. 父进程等待直至子进程执行完;
      5. 地址空间:“子进程为父进程的复制品”(即共享地址空间)或“子进程获得新的地址空间”
    2. 进程终止:
      1. 原因
        1. 子进程使用完了其所分配的资源
        2. 分配给子进程的任务结束
        3. 父进程推出且操作系统不允许孤儿进程的存在(称为级联终止)
      2. 僵尸进程:进程终止且子进程未被wait();
      3. 孤儿进程:父进程终止且父进程未被wait();
    3. 进程阻塞与唤醒:主要内容是上下文切换过程
    4. 进程切换见上面的交换图。
    5. 等待队列push/pop的是进程的PCB

进程组织

进程 = PCB + 代码段 + 数据段(指原始数据或者中间数据)

进程间通信

  1. 独立进程:进程A不影响除A以外的其他进程,同时也不会被其他进程影响

  2. 协作进程:对“独立进程”取非

  3. 进程协作的优点:信息共享,加速,模块化,方案

  4. 进程间通信的方式和内容

    1. 共享内存:指多个将同一快内存纳入自己地址空间的行为;建立共享内存区域时需要进行系统调用

    2. 消息传递(消息队列):允许进程不必通过共享地址空间来实现通信和同步,若进程A,B需要通信,则他们必须互相发送消息和接受信息——建立通信链路。

      其逻辑实现包括:直接通信,间接通信,同步通信,异步通信,自动缓冲和显式缓冲

      1. 直接通信:

        1. 命名—对称:send(P1, message); receive(P2, message);

          ​ 非对称:send(P1, message); receive(ID, message);

        2. 属性:

          1. 进程间建立了链路
          2. 每个链路对应着惟一的映射
          3. 每对进程间具有唯一的链路
        3. 对称和非对称的缺点:生成进程定义的有限模块化,导致硬编码偏大,不便于后续的修改

      2. 间接通信:通过“邮箱”和“端口

        1. 命名:send(mail, message);receive(mail, message)
        2. 特点:
          1. 共享同一邮箱才能建立链路
          2. 同一链路关联多个进程
          3. 两个进程间可以存在多个不同的链路
        3. 邮箱来源:OS提供进程用来创建邮箱,通过邮箱发送和接受信息和删除邮箱
      3. 同步(阻塞/非阻塞)(同步/异步)

        1. 阻塞发送:发送进程阻塞,直至信息由接收进程所接受
        2. 非阻塞发送:发送进程发送后立马恢复
        3. 阻塞接收:接收进程阻塞直至消息可用
        4. 非阻塞接收:接收进程持续受到有效信息和空信息的其中一种
        5. 若阻塞发送和阻塞接受结合,则发生交会
      4. 缓存:

        1. 无缓冲:阻塞发送
        2. 有限缓冲
          1. 发送队列未满:非阻塞发送
          2. 发送队列满:阻塞发送
        3. 无限缓冲:非阻塞发送
    3. 管道:允许两个进程进行通信

      1. 普通管道:允许两个进程按照生产者-消费者模型进行通信:生产者向管道的一端写,消费者从管道另外一端读
        1. 单向管道仅允许单项通信,若要实现双工,则需要两条管道,且数据流动方向相反
        2. 普通管道由进程创建且只能由创建进程访问。一般情况:父进程创建且向其子进程访问
        3. 在WindowsOS中,其又名匿名管道
        4. 无论在那个系统,普通管道仅仅只能在同一机器内的进程通信
      2. 命名管道
        1. FIFO
        2. 可单向也可半双工
        3. 父子要求不再是必要条件
        4. 建立一个命名管道后,多个进程均可用它通信

线程

线程CPU使用的基本单元,包括线程ID,线程PC,线程寄存机组合线程堆栈

概述

  1. 性质:同一进程的其他线程共享代码段,数据段和其他OS资源,传统/重量级进程只有单个控制进程,若一个进程具备多个线程,则任务可并行。
  2. 动机
    1. 一个APP多个控制线程以实现不同功能
    2. 单个APP可能同时执行多个相似的任务
    3. RPC中的应用和现代OS的应用
  3. 优点:响应性提高,资源共享使得分配资源减小,经济,可伸缩
  4. 缺点:编程困难
    1. 识别任务并将其分割
    2. 平衡是否对某个任务使用线程
    3. 数据分割方案
    4. 多种竞争避免
    5. 测试困难
  5. 并行:
    1. 数据的并行:数据分布于多个计算核上,并在每个核执行相同的操作
    2. 任务并行:将任务分配到多个计算核,执行不同的任务

多线程模型

  1. 粗分类:用户线程和内核线程
  2. 多对一模型:多个用户级线程对应一个内核线程,由用户空间线程库对线程管理,但是如果一个线程被阻塞,则整个进程都被阻塞
  3. 一对一模型:一个用户级线程对应一个内核线程,虽然线程阻塞不再影响其他的线程,但是消耗了过多的内核线程,性能影响较大
  4. 多对多模型:多路复用,多个用户线程到同样数量甚至更少的内核线程
  5. 关于并发:多对一未增加并发但是可以无限开线程;一对一增加了并发但是线程不能开太多;而多对多增加了并发且能够任意开线程
  6. 双层模型:多对多+一对一
  7. 全局变量:被所有线程共享,每个线程有自己的堆栈以用于存储自己的本地数据

隐式多线程:多线程的创建,管理交给编译器和运行库处理

本部分主要阐述线程池

  1. 由于可能的无限制线程可能耗尽系统资源的解决方法之一
  2. 思想
    1. 在进程创建的时候就创建一定的线程数量,并将其加到线程池中等待工作
    2. 当接受到请求,(若线程存在)便唤醒其中一个线程
    3. 结束工作后,线程关闭,并返回到线程池中
  3. 优点
    1. 更效率:使用已有线池比临时创建更快
    2. 通过限制最大可用数,对不能大量并发的OS十分重要
    3. 将执行任务从创建人任务的机制分离出来,可以实现多种不同的任务策略

多线程问题

  1. 系统调用fork和exec时由应用程序制定具体创建和销毁语义
  2. 信号处理下
    1. 信号模式:由特定时间发生而产生的并传递到具体进程,且信号接收需要立即处理
    2. 信号处理:默认为内核运行,若用户需要自定可以override
    3. 多线程信号:信号指定给每个线程或某个线程,以及一个特定线程接收进程的所有信号
  3. 线程撤销:指在线程完成前终止线程
    1. 撤销的线程—目标线程的情况:异步撤销(立即,但可能不会释放必要的资源)或延迟撤销(有机会有序的终止自己)
    2. 缺省撤销一般为延迟撤销:到达撤销点后调用清理处理程序
  4. 线程的本地存储:指的是每个线程需要他自己的数据,其类似于“static”
  5. 调度程序的激活:由kernel提供一组虚拟处理器给应用程序,而应用程序可调度用户线程到任意一个可用的LWP,与此同时内会通过回调处理程序来进行回调(将特定时间通知给引用程序)

处理机调度

处理机的基本概念

  1. CPU的调度成功的属性:进程的执行包括周期进行的CPU执行和I/O
  2. CPU调度程序:调度程序从内存中选择一个可执行的线程并将其分配给CPU,线程选择短期调度程序CPU调度程序, 每当CPU空闲,OS就应从新增队列中选择一个进程执行。注:就绪队列只是在逻辑上是FIFO的,而任务会通过一定的方法进行排队(优先队列),队列通常为PCB
  3. 抢占调度
    1. 状态切换:
      1. run ->wait;
      2. run->ready(中断);
      3. wait->ready;
      4. end
    2. 判别
      1. 若仅有 状态切换中的0和3,则调度方案为非抢占的或协作的
      2. 否则就成为抢占式的
      3. 非抢占模式下,该进程会一直使用CPU直至end或wait
      4. 存在共享数据时,抢占调度可能导致竞争,且会影响OS的内核设计
      5. 发生中断时,需要保护对应的代码段
  4. 调度程序
    1. 定义:指的是用来将CPU控制交给由短期调度程序选择的进程的模块
    2. 功能:切换上下文,切换为用户态,跳转到应用程序到合适的位置,以重启应用程序
    3. 调度延迟:调度程序停止一个进程而启动另一个经常所需要的时间

调度准则——最大化CPU使用率和吞吐率,最小化周转/等待/响应时间


文章作者: AleXandrite
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AleXandrite !
  目录