nachos 内存管理和多进程实现
来源:互联网 发布:我是山姆 知乎 编辑:程序博客网 时间:2024/04/29 17:04
1.首先利用位图来管理内存
mBitmap = new BitMap(NumPhysPages);
2.创建用户空间时,首先从位图中找到一个空闲页,如果没有空间为,置为0,并标识valid = FALSE
3.修改读入内存的代码,每次只读一个字节
mBitmap = new BitMap(NumPhysPages);
2.创建用户空间时,首先从位图中找到一个空闲页,如果没有空间为,置为0,并标识valid = FALSE
pageTable = new TranslationEntry[numPages]; for (i = 0; i < numPages; i++) {pageTable[i].virtualPage = i;// for now, virtual page # = phys page #int ppn = machine->mBitmap->Find();//查找一个空闲块if(ppn != -1) //如果有空闲块{pageTable[i].physicalPage = ppn;pageTable[i].valid = TRUE;}else //如果没有空闲块,无法将该页放入内存{pageTable[i].physicalPage = 0;pageTable[i].valid = FALSE;}pageTable[i].use = FALSE;pageTable[i].dirty = FALSE;pageTable[i].readOnly = FALSE; // if the code segment was entirely on // a separate page, we could set its // pages to be read-only }
3.修改读入内存的代码,每次只读一个字节
if (noffH.code.size > 0) { DEBUG('a', "Initializing code segment, at 0x%x, size %d\n", noffH.code.virtualAddr, noffH.code.size);for(int i = 0;i<noffH.code.size;i++){vAddr = noffH.code.virtualAddr + i;vpn = vAddr/PageSize;//虚拟页号offset = vAddr%PageSize;//偏移量if(pageTable[vpn].valid != FALSE){ ppn = pageTable[vpn].physicalPage; //物理块号pAddr = ppn*PageSize + offset; //物理地址executable->ReadAt(&(machine->mainMemeory[pAddr],1,noffH.code.inFileAddr+i));}} } if (noffH.initData.size > 0) {for(int i = 0;i<noffH.initData.size;i++){vAddr = noffH.initData.virtualAddr + i;vpn = vAddr/PageSize;//虚拟页号offset = vAddr%PageSize;//偏移量if(pageTable[vpn].valid != FALSE){ ppn = pageTable[vpn].physicalPage;//物理块号pAddr = ppn*PageSize + offset;//物理地址executable->ReadAt(&(machine->mainMemeory[pAddr],1,noffH.initData.inFileAddr+i));}} }
- nachos 内存管理和多进程实现
- Nachos内存管理实现
- nachos 进程管理,跟踪main.cc 过程分析
- Nachos线程管理
- Windows CE 进程、线程和内存管理
- Windows CE 进程、线程和内存管理
- Windows CE 进程、线程和内存管理
- winCE进程、线程和内存管理
- Linux内核设计的艺术-用户进程与内存管理、缓冲区和多进程操作文件
- nachos学习笔记之进程
- 内存管理/守护进程
- linux进程内存管理
- Windows进程内存管理
- Android进程内存管理
- android进程内存管理
- 内存管理 进程 线程
- Linux02进程内存管理
- 进程的内存管理
- 系统调用与软件中断SWI的实现
- 奇数魔幻矩阵
- ARM处理器寄存器
- 探索ORACLE之RMAN_02基本使用
- ARM处理器工作模式
- nachos 内存管理和多进程实现
- 2012 人民搜索 实习生招聘 笔试题
- nachos 缺页置换
- 嵌入式操作系统介绍
- 小结:C++中如何用new动态开辟二维数组
- 查看那些表使用了表分区
- hadoop mapreduce核心功能描述
- android基础知识(4) ----小常识
- Struts2全视图以及常用的视图类型