亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pagetbl.c

?? nucleus_arm.rar
?? C
字號:
// pagetbl.c

// This code manages the paging tables.

// v0.1: Doug Gale
//	- Initial revision
//	- Maps entire physical memory using identity mapping
//	- Applies protection to hardware areas
//	- Marks zero page not present to catch null-pointers
//	- Added code to conveniently manipulate page protections
// v0.2: Doug Gale
//	- Added provision for multiple page directories

#include <pagetbl.h>
#include <drivers/mem/mem.h>
#include <support.h>
#include <stdio.h>

// Page table entry
union tagPageTblEnt {
	// Bitfield for convenient access
	struct {
		unsigned pg_present:1;		// Page is present
		unsigned pg_writable:1;		// Page is writable
		unsigned pg_user:1;			// Page only accessible in user mode
		unsigned pg_writethru:1;	// Don't cache writes
		unsigned pg_nocache:1;		// Don't cache at all
		unsigned pg_accessed:1;		// Has been read
		unsigned pg_modified:1;		// Has been written
		unsigned pg_4meg:1;			// 4MB page (only in page directory)
		unsigned pg_global:1;		// Don't flush this entry
		unsigned pg_avail:3;		// Available for OS use
		unsigned pg_base:20;		// High 20 bits of phys addr of page
	} bits;

	// Access as a raw 32-bit value
	unsigned long dw;
};

// One page is allocated for the page directory.
// Each entry of the page directory points to the page table for that region
// Each page table is an array of physical addresses for that page.

// Pointer to page directory
// This is set in drivers/mem/mem.c
PageTblEnt *page_dir;

// Initialize page tables and enable paging
void pagetbl_init()
{
	extern char __text_st[];
	extern char __text_en[];
	unsigned memsize, i, addr, j;
	PageTblEnt *alloc, *tbl;
	PageTblEnt te;

	// Get ready to allocate pages
	alloc = page_dir + 1024;

	// Clear page directory
	memsetd(page_dir, 0, 1024);

	// Get size of physical memory
	memsize = mm_get_memsize();

	// Allocate pages for page tables. One page for each 4 megabytes.
	// Fill in the page directory so I don't need to store separate pointers
	// Walk through memory 4 megabytes at a time
	for (i = 0, addr = 0; addr < memsize; i++, addr += (1<<22)) {
		// Allocate a page for page table
		tbl = alloc;
		alloc += 1024;

		// Clear new page table
		memsetd(tbl, 0, 1024);

		//
		// Fill page directory entry
		//

		// Pointer to page table
		page_dir[i].bits.pg_base = (unsigned long)tbl >> 12;

		page_dir[i].bits.pg_present = 1;
		page_dir[i].bits.pg_writable = 1;
//		page_dir[i].bits.pg_user = 0;
//		page_dir[i].bits.pg_writethru = 0;
//		page_dir[i].bits.pg_nocache = 0;
//		page_dir[i].bits.pg_accessed = 0;
//		page_dir[i].bits.pg_modified = 0;
//		page_dir[i].bits.pg_4meg = 0;
//		page_dir[i].bits.pg_global = 0;
//		page_dir[i].bits.pg_avail = 0;

		//
		// Fill page table
		//

		for (j = 0; j < 1024; j++) {
			tbl[j].bits.pg_base = (j * 4096 + addr) >> 12;

			tbl[j].bits.pg_present = 1;
			tbl[j].bits.pg_writable = 1;
//			tbl[j].bits.pg_user = 0;
//			tbl[j].bits.pg_writethru = 0;
//			tbl[j].bits.pg_nocache = 0;
//			tbl[j].bits.pg_accessed = 0;
//			tbl[j].bits.pg_modified = 0;
//			tbl[j].bits.pg_4meg = 0;
//			tbl[j].bits.pg_global = 0;
//			tbl[j].bits.pg_avail = 0;
		}
	}

	//
	// Mark not-present regions
	//

	te.dw = 0;
	te.bits.pg_present = 1;		// CLEAR the present bit
	// Catch null pointer accesses
	pagetbl_chgprotect(page_dir, (void*)0x00000000, (void*)0x00000FFF, te.dw, 0);
	// Mark hardware region not present
	pagetbl_chgprotect(page_dir, (void*)0x000D0000, (void*)0x000EFFFF, te.dw, 0);

	//
	// Mark read-only regions
	//

	te.dw = 0;
	te.bits.pg_writable = 1;	// CLEAR the writable bit
	pagetbl_chgprotect(page_dir, (void*)0x000C0000, (void*)0x000FFFFF, te.dw, 0);

	// Make text section read only
	pagetbl_chgprotect(page_dir, (void*)__text_st, (void*)__text_en, te.dw, 0);

	// Disable caching of video memory entirely
	te.dw = 0;
	te.bits.pg_nocache = 1;		// SET the no-cache bit
	te.bits.pg_writethru = 1;	// SET the write-thru bit
	pagetbl_chgprotect(page_dir, (void*)0x000A0000, (void*)0x000AFFFF, 0, te.dw);

	//
	// Enable paging
	//

	__asm__ __volatile__ (
		"movl %0,%%cr3\n"
		"movl %%cr0,%0\n"
		// Enable paging, write-protect, and alignment exceptions
		"orl $0x80050000,%0\n"	
		"movl %0,%%cr0\n"
		: 
		: "r" (page_dir)
		: "0"
	);
}

// Return a pointer to the page table entry for the specified address
// Pass a pointer to the page directory to manipulate
PageTblEnt *pagetbl_findpage(PageTblEnt *dir, void *ptr)
{
	unsigned addr, diridx, tblidx;
	PageTblEnt *tbl;

	addr = (unsigned long)ptr;

	// Calculate page directory index
	diridx = addr >> 22;

	// Calculate pointer to page table
	tbl = (PageTblEnt*)(dir[diridx].bits.pg_base << 12);
	if (!tbl)
		return 0;

	// Calculate page table index
	tblidx = (addr - (diridx << 22)) >> 12;

	return tbl + tblidx;
}

// Modify the protection of the page that corresponds 
// to the given linear address(es)
// The end of the range is not inclusive
// Pass an unsigned long specifying bits to clear and bits to set
// The "clear" is performed before the "set"
// Returns the old value of the last entry modified
unsigned long pagetbl_chgprotect(PageTblEnt *dir, void *ptr, void *to, 
		unsigned long clr, unsigned long set)
{
	unsigned long ret;
	PageTblEnt *tblent;

	do {
		// Get pointer to page table entry
		tblent = pagetbl_findpage(dir, ptr);
		if (!tblent) {
			printf("memory: page not found when adjusting protection! (0x%x)\n", 
					(unsigned)ptr);
			panic();
		}

		// Save original value for return
		ret = tblent->dw;

		// Clear/set specified bits
		tblent->dw &= ~clr;
		tblent->dw |= set;

		// Go to next page
	} while ((ptr += 4096) && (ptr < to));

	return ret;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱淫av一区二区三区| 91成人免费电影| 在线视频国内一区二区| 日韩精品一区二区三区蜜臀| 亚洲欧美日韩中文播放| 麻豆成人免费电影| 欧美三级日本三级少妇99| 国产亚洲午夜高清国产拍精品| 性做久久久久久| av日韩在线网站| 久久色.com| 免费亚洲电影在线| 欧美午夜电影网| 亚洲欧洲在线观看av| 国产91精品一区二区麻豆网站| 欧美一区二区三区成人| 亚洲观看高清完整版在线观看| 波多野结衣91| 国产色91在线| 国内精品第一页| 日韩欧美亚洲另类制服综合在线| 亚洲电影你懂得| 欧美伊人久久久久久久久影院| **性色生活片久久毛片| 国产iv一区二区三区| 久久精品免费在线观看| 久久电影网站中文字幕| 欧美一区二区三区小说| 免费人成在线不卡| 91精品国产综合久久香蕉麻豆| 亚洲国产精品综合小说图片区| 色综合中文字幕| 亚洲三级电影网站| 色综合天天天天做夜夜夜夜做| 亚洲天堂久久久久久久| 91丨九色丨尤物| 亚洲欧美激情视频在线观看一区二区三区 | 久久精品亚洲精品国产欧美| 久久精品国产一区二区三 | 91一区二区三区在线观看| 欧美韩日一区二区三区| 成人精品电影在线观看| 国产精品白丝在线| 欧美亚洲愉拍一区二区| 亚洲成人三级小说| 日韩一卡二卡三卡国产欧美| 国内精品久久久久影院薰衣草 | 国产一区二区精品久久91| 久久亚洲春色中文字幕久久久| 国产一区91精品张津瑜| 国产精品久久久久影院老司| 日本二三区不卡| 日韩精品电影在线观看| 亚洲精品在线网站| 成人app网站| 一区二区日韩av| 欧美一区二区国产| 国产69精品久久久久毛片| 国产精品不卡视频| 8x福利精品第一导航| 国产在线看一区| 亚洲视频一区二区免费在线观看| 欧美午夜精品久久久| 国产一区二区三区在线观看免费| 国产精品人妖ts系列视频| 欧美亚洲图片小说| 激情综合色丁香一区二区| 中文字幕欧美激情一区| 欧美日韩精品二区第二页| 激情综合网av| 亚洲国产婷婷综合在线精品| 久久久99免费| 欧美日韩一区二区在线视频| 奇米综合一区二区三区精品视频| 中文字幕精品一区二区三区精品| 欧美在线短视频| 国产成人综合亚洲91猫咪| 亚洲午夜久久久久中文字幕久| 日韩精品一区二| 欧美视频一区在线| 高清国产一区二区三区| 日韩电影在线观看网站| 国产精品福利一区| 精品国产乱码久久久久久牛牛 | 亚洲国产精品久久一线不卡| 精品国产百合女同互慰| 欧美日韩一级片网站| 国产一区不卡视频| 美女视频网站黄色亚洲| 樱花草国产18久久久久| 国产欧美日韩综合精品一区二区| 欧美日本乱大交xxxxx| 91亚洲男人天堂| 精品在线亚洲视频| 日韩在线观看一区二区| 一卡二卡三卡日韩欧美| 国产精品动漫网站| 欧美国产日韩在线观看| 精品久久99ma| 欧美一区三区二区| 欧美日韩亚洲丝袜制服| 日本韩国欧美三级| 99re6这里只有精品视频在线观看| 国产在线播精品第三| 美女被吸乳得到大胸91| 亚洲成国产人片在线观看| 怡红院av一区二区三区| 亚洲精品国产高清久久伦理二区| 国产女主播一区| 国产午夜精品理论片a级大结局| 精品少妇一区二区| 精品日产卡一卡二卡麻豆| 欧美一级免费大片| 欧美一区二区三区婷婷月色| 欧美色综合影院| 欧美视频一区在线| 欧美日韩国产天堂| 91精品国产综合久久久蜜臀图片| 欧美日韩一区成人| 欧美日韩美少妇| 91精品国产综合久久久久久| 欧美精品1区2区3区| 51久久夜色精品国产麻豆| 7878成人国产在线观看| 欧美一区二区三区免费观看视频| 日韩欧美三级在线| 久久久久久黄色| 国产精品伦理一区二区| 亚洲欧美韩国综合色| 亚洲美女视频一区| 亚洲国产wwwccc36天堂| 开心九九激情九九欧美日韩精美视频电影| 日韩国产欧美在线观看| 激情亚洲综合在线| 国产mv日韩mv欧美| 在线观看国产91| 91精品免费观看| 国产日韩欧美高清在线| 国产精品久久久久久久久图文区| 亚洲欧美乱综合| 美女视频黄频大全不卡视频在线播放 | 成人黄色小视频| 在线观看视频一区二区| 欧美日本一道本在线视频| 日韩精品一区二区三区视频| 国产精品久久久久影院老司 | 亚洲伦在线观看| 日韩在线一区二区| 国产成人av电影| 欧美乱妇20p| 国产亚洲综合在线| 亚洲福利一区二区| 国产福利91精品一区二区三区| 色综合一个色综合亚洲| 精品久久一区二区| 一区二区三区视频在线看| 久久精品国产亚洲高清剧情介绍 | 一区二区在线观看视频| 日韩av电影天堂| 99久久婷婷国产综合精品 | 精品一区二区三区影院在线午夜| 国产成人福利片| 3d动漫精品啪啪一区二区竹菊| 中文字幕+乱码+中文字幕一区| 亚洲成年人影院| av电影天堂一区二区在线| 欧美一区二区三区电影| 亚洲综合色成人| 国产v综合v亚洲欧| 日本不卡123| 亚洲一区二区在线免费看| 美洲天堂一区二卡三卡四卡视频| 95精品视频在线| 久久久青草青青国产亚洲免观| 一区二区高清在线| 成人精品免费看| 欧美精品一区二| 日本网站在线观看一区二区三区 | 国产夫妻精品视频| 欧美日韩一区二区在线观看| 国产精品婷婷午夜在线观看| 麻豆传媒一区二区三区| 欧美日韩高清一区二区不卡 | 亚洲国产精品成人综合色在线婷婷| 午夜不卡av免费| 欧洲一区在线电影| 18成人在线视频| 成人黄色网址在线观看| 久久久久久久久久久久久夜| 麻豆一区二区三| 日韩欧美二区三区| 日韩黄色免费网站| 欧美日韩中文字幕一区二区| 亚洲免费观看在线视频| 波多野结衣视频一区| 中文字幕一区二区三区视频| 粉嫩13p一区二区三区| 久久婷婷国产综合精品青草| 九九在线精品视频| 久久午夜老司机|