阿鑫来了  

环境变量:  保存运行环境参数的变量,  使程序运行环境配置更加灵活,  以及可以通过环境变量实现进程间的小量通信(父子进程的传递)

  操作命令:  env-查看环境变量,  set-查看指定变量,  export-设置环境变量,  unset-删除环境变量

典型环境变量:  程序的默认搜索路径---在命令行终端输入命令名称可以直接执行对应名称的命令程序,实际上是因为shell捕捉到输入的命令名称之后,  然后去PATH环境变量指定的路径下去找这个程序,  找到了就运行,  找不到就报命令没有找到

           PATH=$PATH:./          将当前的目录加入到./中

环境变量接口:  

char *getenv(const char *name)---通过名称获取值

 

程序地址空间:  

   实际在进程中,  访问地址(变量地址)实际上是一个假地址,  称为虚拟地址.

   我们所说的程序地址空间实际上叫做进程的虚拟地址空间,  虚拟地址空间实际上是系统给进程描述的一个假的地址空间,  是一个mm_struct结构体,  并且每个进程都有自己独立的虚拟地址,  也就是有自己的mm_struct内存描述.

   系统会为每一个进程都描述一个假的地址空间,  进程访问的都是虚拟地址,  访问内存数据的时候,  先将虚拟地址转换为物理地址然后访问

    系统为每一个进程都描述了一个完整的,  连续的,  线性的虚拟地址空间,  实际物理内存用的时候再给进程分配,  这样的话,对于每一个进程自己的感觉,  看起来都是一块完整的,  连续的内存可以使用.

    给每个进程虚拟一个地址空间,  让进程访问完整连续的地址,  但这些虚拟地址在使用的时候通过页表映射一块物理内存地址,  进行访问物理内存.  通过映射的这种方式,  实现了数据在物理内存上的离散式存储,  提高内存的利用率.

 虚拟地址如何通过页表获取到物理地址的?

内存管理房方式:

    分段式内存管理:  将地址空间分为多段(代码段,  数据段......),  便于编译器进行地址管理

                                分段式虚拟地址组成:  段号+段内的地址偏移量;  在系统中有一个段表:  一个个段表项(段号,  物理内存起始地址)

 

 

    分页式内存管理:  将地址空间分为多个小块(页),  提高内存利用率,  

                                分页式虚拟地址组成:  页号+页内偏移; 在系统中有一个页表(页号,  物理内存块起始地址,权限控制,缺页中断位) 

 

 

    段页式内存管理:  将虚拟地址空间进行分段,  在每个分段内进行分页式管理,  集合了分段分页的优点进行内存管理.

posted on 2021-05-06 16:30  阿鑫来了  阅读(207)  评论(0)    收藏  举报