泗洪有做网站/网络建站工作室

泗洪有做网站,网络建站工作室,顺德官网建设,怎么做网站广告卖钱操作系统进行线程切换时进行的动作 1. 保存当前线程的上下文 寄存器状态:保存 CPU 寄存器(如通用寄存器、程序计数器 PC、栈指针 SP 等)到当前线程的 线程控制块(TCB) 中。内核栈信息:如果线程在内核态运…

操作系统进行线程切换时进行的动作

1. 保存当前线程的上下文

  • 寄存器状态:保存 CPU 寄存器(如通用寄存器、程序计数器 PC、栈指针 SP 等)到当前线程的 线程控制块(TCB) 中。
  • 内核栈信息:如果线程在内核态运行(例如因系统调用或中断进入内核),需保存内核栈指针。
  • 浮点 / 向量寄存器:若线程使用了浮点运算或 SIMD 指令,需保存相关寄存器状态。

2. 更新线程状态与调度队列

  • 将当前线程状态从 运行态(Running) 改为 就绪态(Ready)(例如时间片耗尽)或 阻塞态(Blocked)(例如等待 I/O)。
  • 将其 TCB 移动到对应的调度队列(如就绪队列、阻塞队列)。

3. 调度器选择下一个线程

  • 调度器根据算法(如时间片轮转、优先级)从 就绪队列 中选择一个线程,分配 CPU 使用权。

4. 恢复新线程的上下文

  • 从新线程的 TCB 中加载其保存的寄存器状态(包括 PC、SP),恢复 CPU 执行环境。
  • 切换内核栈(如果是内核级线程)。

5. 切换内存地址空间(可选)

  • 同一进程内的线程切换:无需切换地址空间(共享同一进程的页表)。
  • 跨进程的线程切换(如某些系统允许线程跨进程):需更新 内存管理单元(MMU),切换页表,刷新 TLB。

6. 更新系统状态

  • 更新当前运行线程的指针(例如 Linux 的 current 宏)。
  • 更新 CPU 的统计信息(如线程运行时间、调度次数)。

7. 执行新线程

  • 通过恢复的程序计数器(PC)跳转到新线程的代码位置,继续执行。

触发线程切换的典型场景

  • 主动让出 CPU:线程调用 yield() 或等待锁 / I/O。
  • 时间片耗尽:时钟中断触发调度器介入。
  • 高优先级线程就绪:抢占式调度强制切换。

什么是用户态和内核态

1. 用户态(User Mode)

  • 权限:低权限模式,限制对硬件的直接访问。
  • 执行主体:普通应用程序(如浏览器、文本编辑器)。
  • 关键限制
    • 无法直接操作硬件(如磁盘、网络设备)。
    • 内存访问受限:只能访问进程分配的虚拟内存,无法读写内核空间。
    • 特权指令禁用:如修改页表、关闭中断等指令会被 CPU 拒绝执行。
  • 目的:防止用户程序破坏系统或干扰其他进程。

2. 内核态(Kernel Mode)

  • 权限:最高权限模式,可完全控制硬件和系统资源。
  • 执行主体:操作系统内核(如处理中断、管理进程、驱动硬件)。
  • 核心能力
    • 直接访问硬件:如读写磁盘、配置网络设备。
    • 管理内存:修改页表、分配物理内存。
    • 执行特权指令:如开关中断、修改 CPU 运行模式。
  • 目的:保障操作系统对资源的绝对控制,确保系统安全。

切换时呈现8字型

进程间通信的方式有哪些

操作系统中的进程有几种状态

进程的调度算法

进程和线程的区别

进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位. 

什么是软中断什么是硬中断

硬中断是由外部设备产生的中断信号,具有强制中断、快速响应等特点;软中断是由软件指令触发的中断,具有软件触发、灵活性高、处理机制复杂等特点。

为什么要有虚拟内存

  1. 突破物理内存限制
    当程序需要的内存超过实际物理内存时,系统将暂时不用的数据转移到硬盘的「交换空间」,腾出物理内存供急需的程序使用,避免内存耗尽导致崩溃。

  2. 支持多任务并行
    允许同时运行多个大型程序(如视频剪辑 + 游戏),即使总内存需求远超物理内存,也能通过动态调度保持流畅。

  3. 内存隔离与安全
    每个进程拥有独立的虚拟地址空间,程序 A 和程序 B 使用相同的虚拟地址时,实际映射到不同物理地址,防止数据篡改或越界访问。

  4. 简化开发与兼容性
    程序员无需关注物理内存碎片化问题,虚拟内存提供连续的逻辑地址空间,降低开发复杂度;同时统一内存管理策略,提升跨硬件平台的兼容性。

分段与分页

分段(Segmentation)

定义:将程序的逻辑地址空间按功能划分为不同大小的段(如代码段、数据段、堆栈段等),每个段代表一个逻辑单元,可独立分配和管理。
特点

  1. 逻辑划分:段与程序结构对应(如函数、模块),便于程序开发与保护。
  2. 动态大小:段长度由程序需求决定,灵活但易产生外部碎片。
  3. 二维地址:逻辑地址由段号 + 段内偏移组成(如 段A: 0x100)。

示例
程序被划分为代码段(存放指令)、数据段(存放变量)、堆栈段(函数调用栈),每个段独立加载到内存的不同位置。


分页(Paging)

定义:将逻辑地址空间和物理内存划分为固定大小的页(如 4KB),通过页表映射实现非连续内存分配。
特点

  1. 物理划分:页是固定大小的物理单位(如 4KB),消除外部碎片。
  2. 一维地址:逻辑地址由页号 + 页内偏移组成(如 页3: 0xFF)。
  3. 硬件支持:页表由硬件加速地址转换,但可能产生内部碎片。

示例
程序被切分为多个 4KB 的页,分散存储在物理内存的页框中,操作系统通过页表记录页与页框的映射关系。

分段与分片

1. 分段(Segmentation)—— 传输层(TCP)

定义:TCP 协议将应用层数据分割为适合网络传输的较小单元(称为 TCP 段 / Segment),每个段添加 TCP 头部(含端口号、序列号、校验和等)。
目的

  • 适配网络传输的合理数据大小(避免数据过大导致底层分片)。
  • 实现可靠传输:每个段独立编号,便于确认重传和按序重组。

过程示例
假设应用层发送 3000 字节 的数据,TCP 根据 MSS(最大报文段长度,通常约 1460 字节) 将其分为 3 个段:

  1. 段 1:0~1459 字节(序号 = 0)
  2. 段 2:1460~2919 字节(序号 = 1460)
  3. 段 3:2920~3000 字节(序号 = 2920)

特点

  • 由传输层(TCP)完成,对应用透明。
  • 接收端按序号重组数据,保证顺序。

2. 分片(Fragmentation)—— 网络层(IP)

定义:IP 协议将网络层数据包切割为更小的 IP 分片 / Fragment,以适应底层网络的 MTU(最大传输单元,如以太网 MTU=1500 字节)
触发条件:当数据包大小超过某段链路的 MTU 时,路由器或主机进行分片。
目的

  • 解决不同网络链路 MTU 不一致的问题(如从以太网到 PPPoE 链路)。
  • 分片后的数据包可独立传输,但重组由接收端完成。

分片示例
若 IP 层收到一个 4000 字节 的数据包(IP 头部 20 字节 + 数据 3980 字节),而链路 MTU=1500 字节,则分片为:

  1. 分片 1:20 字节头 + 1480 字节数据(总 1500 字节,标志 MF=1,偏移 = 0)
  2. 分片 2:20 字节头 + 1480 字节数据(MF=1,偏移 = 185)
  3. 分片 3:20 字节头 + 1020 字节数据(MF=0,偏移 = 370)

特点

  • 由网络层(IP)处理,对传输层和应用层透明。
  • 分片可能发生在传输路径中的任何路由器。
  • 重组仅在最终接收端进行,中间设备不重组。
  • 分片会降低网络效率(丢失任一分片需重传整个包)。

cpu的使用率和cpu的负载分别是什么,它们有什么关系

CPU 使用率

定义:CPU 在某一时间段内实际执行任务的时间占比(如 80% 表示 CPU 有 80% 时间在工作)。
核心意义:反映 CPU 的忙碌程度


CPU 负载(Load Average)

定义:系统在单位时间内,正在运行和等待 CPU 资源的平均任务数(如负载为 4 表示平均有 4 个任务需处理)。
核心意义:反映系统的任务队列压力,与 CPU 核心数相关(如 4 核 CPU 负载临界值约 4)。

为什么网络IO会被阻塞(多角度)

什么是reactor

Reactor(反应器模式) 是一种事件驱动的编程模型,核心目的是高效处理高并发 I/O 请求。它通过非阻塞 I/O 多路复用(如 epoll/select)监听多个事件源(如网络连接),当事件触发时自动分发到对应的处理程序(回调函数),实现单线程 / 少量线程管理大量连接

IO模型有哪些

模型数据准备阶段数据复制阶段同步 / 异步适用场景
阻塞 I/O阻塞阻塞同步简单客户端
非阻塞 I/O非阻塞(轮询)阻塞同步低并发 + 实时性要求
I/O 多路复用阻塞(多路等待)阻塞同步高并发服务(Nginx、Redis)
信号驱动 I/O非阻塞(信号通知)阻塞同步特殊设备监控
异步 I/O非阻塞非阻塞异步高性能服务器(需内核支持)

select、poll、epoll 的区别

特性

select

poll

epoll

底层数据结构

fd_set(位图数组)

pollfd(链表)

红黑树 + 就绪链表

最大描述符数量

默认 1024(可修改但效率下降)

无限制(由系统内存限制)

无限制(由系统内存限制)

事件触发模式

水平触发(LT)

水平触发(LT)

支持水平触发(LT)和边缘触发(ET)

内核 - 用户数据拷贝

每次调用需拷贝整个 fd_set

每次调用需拷贝整个 pollfd 数组

通过 mmap 共享内存,仅拷贝就绪事件

时间复杂度

O (n),遍历所有 fd

O (n),遍历所有 fd

O (1),仅处理就绪事件

CFS(linux)

CFS 是 Linux 内核的默认进程调度器,自 2.6.23 版本(2007 年)引入,用于管理普通进程(非实时进程)的 CPU 时间分配。其核心目标是公平性,即让所有进程按优先级和权重公平共享 CPU 资源,避免单个进程长时间独占 CPU。

核心机制
  1. 虚拟运行时间(vruntime)

    • 作用:跟踪每个进程的 “虚拟 CPU 使用时间”,公平性由 vruntime 决定。
    • 计算方式
      • 实际运行时间 × 权重因子(权重由进程的 nice 值决定)。
      • nice 值越小(优先级越高),权重越大,vruntime 增长越慢,进程更易被调度。
    • 调度规则:选择红黑树中 vruntime 最小的进程运行。
  2. 红黑树(Red-Black Tree)

    • 作用:高效管理所有可运行进程,按 vruntime 排序。
    • 优势:插入、删除、查找的时间复杂度为 O(log N),确保高并发下调度效率。
  3. 动态时间片

    • 目标延迟(sched_latency_ns):默认 24ms,保证所有进程在此周期内至少运行一次。
    • 最小粒度(sched_min_granularity_ns):默认 3ms,避免频繁上下文切换。
    • 时间片计算:根据进程数和权重动态调整(如 4 个进程时,每个分到 6ms)。
  4. 优先级与权重

    • nice 值范围:-20(最高优先级)到 +19(最低优先级)。
    • 权重表:内核通过 prio_to_weight 数组将 nice 值映射为权重值(如 nice=0 对应权重 1024)。

阻塞模式和非阻塞模式

  1. 阻塞模式

    • 适用简单场景(如单线程顺序处理),编程简单。
    • 缺点:高并发下效率低(线程因等待 I/O 被挂起)。
  2. 非阻塞模式

    • 必须配合 多路复用(select/epoll 或 轮询 使用,否则频繁检查会浪费 CPU。
    • 边缘触发(ET)模式必须使用非阻塞,否则可能因未读完 / 写完数据导致永久阻塞。
    • 优点:支持高并发,线程不会因 I/O 等待被阻塞。

 

 2. send 发送数据

场景阻塞模式非阻塞模式
发送缓冲区有空间将数据复制到内核缓冲区,返回实际写入的字节数(通常是全部数据)。同左。
发送缓冲区无空间线程挂起,直到缓冲区有足够空间。立即返回 -1,设置 errno=EAGAIN/EWOULDBLOCK;或返回已成功复制的部分字节数。
部分空间可用等待直到缓冲区剩余空间足够容纳全部数据(可能被中断)。立即复制尽可能多的数据,返回实际复制的字节数。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSTO(C#)Excel开发6:与窗体交互

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

Node.js与VUE安装

目录 Win下载安装 Mac下载安装 Win与Mac配置检查是否安装成功切换淘宝NPM库检查镜像配置是否生效设置 npm 全局环境目录(避免权限问题)WinMac VUE CLI安装安装验证打开vue面板 Vue脚手架npm init vuelatest、npm create vuelatestvue create、vue ui Win…

解决 MySQL 迁移到达梦报错 “无效的列名” 的问题

在数据库迁移的过程中,常常会遇到各种各样的问题。本文将聚焦于从源库 MySQL(大小写不敏感)迁移到目标库达梦(大小写敏感)时,出现的创建索引报错 “无效的列名” 这一问题,使用SQLark工具如何避…

C/C++都有哪些开源的Web框架?

CppCMS CppCMS是一个采用C语言开发的高性能Web框架,通过模版元编程方式实现了在编译期检查RESTful路由系统,支持传统的MVC模式和多种语言混合开发模式。 CppCMS最厉害的功能是WebSocket,10万连接在内存中长期保存占用的大小不超过600MB&…

大数据学习(59)-DataX执行机制

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…

USB数据采集卡 Labview采集卡 32路AD模拟量采集 DAQ卡

今天给大家介绍阿尔泰科技的一款多功能数据采集卡USB3150/1/2/5/6 。 该板卡提供 32RSE / NRSE 通道或 16 通道 DIFF 模 拟量输入;4 通道模拟量同步输出;16 路可编程 I/O;2 路计数器。 USB3150/1/2/5/6 的主要应用场合为:电子产品…

基于DeepSeek的智能数据分析和自动化处理系统:引领BI行业新变革

近期,一款基于DeepSeek API的智能数据分析和自动化处理系统横空出世,以其强大的功能和灵活的可扩展性,为BI行业带来了颠覆性的变革。 该系统支持多类型数据分析,包括文本 、指标和日志等。在文本分析方面,它能够提取关…

【CentOS】搭建Radius服务器

目录 背景简介:Radius是什么?Radius服务器验证原理搭建Radius服务器环境信息yum在线安装配置FreeRADIUS相关文件clients.conf文件users文件重启服务 验证 参考链接 背景 在项目中需要用到Radius服务器作为数据库代理用户的外部验证服务器,做…

【AI大模型智能应用】Deepseek生成测试用例

在软件开发过程中,测试用例的设计和编写是确保软件质量的关键。 然而,软件系统的复杂性不断增加,手动编写测试用例的工作量变得异常庞大,且容易出错。 DeepSeek基于人工智能和机器学习,它能够依据软件的需求和设计文…

如何在vscode中编译linux中的c++文件

方式一 在终端打开进行连接编译 指令含义:将 muduo_server.cpp 源文件编译成一个可执行文件 server,并且在链接过程中使用 muduo_net、muduo_base 库以及 pthread 库 方式二 在vscode中修改配置文件 按F1打开配置文件搜索栏,输入C/C 打开…

基于Flink SQL的实时指标多维分析模型

数据流程介绍 1.创建源表kafka接入消息队列数据,定义字段映射规则; 2.创建目标表es_sink配置Elasticsearch输出; 3.通过多级视图(tmp→tmp_dedup→tmp1/tmp2→tmp3→tmp_groupby)实现数据清洗、去重、状态计算&#x…

【vscode-01】vscode不同项目不同语言扩展插件隔离方案

vscode不同项目不同语言扩展插件隔离方案 1. 背景2. vscode 扩展插件隔离方案2.1 code-profile 配置文件2.2 配合extensions.json 1. 背景 最近打开vscode 发现越来越卡,这是一个轻量级代码编辑器,怎么会如此占用内存呢? 我使用了‘code --l…

《基于大数据的营养果蔬推荐系统的设计与实现》开题报告

目录 一、选题的理论意义现实意义及应用价值 (一)理论意义 (二)现实意义 1.用户价值提升 2.效率提升 3.经济效益提升 (三)应用价值 1.提升用户健康水平 2.优化购物体验 3.支持健康决策 4.促进农业…

《C#上位机开发从门外到门内》2-4:Modbus协议

文章目录 一、引言二、Modbus协议概述2.1 Modbus协议的起源与发展2.2 Modbus协议的基本特点2.3 应用领域 三、Modbus通信原理详解3.1 Modbus RTU原理3.1.1 数据帧结构3.1.2 数据传输与时序3.1.3 错误检测 3.2 Modbus TCP原理3.2.1 数据封装3.2.2 通信机制3.2.3 与RTU模式的区别…

观成科技:​加密C2框架Platypus流量分析

一、工具介绍 Platypus 是一款支持多会话的交互式反向 Shell 管理器。在实际的渗透测试中,为了解决 Netcat/Socat 等工具在文件传输、多会话管理方面的不足,该工具在多会话管理的基础上增加了在渗透测试中能更好发挥作用的功能(如:交互式 Sh…

WireShark自动抓包

背景 异常流量检测是当前保护网络空间安全的重要检测方法。 对流量的研究,首先需要在系统中进行抓包,并对包进行分析。 这里对WireShark自动抓包进行简要介绍。 操作步骤 1、选择“捕获”>“选项”。 2、在Input下,选择要抓包的网络接…

Android 自定义View之底部导航栏

文章目录 Android 自定义View之底部导航栏概述代码定义TabIndex定义Tab定义TabView定义NavigationBarFragmentSwitchHelper管理类使用 源码下载 Android 自定义View之底部导航栏 概述 封装一个通用的底部导航栏控件。 代码 定义TabIndex Retention(AnnotationRetention.SOU…

西门子S7-1200 PLC远程调试技术方案(巨控GRM532模块)

三步快速实现远程调试 硬件部署 准备西门子S7-1200 PLC、巨控GRM552YW-C模块及编程电脑。GRM552YW-C通过网口与PLC连接,支持4G/5G/Wi-Fi/有线网络接入,无需复杂布线。 软件配置 安装GVCOM3配置软件,注册模块(输入唯一序列号与密…

上下文学习思维链COTPrompt工程

一、上下文学习 上下文学习强调在学习过程中考虑问题所处的上下文环境。 1.1 上下文学习的分类 零样本(Zero-Shot)上下文学习单样本(One-Shot)上下文学习少样本(Few-Shot)上下文学习 1.2 示例选择方法 …

node.js-WebScoket心跳机制(服务器定时发送数据,检测连接状态,重连)

1.WebScoket心跳机制是? 基于上一篇文章,WebScoket在浏览器和服务器间完成一次握手,两者间创建持久性连接,并进行双向数据连接。node.js-node.js作为服务器,前端使用WebSocket(单个TCP连接上进行全双工通讯…