📄 paging.c
字号:
/** paging.c ** ** Original Author: Kasper Verdich Lund ** Date: 10.30.99 ** ** Description: ** ** Revision History: ** First version ** ** 0.0.1 10.30.99 Kasper Verdich Lund - (no comments) ** ** This program is free software, you can redistribute it and/or ** modify it under the terms of the GNU General Public License ** as published by the Free Software Foundation; either version ** 2 of the License, or (at your option) any later version. ** ** This program is distributed in the hope that it will be ** useful, but WITHOUT ANY WARRANTY; without even the implied ** warranty or MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See the GNU General Public License for more ** details. ** ** You should have received a copy of the GNU General Public ** License along with this program; if not, write to the ** Free Software Foundation, Inc., 59 Temple Place, Suite 330, ** Boston, MA 02111-1307 USA ** *********************************************************Apostle OS**/#include <paging.h>#include <mem.h>#include <string.h>#include <types.h>dword CR3;void setupPaging(dword available){ dword *PD, *PT; int i, tables = 0; CR3 = (dword) pmalloc(); PD = (dword *) CR3; PT = NULL; /* do not map more than 256Mb of physical memory */ if (available > 256*1024*1024) available = 256*1024*1024; for(i=0; i<(available >> 12); i++) { if ((i & 0x3FF) == 0) { PT = p2malloc(); tables++; PD[i>>10] = (dword)PT + PAGE_PRESENT; memset((void *)((dword)PT + PAGE_SIZE), 0, PAGE_SIZE); } PT[i & 0x3FF] = (i << 12) + PAGE_PRESENT; }}void enablePaging(void){ dword CR0 = get_CR0(); set_CR3(CR3); /* set most significant bit of CR0 */ set_CR0(CR0 | 0x80000000); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -