目标概述

核心目标

  • 操作系统和网络知识庞大,太多内容则枯燥无味,我们主要是讲解最常见的知识点,符合28原则

  • 操作系统

    • 内核,性能,磁盘IO,内存,CPU,进程,线程,文件,中断

  • 计算机网络

    • OSI七层模型,TCP/IP四层模型和组成

    • 网络通讯,TCP,UDP,HTTP1.0/2.0,HTTPS,网络安全攻防,DNS,CDN

为什么要学习

  • 系统性能优化和生产环境问题

  • 从操作系统-网络-应用程序-存储 等多方面 诊断和优化

  • 比如:1.接口突然响应变慢,服务器内存,CPU占用高,Redis,Mysql查询慢,如何排查;2.接口性能优化,如何进行分析和下手

怎么学

  • 认识对应的内容知识体系,有全局认知

  • 掌握常用的分析诊断工具-适合的场景用合适的工具,制作自己的脑图

性能优化诊断方法论

  • 围绕两个大点

    • 应用程序性能维度:提高吞吐量Throughput;降低延迟Latency

    • 操作系统资源维度:CPU使用率;内存使用率;磁盘IO使用率

  • 选择指标评估系统和应用程序现状

  • 设置性能优化目标

  • 进行链路基准测试

  • 分析全链路性能瓶颈

  • 优化系统和应用程序

  • 验证优化后的性能指标

计算机硬件组成系统

什么是计算机

  • 1945年冯诺依曼提出了一种计算机设计实现架构,奠定了现代计算机的理论基础

  • 于是就有了电脑

五大组成部分

  • 运算器,控制器,存储器,输入设备,输出设备

  • 控制器

    • 计算机的指挥系统,用来控制计算机其他组件的运行

    • 简单来说:有一个正常的大脑

  • 运算器

    • 又名 算数逻辑运算器,简称ALU

    • 运算功能,用来完成各种二进制编码做算数运算和逻辑运算,包括加减乘除,与或非运算,控制器+运算器=CPU

    • 简单来说:用大脑思考1+1=2

    • 运算器控制器联系十分紧密,两大部件多数集成在同一芯片,统称为中央处理器

  • 存储器

    • 计算机的记忆功能,用来存取数据

    • 内存:比如内存条,临时存储,断电丢失数据

    • 外存:比如机械硬盘,持久存储,断电不丢失数据

  • IO设备

    • 可以将数据输入到计算机,或接受计算机输出数据的外部设备

    • 分类

      • 输入设备:计算机接收外界数据的工具,比如键盘鼠标等

      • 输出设备:计算机向外输出数据的工具,比如显示屏音响等

最重要的程序-操心系统和进程

什么是操作系统

  • 运行在计算机上最重要的一种程序,管理计算机的所以硬件和软件

  • 用户通过系统OS来操作使用计算机硬件,属于中间层

现代操作系统核心功能

  • 进程管理:操作系统为进程分配任务,解决处理器的调度,分配和回收等

  • 处理器管理:CPU的管理和分配,比如分配进程CPU调度执行

  • 内存管理:内存的管理和分配,比如给程序分配内存和释放内存

  • 外存管理:持久化存储的管理和分配,比如磁盘文件写入

  • IO管理:输入输出设备的管理,比如磁盘输入和网络收发

什么是进程

  • 一个具有独立功能的程序对某个数据在处理机上的执行过程,也是操作系统资源分配的基本单位

  • 操作系统中给进程 抽象了专门的数据结构

    • 称为进程控制块,PCB

    • 在操作系统代码当中是一个结构体:struct task_struct(...)

    • 每一个进程均有一个PCB,在创建进程时创建PCB,伴随进程运行的全过程,直到进程撤销而撤销

  • PCB数据结构,包含进程的多数信息

    • 程序ID(PID,进程句柄):一个进程都必须对应唯一PID一般是整型数字

    • 特征信息:一般分系统进程,用户进程,或者内核进程等

    • 进程状态:运行,就绪,阻塞,表示进程现在的运行情况

    • 优先级:表示获取CPU控制权的优先级大小

    • 提供进程管理,调度所需要的信息

  • 进程状态

    • 新建态:进程正在被创建,操作系统为进程分配资源,初始PCB

    • 就绪态:具备运行条件,但没有空闲的CPU导致不能运行,万事俱备,只欠一个CPU

    • 运行态:占有CPU,并在CPU上运行指令

    • 阻塞态:等待某一事件而暂时不能运行

    • 退出态:从系统中退出,操作系统会回收进程拥有的资源,撤销PCB

进程,线程,他们之间的关系怎么样的

  • 进程

    • 本质上是一个独立执行的程序,进程是操作系统进行资源分配和调度的基本概念

    • 操作系统进行资源分配和调度的一个独立单位

  • 线程

    • 是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际操作单位

    • 一个进程总可以并发多个线程,每条线程执行不同任务,切换受系统控制

  • 重点

    • 进程拥有多个线程的时候,这些线程会共享相同的虚拟内存和全局变量资源,这些资源在上下文切换时不需要修改

    • 同进程内的线程切换,要比多线程间的切换消耗更少的资源,所以开发中用多线程替代多进程的原因

    • 线程上下文切换的两种情况

      • 前后两个线程属于不同进程,此时资源不共享,线程上下文切换和进程的上下文切换一样

      • 前后两个线程属于同一个进程,同进程虚拟内存共享,在切换的时候虚拟内存等资源就保持不动,只需要切换线程的私有数据,寄存器不共享的数据

  • 进程创建

    • 进程一般由OS内核创建,一个进程也可以去创建另一个进程,这个去创建进程称为父进程,被创建进程称为子进程

    • 应用场景

      • Nginx 的master-worker进程

        • Worker 是处理真正的请求的,而master负责监控worker进程是否正常工作

      • Redis两种持久化方式

        • AOF 和RDB

        • 执行bgsave命令,Redis-Server会fork创建子进程,RDB持久化过程由子进程负责,会在后台异步进程快照操作,由于是子进程,所以快照生成同时还可以响应客户端请求

操作系统的调度算法

什么是进程调度

  • Linux是一个多任务操作系统,支持的任务同时运行的数量远远大于CPU的数量

  • 进程调度就指 怎么安排 某一个时刻CPU运行 哪个进程

进程调度类型

  • 非抢占式调度

    • 一旦把处理机分配给某进程后,进程就会一直运行,直到该进程 完成阻塞 时才会把 CPU 让给其他进程

    • 主要用于 批处理系统 和 某些对 实时性要求不严 的实时系统

  • 抢占式调度

    • 暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一个进程

    • 系统同样是把处理机分配给优先权最高的进程,在其他执行期间出现了另一个其优先权更高的进程

    • 进程调度程序就停止当前进程的执行,重新将处理机分配给新得到的优先级最高的进程

    • 主要用于比较严格的 实时系统

算法分类

  • 先来先服务算法 FCFS

    • 按照作业/进程达到的先后顺序进行调度,即:优先考虑在系统中等待时间最长的作业

    • 重点:排在长进程后的短进程的等待时间长,不利于短作业/进程,长进程得到CPU就执行完成了,不利于短进程

    • 比如 进程一响应慢,进程23快,那进程1先到,其他本来很快搞定的但是没有被调度到导致效率慢

  • 短作业优先调度算法 SJF

    • 预计执行时间短的进程优先分派处理机,短作业/进程(要求服务时间最短)

    • 在实际情况中占有很大比例,为了使得他们优先执行,对长作业不友好

    • 重点:缩短进程的等待时间,提高系统的吞吐量

    • 比如, 进程一响应慢,进程23快,那么在同等时间下,更多短进程任务完成了,吞吐量也上去了

  • 高响应比优先调度算法 HRRN

    • 在每次调度时,先计算各个作业的优先权:优先权=响应比=(等待时间+要求服务时间)/要求服务时间

    • 因为等待时间与服务时间之和就是系统对该作业的响应时间,所以 优先权=响应比=响应时间/要求服务时间

    • 选择优先权高的进行服务需要 计算优先权信息,增加了系统的开销 是介于FCFS和SJF之间的一种折中算法

  • 时间片轮转调度算法 RR

    • FCFS的方式按时间片轮转使用CPU的调度方式,让每个进程在一定时间间隔内都可以得到响应

    • 由于高频率的进程切换,会增加开销,且不分区任务的紧急程度

  • 优先级调度算法

    • 根据任务的紧急程度进行调度,高优先级先处理,低优先级慢处理

    • 通常使用 动态优先级,如果高优先级任务很多且持续产生,那低优先级的就可能很慢才被处理

    • 分类

      • 非抢占式:当就绪队列中出现优先级高的进程,运行完当前进程,再选择优先级高的进程

      • 抢占式:当就绪队列中出现优先级高的进程,当前进程挂起,调度优先级高的进程运行

  • 多级反馈队列调度算法

    • 多级:表示有多个队列,每个队列优先级从高到低,同时优先级越高时间片越短

      • 高优先级队列中已没有调度的进程,则调度次优先级队列中的进程

      • 对同个队列中的各个进程,按时间片轮转法调度

      • 比如:Q1,Q2,当Q1没有才会去请求Q2,队列时间片为N,加入Q1的作业经过N个时间片之后还没有完成,则进入Q2

    • 反馈:表示如果有新的进程加入优先级高的队列时,立即停止当前正在运行的进程,转而去运行优先级高的队列

总结

  • 😋一个好的调度算法要考虑以下几个方面

    • 公平-保证每个进程得到合理的CPU时间

    • 搞笑-使CPU保持忙碌状态,总是有进程在CPU上运行

    • 响应时间-使交互用户的响应时间尽可能短

    • 周转时间-使单位时间内处理的进程数量尽可能多

  • 不同版本和系统的调度算法不一样

  • UINX采用动态队列调度

  • BSD采用多级反馈队列调度

  • Windows采用抢先多任务调度

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐