Linux常見問題與分析

操作系統進行線程切換時進行的動作

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.pswp.cn/pingmian/72255.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72255.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72255.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTML塊級元素和內聯元素(簡單易懂)

在HTML中,元素可以分為塊級元素(Block-level elements)和內聯元素(Inline elements)。這兩類元素在頁面布局和樣式應用上有不同的特點和用途。 一、塊級元素(Block-level elements) 1. 定義 …

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…

快速集成1688商品API:10分鐘實現跨境選品數據自動化

要快速集成 1688 商品 API 以實現跨境選品數據自動化,可參考以下步驟: 注冊并申請 API 權限:注冊賬號創建應用并申請所需的 API 權限,如商品搜索、篩選、獲取詳情等相關權限。獲取 API Key 和 Secret:在應用管理頁面獲…

解決 MySQL 遷移到達夢報錯 “無效的列名” 的問題

在數據庫遷移的過程中,常常會遇到各種各樣的問題。本文將聚焦于從源庫 MySQL(大小寫不敏感)遷移到目標庫達夢(大小寫敏感)時,出現的創建索引報錯 “無效的列名” 這一問題,使用SQLark工具如何避…

工程化與框架系列(31)--前端依賴管理實踐

前端依賴管理實踐 📦 引言 前端依賴管理是現代Web開發中的重要環節。本文將深入探討前端依賴管理的最佳實踐,包括包管理工具、版本控制、依賴分析和優化等方面,幫助開發者更好地管理項目依賴。 依賴管理概述 前端依賴管理主要包括以下方面…

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

CppCMS CppCMS是一個采用C語言開發的高性能Web框架,通過模版元編程方式實現了在編譯期檢查RESTful路由系統,支持傳統的MVC模式和多種語言混合開發模式。 CppCMS最厲害的功能是WebSocket,10萬連接在內存中長期保存占用的大小不超過600MB&…

數據結構——環形數組

環形數組 start 指向第一個有效元素的索引,end 指向最后一個有效元素的下一個位置索引。 注意: start是閉區間,先左移后賦值,先賦值(null)后右移;end是開區間,先賦值再右移,先左移再賦值(null…

大數據學習(59)-DataX執行機制

&&大數據學習&& 🔥系列專欄: 👑哲學語錄: 承認自己的無知,乃是開啟智慧的大門 💖如果覺得博主的文章還不錯的話,請點贊👍收藏??留言📝支持一下博主哦&#x1f91…

云原生性能測試全解析:如何構建高效穩定的現代應用?

一、引言 隨著云計算技術的快速發展,云原生(Cloud Native)架構成為現代應用開發的主流模式。云原生應用通常采用微服務架構、容器化部署,并利用 Kubernetes(K8s)等編排工具進行管理。然而,云原…

golang的Map

Map集合 概述 Map 是一種無序的鍵值對的集合。 Map 最重要的一點是通過 key 來快速檢索數據,key 類似于索引,指向數據的值。 Map 是一種集合,所以我們可以像迭代數組和切片那樣迭代它。不過,Map 是無序的,遍歷 Map…

USB數據采集卡 Labview采集卡 32路AD模擬量采集 DAQ卡

今天給大家介紹阿爾泰科技的一款多功能數據采集卡USB3150/1/2/5/6 。 該板卡提供 32RSE / NRSE 通道或 16 通道 DIFF 模 擬量輸入;4 通道模擬量同步輸出;16 路可編程 I/O;2 路計數器。 USB3150/1/2/5/6 的主要應用場合為:電子產品…

K8s 1.27.1 實戰系列(十)PV PVC

一、核心概念與關系 ?1、PV(Persistent Volume)? PV 是集群中的持久化存儲資源,由管理員預先創建并配置,獨立于 Pod 生命周期。它抽象了底層存儲(如 NFS、云存儲等),定義存儲容量、訪問模式(如 ReadWriteOnce)、回收策略(Retain/Delete/Recycle)等屬性。例如,一…

基于DeepSeek的智能數據分析和自動化處理系統:引領BI行業新變革

近期,一款基于DeepSeek API的智能數據分析和自動化處理系統橫空出世,以其強大的功能和靈活的可擴展性,為BI行業帶來了顛覆性的變革。 該系統支持多類型數據分析,包括文本 、指標和日志等。在文本分析方面,它能夠提取關…

圖形學面試題總結

圖形學面試題總結 文章目錄 圖形學面試題總結Opengl 與 Vulkan1、OpenGL的渲染管線有哪些主要階段?分別做什么?2、OpenGL中的VAO、VBO和EBO分別是什么?為什么需要它們?3、細分著色器與幾何著色器是什么4、Vulkan與Opengl的區別是什…

Vue 系列之:路由

vue-router 組件 router-link 功能&#xff1a;用于導航&#xff0c;即渲染一個鏈接&#xff0c;當點擊時&#xff0c;導航到由 to 屬性指定的 URL。 示例&#xff1a;<router-link to"/home">Home</router-link> 它會渲染為一個 <a> 標簽&…

通過mybatis的攔截器對SQL進行打標

1、背景 在我們開發的過程中&#xff0c;一般需要編寫各種SQL語句&#xff0c;萬一生產環境出現了慢查詢&#xff0c;那么我們如何快速定位到底是程序中的那個SQL出現的問題呢&#xff1f; 2、解決方案 如果我們的數據訪問層使用的是mybatis的話&#xff0c;那么我們可以通過…

【Linux】centos配置可用的yum源

在 CentOS 系統中配置可用的 YUM 源&#xff08;倉庫&#xff09;是保持系統更新和軟件包管理的重要步驟。下面是一些步驟和示例&#xff0c;幫助你配置可用的 YUM 源&#xff1a; 1. 備份當前 YUM 倉庫配置 首先&#xff0c;備份你當前的 YUM 倉庫配置文件&#xff0c;以防萬…

【CentOS】搭建Radius服務器

目錄 背景簡介&#xff1a;Radius是什么&#xff1f;Radius服務器驗證原理搭建Radius服務器環境信息yum在線安裝配置FreeRADIUS相關文件clients.conf文件users文件重啟服務 驗證 參考鏈接 背景 在項目中需要用到Radius服務器作為數據庫代理用戶的外部驗證服務器&#xff0c;做…

機器學習_特征工程

一、核心知識點&#xff1a;特征工程的核心概念與流程 1. 特征工程的定義與重要性 定義&#xff1a;通過數據預處理、特征構造、特征選擇等方法&#xff0c;將原始數據轉化為更適合機器學習模型輸入的特征&#xff0c;提升模型性能。重要性&#xff1a; “數據和特征決定了機…