• 由浅到深的操作系统学习


    初识操作系统

    Linux 源码

    https://elixir.bootlin.com/linux/v6.0.6/source/Documentation

    操作系统和计算机组成原理的基础讲解

    https://www.cnblogs.com/cxuanBlog/p/12376364.html

    操作系统的学习框架路线

    https://www.cnblogs.com/cxuanBlog/p/13320810.html

    操作系统发展史

    串行处理、简单批处理系统、多道程序批处理系统、多到程序设计的实现、分时系统

    操作系统体系结构

    简单结构,层次化结构,微内核结构,模块结构,虚拟机

    当今世界上最流行的操作系统时Windows操作系统和苹果操作系统,因为具有良好的生态,UNIX操作系统以网络为核心,安装在服务器上。Linux原名GNULinux免费且开源的多用户的安全的操作系统RedhatubuntuFedoraDebian等都是以Linux改版完善来的。

    操作系统就是为了屏蔽底层硬件,为用户提供一套统一,简单的可以通过对应的指令控制底层的硬件的软件。

    一般使用的基于图形界面的操作系统叫做GUI图形用户接口,而基于文本,命令行的就是shell

    在这里插入图片描述

    操作系统运行具有两种模式:用户态模式和内核态模式

    底层硬件

    CPU,多线程和多核芯片,内存,IO设备,总线

    内存架构
    在这里插入图片描述

    处理器执行一条机器指令的过程可以称之为指令循环

    指令循环是从取指令循环、解码阶段、执行阶段再次返回到取指令阶段

    操作系统的异常

    中断,IO设备发生改变,发出的信号触发,异步,总是返回到下一条指令继续执行

    陷阱,由程序主动发起的异常,同步,总是返回下一条执行继续执行

    故障,由正在执行的指令产生的各种错误引发,有可能是可恢复的,也可能是不可恢复的,同步,可能返回当前指令重新执行,也可能终止当前程序

    致命故障,硬件错误引发的不可恢复的错误,同步,终止当前的程序

    操作系统模式切换

    操作系统分为用户模式内核模式(特权模式)

    比如windows系统默认Ring0是内核模式,Ring1是用户模式

    区分两种模式的原因就是保护系统资源,避免越权访问,提高系统安全性

    在这里插入图片描述

    进程

    操作系统中最重要的就是进程英文process,进程是对正在运行中程序的一个抽象。CPU正在执行的一个任务,是系统进行资源分配和调度的基本单位

    进程的执行就是CPU 会在各个进程之间进行来回切换。

    进程的结构

    进程 = 用户程序 + 用户数据 + 系统栈 + PCB + 共享区域

    进程的创建

    1、为新进程分配一个唯一的PID
    2、给进程的各组成部分分配地址空间
    3、初始化PCB
    4、设置正确的连接
    5、创建和扩展其他的数据结构

    进程控制

    1、获取进程ID父ID

    2、创建和终止进程,一个进程创建一个子进程的系统调用是fork(),其特点是调用一次,返回两次,在父进程中返回子进程的ID,在子进程中返回0,终止系统调用的命令是exit(),父子进程拥有不同的PID,地址空间隔离,但是文件资源共享

    3、装载运行程序,execve()调用一次从不返回

    进程的切换

    进程的切换是操作系统打断一个正在运行的进程,将处理区分配给另一个进程,让其拥有处理器资源并且开始继续执行的状态转换

    当处理器执行程序的用户程序部分时,处于用户模式
    处理器执行进程的内核程序或者访问内核资源的时候,处于内核模式
    当用户程序调用内核提供的服务时,处理器发生用户模式内核模式的切换
    当内核服务完成,返回用户程序的时候,处理器发生内核模式用户模式的切换

    在这里插入图片描述

    进程的切换伴随着控制流的切换,内存的切换,操作系统模式的切换

    进程上下文进行切换的好处

    1、保护资源,避免越权访问,提高系统安全性

    2、内核程序和用户程序封装在进程上下文中,只需要进行模式的切换,不需要进行进程的切换,减少了系统开销

    3、内核程序在内核模式下运行,可以直接访问用户程序和数据,减少了用户程序和内核程序之间的数据传递,提高了进程执行效率

    进程的退出

    1、根据退出的ID号,在主进程表中找到对应的PCB
    2、将退出释放的资源归还给父进程和操作系统
    3、若该进程具有子进程,就先退出它的所有子进程,防止子进程脱离控制
    4、将进程出队,释放PCB

    进程控制块PCB

    PCB = 进程标识信息(PID,PPID,UID) + 处理区状态信息(寄存器和栈指针) + 进程控制信息(资源调度,存储,通信)

    进程的状态

    新建,就绪,运行,阻塞,退出

    在这里插入图片描述
    七模型状态

    当一个进程被交换到磁盘中时,就处于挂起的状态。组合之后就出现了四种可能的状态,就绪态,阻塞态,阻塞挂起,就绪挂起

    异常分类

    中断,陷阱,故障,致命故障

    进程切换的时机:异常发生时候

    过程调用和系统调用

    1、过程调用是为了模块化程序设计的需要,系统调用是用户程序使用计算机资源和服务的一种方式

    2、过程调用是通过指令跳转实现的,系统调用是通过异常陷阱实现的

    3、过程的调用始终在一种模式下进行的,不会发生进程的切换和进程状态的切换,系统调用是会引起进程的切换和状态的切换

    4、一个进程调用一个过程的时候,始终在用户模式下的,在用户进程调用一个系统调用的话,就会发生模式的切换以及在系统调用返回的时候,会再次进行模式的切换

    进程的调度

    调度目标分为

    面向用户的目标,具有周转时间,响应时间,最后期限,可预测性

    面向系统的目标,具有并发度,吞吐率,CPU利用率,公平性,资源平衡

    进程调度

    长程调度,目标是并发度,决定一个进程是否被允许进入到计算机系统中进行处理,一旦进入,就将该进程添加到短程调度的队列中等待调度

    中程调度,和进程的内存管理相关

    短程调度(分派程序),精确的决定下一次执行哪一个进程,执行频率最高

    短程调度策略

    类别决策模式响应时间对进程的影响
    FCFS非抢占式短进程和IO密集型不利
    轮转时间片用完抢占短进程好公平
    SPN最短进程优先非抢占短进程好长进程不利
    SRT最短剩余时间到达时抢占长进程不利
    HRRN最高响应比优先非抢占平衡
    反馈时间片用完抢占不强调IO密集有利

    周转时间T = 等待时间w + 服务时间s = 完成时间 - 到达时间

    【带权周转时间】归一周转时间T/s = 周转时间 T / 服务时间 s

    线程

    线程是环境和资源的抽象,是程序执行流的抽象,是操作系统能够进行运算调度的最小单位,包含在进程中,是进程中的实际运作单位

    线程的结构 = 线程控制块 + 线程执行栈 + 线程局部存储

    线程的实现方式分为两大类即是用户级线程内核级线程

    使用范围

    1.服务器中的文件管理或通信控制

    2.前后台处理

    3.异步处理

    进程的并发和死锁

    信号量SemaphorePV操作

    • P(s)操作,将信号量的是s.count--,如果s.count < 0,则操作系统就把系统调用P(s)的进程置为阻塞态,将其加入到s.queue中,如果s.count >= 0,则P(s)直接退出

    • V(s)操作,s.count++,如果s.count <= 0,就在s.queue中选择并移出一个进程,将他从阻塞态变为就绪态,并加入就绪队列中,然后退出。如果 s.count > 0,则V(s)直接退出

    死锁

    DeadLock是系统中多个进程并发执行时,由于资源占有和请求引起的一种进程永远被阻塞的状态的现象,就是进程之间持有自己的资源不愿放手,又要请求其他进程的资源满足自己的需要,造成的一种无解的,互相一直僵持的状态。

    哲学家就餐问题就是一个典型的死锁问题,5 个哲学家,2把叉子,6个资源就会保证发生死锁

    同类资源个数mn个进程互斥使用,每个进程对于该类资源的最大需求量是k,为了保证在任何调度情况下都不会发生死锁的条件 n * ( k - 1) + 1 <= m

    资源分配图刻画进程和资源关系

    死锁发生的条件,互斥 + 占有且等待 + 不可抢占 + 循环等待,这四个条件组合在一起,同时发生就会造成死锁

    死锁的处理

    • 死锁的预防,预分配,顺序分配方法

    • 死锁的避免,银行家算法,每种资源的总量Resource,剩余每种资源的总量Available,进程最大资源需求矩阵Claim,资源分配矩阵Allocate,每个进程还需要请求的资源矩阵 Need = Claim - Allocate

    • 死锁的检测,银行家算法,一旦剩余资无法满足任何一个进程资源的需求就报出出现死锁

    死锁的恢复

    取消全部死锁的进程,将每一个死锁进程回滚到检查点,连续取消死锁进程,连续抢占资源,直到不再存在死锁

    内存

    内存管理的四大基本需求,重定向,共享,保护,存储器扩充

    虚拟内存

    虚拟内存是对进程结构进行内存管理的一个中间数据结构

    在这里插入图片描述

    虚拟内存是一个由连续字节存储单元构成的数组,而虚拟地址空间是虚拟内存中每一个字节的虚拟地址集合

  • 相关阅读:
    【笔试题】【day8】
    【Go语言】Go语言中的流程控制
    Rockchip Clock
    9.变换之平移
    就地执行Windows Server2022升级
    LeetCode·每日一题·907.子数组的最小值之和·动态规划
    Spark连接快速入门
    JSD-2204-创建csmall项目-Day02
    pytest-gitignore插件详解
    整洁架构能有多整洁?
  • 原文地址:https://blog.csdn.net/qq_46724069/article/details/127797113