当前位置: 首页 > news >正文

操作系统总结

操作系统

进程和线程

我们使用进程控制块来描述进程的基本情况和允许状态
进程实体(也称为进程映像)包括:程序段,数据段,PCB

进程的特性
  • 动态性=》进程时程序的一次执行
  • 并发性=》多个进程同存于内存
  • 独立性=》进程时独立允许,独立获取资源的基本单位
  • 异步性=》进程各自独立,不可预知的速度向前推进
进程组成
  • PCB=》进程创建的时候,操作系统为其创建一个PCB,此后该结构常驻内存,并在进程结束后删除

    alt text

  1. 进程描述信息:进程标识符:标识进程、用户标识符:标识所属用户
  2. 进程控制和管理信息:描述进程当前状态,标识优先级
  3. 资源分配清单:说明有关内存地址空间或者虚拟空间的情况
  4. 处理及相关信息:也称CPU上下文,主要指的是CPU内部各个寄存器的值

note:我们通常采用链接方式或者索引方式来管理PCB

  • 链接方式:根据阻塞原因不同,排成多个阻塞队列

  • 索引方式:将同一个状态的进程组织在一个索引表中,不同表项执行对应的PCB

  • 程序段:CPU执行的程序代码段

  • 数据段:一个进程的数据段

进程状态与切换

运行态,就绪态,阻塞态,创建态,终止态

  • 这里说一下什么为创建态,这里你要清楚进程创建的步骤,在进程创建的时候,需要先申请PCB,然后向其中填写控制信息,随后分配资源,如果资源不足,就会等待资源,此时处于创建态,当得到资源的时候,初始化PCB,随后插入就绪队列需要注意的是:进程从阻塞态变为就绪态是被动的行为,需要其它进程协助,但是就绪=》阻塞是主动的行为
进程控制

一般称进程控制用的程序段为原语,原语的特点是执行期间不允许中断

  • 运行一个进程创建另一个进程,此时创建者称为父进程,被创建者为子进程,子进程可以继承父进程所拥有的资源

进程终止

  • 根据其标识符,检索对于PCB,然后读出该进程状态
  • 如果处于运行态,立即终止该进程,然后将其CPU资源分配给其它进程
  • 如果该进程还有子孙进程,一般需要将子孙进程终止
  • 将该进程所拥有的全部资源归还父进程或者操作系统
  • 删除其PCB
进程阻塞与唤醒
  • 进程使用阻塞原语(BLOCK)来使自己由运行态变为阻塞态(可见阻塞时一种主动行为)
  • 当阻塞进程所期待的时间发生的时候,由有关进程调用唤醒原语(WAKEUP),将等待该事件的进程唤醒(被动行为)
进程间的通信

匿名管道:最简单的IPC形式,在​​具有亲缘关系(通常是父子或兄弟)​​ 的进程间创建单工(半双工)字节流通道。数据写入管道的写入端,从读取端顺序读取(FIFO)。

命名管道:突破管道必须具有亲缘关系的限制,允许​​任何进程(甚至无亲缘关系)​​ 通过打开这个“文件”名进行通信。遵循FIFO原则。

消息队列:在内核中维护的​​消息链表​​。进程可以向队列添加​​结构化的消息​​(有类型和负载数据)或从队列中读取特定类型的消息。消息具有优先级(POSIX)或类型(SysV),使用发送消息和接收消息两个原语进行数据交换,目前的应用最广泛,微内核和服务器之间使用该通信方式。

  • 直接通信方式=》直接将消息发送给对于进程,挂载到其消息队列上
  • 间接通信方式:一般发送到某个中间实体,接收方从中间实体获得信息,中间实体一般称为信箱

共享内存:​​速度最快的IPC方式​​!内核将同一块物理内存映射到多个进程各自的用户空间地址范围。进程可以直接读写这块内存,就像访问自己的内存一样,​​无需内核介入拷贝​​。

信号量:它是一个用于​​同步多个进程​​(或线程)对​​共享资源​​(如共享内存区域、文件、硬件设备)访问的计数器。基本操作是PV操作(wait/P - 申请资源减小计数,signal/V - 释放资源增加计数)。

信号:用于通知进程发生了某个事件的机制,每类信号定义了一个序号,在进程的PCB 中,用至少n位向量记录该进程的待处理信号,若给某个进程发送一个信号,则把该类信号对应的位修改为1。一旦该信号被处理,就把对应的位修改为0。

socket:最强大、最通用的IPC/RPC机制​​。支持不同主机(网络IPC)或同一主机(Unix Domain Socket)上进程间通信。

线程的引入

线程可以理解为更轻量级别的进程,为处理机调度的基本单位,其基本不拥有自己的资源(除了线程id,以及其自己的线程控制块(包含线程id以及寄存器,堆栈指针等等))

线程和进程的区别

这个作为面试中的重要考点:请牢记

  • 进程是系统中拥有资源的基本单位,而线程基本不拥有系统资源,属于同一进程的所有线程都具有相同的地址空间。
  • 每个进程都不允许其余进程访问自己的独立地址空间和资源(除了全局变量),同一个进程中的线程间共享资源
  • 在创建或撤销进程时,系统都要为之分配或回收进程控制块(PCB)及其他资源,如内存空间、I/O设备等,明显大于创建线程时的开销
  • 进程切换需要保存进程上下文,而线程切换只需要保存和设置少量寄存器的值
  • 线程支持多处理机系统,但是进程只能在单CPU上运行
线程的实现方式
  1. 用户级线程
    线程的管理都在用户空间由用户程序进行,此时的线程对于操作系统透明
  2. 内核级线程
    操作系统为每个内核级线程设置一个线程控制块 TCB,内核根据该控制块感知某线程的存在,并对其加以控制。

    Alt text

  3. 混合级线程
    内核级线程对应多个用户级线程,这是用户级线程通过时分多路复用内核级线程实现的。

    Alt text

协程

什么是协程<
http://www.dtcms.com/a/289724.html

相关文章:

  • dify创建OCR工作流
  • springboot-profile
  • [学习] 双边带调制 (DSB) 与单边带调制 (SSB) 深度对比
  • 【Java学习|黑马笔记|Day18】Stream流|获取、中间方法、终结方法、收集方法及其练习
  • Redis面试精讲 Day 4:Redis事务与原子性保证
  • Node.js:常用工具、GET/POST请求的写法、工具模块
  • 基于单片机无线防丢/儿童防丢报警器
  • xavier nx上编译fast-livo过程中出现的问题记录
  • 分享一款免费好用的电视远程推送传输助手TV版软件
  • week4
  • 游戏剧情抄袭侵权比对报告:防止“爆款”变“爆雷”
  • 【分布式 ID】详解百度 uid-generator(源码篇)
  • 【每日算法】专题十_哈希表
  • 代码随想录-250720-划分字母区间
  • 什么是 Linux 发行版?什么是 Linxu 操作系统?
  • python字符串的讲解和应用
  • kotlin Flow快速学习2025
  • Function Callingの进化路:源起篇
  • (5)从零开发 Chrome 插件:Vue3 Chrome 插件待办事项应用
  • 7.20 树hash |字典树模板❗
  • LangChain4j多模型共存+整合SpringBoot
  • springboot websocket 自动重启方案
  • SpringBoot3集成MapstructPlus
  • 抓包工具使用教程
  • 网安-文件上传-upload-labs
  • Laravel 原子锁概念讲解
  • jdk各个版本特性
  • Linux 基础文件IO操作
  • 零基础学习性能测试第一章:核心性能指标-并发量
  • Node.js 中基于请求 ID 实现简单队列(即时阻止策略/排队等待策略)