01-操作系统概述

以下是学习中山大学苏玉鑫老师的课程,以下是课程链接:

https://space.bilibili.com/392294218/favlist?fid=4945279&ftype=collect&ctype=21

相关资料

书籍:操作系统原理与实现 陈海波 夏虞斌 机械工业出版社

为什么要学习操作系统

答案:右边快

答案:按照数据结构的学习,可能会认为是链表查找插入快,但是常规下却是顺序表快,在内存状态下,链表的分布可能会影响它的速度。

  1. 可以成为一名更高效的程序员
  • 更快找到并消灭bug的能力
  • 理解并调试、提升程序性能的能力

提高程序性能的方法

  • 选择高效的编程语言:程序设计
  • 设计精巧的数据结构与算法:数据结构与算法
  • 利用操作系统的特性:操作系统
  • 懂得借助编译器优化:编译原理
  1. 拥有理解复杂系统设计与实现的能力

拥有构建一个操作系统的能力

操作系统是系统领域的基石

系统领域有大量的公司

学好操作系统,for fun and profi

操作系统是一个成熟的领域

"新的"操作系统不断出现

操作系统为什么难学?

什么是操作系统

操作系统是在硬件和应用之间的软件层。

应用 -------- 操作系统 -------- 硬件

操作系统和应用的关系:

应用功能越来越多

操作系统沉淀越来越多功能、内涵与外延不断扩大

操作系统和硬件的关系

意识 VS 身体

计算机百科全书的解释

操作系统的管理硬件资源、控制程序运行、改善人机界面和为应用软件提供支持的一种系统软件。

对下管理硬件,对上构筑应用生态

cs 复制代码
#include <stdio.h>

int main() {
    printf("hello world!");
    return 0;
}
bash 复制代码
gcc hello.c -o hello

./hello

./hello & ./hello

操作系统指挥显卡完成显示的过程,点阵

➢ hello 这个可执行文件存储在什么位置?是如何存储的?

➢ hello 这个可执行文件是如何加载到 CPU 中运行?

➢ hello 这个可执行文件是如何将"Hello World!"这行字输出到屏幕?

➢ 两个hello 程序同时运行的过程中如何在一个 CPU 中运行?

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

• CPU:进程/线程,数量不受物理CPU的限制

• 内存:虚拟内存,大小不受物理内存的限制

• I/O设备:将各种设备统一抽象为文件,提供统一接口

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

• 应用可以实现自己的同步原语(如spinlock)

• 操作系统提供了更高效的同步原语(与线程切换配合, 如pthread_mutex)

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

• 应用可以利用网络进行进程间通信(如loopback设备)

• 操作系统提供了更高效的本地通信机制(具有更丰富的语义,如pipe)

• 例:Shell Pipe

操作系统对应用的管理

➢ 生命周期的管理

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

➢ 计算资源的分配

• CPU:线程的调度机制

• 内存:物理内存的分配

• I/O设备:设备的复用与分配

➢ 安全与隔离

• 应用程序内部:访问控制机制

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

操作系统 = 管理 + 服务

➢ 管理和服务的目标有可能存在冲突

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

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

• 例:单纯强调公平性的调度策略往往资源利用率低

• 如细粒度的round-robin导致大量的上下文切换

操作系统的定义

➢ 操作系统的核心功能:

• 将有限的、离散的资源,高效地抽象为无限的、连续的资源

➢ 从软件角度的定义:

• 硬件资源虚拟化+管理功能可编程

➢ 从结构角度的定义:

• 操作系统内核+系统框架

应用与操作系统的交互:系统调用

➢ 什么是系统调用?

• 应用调用操作系统的机制,实现应用不能实现的功能

➢ 例如:printf() -> write()->sys_write()• write(1, "Hello World!\n", 13)

➢ 使应用调用操作系统的功能就像普通函数调用一样

操作系统的功能:管理

➢ 避免一个流氓应用独占所有资源

➢ 方法-1:每10ms发生一个时钟中断(时间片)• 调度器决定下一个要运行的任务

➢ 方法-2:可通过信号等打断当前任务执行• 如:kill -9 1951

cpp 复制代码
int main() {
    while (1);
}

操作系统的功能:管理

➢ 如何卡死一个OS?

• 例:可以fork出无数的进程

cpp 复制代码
int main() {
    while (1) {
        fork();
    }
}

当应用程序执行到fork的时候,会复制一个新的进程,继续执行,然后执行到fork的时候,又会复制一个新的进程....

如何解决这个问题?

• 资源配额:cgroup/Linux

• 虚拟化:虚拟机

• 万能方法:重启机器• 制度约束:AppStore的程序预审准入机制

操作系统的历史

自行了解

相关推荐
柯西极限存在准则5 小时前
第三章 计算机系统
系统架构
Kiyra7 小时前
WebSocket vs HTTP:为什么 IM 系统选择长连接?
分布式·websocket·网络协议·http·设计模式·系统架构·wpf
职业码农NO.112 小时前
系统架构设计中的 15 个关键取舍
设计模式·架构·系统架构·ddd·架构师·设计规范·领域驱动
武子康14 小时前
Java-213 RocketMQ(MetaQ)演进与核心架构:NameServer/Broker/Producer/Consumer 工作机制
大数据·分布式·架构·消息队列·系统架构·rocketmq·java-rocketmq
武子康17 小时前
Java-216 RocketMQ 4.5.1 在 JDK9+ 从0到1全流程启动踩坑全解:脚本兼容修复(GC 参数/CLASSPATH/ext.dirs)
java·大数据·分布式·消息队列·系统架构·rocketmq·java-rocketmq
冬奇Lab18 小时前
Android稳定性基础:系统架构与关键机制
android·系统架构
嵌入式学习和实践2 天前
Linux/Windows 系统架构查看、安装包选择指南(嵌入式开发场景适配)
linux·windows·系统架构
小安运维日记2 天前
RHCA - DO374 | Day09:自定义内容集和执行环境
linux·运维·服务器·系统架构·ansible·改行学it
言之。2 天前
DDIA第一章《数据系统架构中的权衡》
系统架构·ddia
qianshanxue112 天前
0-1论软件开发过程 RUP 及其应用-先启阶段、精化阶段、构建阶段和移交(产品化)阶段
系统架构·软考·rup