广州网站推广多少钱,百度蜘蛛开发网站,网站数据搬家,信息流广告文案文章目录速览 1、虚拟地址空间(1)What#xff08;什么是虚拟地址空间#xff09;(2)Why#xff08;为什么需要虚拟地址空间#xff09; 2、文件描述符(1)What#xff08;什么是文件描述符#xff09;(2)文件描述符表 1、虚拟地址空间
(1)What#xff08;什么是虚拟地址… 文章目录速览 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_FILENO0、标准输出STDOUT_FILENO1、标准错误STDERR_FILENO2故进程分配文件描述符是从3开始分配的