zoukankan      html  css  js  c++  java
  • 【操作系统笔记】 01.操作系统引论

    一、操作系统的目标和作用

    最原始的时候,用户拿到的只有硬件,只能直接使用指令操作,效率完全取决于操作者的技术。

    所以操作系统的目的是:

    • 对硬件的扩展、管理,提升硬件的利用率和吞吐量。
    • 方便用户使用,提供对硬件封装好的API(系统调用),提供友好的命令行界面或者图形界面。

    操作系统带来了什么?

    • 可以使用高级语言直接写代码,通过编译执行,大大增加了移植性。
    • 有了系统调用,用户再也不用关心硬件的使用,比如嵌入式就是看厂家的说明文档,高低电频分别表示什么,才能用。
    • 便于扩展。各种鼠标键盘打印机,直接安装驱动就好了,而厂家只用根据统一的标准设计驱动即可。
    • 硬件的使用更加高效。原来的硬件就像一盘散沙,各干各的,CPU快磁盘慢,就一直等;现在有了操作系统的指挥,硬盘预读到内存,程序预加载,减少CPU的等待,让其相互配合,充分利用各个硬件。
    • 提升了安全性。以前操作者如果不小心,可能直接擦掉寄存器或清空内存,产生不可预估的错误。而现在操作系统将系统需要的寄存器和内存都设置成了不可访问,将一些高权限的操作都封装了起来,大大提升了安全性。
    • 资源的抽象。将物理地址转化为了逻辑地址,让用户不用关心具体的物理地址。

    操作系统是什么?

    • 对用户来说:是一个方便用户使用的系统软件。
    • 对硬件来说:是一个管家,负责管理、分配资源。
    • 对进程来说:是创建、协调、关闭进程的工具。
    • 对电脑来说:是给硬件加了一层壳。

    操作系统的特性

    • 并发性:并行是同时进行;并发是宏观并行,微观串行,实际上是交替执行
    • 共享性:有了并发,就有了贡献。有些资源要独占,有些资源可以分享,就引出了互斥、锁、临界资源的概念。
    • 虚拟性:比如物理地址到逻辑地址。比如分时系统让用户感觉是自己在独占。比如空分复用(内存的时分复用)让进程感觉自己是独占了所有内存。
    • 异步性:进程的执行顺序是不可预知的。

    二、操作的系统的发展历史

    1. 人工操作
      使用纸带输入指令,低效。用户独占全机。

    2. 脱机输入输出
      在主机上加了一台外围机,其实和内存是一个感觉,提前加载好,让主机的等待时间减少,即提高了CPU的利用率。

    3. 单道批处理 和 多道批处理
      单道和多道指的是内存中加载的作业数量,即同时执行的程序数量。

    单道批处理只有一个程序,自然就是顺序执行,和脱机的区别就是添加了一个监督程序,可以挨个执行作业。
    多道批处理添加了贡献系统资源,让多个作业交替执行,可以显著提高CPU的利用率。(并发执行)
    唯一的缺点就是不能交互。

    其实可以看出,这里已经有了操作系统的雏形了,主要是为了解决CPU和IO的速度不匹配的问题。

    这里面需要解决的问题:

    • CPU怎么分配。比如优先级、时间片、最小等待、最短优先等方案。
    • 内存怎么分配和保护,要保证程序间的隔离,且大小合适。是取最合适的内存,还是直接用最大的内存。
    • IO的分配。互斥和共享,怎么加锁,怎么解决临界资源的抢占。
    • 文件的组织和管理。怎么更快地查找、读取,怎么保证一致性、安全性。
    • 作业管理。怎么创建、调度、休眠和执行,销毁。

    这么看来,操作系统其实基本包含了程序界所有的基础难点。

    1. 分时系统
      分时系统就是将CPU的调度划分成了时间片,每个进程使用多少个时间片,用完了就要让出CPU给其他程序,同时内存进行调入调出程序。
      这里面可能有中断或者优先级的问题,总体上看起来就是每个进程都独占了CPU和内存,用户独占了主机。
      这样就产生了多用户系统。在以前计算机很昂贵的时代是非常有意义的。

    2. 实时系统
      实时系统就是创建就执行,直到结束,不会有CPU的让出,提供了更高的安全性,适用于简单的,或者高安全性的系统。
      其中涉及到截止时间,根据对截止时间的态度又可以分为硬实时系统(不能超时)和软实时系统(可以超时)。

    3. 其他系统
      比如嵌入式系统,为了高效而生,将系统裁剪和定制,实现专门的系统。
      集群系统、网络系统、分布式系统,是现在广泛应用在互联网时代的系统,将多个计算机组合起来,协同工作,达到更强大的性能;同时还可以将机器遍布全球,减少网络延时,提升用户体验。

    三、操作系统的设计

    1. 模块设计
      将各种功能都封装到模块中,互相依赖、调用。高内聚、低耦合。但是带来了依赖关系混乱的问题。

    2. 分层设计
      将功能从小到大进行封装,一层层调用,依赖关系明确,但是由于层数的增加,效率也会逐步降低。

    3. 微内核设计

    将操作分为了用户态和管态。
    管态能访问所有的寄存器和存储区,而用户态只能访问指定的。
    管态包含了各种高权限操作:

    • 中断屏蔽
    • 清内存
    • 存储保护
    • 设置时钟
    • 原语(指令组成的一个作业,只能执行完,不可中断)

    比如进程,怎么样管理、通信、切换、调度、同步在微内核中,而怎么处理优先级,怎么分类在内核中。
    比如存储器,页怎么置换、地址映射在微内核中,怎么分配、回收再内核中。

    其实就是将核心操作放到了微内核,而策略放到了内核。

    缺点:需要频繁在用户态和管态中切换。

  • 相关阅读:
    https authorization basic
    第二十一章 单例模式
    第十九章 组合模式
    第十八章 备忘录模式
    第十七章 适配器模式
    第十六章 状态模式
    新博客~
    CF922D Robot Vacuum Cleaner
    BZOJ1767 [CEOI2009]harbingers
    树的直径学习笔记
  • 原文地址:https://www.cnblogs.com/HappyTeemo/p/15350462.html
Copyright © 2011-2022 走看看