操作系统—— 1 操作系统概述

1 什么是操作系统

没有一个完整、精确、公认的定义
是系统软件

  • 用户角度上,os是一个控制软件
  • 管理应用程序
  • 为应用程序提供服务
  • 杀死应用程序
  • 资源管理
  • 管理外设、分配资源
    在这里插入图片描述
    操作系统层次架构
  • 应用程序之下
  • 硬件之上

应用软件:办公软件、视频播放软件

  • 操作系统位于应用软件之下,为应用软件提供服务支撑

在这里插入图片描述
shell : 对外接口等
kernel:操作系统内部组件:

  • CPU调度器
  • 物理内存管理
  • 虚拟内存管理
  • 文件系统管理
  • 中断处理与设备驱动(和底层硬件直接打交道)

OS kernel的特征:

  • 并发(一个时间段,多个CPU)
    • 计算机系统中同时存在多个运行的程序,需要OS管理和调度
  • 共享
    • “同时”访问
    • 互斥共享
  • 虚拟
    • 利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务
  • 异步
    • 程序的执行不是一贯到底,而是走走停停,向前推挤的速度不可预知
    • 但只要运行环境相同,OS需要保证程序运行的结果也要相同

2 为什么学习操作系统

3 如何学习操作系统

4 操作系统实例

unix(apple)、linux(android\windows)

5 操作系统的历史

随着硬件、计算机体系结构等变化

  1. 早期计算机使用纸带传输程序和数据
    操作系统只起到加载作用
    数据传到计算机上去,再传出来(机械简单的过程)
  2. CPU等硬件快速发展,计算机速度得到提升,性能未得到充分利用
  3. 批处理阶段(并发)
  4. 内存的容量越来越大、CPU执行多个程序(多道程序设计,1个CPU)
  5. 为了更好的利用计算机资源,并且更好的和用户交互,出现了分时系统(把时间分为很小的一段,人感知不到,中断帮助os实现分时)
  6. 个人电脑操作系统
  7. 网络的快速发展,出现了分布式操作系统(计算存储工作通过数据中心来完成,中间通过internet来连接在一起)
  8. 未来发展趋势:多台计算机围绕1个人工作

6 操作系统的结构

汇编语言与机器绑定,不具移植性
C语言有移植性

  1. 简单操作系统:MS-DOS(1981-1994)

    • 部分模块的单体内核
    • 功能比较弱
    • 易受攻击、破环
    • 受制于硬件
  2. Unix ,采用C语言

  3. 微内核的设计,尽可能把内核功能移到用户空间,内核中只放基本的,松耦合,但如果文件管理和内存管理交互要通过内核,性能不高

  4. 学术界还有一种更极端的方式——外核。把内核分为2部分,一部分跟硬件打交道完成硬件资源的复制;一部分与具体应用打交道,在第一部分之上。速度得到提高

  5. 虚拟机监控器(VMM):将单独的机器接口转换成很多的幻象,每个这些接口(虚拟机)是一个原始计算机系统的有效副本,并完成所有的处理器指令(虚拟出n个计算机系统(完整的计算机),使得在一台物理计算机上有多台的计算机系统给上曾使用,一台变多台)
    在这里插入图片描述
    操作系统之下是vmm,vmm之下才是硬件

7 启动、中断、异常和系统调用

7.1 计算机启动

在这里插入图片描述
开机主要是开上面3个
os最开始放在os,不在内存
DISK:存放os
BIOS:基于I/O处理系统(按电源后检测各种外设,去加载相应的软件执行)
- 第一步从特定的地址开始执行
在这里插入图片描述
- POST(加电自检)
- 寻找显卡(屏幕)和执行BIOS(键盘鼠标)
- 把Bootloader(加载os)从硬盘放到内存中去,最初在在硬盘的第一个主引导扇区
第1个扇区为512个字节
在这里插入图片描述

7.2 操作系统与设备和程序交互(中断异常系统调度)

面向外设通过中断和IO进行处理
面向应用程序通过系统调用和异常来启动相应的功能

定义:

  1. 系统调用(来源于应用程序)
    应用程序主动向操作系统发出服务请求(应用程序向操作系统发送指令)
  2. 异常(来源于不良的应用程序)
    非法指令或其他换的处理状态(如内存出错)(应用程序在执行过程中出现异常,需os来完成相应的功能)
  3. 中断(来源于外设)
    来自不同的硬件设备的计时器和网络的中断

应用程序为什么要通过os与硬件联系?

  • 在计算机运行中,内核是被信任的第三方(应用程序不可信任,os可信任)
  • 只有内核可以执行特权指令
  • 为了方便应用程序(os使得应用软件屏蔽底层的device,os向上提供一个简洁的接口,使应用软件更具移植性)

中断异常系统调用的差异

  1. 源头:
    • 中断:外设
    • 异常:应用程序意想不到的行为(访问了不该访问的地址空间;资源未得到满足,但os悄悄准备好了)
    • 系统调用:应用程序请求操作提供服务(读写文件)
  2. 处理时间
    • 中断:异步 (应用程序不知道导致中断的事件什么时候产生)
    • 异常:同步(除0就会产生异常)
    • 系统调用:同步(发出请求是同步的)或异步(返回是可能是同步也可能异步。应用程序发出请求后马上去做其他事情,返回就是异步的;发出请求后等待就是同步的)
  3. 响应状态
    • 中断:持续,对用户应用程序是透明的
    • 异常:杀死或重新执行意想不到的应用程序指令
    • 系统调用:等待和持续后继续执行

中断和异常处理机制

  • 中断是外设的事件
  • 异常是内部CPU的事件
  • 中断和异常迫使CPU访问一些被中断和异常服务访问的功能

中断

  • 硬件:

    • 设置中断标记(CPU初始化)
      • 将内部外部事件设置中断标记
      • 中断事件的ID
        中断事件的ID值程序访问的中断向量地址
        中断就是打断了正在执行的程序去执行更为紧急的事件,对此需要对硬件和软件进行一定的保护(保存和恢复机制),以此保障处理完中断后还能继续执行原来的程序
  • 软件:

    • 保存当前处理状态
    • 中断服务程序处理
    • 清除终端标记
    • 恢复之前保存的处理状态

异常:异常编号

  • 保存现场
  • 异常处理
    • 杀死产生了异常的程序
    • 重新执行异常指令(os进行弥补工作,处理异常)
  • 恢复现场

软件系统感知不到异常,不知道什么时候会异常

系统调用

应用程序调用printf(),会出发系统调用write()

  • 程序访问主要是通过高层次的API接口而不是直接继续进行系统调用
    在这里插入图片描述
    在这里插入图片描述
    用户态:os运行过程中CPU所处的一个状态,只能执行部分指令(机器指令、访问IO)
    内核态:os运行过程中CPU所处的一个状态,能执行所有指令(特权,IO。。。)
    当系统调用时,会实现从用户态到内核态的转变,控制权从应用程序交到os,os可以对发出的系统调用做出标识识别,以完成具体的服务
    应用程序发出:
  • 函数调用,在一个栈空间内实现参数的传递和返回
  • 系统调用,os和应用程序有各自的堆栈,切换堆栈转换状态都需要开销,开销的回报就是安全可靠
    在这里插入图片描述
    验证参数是说,os不信任应用软件,要进行验证
    开销是值得的必须的
发布了16 篇原创文章 · 获赞 0 · 访问量 244

猜你喜欢

转载自blog.csdn.net/qq_42713936/article/details/104950015
今日推荐