kswapd进程就是专司定期将页面换出的守护神,它使用的是内核的地址空间 kswapd的初始化 static int __init kswapd_init(void) {     printk("Starting kswapd\n");     swap_setup(); //根据物理内存大小设置设定全局量page_cluster,磁盘读道是个费时操作,每次读一个页面过于浪费,每次多读几个,这个量就要根据实际物理内存大小来确定     kernel_thread(ksw ...
linux对物理内存的管理是分3个层次,节点,管理区,页面。分配流程如下: 1.首先获得节点列表的头,循环搜索可以分配给用户要求大小的内存。分配成功则跳出循环,不成功则返回0。 2.找到分配节点,根据分配策略和大小找到合适的管理区分配内存。 3.从管理区空闲页面链表内划分合适的内存,分配给用户。 便于理解,对linux分配策略具体实现和部分内存数据结构做下补充: 1.分配策略具体实现:在节点数据结构中 typedef struct pglist_data {     zone_t    node_zones[MAX_NR ...
之前看过了内存管理的数据结构,下面通过越界访问来熟悉下这些数据结构。(之前一直没有让大家去下载内核源代码,因为我列的比较详细,接下来的东西,大家自己去http://www.kernelnewbies.org/下载内核源代码,然后结合起来看) 页式存储管理通过页面目录和页面表将线性地址转换成物理地址。如果在这个过程中遇到某种阻碍。这种阻碍的情况有很多,我们举个实际例子,我们通过系统调用mmap()将一个已打开文件印射到内存,然后又撤销,在虚存空间上留下了个空洞,程序又再次访问这个内存,从而就会导致失败。出错后,会产生一个页面出错异常。CPU就运行到了页面出错异常程序的do_page_fault ...
这里只列举几个比较麻烦的数据结构 struct list_head {     struct list_head *next, *prev; } //linux通用的双向链队列,下面多处用到,这里列出源代码 linux对内存再用页式管理,对于页,就有个数据结构page加以描述。在内核中有个全局量mem-map指向的是一个page的数组,整个数组描述了整个物理内存,大家注意32位地址线,内存大小是2的32次方。由于页大小是4k也就是2的12次方。每4K的页就有一个page。那么2的32次方共有2的20次方个页,则mem-map指向的数组大小就是2的20次方。 ...
linux内存寻址详细过程: 下面我们看这条语句call 0x0804837c 整个内存寻址分为2个阶段,段式和页式。处理器是intel i386系列.操作系统会先将虚地址经过段式映射后变成线性地址,再通过页式变成物理地址。从而获取内存上的数据或者是代码. 这里执行的是call语句,转移指令。首先会找到cs寄存器,intel i386是32位处理器,CS仍然是16位。高13位存贮的是段描述位置(注意不是地址,读到后面就知道了)。低3位中,倒数第3位是指使用GDT寄存器还是LDT(寄存器)。后2位表示权限。(在linux中只用了2种权限,最高级别的系统权限00和用户权限最低11)。该寄存器 ...
2008-05-02

intel80X86的实地址模式和保护模式

关键字: 操作系统
在微处理器的历史上,第一款微处理器芯片4004是由Intel推出的,那是一个4位的微处理器。在4004之后,intel推出了一款8位处理器8080,它有1个主累加器(寄存器A)和6个次累加器(寄存器B,C,D,E,H和L),几个次累加器可以配对(如组成BC, DE或HL)用来访问16位的内存地址,也就是说8080可访问到64K内的地址空间。另外,那时还没有段的概念,访问内存都要通过绝对地址,因此程序中的地址必须进行硬编码(给出具体地址),而且也难以重定位,这就不难理解为什么当时的软件大都是些可控性弱,结构简陋,数据处理量小的工控程序了。 几年后,intel开发出了16位的处理器8086,这个 ...
  • 09:51
  • 浏览 (106)
  • 评论 (0)
那时刚毕业什么都不懂,团队接了论坛的项目.本来7个月的项目由于种种原因被压缩成了1个月,不过好在数据库,页面都已设计完毕,需求也可以了,但编码和测试任务量还是很重,加上人手缺少就更加紧张了. 我和另外2个人36个小时(连续)弄完了30多张网页的HTML代码(因为3人都不熟练才搞了这么久),之后我又分了任务,论坛首页所有数据的加载.本来是个很简单的事情,项目经理弄来个框架,哪儿来的不知道,他自己也不会,所以框架没有培训过,大家照着他写的例子抄,跌跌撞撞的搞完了代码,之后就是改BUG.于是那个月的工作时间是400+小时(我们每月工作时间是170+)记忆中每天2点后睡觉,通宵有过4次,那个月没 ...
memorymyann
搜索本博客
最近加入圈子
存档
最新评论