操作系统基础操作

什么是操作系统

管理软/硬件资源,为程序提供服务的程序

理解操作系统

“精准”的定义毫无意义

操作系统如何从一开始变成现在这样的?

  • 三个重要线索
    • 计算机(硬件)
    • 程序(软件)
    • 操作系统(管理软件的软件)

操作系统=对象+API(应用视角/设计)=C程序(硬件视角/实现)

操作系统基础操作

操作系统的启动

image-20220314085237096

Bootloader:加载OS(硬盘->内存),使从cpu执行操作系统

BootLoader一般位于硬盘的第一个主引导扇区 (一个扇区的大小为512Byte)

image-20220314112509811

1.POST(加电自检):寻找显卡和执行BOIS

2.BOIS把BootLoader从硬盘加载到内存

image-20220314112650905

操作系统与设备和程序的交互

image-20220314113347137

定义

  • 系统调用(来源于应用程序)

    应用程序主动向操作系统发出服务请求

  • 异常(来源于不良的应用程序)

    非法指令或者其他坏的处理状态(如:内存出错)

  • 中断(来源于外设)

    来自不同的硬件设备的计时器和网络的中断

为什么应用程序不能直接访问外设而要借助操作系统呢?

  • 在计算机运行中,内核是被信任的第三方
  • 只有内核可以执行特权指令
  • 为了方便应用程序

中断异常系统调用的区别

源头处理时间响应
中断外设异步持续,对用户应用程序是透明的
异常应用程序意想不到的行为同步杀死或重新执行意想不到的应用程序指令
系统调用应用程序请求操作系统提供服务异步或同步等待和持续(等待服务完成之后继续执行)

系统调用发出请求的那个点是同步的,但是返回的那个点可能是异步的

中断和异常处理机制

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

硬件

设置中断标记[CPU初始化]

1.将内部、外部事件设置中断标记

2.中断事件的ID

软件

  • 保存当前处理状态

  • 中断服务程序处理

  • 清除中断标记

  • 恢复之前保存的处理状态

异常

  • 保存现场(产生异常这条指令的地址,以及当前一些寄存器保存的内容等)
  • 异常处理
    • 杀死产生了异常的程序
    • 重新执行异常指令
  • 恢复现场

系统调用

标准C库的一个例子

  • C语言中,应用程序调用printf()时,会触发系统调用write()

程序访问主要是通过高层次的API接口而不是直接进行系统调用

  • Win32 API用于Windows
  • POSIX API用于POSIX-based systems(包括UNIX Linux Mac OS X的所有版本)
  • Java API用于Java虚拟机(JVM)

通常情况下,与每个系统调用相关的序号,系统调用接口根据这些序号来维护表的索引

系统调用接口调用内核态中预期的系统调用,并返回系统调用的状态和其他任何返回值

用户不需要知道系统调用是如何实现的,只需要获取API和了解操作新系统将什么作为返回结果,操作系统接口的细节大部分都隐藏在API中,通过运行程序支持的库来管理(用包含编译器的库来创建函致集)

跨越操作系统边界的开销

中断,异常,系统调用其实是跨越了操作系统的边界,保证了整个系统安全稳定正常的运行,所以会有必要的开销

  • 在执行时间上的开销超过程序调用

  • 开销

    • 建立中断/异常/系统调用号与对应服务例程映射关系的初始化开销

    • 建立内核堆栈

    • 验证参数

    • 内核态映射到用户态的地址空间

      ​ 更新页面映射权限

    • 内核态独立地址空间

      ​ TLB

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值