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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? memory.c

?? linux 1.0 源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
	return 0;}void do_no_page(unsigned long error_code, unsigned long address,	struct task_struct *tsk, unsigned long user_esp){	unsigned long tmp;	unsigned long page;	struct vm_area_struct * mpnt;	page = get_empty_pgtable(tsk,address);	if (!page)		return;	page &= PAGE_MASK;	page += PAGE_PTR(address);	tmp = *(unsigned long *) page;	if (tmp & PAGE_PRESENT)		return;	++tsk->rss;	if (tmp) {		++tsk->maj_flt;		swap_in((unsigned long *) page);		return;	}	address &= 0xfffff000;	tmp = 0;	for (mpnt = tsk->mmap; mpnt != NULL; mpnt = mpnt->vm_next) {		if (address < mpnt->vm_start)			break;		if (address >= mpnt->vm_end) {			tmp = mpnt->vm_end;			continue;		}		if (!mpnt->vm_ops || !mpnt->vm_ops->nopage) {			++tsk->min_flt;			get_empty_page(tsk,address);			return;		}		mpnt->vm_ops->nopage(error_code, mpnt, address);		return;	}	if (tsk != current)		goto ok_no_page;	if (address >= tsk->end_data && address < tsk->brk)		goto ok_no_page;	if (mpnt && mpnt == tsk->stk_vma &&	    address - tmp > mpnt->vm_start - address &&	    tsk->rlim[RLIMIT_STACK].rlim_cur > mpnt->vm_end - address) {		mpnt->vm_start = address;		goto ok_no_page;	}	tsk->tss.cr2 = address;	current->tss.error_code = error_code;	current->tss.trap_no = 14;	send_sig(SIGSEGV,tsk,1);	if (error_code & 4)	/* user level access? */		return;ok_no_page:	++tsk->min_flt;	get_empty_page(tsk,address);}/* * This routine handles page faults.  It determines the address, * and the problem, and then passes it off to one of the appropriate * routines. */asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code){	unsigned long address;	unsigned long user_esp = 0;	unsigned int bit;	/* get the address */	__asm__("movl %%cr2,%0":"=r" (address));	if (address < TASK_SIZE) {		if (error_code & 4) {	/* user mode access? */			if (regs->eflags & VM_MASK) {				bit = (address - 0xA0000) >> PAGE_SHIFT;				if (bit < 32)					current->screen_bitmap |= 1 << bit;			} else 				user_esp = regs->esp;		}		if (error_code & 1)			do_wp_page(error_code, address, current, user_esp);		else			do_no_page(error_code, address, current, user_esp);		return;	}	address -= TASK_SIZE;	if (wp_works_ok < 0 && address == 0 && (error_code & PAGE_PRESENT)) {		wp_works_ok = 1;		pg0[0] = PAGE_SHARED;		printk("This processor honours the WP bit even when in supervisor mode. Good.\n");		return;	}	if (address < PAGE_SIZE) {		printk("Unable to handle kernel NULL pointer dereference");		pg0[0] = PAGE_SHARED;	} else		printk("Unable to handle kernel paging request");	printk(" at address %08lx\n",address);	die_if_kernel("Oops", regs, error_code);	do_exit(SIGKILL);}/* * BAD_PAGE is the page that is used for page faults when linux * is out-of-memory. Older versions of linux just did a * do_exit(), but using this instead means there is less risk * for a process dying in kernel mode, possibly leaving a inode * unused etc.. * * BAD_PAGETABLE is the accompanying page-table: it is initialized * to point to BAD_PAGE entries. * * ZERO_PAGE is a special page that is used for zero-initialized * data and COW. */unsigned long __bad_pagetable(void){	extern char empty_bad_page_table[PAGE_SIZE];	__asm__ __volatile__("cld ; rep ; stosl":		:"a" (BAD_PAGE + PAGE_TABLE),		 "D" ((long) empty_bad_page_table),		 "c" (PTRS_PER_PAGE)		:"di","cx");	return (unsigned long) empty_bad_page_table;}unsigned long __bad_page(void){	extern char empty_bad_page[PAGE_SIZE];	__asm__ __volatile__("cld ; rep ; stosl":		:"a" (0),		 "D" ((long) empty_bad_page),		 "c" (PTRS_PER_PAGE)		:"di","cx");	return (unsigned long) empty_bad_page;}unsigned long __zero_page(void){	extern char empty_zero_page[PAGE_SIZE];	__asm__ __volatile__("cld ; rep ; stosl":		:"a" (0),		 "D" ((long) empty_zero_page),		 "c" (PTRS_PER_PAGE)		:"di","cx");	return (unsigned long) empty_zero_page;}void show_mem(void){	int i,free = 0,total = 0,reserved = 0;	int shared = 0;	printk("Mem-info:\n");	printk("Free pages:      %6dkB\n",nr_free_pages<<(PAGE_SHIFT-10));	printk("Secondary pages: %6dkB\n",nr_secondary_pages<<(PAGE_SHIFT-10));	printk("Free swap:       %6dkB\n",nr_swap_pages<<(PAGE_SHIFT-10));	i = high_memory >> PAGE_SHIFT;	while (i-- > 0) {		total++;		if (mem_map[i] & MAP_PAGE_RESERVED)			reserved++;		else if (!mem_map[i])			free++;		else			shared += mem_map[i]-1;	}	printk("%d pages of RAM\n",total);	printk("%d free pages\n",free);	printk("%d reserved pages\n",reserved);	printk("%d pages shared\n",shared);	show_buffers();}/* * paging_init() sets up the page tables - note that the first 4MB are * already mapped by head.S. * * This routines also unmaps the page at virtual kernel address 0, so * that we can trap those pesky NULL-reference errors in the kernel. */unsigned long paging_init(unsigned long start_mem, unsigned long end_mem){	unsigned long * pg_dir;	unsigned long * pg_table;	unsigned long tmp;	unsigned long address;/* * Physical page 0 is special; it's not touched by Linux since BIOS * and SMM (for laptops with [34]86/SL chips) may need it.  It is read * and write protected to detect null pointer references in the * kernel. */#if 0	memset((void *) 0, 0, PAGE_SIZE);#endif	start_mem = PAGE_ALIGN(start_mem);	address = 0;	pg_dir = swapper_pg_dir;	while (address < end_mem) {		tmp = *(pg_dir + 768);		/* at virtual addr 0xC0000000 */		if (!tmp) {			tmp = start_mem | PAGE_TABLE;			*(pg_dir + 768) = tmp;			start_mem += PAGE_SIZE;		}		*pg_dir = tmp;			/* also map it in at 0x0000000 for init */		pg_dir++;		pg_table = (unsigned long *) (tmp & PAGE_MASK);		for (tmp = 0 ; tmp < PTRS_PER_PAGE ; tmp++,pg_table++) {			if (address < end_mem)				*pg_table = address | PAGE_SHARED;			else				*pg_table = 0;			address += PAGE_SIZE;		}	}	invalidate();	return start_mem;}void mem_init(unsigned long start_low_mem,	      unsigned long start_mem, unsigned long end_mem){	int codepages = 0;	int reservedpages = 0;	int datapages = 0;	unsigned long tmp;	unsigned short * p;	extern int etext;	cli();	end_mem &= PAGE_MASK;	high_memory = end_mem;	start_mem +=  0x0000000f;	start_mem &= ~0x0000000f;	tmp = MAP_NR(end_mem);	mem_map = (unsigned short *) start_mem;	p = mem_map + tmp;	start_mem = (unsigned long) p;	while (p > mem_map)		*--p = MAP_PAGE_RESERVED;	start_low_mem = PAGE_ALIGN(start_low_mem);	start_mem = PAGE_ALIGN(start_mem);	while (start_low_mem < 0xA0000) {		mem_map[MAP_NR(start_low_mem)] = 0;		start_low_mem += PAGE_SIZE;	}	while (start_mem < end_mem) {		mem_map[MAP_NR(start_mem)] = 0;		start_mem += PAGE_SIZE;	}#ifdef CONFIG_SOUND	sound_mem_init();#endif	free_page_list = 0;	nr_free_pages = 0;	for (tmp = 0 ; tmp < end_mem ; tmp += PAGE_SIZE) {		if (mem_map[MAP_NR(tmp)]) {			if (tmp >= 0xA0000 && tmp < 0x100000)				reservedpages++;			else if (tmp < (unsigned long) &etext)				codepages++;			else				datapages++;			continue;		}		*(unsigned long *) tmp = free_page_list;		free_page_list = tmp;		nr_free_pages++;	}	tmp = nr_free_pages << PAGE_SHIFT;	printk("Memory: %luk/%luk available (%dk kernel code, %dk reserved, %dk data)\n",		tmp >> 10,		end_mem >> 10,		codepages << (PAGE_SHIFT-10),		reservedpages << (PAGE_SHIFT-10),		datapages << (PAGE_SHIFT-10));/* test if the WP bit is honoured in supervisor mode */	wp_works_ok = -1;	pg0[0] = PAGE_READONLY;	invalidate();	__asm__ __volatile__("movb 0,%%al ; movb %%al,0": : :"ax", "memory");	pg0[0] = 0;	invalidate();	if (wp_works_ok < 0)		wp_works_ok = 0;	return;}void si_meminfo(struct sysinfo *val){	int i;	i = high_memory >> PAGE_SHIFT;	val->totalram = 0;	val->freeram = 0;	val->sharedram = 0;	val->bufferram = buffermem;	while (i-- > 0)  {		if (mem_map[i] & MAP_PAGE_RESERVED)			continue;		val->totalram++;		if (!mem_map[i]) {			val->freeram++;			continue;		}		val->sharedram += mem_map[i]-1;	}	val->totalram <<= PAGE_SHIFT;	val->freeram <<= PAGE_SHIFT;	val->sharedram <<= PAGE_SHIFT;	return;}/* This handles a generic mmap of a disk file */void file_mmap_nopage(int error_code, struct vm_area_struct * area, unsigned long address){	struct inode * inode = area->vm_inode;	unsigned int block;	unsigned long page;	int nr[8];	int i, j;	int prot = area->vm_page_prot;	address &= PAGE_MASK;	block = address - area->vm_start + area->vm_offset;	block >>= inode->i_sb->s_blocksize_bits;	page = get_free_page(GFP_KERNEL);	if (share_page(area, area->vm_task, inode, address, error_code, page)) {		++area->vm_task->min_flt;		return;	}	++area->vm_task->maj_flt;	if (!page) {		oom(current);		put_page(area->vm_task, BAD_PAGE, address, PAGE_PRIVATE);		return;	}	for (i=0, j=0; i< PAGE_SIZE ; j++, block++, i += inode->i_sb->s_blocksize)		nr[j] = bmap(inode,block);	if (error_code & PAGE_RW)		prot |= PAGE_RW | PAGE_DIRTY;	page = bread_page(page, inode->i_dev, nr, inode->i_sb->s_blocksize, prot);	if (!(prot & PAGE_RW)) {		if (share_page(area, area->vm_task, inode, address, error_code, page))			return;	}	if (put_page(area->vm_task,page,address,prot))		return;	free_page(page);	oom(current);}void file_mmap_free(struct vm_area_struct * area){	if (area->vm_inode)		iput(area->vm_inode);#if 0	if (area->vm_inode)		printk("Free inode %x:%d (%d)\n",area->vm_inode->i_dev, 				 area->vm_inode->i_ino, area->vm_inode->i_count);#endif}/* * Compare the contents of the mmap entries, and decide if we are allowed to * share the pages */int file_mmap_share(struct vm_area_struct * area1, 		    struct vm_area_struct * area2, 		    unsigned long address){	if (area1->vm_inode != area2->vm_inode)		return 0;	if (area1->vm_start != area2->vm_start)		return 0;	if (area1->vm_end != area2->vm_end)		return 0;	if (area1->vm_offset != area2->vm_offset)		return 0;	if (area1->vm_page_prot != area2->vm_page_prot)		return 0;	return 1;}struct vm_operations_struct file_mmap = {	NULL,			/* open */	file_mmap_free,		/* close */	file_mmap_nopage,	/* nopage */	NULL,			/* wppage */	file_mmap_share,	/* share */	NULL,			/* unmap */};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费一区二区三区在线观看| 五月激情综合婷婷| 亚洲一区在线观看网站| 日韩成人一级大片| 成人影视亚洲图片在线| 欧美日韩精品欧美日韩精品一综合| 日韩三级.com| 亚洲制服欧美中文字幕中文字幕| 国产成人鲁色资源国产91色综| 欧美日韩一级片在线观看| 国产精品视频yy9299一区| 久久国产精品99久久久久久老狼| 欧美自拍偷拍一区| 日本亚洲最大的色成网站www| caoporm超碰国产精品| 亚洲精品在线观看网站| 婷婷一区二区三区| 在线观看三级视频欧美| 中文字幕亚洲欧美在线不卡| 国产一区二区三区久久悠悠色av| 日韩限制级电影在线观看| 亚洲成在人线免费| 91精彩视频在线观看| 亚洲欧美视频在线观看视频| 国产91精品欧美| 久久久99精品久久| 国内精品伊人久久久久av影院 | 国产午夜精品一区二区| 麻豆国产欧美一区二区三区| 日韩丝袜情趣美女图片| 热久久国产精品| 在线不卡一区二区| 性久久久久久久| 欧美美女直播网站| 日韩激情一二三区| 正在播放亚洲一区| 三级在线观看一区二区| 日韩写真欧美这视频| 激情综合色播五月| 国产日韩综合av| 国产69精品久久99不卡| 国产精品理伦片| 色综合久久综合| 亚洲高清免费一级二级三级| 欧美福利视频一区| 成人av网站免费| 亚洲美女免费视频| 欧美图片一区二区三区| 日本一道高清亚洲日美韩| 精品久久久久久无| 国产91色综合久久免费分享| 中文字幕一区二区三| 欧美三级一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美激情综合五月色丁香| 不卡av电影在线播放| 一区二区日韩电影| 日韩一区二区三区免费看| 国产在线精品一区二区夜色| 国产精品日产欧美久久久久| 欧美在线免费视屏| 卡一卡二国产精品 | 亚洲三级视频在线观看| 欧美性猛交xxxxxxxx| 久久精品国内一区二区三区| 国产精品久久久久影院色老大| 色999日韩国产欧美一区二区| 日韩国产精品久久久| 国产片一区二区三区| 精品国产乱码久久久久久夜甘婷婷| 国产精品一区在线观看你懂的| 亚洲免费在线观看| 精品国精品自拍自在线| 欧美在线观看你懂的| 激情综合色播五月| 亚洲第一久久影院| 国产免费观看久久| 欧美一区永久视频免费观看| 99国产精品一区| 精品夜夜嗨av一区二区三区| 一区二区三区在线免费视频| 久久久久久麻豆| 在线成人av网站| 91免费在线播放| 国产一区二区三区综合| 亚洲超碰97人人做人人爱| 日本一区免费视频| 日韩精品一区二| 91久久久免费一区二区| 国产91丝袜在线18| 国产一区日韩二区欧美三区| 亚洲成人av一区| 亚洲品质自拍视频网站| 国产视频一区二区在线| 91 com成人网| 欧美午夜一区二区三区| 91麻豆精品秘密| 不卡一区中文字幕| 国产精品一区二区黑丝| 看国产成人h片视频| 婷婷丁香久久五月婷婷| 亚洲国产日日夜夜| 亚洲另类中文字| 亚洲精品中文字幕在线观看| 国产精品理伦片| 国产精品日韩成人| 国产精品理伦片| 亚洲丝袜精品丝袜在线| 亚洲视频一区在线观看| 亚洲免费在线电影| 一区二区日韩av| 亚洲一卡二卡三卡四卡五卡| 一区二区三区波多野结衣在线观看| 最新国产成人在线观看| 中文字幕一区二区三区在线播放| 国产亚洲精品免费| 夜夜揉揉日日人人青青一国产精品 | 91美女精品福利| 99精品视频一区二区| 99国产欧美另类久久久精品| 色婷婷综合五月| 在线精品视频一区二区三四| 欧美日韩中文另类| 制服丝袜在线91| 欧美电影免费观看完整版| 久久久久久久久伊人| 国产精品久久久久久户外露出| 1区2区3区精品视频| 一级中文字幕一区二区| 日韩av一区二区在线影视| 激情深爱一区二区| 懂色av噜噜一区二区三区av| 99在线热播精品免费| 日本韩国精品在线| 在线电影一区二区三区| 国产日韩欧美不卡在线| 亚洲三级在线观看| 日韩av中文在线观看| 国产99久久久精品| 色综合天天狠狠| 欧美一区二区视频在线观看2022 | 狠狠网亚洲精品| 成人午夜视频在线| 欧洲人成人精品| 欧美mv日韩mv国产网站| 亚洲同性gay激情无套| 婷婷中文字幕综合| 粉嫩aⅴ一区二区三区四区五区| 在线中文字幕不卡| 日韩一区二区免费高清| 国产日产精品1区| 亚洲成人免费在线观看| 国产不卡视频在线播放| 欧美美女视频在线观看| 国产日韩欧美一区二区三区综合| 亚洲综合色网站| 国产一区福利在线| 欧美性欧美巨大黑白大战| 久久久久亚洲蜜桃| 亚洲午夜一区二区三区| 懂色av一区二区在线播放| 欧美人与禽zozo性伦| 中文字幕永久在线不卡| 麻豆精品一区二区综合av| aaa国产一区| 欧美mv日韩mv| 日韩不卡一区二区三区| 91在线小视频| 久久无码av三级| 日本亚洲欧美天堂免费| 91久久国产最好的精华液| 国产精品嫩草99a| 国产真实乱偷精品视频免| 欧美年轻男男videosbes| 国产精品初高中害羞小美女文| 精品在线免费观看| 在线不卡一区二区| 一区二区三区资源| 99久久久无码国产精品| 久久久久久久电影| 美女一区二区在线观看| 欧美日韩一区二区不卡| 亚洲免费在线看| 99亚偷拍自图区亚洲| 久久久精品日韩欧美| 欧美亚洲国产一区二区三区| 欧美极品xxx| 国产一区二区三区免费观看| 欧美一级日韩免费不卡| 午夜精品影院在线观看| 色婷婷综合五月| 亚洲综合av网| 欧美日韩综合一区| 一区二区久久久久久| 一本到不卡免费一区二区| 亚洲免费在线观看| 在线视频你懂得一区| 亚洲午夜免费福利视频| 欧美色手机在线观看| 午夜欧美在线一二页|