目录

1 什么是操作系统

1.1 操作系统的功能

1.1.1 对硬件进行管理和抽象

1.1.2 为应用提供服务和管理

1.3 操作系统的结构

1.4 操作系统的发展趋势

1.5 操作系统面临的挑战

1.5.1 操作系统的可扩展性

1.5.2 隔离与性能的权衡

1.5.3 安全性挑战

2 操作系统接口

2.1 系统调用接口

2.2 POSIX接口

2.3 领域应用接口


1 什么是操作系统

1.1 操作系统的功能

1.1.1 对硬件进行管理和抽象

1. 将复杂的、具备不同功能的硬件纳入统一的管理

2. 将硬件抽象为不依赖具体硬件特性的资源,并通过易用的接口提供给上层的应用,从而使应用无需关心硬件的具体细节

说明1:内存管理与抽象示例

① 系统中存在多个不连续的、有限的物理内存区域

② 操作系统识别这些区域的起始地址和大小之后,使用物理内存分配器对其进行管理

③ 操作系统向应用程序提供的是一个统一的,近似无限的虚拟地址空间,应用开发者无需关心物理内存硬件的型号、位置和容量

说明2:操作系统的核心功能就是将有限的、离散的资源,高效地抽象为无限的、连续的资源

1.1.2 为应用提供服务和管理

1. 向应用提供各种不同层次、不同功能的接口,以满足应用的需求

2. 提供不同类型的访问控制、应用间交互等服务

3. 对应用的生命周期进行管理,包括应用的加载、启动、切换、调度和销毁等

说明1:操作系统为应用提供的服务

① 为应用提供计算资源的抽象

  • CPU:进程/线程,数量不受物理CPU的限制
  • 内存:虚拟内存,大小不受物理内存的限制
  • IO设备:将各种设备统一抽象为文件,提供统一的接口

② 为应用提供线程间的同步

  • 应用可以实现自己的同步原语(e.g. spinlock)
  • 操作系统提供了更高效的同步原语(与线程切换配合,如pthread_mutex)

③ 为应用提供进程间的通信

  • 应用可以通过网络进行进程间通信
  • 操作系统提供了更高效的本地通信机制

说明2:操作系统对应用的管理

① 生命周期的管理

应用的加载、迁移、销毁等操作

② 计算资源的分配

  • CPU:线程的调度机制
  • 内存:物理内存的分配
  • IO设备:设备的复用与分配

③ 安全与隔离

  • 应用程序内部:访问控制机制
  • 应用程序之间:隔离机制,包括错误隔离和性能隔离

说明3:操作系统对应用的管理和服务目标可能存在冲突

① 服务的目标:单个应用的运行效率最大化

② 管理的目标:系统的资源整体利用率最大化

e.g. 单纯强调公平性的调度策略王婉资源利用率低,如细粒度的round-robin导致大量的上下文切换

说明4:由于操作系统衔接了硬件和应用,因此当二者发生变化时,操作系统也需要随之改变

① 当前硬件种类越来越多(e.g. 自动驾驶汽车中包含通用处理器、人工智能加速器、高带宽内存、雷达等),操作系统需要对他们进行管理与抽象

② 应用的需求越来越多样化(e.g. 很多应用对时延的要求越来越苛刻),操作系统需要予以满足

说明5:操作系统提供了为每个应用的资源设置配额的机制(e.g. cgroup机制),从而限制一个应用所能使用的资源数量

1.3 操作系统的结构

1. 狭义的操作系统指的是操作系统内核加shell,但是随着硬件种类和应用程序的需求越来越丰富,大量共性功能沉淀到操作系统中

2. 广义的操作系统可以分为操作系统内核和操作系统框架两层,其中

① 操作系统内核负责对硬件资源的管理与抽象,为操作系统框架提供基础的系统服务

② 操作系统框架则基于操作系统内核提供的服务,为不同的应用提供编程接口与运行环境

1.4 操作系统的发展趋势

1. 从封闭到开发,再到封闭

2. 从专用到通用,再到专用

① 传统操作系统不能满足实时、安全、可信等需求

② 从通用计算走向领域计算,各种xPU(GPU、TPU、BPU)不断出现

3. 从简单到复杂,到更复杂

Linux内核代码已超过2000W行,而且还在以每年200W行的速度增加

说明:一个芯片上的OS不再是一个单一OS,而是一组OS

1.5 操作系统面临的挑战

1.5.1 操作系统的可扩展性

假设执行如下代码,不断分配文件描述符

随着CPU核的增加,预期的理想性能应该是逐渐增加的,但是实际性能却是随着CPU核心的增加,处理性能不升反降

导致该问题的原因有2个,

1. 多核中锁的开销

2. 多核之间Cache同步开销,如下图所示,跨L3 Cache访问的耗时巨大

1.5.2 隔离与性能的权衡

1. 隔离必然造成进程间通信,而进程间通信的速度远比函数调用慢

2. 经过对进程间通信持续近30年的优化,IPC依然可占到程序总运行时间的30%

1.5.3 安全性挑战

操作系统还存在各种bug导致的安全隐患,例如对用户态传入的地址检查不够全面

2 操作系统接口

从应用的角度来看,操作系统提供了不同层次的接口,主要包括系统调用接口、POSIX接口和领域应用接口

2.1 系统调用接口

应用程序通过系统调用接口向内核申请服务,以printf函数调用为例(基于ARMv8体系结构)

1. printf函数调用标准库libc中的write函数

2. libc准备好相关参数后,执行svc指令,使得控制流从用户地址空间下陷(trap)到内核地址空间

3. 操作系统内核下陷处理函数根据系统调用传入的系统调用号,识别出该系统调用需要执行的内核函数sys_write并进行调用

说明:使用strace命令,可以查看应用程序使用的系统调用以及处理的信号

2.2 POSIX接口

1. 由于每个操作系统提供的系统调用各不相同,为了同一个应用程序在不同操作系统上的可移植性(源代码层次),逐渐形成了一些可移植性操作系统接口标准,例如POSIX(Portable Operating System Interface for uniX)

2. POSIX标准通常通过C Library(libc)来实现,常见的libc包括glibc、musl、bionic(Android)

3. 应用程序只需要调用libc提供的接口就可以实现对操作系统功能的调用,同时也实现了应用程序在类UNIX操作系统上的可移植性

4. 不同的操作系统也可以通过对libc的移植来支持现有的应用生态

说明:API与ABI

① API是指应用程序编程接口(Application Programming Interface),他定义了两层软件(e.g. libc与Linux内核)之间源码层面的交互接口

② ABI是指应用二进制接口,即在某个特定体系结构下两层软件之间二进制层面的交互接口,包括二进制文件格式(e.g. Linux中的ELF格式)、应用之间的调用约定(e.g. 参数传递与返回值处理)、数据模式(e.g. 大小端模式)等

2.3 领域应用接口

1. 在POSIX或操作系统调用的基础上,还可以封装面向不同领域的领域应用接口

2. 引入领域应用接口,可以提高开发的便捷性(e.g. 更多可复用的功能)

说明:领域应用接口示例

① AUTOSAR(AUTomotive Open System ARchitecture)就是面向汽车领域的应用接口,可以方便汽车电子平台各部件的开发者遵循同一个标准和软件架构

② Android系统框架面向移动平台,为移动应用开发人员定义了应用开发接口;iOS同样也为苹果手机平台定义了应用开发接口

现代操作系统原理与实践01:操作系统概述相关推荐

  1. 操作系统原理——第2章 操作系统概述

    2.1 操作系统的目标和功能 操作系统是控制应用程序执行的程序, 并充当应用程序和计算机硬件之间的接口. 它有三个主要目标: 方便 有效 扩展能力 2.1.1 作为用户/计算机接口的操作系统 计算机接 ...

  2. 操作系统原理第一章:操作系统概述

    目录 1 操作系统概念 1.1 为什么要有操作系统 1.2 什么是操作系统 1.3 计算机系统部件 1.4 操作系统设计的目标 1.5 操作系统的其他定义 2 操作系统的发展 2.1 操作系统的历史 ...

  3. 操作系统原理和实践-考前最后一练

    局部题目:建议理解全部概念再来看题目 操作系统原理和实践-考前最后一背_神迹小卒的博客-CSDN博客操作系统第二章 进程管理 - 幕布2.1 前趋图和程序执行2.2 进程的描述2.3 进程控制http ...

  4. 第一章 操作系统引论-操作系统原理和实践

    目录 三课合一: 要求学完要做到什么? 教材 目录 第一章操作系统引论 引例:操作系统在做什么? 你知道哪些操作系统的名字? 什么是OS操作系统? 1.1 操作系统的目标和作用 目标:方便性.有效性. ...

  5. 现代操作系统原理与实践03:操作系统结构

    目录 1 操作系统的目标 2 操作系统的机制与策略 3 操作系统复杂度管理方法 3.1 模块化(modularity) 3.2 抽象(abstraction) 3.3 分层(layering) 3.4 ...

  6. 现代操作系统原理与实践04:实验1:机器启动

    目录 1 实验环境使用说明 1.1 环境部署 1.2 源码下载 1.3 代码编译 1.4 qemu运行 1.5 qemu调试 1.5.1 启动GDB Server 1.5.2 连接GDB Server ...

  7. 现代操作系统原理与实践02:硬件结构

    目录 1 冯.诺依曼结构 1.1 中央处理单元 1.2 存储器 1.3 输入输出 2 CPU与指令集架构 2.1 指令集架构概述 2.2 ARMv8体系结构概述 2.2.1 ARMv8 SoC基本结构 ...

  8. Linux操作系统原理与应用01:概述

    目录 1. Linux内核的技术特点 1.1 单内核结构 1.1.1 单内核特性 1.1.2 微内核特性 1.2 抢占式内核 1.2.1 非抢占式内核特性 1.2.2 抢占式内核特性 1.3 支持动态 ...

  9. 第十章 shell的交互功能与shell程序设计----操作系统原理和实践

    什么是shell?shell的用途是啥?_Darren_wdq的博客-CSDN博客_shell的作用场景:只知道写shell脚本,却不知道什么是shell?那shell是什么呢?找到了之前在腾讯课堂上 ...

最新文章

  1. JDK里常见容器总结
  2. 谈谈我开发过的几套语音通信解决方案
  3. Linux Shell 下载网站指定文件
  4. linux ls 升序,ls 命令查看文件时候,按修改时间倒序或升序排列
  5. linux pcie驱动框架_Linux设备驱动框架设计
  6. MyEclipse在搭建s2sh时 如何 uninstalled facet
  7. 数据湖,当然得要全闪存的!
  8. 用css控制背景图片的位置,大小
  9. 古文(诗词文)—— 结构模式与复用
  10. python标准库第一步_Python标准库学习1-文件系统
  11. cudnn下载注意事项
  12. 云课堂智慧职教自动签到
  13. LOJ 6437 PKUSC2018 PKUSC
  14. 【JMedia】诺贝尔奖得主:东亚教育浪费了太多生命
  15. BLE DTM by HCI
  16. android:layout_weight=1,Android:LinearLayout布局中Layout_weight的深刻理解
  17. python做数据透视表_Python pandas中强大的数据透视表
  18. Linux文件属性软硬连接
  19. 阿里云Quick BI学习之报表制作
  20. PS2021 编辑PDF文件,修改文字

热门文章

  1. layui table动态选中_微信炫酷炸啦!超视觉动态壁纸来了,还自带音效!
  2. matlab设计模拟高通滤波器
  3. 没有MsVCp140如何安装MysQl,win10中msvcp140.dll文件如何安装_win10电脑缺少msvcp140.dll文件的安装教程...
  4. git恢复到master版本_关于git,请教如何恢复版本库?
  5. The driver is automatically registered via the SPI and manual loading of the
  6. rabbitmq消息的序列化与反序列化
  7. BigDecimal除法,并保留小数后两位
  8. MySQL 存储过程 if语句
  9. Ubuntu18.04 安装nextcloud
  10. MYSQL互为主从同步(Windows)