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

Linux:文件描述符介绍

文章目录速览

  • 1、虚拟地址空间
    • (1)What(什么是虚拟地址空间)
    • (2)Why(为什么需要虚拟地址空间)
  • 2、文件描述符
    • (1)What(什么是文件描述符)
    • (2)文件描述符表

1、虚拟地址空间

(1)What(什么是虚拟地址空间)

它是用于CPU和物理内存之间的一个中间层,每一个进程都拥有独立的虚拟地址空间,用于加载程序数据,首地址为0(起始的0地址是被虚拟出来的,不是物理内存的0地址)

32位的应用程序所对应的进程拥有的虚拟内存大小为2^32字节(4GB)

虚拟地址空间主要分为两个部分:内核区和用户区

  • 内核区为内核保留,不允许应用程序读写该区域的内容或直接调用内核代码定义的函数;所有进程的虚拟地址空间的内存区都会映射到同一块物理内存上(因为系统内存只有一个)
  • 用户区用于存储进程运行过程中的各种数据

用户区:虚拟地址空间的用户区范围是0-3G区间,内部分为

  • 保留区:位于虚拟地址空间最底部,未映射物理地址。任何对它的引用都是非法的,程序中的空指针(NULL)指向的就是这块内存地址
  • .txt区:文本区域,CPU的机器指令都存放在该区域,该区域是只读的,用于保护指令在运行期间不被修改
  • .data区:也称静态存储区,用于存放已经初始化且初始值不为0的静态变量和全局变量,可以对该区域进行读和写操作
  • .bss区:用于存放未被初始化的全局变量和静态变量,操作系统会将这些未被初始化的全局变量和静态变量初始化为0
  • 堆区:用于存放程序运行时动态分配的数据,堆中的数据是匿名性质的,只能通过指针间接访问
  • 内存映射区:用于加载磁盘文件,也用于加载运行时调用的动态库
  • 栈区:存储函数内部声明的非静态局部变量,函数参数,函数返回地址等信息,分配的内存是连续的,栈和堆地址是”方向相反“的方向生长的
  • 环境变量:存储和进行相关的信息,如进程工作路径、进程所有者
  • 命令行参数:存储进程执行时传递给进程的参数

(2)Why(为什么需要虚拟地址空间)

虚拟地址空间的作用很多,如隐藏真实的物理内存空间,防止恶意程序随意修改其他进程的内存数据;还能提高内存的使用效率,虚拟内存地址空间对应的内存空间不一定要连续,操作系统将虚拟地址映射到适当的物理内存上,这样,只要操作系统处理好虚拟地址到物理内存地址的映射,就可以保证不同的程序最终访问的内存地址位于不同的区域,彼此没有重叠,就可以达到内存地址空间隔离的效果。

2、文件描述符

(1)What(什么是文件描述符)

在Linux操作系统中,一切都被抽象成文件,并使用文件描述符来管理抽象文件。文件描述符的本质是一个非负整数,操作系统内部维护了一个和进行相对应的文件描述符表

int open(const char *strPth, int flags);

(2)文件描述符表

本质是非负整数和文件(包括硬件设备)的映射关系表,每一个进程都有一个文件描述符表,用于访问文件

文件最大数:每一个进程的文件描述符表打开的文件数量是有限制的(取决于操作系统的硬件配置),默认的数量是1024
默认分配的文件描述符:当进程被启动之后,内核PCB的文件描述符表中就已经分配了三个文件描述符,这三个文件描述符对应的都是当前启动这个进程的终端文件,它们分别是:标准输入(STDIN_FILENO,0)、标准输出(STDOUT_FILENO,1)、标准错误(STDERR_FILENO,2);故进程分配文件描述符是从3开始分配的

相关文章:

Linux:文件描述符介绍

文章目录速览 1、虚拟地址空间(1)What(什么是虚拟地址空间)(2)Why(为什么需要虚拟地址空间) 2、文件描述符(1)What(什么是文件描述符)(2)文件描述符表 1、虚拟地址空间 (1)What(什么是虚拟地址…...

stm32f103调试,程序与定时器同步设置

在调试定时器相关代码时,注意到定时器的中断位总是置1,怀疑代码有问题,经过增大定时器的中断时间,发现定时器与代码调试并不同步,这一点对于调试涉及定时器的代码是非常不利的,这里给出keil调试stm32使定时…...

《Python编程:从入门到实践》数据可视化

一、项目 数据可视化学习 二、库依赖 matplotlib,pygal, 三、生成数据 1.绘制简单的折线图 import matplotlib.pyplot as pltsquares [1, 4, 9, 16, 25] plt.plot(squares) plt.show() 模块pyplot包含很多用于生成图表的函数。 (1&am…...

github/git密钥配置与使用

零、前言 因为要在ubuntu上做点东西,发现git clone 的时候必须输账户密码,后来发现密码是token,但是token一大串太烦了,忙了一天发现可以通过配置 公钥 来 替代 http 的 部署方式。 一、生成 ssh 密钥对 我们先测试下能不能 连接…...

BiLSTM模型实现电力数据预测

基础模型见:A020-LSTM模型实现电力数据预测 1. 引言 时间序列预测在电力系统管理、负荷预测和能源优化等领域具有重要意义。传统的单向长短期记忆网络(LSTM)因其在处理时间序列数据中的优势,广泛应用于此类任务。然而&#xff0…...

VMware ESXi 6.7U3u macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025

VMware ESXi 6.7U3u macOS Unlocker & OEM BIOS 2.7 集成 Realtek 网卡驱动和 NVMe 驱动 (集成驱动版) UI fix 此版本解决的问题:VMware Host Client 无法将现有虚拟磁盘 (VMDK) 附加到虚拟机 请访问原文链接:https://sysin.org/blog/vmware-esxi-…...

一个简单的SQL面试题

最近面试遇到一个SQL题,复述如下: SQL面试题 现在有两张表,结构如下: 学生表(student) 学号sid姓名name1张三2李四3王五 成绩表(score) 序号id学号sid科目subject分数score11语…...

网站服务器在不同操作系统上监听端口情况的方法

网站服务器监听端口的情况通常需要通过一些命令行工具来进行检查,这样可以查看哪些进程在监听特定的端口,以及它们的状态。以下是在不同操作系统上可以使用的几种方法: Windows系统 1. 使用netstat命令 打开命令提示符(cmd),然后输…...

RabbitMQ篇(基本介绍)

目录 一、MQ 1. 什么是MQ 2. 为什么要用MQ【业务场景】 2.1. 异步 2.2. 应用解耦 2.3. 流量削峰 3. MQ的分类 (1)ActiveMQ (2)Kafka (3)RocketMQ (4)RabbitMQ 4. MQ 的选…...

浅谈网络通信中的透传和非透传

在网络通信中,透传(Transparent Transmission)和非透传(Non-Transparent Transmission)是两种不同的数据传输模式,尤其在使用ESP8266这类WiFi模块时,这两种模式有其特定的应用场景: …...

影视cms泛目录用什么程序?苹果cms二次开发泛目录插件

影视CMS泛目录一般使用的程序有很多种,(maccmscn)以下是其中几种常见的程序: WordPress:WordPress是一个非常流行的开源内容管理系统,可以通过安装一些插件来实现影视CMS泛目录功能。其中,一款常…...

IP6537_C_30W20V--移动设备快充的得力助手,集成 14 种快充协议的降压 SoC

IP6537_C_30W20V是一款集成同步开关的降压转换器、支 持 14 种输出快充协议、支持 Type-C 输出和 USB PD2.0/PD3.0(PPS)协议的 SoC,为车载充电器、 快充适配器、智能排插提供完整的解决方案。 IP6537_C_30W20V支持 USB Type-C 或者 USB A 输出, 5V 输出功…...

【hot100-java】【寻找两个正序数组的中位数】

二分查找篇 如果使用之前的两个指针分别遍历再合并的话就已经超过时间复杂度了。。 class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int mnums1.length;int nnums2.length;if(m>n){return findMedianSortedArrays(nums2,nums1);}int tot…...

C++七种异常处理

在C++中,使用异常机制可以提高程序的健壮性和可维护性。异常是在程序运行时发生的一个事件,它会打断正在执行的程序的正常流程。C++异常处理机制可以使程序在出现异常时,进行异常处理,而不是退出程序。 基本的异常处理 #include <iostream> using namespace std;int …...

【C语言系统编程】【第三部分:网络编程】3.3 实践与案例分析

3.3 实践与案例分析 在本章节中&#xff0c;我们将通过一些具体的案例来展示如何在实际项目中进行网络编程。这些案例不仅能帮助你理解各个概念&#xff0c;还能提升你的实践技能&#xff0c;并为你将来的项目提供参考。 3.3.1 案例分析&#xff1a;简单的聊天室 聊天室是网…...

Unity3D播放GIF图片 插件播放

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果图👉二、使用方法1.代码如下👉三、壁纸分享👉总结👉前言 unity播放gif图片,本身是不支持的,但是可以使用其他方法来实现,有一种使用System.Drawing来实现播放的,一种是让UI把图片导出成帧动画图片,…...

基于STM32的远程工业控制系统架构设计:MQTT通信、React界面与FreeRTOS优化的综合应用

一、项目概述 项目目标和用途 本项目旨在开发一个基于STM32单片机的远程工业控制系统。该系统能够通过互联网监控和控制工业设备&#xff0c;实时采集环境和设备状态数据&#xff0c;并将数据上传至云端以便进行数据分析和可视化。用户可以通过移动应用或网页界面远程操作设备…...

墙绘艺术在线交易平台:SpringBoot技术详解

4 系统设计 墙绘产品展示交易平台的设计方案比如功能框架的设计&#xff0c;比如数据库的设计的好坏也就决定了该系统在开发层面是否高效&#xff0c;以及在系统维护层面是否容易维护和升级&#xff0c;因为在系统实现阶段是需要考虑用户的所有需求&#xff0c;要是在设计阶段没…...

VMware中Ubuntu系统Docker正常运行但网络不通(已解决)

问题描述&#xff1a;在VMware中的Ubuntu系统下部署了Docker&#xff0c;当在docker容器中运行Eureka微服务时&#xff0c;发现Eureka启动正常&#xff0c;但无法通过网页访问该容器中Eureka。 解决办法如下&#xff1a; 1、创建桥接网络&#xff1a;test-net sudo docker n…...

【web安全】——文件包含漏洞

1. 文件包含基础 和SQL注入等攻击方式一样&#xff0c;文件包含漏洞也是一种注入型漏洞&#xff0c;其本质就是输入一段用户能够控制的脚本或者代码&#xff0c;并让服务端执行。 1.1. 文件包含简介 什么叫包含呢&#xff1f;以PHP为例&#xff0c;我们常常把可重复使用的函…...

游戏如何对抗改包

游戏改包是指通过逆向分析手段及修改工具&#xff0c;来篡改游戏包内正常的设定和规则的行为&#xff0c;游戏包被篡改后&#xff0c;会被植入/剔除模块进行重打包。 本期图文我们将通过实际案例分析游戏改包的原理&#xff0c;并分享游戏如何应对改包问题。 安卓平台常见的改…...

12.梯度下降法的具体解析——举足轻重的模型优化算法

引言 梯度下降法(Gradient Descent)是一种广泛应用于机器学习领域的基本优化算法&#xff0c;它通过迭代地调整模型参数&#xff0c;最小化损失函数以求得到模型最优解。 通过阅读本篇博客&#xff0c;你可以&#xff1a; 1.知晓梯度下降法的具体流程 2.掌握不同梯度下降法…...

GPT对话知识库——C、C++,还有Java,他们之间有什么区别

目录 1&#xff0c;问&#xff1a; 1&#xff0c;答&#xff1a; 1. 语言特性与设计理念 C 语言&#xff1a; C 语言&#xff1a; Java 语言&#xff1a; 2. 内存管理 3. 运行效率 C 和 C&#xff1a; Java&#xff1a; 4. 程序的执行方式 C 和 C&#xff1a; Jav…...

华为GaussDB数据库之Yukon安装与使用

一、Yukon简介 Yukon&#xff08;禹贡&#xff09;&#xff0c;基于openGauss、PostgreSQL、GaussDB数据库扩展地理空间数据的存储和管理能力&#xff0c;提供专业的GIS&#xff08;Geographic Information System&#xff09;功能&#xff0c;赋能传统关系型数据库。 Yukon 支…...

Linux命令:用于显示 Linux 发行版信息的命令行工具lsb_release详解

目录 一、概述 二、用法 1、基本用法 2、选项 3、获取帮助 三、示例 1. 显示所有信息 2. 只显示发行版名称 3. 只显示发行版版本号 4. 只显示发行版代号 5. 只显示发行版描述 6. 只显示值&#xff0c;不显示标签 四、使用场景 1、自动化脚本 2、诊断问题 3、环…...

sbb-classes 元素

sbb-classes 元素 在 JAIN SLEE&#xff08;服务级别事件扩展&#xff09;中&#xff0c;sbb-classes 元素用于定义服务边界组件&#xff08;SBB&#xff09;的类结构及其相关配置。这是每个 SBB 的必备部分&#xff0c;包含多个子元素&#xff0c;负责描述 SBB 的抽象类、接口…...

(作业)第三期书生·浦语大模型实战营(十一卷王场)--书生入门岛通关第3关Git 基础知识

任务编号 任务名称 任务描述 1 破冰活动 提交一份自我介绍。 2 实践项目 创建并提交一个项目。 破冰活动 提交一份自我介绍。 每位参与者提交一份自我介绍。 提交地址&#xff1a;https://github.com/InternLM/Tutorial 的 camp3 分支&#xff5e; 安装并设置git 克隆仓库并…...

12.数据结构和算法-栈和队列的定义和特点

栈和队列的定义和特点 栈的应用 队列的常见应用 栈的定义和特点 栈的相关概念 栈的示意图 栈与一般线性表有什么不同 队列的定义和特点 队列的相关概念...

15分钟学 Python 第34天 :小项目-个人博客网站

Day 34: 小项目-个人博客网站 1. 引言 随着互联网的普及&#xff0c;个人博客已成为分享知识、体验和见解的一个重要平台。在这一节中&#xff0c;我们将使用Python的Flask框架构建一个简单的个人博客网站。我们将通过实际的项目来学习如何搭建Web应用、处理用户输入以及管理…...

从零开始实现RPC框架---------项目介绍及环境准备

一&#xff0c;介绍 RPC&#xff08;Remote Procedure Call&#xff09;远程过程调⽤&#xff0c;是⼀种通过⽹络从远程计算机上请求服务&#xff0c;⽽不需要 了解底层⽹络通信细节。RPC可以使⽤多种⽹络协议进⾏通信&#xff0c; 如HTTP、TCP、UDP等&#xff0c; 并且在 TCP/…...

做网站毕业答辩问题/seopeix

Unity3D内部已经集成了对 GameCenter的支持 在 UnityEngine.SocialPlatforms命名空间下&#xff0c;基本已经满足目前需求 http://wiki.ceeger.com/manual:social_api?s[]socialplatforms C#: using UnityEngine; using System.Collections; using UnityEngine.SocialPlatf…...

建设科技网络网站的意义和目的/中国建设网官方网站

欢迎关注头条号&#xff1a;老顾聊技术精品原创技术分享&#xff0c;知识的组装工目录前言改造数据库主键自增竞争问题突发阻塞问题双buffer方案总结前言上一篇文章中介绍了分布式唯一ID你想了解一线大厂的分布式唯一ID生成方案吗&#xff1f; &#xff0c;留了一个悬念&#x…...

怎么做辅助发卡网站/google广告投放技巧

首先看一下采用MODEL FIRST的方式设计的实体模型对象关系图&#xff1a; 注意&#xff1a;EntityOne中有导航属性&#xff1a;EntityTwo 在如下代码中的几种情况进行新增操作&#xff0c;均会报错&#xff0c;新增都不会成功&#xff1a; 123456789101112131415161718192021222…...

安徽关键词seo/西安seo培训机构

Ruby中区分运行来源的方法 这篇文章主要介绍了Ruby中区分运行来源的方法,本文讲解的是类似Python中的if name main:效果,其实Ruby中也有类似语法,需要的朋友可以参考下 当我们在写模块的时候&#xff0c;或多或少需要直接运行这个文件也可以执行一些方法&#xff0c;但是这样对…...

做旅行网站/永久免费客服系统有哪些软件

float 内存如何存储的 类型 存储位数 总位数 偏移值(offset) 数符(S) 阶码(E) 尾数(M) 短实数(float) 1 8 23 32 127 长实数(double) 1 11 52 64 1023 N (10) 123.456, 换算成二进制表示&#xff1a; N (2) 1111011. 0111010010…...

合肥web网站建设报价/网站制作维护

转&#xff1a;http://linux.chinaitlab.com/command/829332.html一、Linux下的ping参数用途发送一个回送信号请求给网络主机。语法ping [ -d] [ -D ] [ -n ] [ -q ] [ -r] [ -v] [ \ -R ] [ -a addr_family ] [ -c Count ] [ -w timeout ] [ -f | -i \ Wait ] [ -l Preload ] …...