当前位置: 首页 > 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开始分配的

http://www.lryc.cn/news/452441.html

相关文章:

  • stm32f103调试,程序与定时器同步设置
  • 《Python编程:从入门到实践》数据可视化
  • github/git密钥配置与使用
  • BiLSTM模型实现电力数据预测
  • VMware ESXi 6.7U3u macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025
  • 一个简单的SQL面试题
  • 网站服务器在不同操作系统上监听端口情况的方法
  • RabbitMQ篇(基本介绍)
  • 浅谈网络通信中的透传和非透传
  • 影视cms泛目录用什么程序?苹果cms二次开发泛目录插件
  • IP6537_C_30W20V--移动设备快充的得力助手,集成 14 种快充协议的降压 SoC
  • 【hot100-java】【寻找两个正序数组的中位数】
  • C++七种异常处理
  • 【C语言系统编程】【第三部分:网络编程】3.3 实践与案例分析
  • Unity3D播放GIF图片 插件播放
  • 基于STM32的远程工业控制系统架构设计:MQTT通信、React界面与FreeRTOS优化的综合应用
  • 墙绘艺术在线交易平台:SpringBoot技术详解
  • VMware中Ubuntu系统Docker正常运行但网络不通(已解决)
  • 【web安全】——文件包含漏洞
  • 游戏如何对抗改包
  • 12.梯度下降法的具体解析——举足轻重的模型优化算法
  • GPT对话知识库——C、C++,还有Java,他们之间有什么区别
  • 华为GaussDB数据库之Yukon安装与使用
  • Linux命令:用于显示 Linux 发行版信息的命令行工具lsb_release详解
  • sbb-classes 元素
  • (作业)第三期书生·浦语大模型实战营(十一卷王场)--书生入门岛通关第3关Git 基础知识
  • 12.数据结构和算法-栈和队列的定义和特点
  • 15分钟学 Python 第34天 :小项目-个人博客网站
  • 从零开始实现RPC框架---------项目介绍及环境准备
  • 论文阅读:PET/CT Cross-modal medical image fusion of lung tumors based on DCIF-GAN