操作系统之Linux相关 内存管理、虚拟内存、设计特点、网络编程模型

news2024/11/16 16:00:59

Linux

文章目录

  • Linux
    • Linux 内存管理
    • Linux 虚拟内存
      • 概述
      • 虚拟地址与物理地址的映射
      • 内存分页
      • 分页的优势
      • 虚拟地址到物理地址的映射机制
      • 分级页表的缺陷
      • 段页式内存管理
    • Linux 信号
    • Linux 设计特点
    • I/O 多路复用
    • 五种 I/O 模型详解
    • Linux 网络编程模型
    • 软链接和硬链接对比
    • 中断和异常
    • 用户态和核心态
    • 并行和并发
    • 孤儿进程和僵尸进程

Linux 内存管理

image.png|300

  • 32位系统虚拟内存空间: 4GB(通常是被分隔成多个物理内存碎片),其中内核空间占用1GB(高地址),用户空间占用3GB(低地址)。
  • 用户空间布局:
    • 栈(Stack): 从高地址向低地址增长,存储函数参数、局部变量等。默认大小通常为8MB,但可自定义。
    • 文件映射: 包括动态库、共享内存,位于栈和堆之间。
    • 堆(Heap): 动态分配的内存区,从低地址向高地址增长。
    • 未初始化数据段(.bss): 存放未初始化的全局变量和静态变量。
    • 已初始化数据段(.data): 存放已初始化的全局变量和静态变量。
    • 程序代码段(.text): 存放可执行代码。
  • 分页机制: 每页大小通常为4KB。
  • 页表: 实现虚拟地址到物理地址的映射。
  • 段页式内存管理: 地址结构包括段号、段内页号和页内位移。

Linux 虚拟内存

概述

  • 虚拟内存空间:32位处理器的虚拟内存空间为4GB。
  • 进程视角:每个进程认为自己拥有4GB的连续虚拟地址空间,实际上只有部分映射到物理内存。
  • 物理内存与外部存储:物理内存中可能会存在碎片,部分内容会存储在外部磁盘上,需要进行数据的交换(页置换)。

虚拟地址与物理地址的映射

  • 两次映射
    1. 映射到虚拟内存空间。
    2. 映射到物理内存空间。
  • 责任分配
    • 硬件部分:存储管理单元 (MMU) 负责将虚拟地址转换为物理地址。
    • 软件部分:操作系统的内存管理模块负责维护和更新页表。

内存分页

  • 定义:将虚拟内存和物理内存分成固定大小的块(页),在Linux中每页大小一般为4KB。
  • 页表映射:通过页表将虚拟地址转换为物理地址。
  • 缺页异常处理
    • 当访问的虚拟地址没有对应的物理内存时,产生缺页异常。操作系统通过分配物理内存、更新页表来恢复进程运行。

分页的优势

  • 减少内存碎片:以页为单位进行内存管理,从而避免小内存块无法使用的问题。
  • 提高交换效率:在物理内存不足时,只交换最近未使用的页(页面置换算法,如LRU)。
  • 延迟加载:按需加载,程序在需要时才将虚拟内存中的指令和数据加载到物理内存,提高内存利用效率。

虚拟地址到物理地址的映射机制

  • 虚拟地址组成:虚拟地址包含页号和页内偏移。
  • 页表引用:页号用于索引页表,页表存储物理页的基地址,基地址与页内偏移组合,形成实际的物理地址。

分级页表的缺陷

  • 存储需求:32位地址空间(4GB),每页4KB,共有2^20个页。单级页表需要4MB的存储空间,多个进程下存储需求会极大增加。
  • 分级设计:分级页表(如二级页表)减少了单进程的页表存储需求。一级页表覆盖全部虚拟空间,二级页表按需创建。

段页式内存管理

  • 地址结构:虚拟地址由段号、页号和页内偏移组成。
  • 访问流程
    1. 根据段号访问段表,获取段基地址和段界限。
    2. 根据页号访问页表,获取物理页的基地址。
    3. 将物理页号与页内偏移组合,得到物理地址。
  • 成本与效率:虽然段页式内存管理增加了硬件和软件开销,但结合了分段和分页的优点,提高了内存利用率和系统的灵活性。

Linux 信号

  • 用途: 用于进程间通信或进程与系统内核通信,通知某个状态改变或系统异常。
  • 常用信号:
    • SIGHUP (1): 控制终端挂起或终止。
    • SIGPIPE (13): 写入到读端关闭的管道或socket时产生。
    • SIGURG (23): socket连接上收到紧急数据。

Linux 设计特点

  • 多任务(MultiTask): 支持并发和并行的多个任务执行。
  • 对称多处理(SMP): CPU共享内存和硬件资源,多个CPU地位相等。
  • 可执行文件链接格式(ELF): Linux中可执行文件的存储格式。
  • 宏内核(Monolithic Kernel): 所有系统服务运行在内核态,如文件系统、设备驱动、网络协议等。

I/O 多路复用

  • 概念: 在单个线程中处理多个I/O操作。
  • 实现方式:
    • select: 最古老的多路复用机制;使用位图表示文件描述符集合。在某些系统中,默认最多监视1024个文件描述符,但这个限制可以通过系统配置进行调整。
    • poll: 使用数组存储文件描述符,理论上没有数量限制。但在处理非常大量的文件描述符时,性能可能会因为数组遍历的成本而受影响。
    • epoll: 仅在Linux系统上可用的I/O多路复用机制。它使用一个事件表和红黑树来管理文件描述符,从而提高了处理大量文件描述符的效率。epoll通过事件通知的方式工作,只在文件描述符状态改变时通知应用程序,减少了不必要的轮询。
  • epoll 的优势:
    • 效率高: 直接返回就绪的文件描述符,减少了内核与用户空间的数据复制,提高了数据处理效率。
    • 可扩展性好: 支持的并发连接数量远大于select和poll,适用于高负载环境。
    • 实时性强: 事件驱动机制允许快速响应文件描述符状态的改变。

五种 I/O 模型详解

  • 阻塞式 I/O: 进程阻塞等待I/O完成。
  • 非阻塞式 I/O: 定期轮询检查I/O是否就绪。
  • I/O 多路复用: 使用select/poll/epoll监视多个文件描述符。
  • 信号驱动 I/O: 使用信号通知I/O就绪。
  • 异步 I/O: 内核负责整个I/O操作,完成后通知进程。

Linux 网络编程模型

  • 多进程服务器:
    • 父进程处理连接请求,子进程处理业务逻辑。
    • 需要处理进程间通信和僵尸进程问题。
  • I/O 复用服务器:
    • 使用select/poll/epoll同时处理多个连接。
    • 避免了进程创建和切换的开销。
  • 多线程服务器:
    • 资源共享更方便,切换开销更小。
    • 需要考虑线程安全和通信问题。

软链接和硬链接对比

  • 软链接:
    • 独立文件,包含目标文件路径。
    • 功能: 可链接文件或目录,甚至不存在的文件。
    • 行为: 原文件删除后,链接失效。
    • 使用方式: 可跨文件系统,使用ln -s命令创建。
  • 硬链接:
    • 共享inode,与原文件共享同一个inode。
    • 功能: 只能链接同一文件系统内的文件,不能链接目录。
    • 行为: 原文件删除不会影响硬链接文件的使用。
    • 使用方式: 使用ln命令创建,增加文件的链接计数。

中断和异常

  • 中断: 外部事件触发,如硬件设备中断、时钟中断。
  • 异常: 内部事件触发,如程序错误、地址越界、运算溢出。
  • 处理: 都会导致处理器暂停当前任务,执行相应的处理程序。

用户态和核心态

  • 用户态:
    • 特征: 进程只能访问受限资源,不能直接访问硬件。
  • 核心态:
    • 特征: 可以执行特权指令,访问所有资源。
  • 切换场景: 系统调用、异常和中断。

并行和并发

  • 并行: 同时执行多个任务,需要多个处理单元。
  • 并发: 在同一时间段内交替执行多个任务,可在单个处理单元上实现。

孤儿进程和僵尸进程

  • 孤儿进程:
    • 定义: 父进程先于子进程退出。
    • 处理: 被init进程(PID 1)收养。
  • 僵尸进程:
    • 定义: 子进程退出但父进程未回收其状态信息。
    • 影响: 仍占用系统资源(进程表项)。

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

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

相关文章

8G内存的Mac够用吗 ?苹果电脑内存满了怎么清理?可以有效地管理和优化你的Mac电脑内存,确保设备运行流畅

嘿,朋友们,让咱们聊聊怎么让我们的Mac小伙伴时刻保持巅峰状态吧!想象一下,每一次点击、每一次滑动,都如同初见时那般丝滑顺畅,是不是超级心动?为了这份持久的畅快体验,我强烈推荐大家…

提升教学效率,智慧校园班主任管理的下课堂功能助力

在智慧校园学工系统中,班主任管理课堂的关键在于利用系统提供的工具高效执行点名与秩序维护。班主任可以借助系统快速进行点名,自动匹配班级学生名单,简化整个流程。系统支持多样化的点名方式,包括传统手动点名、二维码签到&#…

6-2 图像卷积

互相关运算 严格来说,卷积层是个错误的叫法,因为它所表达的运算其实是互相关运算(cross-correlation),而不是卷积运算。 根据 6-1节中的描述,在卷积层中,输入张量和核张量通过互相关运算产生输…

On Stacking a Persistent Memory File System on Legacy File Systems——论文泛读

FAST 2023 Paper 分布式元数据论文阅读笔记整理 问题 非易失性主存储器(NVMM)具有与DRAM类似的低访问延迟和字节可寻址性,同时实现数据的非易失性。但存在以下缺点:(1)延迟高于DRAM,&#xff…

PVE虚拟机被锁定:VM is locked解决方法

🌟🌌 欢迎来到知识与创意的殿堂 — 远见阁小民的世界!🚀 🌟🧭 在这里,我们一起探索技术的奥秘,一起在知识的海洋中遨游。 🌟🧭 在这里,每个错误都…

前端面试宝典【设计模式】【1】

欢迎来到《前端面试宝典》,这里是你通往互联网大厂的专属通道,专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习,无论是一线大厂还是初创企业的面试,都能自信满满地展现你的实力。 核心特色: 独家实战案例:每一期专栏都将深入剖析真实的前端面试案例,从基础知…

某RED书旋转验证码标注工具

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 本文的验证码网址如下,使用base64解码获得 最近,某书的旋转验证码又更新了,在我之前的文章有讲过利用梯度幅度计算图像边缘…

Apache 的POI居然还能操作PPT,快来试试看

上次我们讲的用POI操作excel。Java操作Excel(Apache Poi详解) 那么java怎么操作ppt呢,其实poi也提供了操作ppt的sdk,现在我们来直接用Apache的poi操作ppt 首先我们要知道的是PPT有两种,一种格式是PPT,一种格式是PPTX,P…

Seata的使用

Seata Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。 术语 TC(Transaction Coordinator) -事务协调者(相当于服务端) 维护全局和分支事务的状态,驱动全局事务提交或回滚 TM(Transaction …

使用Python实现Excel文件首页截图工具

日常工作中,尤其是处理大量Excel文件时,可能需要对文件的首页进行截图保存,以便于后续的快速查看或报告编写。今天,我将分享一个用Python编写的Excel文件首页截图工具。这个工具将帮助我们自动化地对选定的Excel文件进行首页截图&…

Linux驱动入门—什么是驱动?体系结构,驱动的分类,开发驱动需要注意的问题

文章目录 什么是驱动?Linux系统体系结构用户空间与内核空间的隔离用户应用程序库函数用户空间守护进程命令行接口(CLI)图形用户界面(GUI) 内核空间内核的角色和职责内核空间与用户空间的区别内核的结构和组成内核空间的…

【Linux】网络架构探秘:网络层功能、IP协议详解及路由过程指南

文章目录 前言:1. 网络层是干什么的?2. IP协议2.1 理论铺垫2.2 IP协议的头格式2.3 网段划分(重点)2.3.1 分类划分法:2.3.2 子网掩码:2.3.3 为什么要经行子网划分? 2.4 特殊的IP地址2.5 IP地址的数量限制2.…

个人量化交易兴起!有什么好用的量化软件推荐?迅投QMT量化平台简介!

QMT是专门为机构、活跃投资者、高净值客户等专业投资者研发的智能量化交易终端,拥有高速行情、极速交易、策略交易、多维度风控等专业功能,满足专业投资者的特殊交易需求。覆盖业务范围广:沪深A股、港股通、两融、期权、期货。 适合用QMT的投资者&#x…

用Java手写jvm之模拟解释器执行指令码

写在前面 本文看下如何模拟解释器执行指令码。需要一些前置内容: 用Java手写jvm之系列 中的前4篇文章,当然如果你已经了解了这部分内容,也可以不看。 1:正文 既然是模拟解释器,我们肯定要先来定义一个解释器类了&am…

一个灵活、可扩展的开源问答平台,可用于社区论坛、帮助中心、知识管理等多种场景

大家好,今天给大家分享的是一个开源的问答平台软件Apache Incubator-Answer,由 SegmentFault 思否团队于 2022 年 10 月 24 日正式开源,并于同年入选 Apache 软件基金会孵化器。 项目介绍 Apache Incubator-Answer旨在为任何规模的团队提供一…

【C语言版】数据结构教程(一)绪论(上)

【内容简介】本文整理数据结构(C语言版)相关内容的复习笔记,供各位朋友借鉴学习。本章内容更偏于记忆和理解,请读者们耐心阅读。 数据结构教程 绪论(上) 本节学习目标 1.1 基本概念 1.2 抽象数据类型的表示…

苹果电脑怎么录制屏幕?3招教你轻松录制,高效实用

随着数字化时代的快速发展,屏幕录制已经成为我们日常工作和生活中不可或缺的一部分。它不仅是展示产品、教授知识、分享经验的重要工具,更是我们展现个性和创造力的新舞台。在苹果电脑上,屏幕录制功能的应用更是将这一体验推向了新的高度。 …

优思学院|不良产品留到客户产线上了,8D报告要如何写?

8D问题解决法是一个经常用作公司内部改善以及应付客户投诉的关键方法,不过,在改善的过程中却有一些误区,如果没有注意,那么这份8D报告将会变得徒劳无功。这里有一个这样的案例: 一个经验丰富的工程师把客户图纸看错了&…

【面向PM考试】挣值分析的计算场景介绍

前言 PM考试目前还是挺火热的,有些人是因为行业所需,有些人是因为自身学习,总而言之,需要经过系统的学习,才能胜任当下的工作。 关于挣值分析,包括一些基础概念,博主有一篇文章已详细介绍&…

基于ip/域名/端口的server配置、nodej项目、部署nfs服务器

回顾复习 jdk环境 tomcat服务器需要jdk环境 版本对应 tomcat>jdk17 tomcat9>jdk1.8 tomvat10>jdk17 1、配置系统变量 JAVA_HOME sed -i $aexport JAVA_HOME/usr/local/jdk22/ /etc/profile sed -i $aexport PATH$JAVA_HOME/bin:$PATH /etc/profile sour…