本站已运行 14年356天12小时0分8秒

攻城狮论坛

作者: 合肥清默
查看: 5377|回复: 52

主题标签Tag

more +今日重磅推荐Recommend No.1

所有IT类厂商认证考试题库下载所有IT类厂商认证考试题库下载

more +随机图赏Gallery

【新盟教育】2023最新华为HCIA全套视频合集【网工基础全覆盖】---国sir公开课合集【新盟教育】2023最新华为HCIA全套视频合集【网工基础全覆盖】---国sir公开课合集
【新盟教育】网工小白必看的!2023最新版华为认证HCIA Datacom零基础全套实战课【新盟教育】网工小白必看的!2023最新版华为认证HCIA Datacom零基础全套实战课
原创_超融合自动化运维工具cvTools原创_超融合自动化运维工具cvTools
重量级~~30多套JAVA就业班全套 视频教程(请尽快下载,链接失效后不补)重量级~~30多套JAVA就业班全套 视频教程(请尽快下载,链接失效后不补)
链接已失效【超过几百G】EVE 国内和国外镜像 全有了 百度群分享链接已失效【超过几百G】EVE 国内和国外镜像 全有了 百度群分享
某linux大佬,积累多年的电子书(约300本)某linux大佬,积累多年的电子书(约300本)
乾颐堂现任明教教主Python完整版乾颐堂现任明教教主Python完整版
乾颐堂 教主技术进化论 2018-2019年 最新31-50期合集视频(各种最新技术杂谈视频)乾颐堂 教主技术进化论 2018-2019年 最新31-50期合集视频(各种最新技术杂谈视频)
Python学习视频 0起点视频 入门到项目实战篇 Python3.5.2视频教程 共847集 能学102天Python学习视频 0起点视频 入门到项目实战篇 Python3.5.2视频教程 共847集 能学102天
约21套Python视频合集 核心基础视频教程(共310G,已压缩)约21套Python视频合集 核心基础视频教程(共310G,已压缩)
最新20180811录制 IT爱好者-清风羽毛 - 网络安全IPSec VPN实验指南视频教程最新20180811录制 IT爱好者-清风羽毛 - 网络安全IPSec VPN实验指南视频教程
最新20180807录制EVE开机自启动虚拟路由器并桥接物理网卡充当思科路由器最新20180807录制EVE开机自启动虚拟路由器并桥接物理网卡充当思科路由器

[学习笔记] Linux的进程与内存管理

  [复制链接]
查看: 5377|回复: 52
开通VIP 免金币+免回帖+批量下载+无广告
学习这么linux这么长时间了,感觉还是没有深入进去了,今天重新看了一遍linux内存管理机制,将这些零碎的笔记写下来,以后也方便记忆,感觉现在真的是很喜欢linux,嘿嘿~


Linux内存管理的基础知识



内存管理程序提供以下一些功能



1:大地址空间,用户程序使用的内存数量可以超过物理上实际所有的内存数量



2:内存保护,进程的内存是私有的,不能被其他的进程所读取和修改,而且内存管理程序可以防止进程覆盖代码和只读数据



3:内存映射,可以把一个文件映射到虚拟内存区域,并把该文件当作内存来访问



4;对物理内存的公平访问,内存管理程序确保所有的进程都能公平的访问计算机的内存资源,这样可以确保理想的系统性能



5:共享虚拟内存,内存管理程序允许共享他们的一部分


存储空间:

在32为存储系统中,存储空间的地址范围从0*00000000到0*xFFFFFFFF。共4G存储范围



2:内存空间:系统的内存空间特指上面的RAM内存空间



3:内存页:Linux是以页为单位来管理物理内存的,一页大小一般等于4096B。也页容量越大,系统中可能存在的内存碎片越多





进程内存管理



对于任何一个普通文件来讲,都会涉及5种不同的数据段,即代码段,数据段,BBS段,堆和栈



1:代码段,代码段用来存放可执行文件的操作指令,也就是说它是可执行程序在内存中的映像。代码段需要防止在运行时被非法修改,所以只能运行读取操作,不允许写入操作



2:数据段;数据段用来存放可执行文件中已经初始化的全局变量,换句话说就是存放程序的静态分配的变量和全局变量



3:BBS段,BBS段包含了程序中未初始化的全局变量,在内存中BBS全部置零



4:堆(heap)堆用于存放进程中运行中被动态分配的内存段,它的大小并不固定,可以扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态的添加到堆上,当利用free函数释放内存时,被释放的内存从堆中删除



5:栈,栈是用户存放程序临时创建的局部变量。由于栈有先进先出的特点,所以特别方便用来保存/恢复调用现场
进程内存的分配与释放
创建进程fork(),程序载入execve(),映射文件mmap(),动态内存分配malloc()等进程相关操作都需要分配内存给进程。不过这时进程申请和获得的还不是实际的内存,而是虚拟内存。进程所能直接操作的地址读为虚拟地址,当进程没有获得物理内存时,从内核获得的仅仅是虚拟的内存区域,而不是实际的物理地址,进程没有获得物理内存,获得仅仅是对一个新的线性地址的使用权。实际的物理内存只有当进程真的去访问新获取的虚拟地址时,才会由“请求页机制”产生缺页中断,从而进入分配实际页面的例程。
虚拟空间的管理
内核空间和用户空间
在linux系统中,内核在最高级执行,也称为“系统态”,在这一级可以执行任何操作。而在应用程序则执行在最低级,即所谓的“用户态”。在这一级处理器禁止对硬件的直接访问和对内存的未授权访问。模块是在所谓的“内核空间”中运行的,而应用程序则是在“用户空间运行的”。他们分别应用不同的内存映射,也就是程序代码使用不同的“地址空间”。
模块的作用就是扩展内核的功能,是运行在内核空间的模块化代码。模块的某些函数作为系统调用执行,而某些函数则负责处理中断。各个模块被分别编译并连接成一组目标文件,这些文件能被载入正在运行的内核,或从正在运行的内核中卸载。模块采用的是另一种途径,内核提供一个插槽,它就像一个插件,在需要时,插入内核中使用,不需要从内核中拔出。

核模块与应用程序存在这区别。应用程序从头到尾完成一个任务,而模块则是为以后处理某些请求而注册自己,完成这个任务后,它的主函数就立即中止了。
CCNA考试 官方正规报名 仅需1500元
回复 论坛版权

举报

Firedog [Lv8 技术精悍] 发表于 2013-10-9 14:33:41 | 显示全部楼层
向楼主学习
回复 支持 反对

举报

Sanitarium [Lv8 技术精悍] 发表于 2013-10-10 09:37:41 | 显示全部楼层
我是个凑数的。。。
回复 支持 反对

举报

legned [VIP@钻石] 发表于 2013-10-10 14:42:10 | 显示全部楼层
真是 收益 匪浅
回复 支持 反对

举报

dlong008 [Lv8 技术精悍] 发表于 2013-10-17 13:52:02 | 显示全部楼层
我是来刷分的,嘿嘿
回复 支持 反对

举报

郎漫 [Lv8 技术精悍] 发表于 2013-11-6 18:28:37 | 显示全部楼层
有竞争才有进步嘛
回复 支持 反对

举报

gggggs [Lv8 技术精悍] 发表于 2013-11-8 11:15:12 | 显示全部楼层
回复 支持 反对

举报

海皇CHICBOY [Lv8 技术精悍] 发表于 2013-11-11 12:58:05 | 显示全部楼层
学习了,不错,讲的太有道理了
回复 支持 反对

举报

fm830612 [Lv8 技术精悍] 发表于 2013-11-11 18:11:45 | 显示全部楼层
真是 收益 匪浅
回复 支持 反对

举报

mjf1125 [Lv8 技术精悍] 发表于 2013-11-11 18:22:21 | 显示全部楼层
我是来刷分的,嘿嘿
回复 支持 反对

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|无图浏览|手机版|网站地图|攻城狮论坛

GMT+8, 2025-7-7 11:56 , Processed in 0.110528 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.

Designed by ARTERY.cn