现代操作系统原理与实践01:操作系统概述
目录
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:操作系统概述相关推荐
- 操作系统原理——第2章 操作系统概述
2.1 操作系统的目标和功能 操作系统是控制应用程序执行的程序, 并充当应用程序和计算机硬件之间的接口. 它有三个主要目标: 方便 有效 扩展能力 2.1.1 作为用户/计算机接口的操作系统 计算机接 ...
- 操作系统原理第一章:操作系统概述
目录 1 操作系统概念 1.1 为什么要有操作系统 1.2 什么是操作系统 1.3 计算机系统部件 1.4 操作系统设计的目标 1.5 操作系统的其他定义 2 操作系统的发展 2.1 操作系统的历史 ...
- 操作系统原理和实践-考前最后一练
局部题目:建议理解全部概念再来看题目 操作系统原理和实践-考前最后一背_神迹小卒的博客-CSDN博客操作系统第二章 进程管理 - 幕布2.1 前趋图和程序执行2.2 进程的描述2.3 进程控制http ...
- 第一章 操作系统引论-操作系统原理和实践
目录 三课合一: 要求学完要做到什么? 教材 目录 第一章操作系统引论 引例:操作系统在做什么? 你知道哪些操作系统的名字? 什么是OS操作系统? 1.1 操作系统的目标和作用 目标:方便性.有效性. ...
- 现代操作系统原理与实践03:操作系统结构
目录 1 操作系统的目标 2 操作系统的机制与策略 3 操作系统复杂度管理方法 3.1 模块化(modularity) 3.2 抽象(abstraction) 3.3 分层(layering) 3.4 ...
- 现代操作系统原理与实践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 ...
- 现代操作系统原理与实践02:硬件结构
目录 1 冯.诺依曼结构 1.1 中央处理单元 1.2 存储器 1.3 输入输出 2 CPU与指令集架构 2.1 指令集架构概述 2.2 ARMv8体系结构概述 2.2.1 ARMv8 SoC基本结构 ...
- Linux操作系统原理与应用01:概述
目录 1. Linux内核的技术特点 1.1 单内核结构 1.1.1 单内核特性 1.1.2 微内核特性 1.2 抢占式内核 1.2.1 非抢占式内核特性 1.2.2 抢占式内核特性 1.3 支持动态 ...
- 第十章 shell的交互功能与shell程序设计----操作系统原理和实践
什么是shell?shell的用途是啥?_Darren_wdq的博客-CSDN博客_shell的作用场景:只知道写shell脚本,却不知道什么是shell?那shell是什么呢?找到了之前在腾讯课堂上 ...
最新文章
- JDK里常见容器总结
- 谈谈我开发过的几套语音通信解决方案
- Linux Shell 下载网站指定文件
- linux ls 升序,ls 命令查看文件时候,按修改时间倒序或升序排列
- linux pcie驱动框架_Linux设备驱动框架设计
- MyEclipse在搭建s2sh时 如何 uninstalled facet
- 数据湖,当然得要全闪存的!
- 用css控制背景图片的位置,大小
- 古文(诗词文)—— 结构模式与复用
- python标准库第一步_Python标准库学习1-文件系统
- cudnn下载注意事项
- 云课堂智慧职教自动签到
- LOJ 6437 PKUSC2018 PKUSC
- 【JMedia】诺贝尔奖得主:东亚教育浪费了太多生命
- BLE DTM by HCI
- android:layout_weight=1,Android:LinearLayout布局中Layout_weight的深刻理解
- python做数据透视表_Python pandas中强大的数据透视表
- Linux文件属性软硬连接
- 阿里云Quick BI学习之报表制作
- PS2021 编辑PDF文件,修改文字
热门文章
- layui table动态选中_微信炫酷炸啦!超视觉动态壁纸来了,还自带音效!
- matlab设计模拟高通滤波器
- 没有MsVCp140如何安装MysQl,win10中msvcp140.dll文件如何安装_win10电脑缺少msvcp140.dll文件的安装教程...
- git恢复到master版本_关于git,请教如何恢复版本库?
- The driver is automatically registered via the SPI and manual loading of the
- rabbitmq消息的序列化与反序列化
- BigDecimal除法,并保留小数后两位
- MySQL 存储过程 if语句
- Ubuntu18.04 安装nextcloud
- MYSQL互为主从同步(Windows)