尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Linux---进程概念--环境变量和地址空间
内容1.理解环境变量熟悉常见环境变量及其指令getenv/setenv函数环境变量部分以理解为主2.理解C内存空间分配规律了解进程内存映像和应用程序区别认识地址空间3.了解用户态和硬件交互方法一. 环境变量用来指定系统操作运行环境的参数具有全局特性程序执行更加方便例如 编写代码时链接静态库不需要我们链接自动连接成功就是环境变量帮忙查找1.基本概念定义环境变量是操作系统或用户设置的键值对用于存储系统或程序的配置信息作用影响程序行为如PATH决定可执⾏⽂件的搜索路径传递配置参数如LANG设置语⾔环境特点全局性可被所有子进程继承动态性运行时可通过代码修改示例代码块把三个可能的路径全部寻找想要的命令2.常见环境变量PATH指定命令的搜索路径(临时添加在关闭对话框之后会失效添加之后运行时直接写文件名不需要加./HOME指定用户的主工作目录登录linux默认目录方便用于以home来寻找路径SHELL一般是/bin/bashshell是包裹在Linux内核外的一层命令解释器例如输入lsshell读到字符串翻译后调用给内核运算完毕再翻译给你看查看当s前shell分类shell路径特点bash/bin/bashLinux默认shell功能强大sh/bin/sh基础shellzsh/bin/zshmacOS默认dash/bin/dash轻量级shellfish/usr/bin/fish用户友好开箱即用3.相关命令var为任意环境变量查看环境变量命令说明示例printenv打印所有环境变量printenvecho $VAR打印指定变量echo $PATHecho $HOMEenv显示环境变量并运行命令env | grep USERset显示所有变量普通变量函数setdaclare显示变量和函数$declare显示所有变量$declare -x只显示环境变量$declare -f只显示函数临时设置/修改变量命令样式说明示例export VARvalue设置环境变量当前shell及子进程export MY_VARhellounset VAR删除环境变量unset MY_VAR删除MY_VAR这个变量VARvalue command临时为命令设置变量LANGC ls临时将语言环境设置为C然后执行ls命令持久化环境变量用户级写入~/.bashrc或~/.bash_profile系统级写入/etc/environment 或 /etc/profile 需要root权限4.测试PATH创建hello.c文件编辑文件并且加入环境变量命令验证是否成功对比执行体会添加为临时路径后运行不需要加./的区别shell脚本快速编写文件的命令cat通过EOF打印写入文件hello.c为什么有些指令可以直接执行直接执行的命令例如ls他们的路径已经包含在PATH环境变量中可以通过which ls查看具体路径自定义路径需要通过绝对路径和相对指令执行无需路径的执行方式方法适用场景持久性加入PSTH自定义程序当前会话有效永久生效要写入bashrc复制到标准目录需全局可用程序永久生效创建符号链接避免复制文件永久生效设置别名临时或频繁使用的命令临时永久需要写入bashrcsource执行脚本文件临时生效shell需要参数传递的脚本临时永久需要写入bashrc5.环境变量组织方式每个程序有自己的环境表是一个字符串数组每个指针指向一个以\0结尾的KEYVALUE格式字符串6.通过代码获取环境变量练习for循环打印所有env变量验证字符串数组7.通过系统调用操作环境变量Linux中的环境变量的操作主要通过以下系统调用和库函数实现函数调用作用示例getenv获取环境变量库函数getenvHOMEsetenv设置环境变量库函数setenvMY_VAR,123,1unsetenv删除环境变量库函数unsetenvMY_VARputenv直接修改环境变量库函数putenvMY_VAR1233execle指定环境变量启动新程序系统调用execle/bin/lsls,NULL,envp注意setenv和unsetenv是库函数非系统调用但底层依赖系统调用管理内存8.环境变量的全局属性与继承1.父进程环境变量自动复制到子进程2.子进程通过exec函数可以覆盖环境变量二. 程序地址空间研究背景kemel 2.6.32 32位平台在linux中每一个进程都有独立的4GB虚拟地址空间32位系统所有进程看到的虚拟地址都是从0开始排布的可能不同进程的同一个变量的虚拟地址空间相同但是不同的地方进行映射到内存的物理地址是不一样的保证进程独立性1.布局在32位系统中虚拟地址空间范围为**0x00000000到0xFFFFFFFF**共4GB分为用户空间和内核空间•用户空间0-3GB低地址段进程独享存放代码、堆、栈等。•内核空间3G-4GB高地址段所有进程共享存放内核代码和数据。2.用户空间详细分区本人c学习一中举例介绍3.用户态与内核态以及空间地址隔离了解即可3.1用户态普通应⽤程序运⾏所处状态我们编写的C程序、ls、cat等命令都运⾏在⽤⼾态。权限受限只能访问当前进程的⽤⼾空间虚拟地址3.2内核态内核代码运行的状态拥有cpu全部硬件权限可以完整访问虚拟地址也可以访问物理内存3.3系统调用用户态内核态切换用户态需要执行高权限操作时必须发起系统调用陷入内核态完成但是用户态切换内核态不一定中断⽤⼾态进⼊内核态来源分为外部硬件中断、CPU同步异常、专⽤快速系统调⽤指令4.关键数据结构了解即可内存是怎么在PCB中描述的task_struct内存描述符了解理解即可mm与struct5.地址空间管理机制了解即可了解此机制目的在于理解操作系统的能力——多任务并行 和 程序动态加载在Linux中每个进程的地址空间由task_struct与mm_struct共同描述task_struct进程描述符包含mm字段指向地址空间。mm_struct内存描述符记录代码区、数据区、堆、栈及⻚表指针。页表负责将虚拟地址转换为物理地址默认每页大小4KBfork()快速创建通过COW实现“读时共享写时复制”execve()彻底替换抛弃旧地址空间加载新程序段mm_struct⻚表进程地址空间的“⻣架”和“地图”CR3MMU硬件⽀持地址转换的核⼼核⼼fork是“共享族谱抄家产但不动”exec是“改头换⾯重新投胎”6.内核进程调度队列了解即可不详细阐述什么是调度器1.时间复杂度O1无论进程数量多少调度操作耗时恒定2.交互性优先保证GUI和前台任务的快速响应3.公平性避免进程饥饿即调度器通过 多级队列 管理进程
RELATED

相关推荐

SQL必知必会跟练 3-5

SQL必知必会跟练 3-5

本文是个人学习笔记,学习素材参考《SQL必知必会(第5版)》,仅用于个人学习记录,非商用。样例数据、练习思路来自该书。三.排序检索数据3.1排序数据可使用ORDER BY子句进行排序,默认升序,先数字后…

📅 2026/11/6 5:13:30
拆解MGM-Omni-TTS-2B-0927的语音Token机制:6563个token、25Hz帧率与4并行生成的实现原理

拆解MGM-Omni-TTS-2B-0927的语音Token机制:6563个token、25Hz帧率与4并行生成的实现原理

人工智能大模型语音音频多模态 【免费下载链接】MGM-Omni-TTS-2B-0927 项目地址: https://ai.gitcode.com/hf_mirrors/wcy1122/MGM-Omni-TTS-2B-0927 点击查看 免费下载 MGM-Omni-TTS-2B-0927 是开源全模态大模型 MGM-Omni 的语音生成(TTS)组…

📅 2026/11/6 5:08:30
深入理解Scala可变Map:动态构建场景下的性能与设计权衡

深入理解Scala可变Map:动态构建场景下的性能与设计权衡

上一篇我们聊了不可变Map——它O(1)的查找、它的函数式操作,在大数据开发里无处不在。但有个问题:如果你要在一个循环里不断往Map里加key-value对,用不可变Map就会很别扭。这时候你需要的就是可变Map。很多人学Scala的时候,记住了…

📅 2026/11/6 5:08:30
MORE NEWS

更多资讯

📰

Claude Code终端卡顿根因与Code2AI优化实战

1. 问题不是“卡”,而是终端交互链路的多层阻塞我第一次在 Ubuntu 20.04 上启动claude code cli,输入claude welcome后光标停住、键盘无响应、CtrlC 失效——这不是“卡顿”两个字能概括的现象。它更像一条本该秒级完成的指令流水线,在某个环…

📰

Jev不是AI模型:边缘日志诊断工具的可解释性实践

1. Jev不是AI模型,而是被误读的开源工具链代号 “Jev是什么AI模型?”——这个问题本身就是一个典型的语义陷阱。过去两周,我在三个技术社区看到超过200条类似提问,点开后发现提问者几乎都默认“Jev”是一个新发布的、类似GPT或Cl…

📰

C++ AI大模型会话管理:SessionManager设计与实现

1. 项目概述:为什么C里需要一个独立的SessionManager来对接AI大模型?你有没有遇到过这样的情况:在Android App里集成一个本地运行的GGUF格式大模型,用的是ollama或llama.cpp的C后端,结果用户连续发了三条消息&#xff…

📰

GitHub热榜精选:五款易上手的效率工具与实操避坑指南

每周翻 GitHub Trending,差不多已经成了我的固定动作。9月16日这一期的榜单给我的感觉特别明显:AI 应用还在霸榜,但真正涨得猛的,反而是一批“看起来不性感”的本地效率工具——生活管理、画质替换、内存清理、论文转代码&#xf…

📰

FX系列PLC编程口通信协议解析与Qt串口助手实战

简介:本资源是面向工业自动化初学者与QT嵌入式开发者的三菱FX3U系列PLC编程口通信实践项目,聚焦上位机与PLC的串行通信实现,解决QT环境下FINS协议解析、串口参数配置、寄存器读写及基础错误处理等核心问题。压缩包共7个文件,含2个…

📰

云端高性能计算在气象预报中的创新应用

1. 项目背景与行业意义去年此时,全球气象计算领域迎来里程碑事件——某国际知名气象机构正式启用其新一代云端高性能计算平台。作为气象预报行业的标杆项目,这一系统在过去365天里持续为全球用户提供着高精度气象数据服务。在气象预报这个对算力需求近乎…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬