您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ sys_page_unmap函数代码示例

51自学网 2021-06-03 08:37:26
  C++
这篇教程C++ sys_page_unmap函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中sys_page_unmap函数的典型用法代码示例。如果您正苦于以下问题:C++ sys_page_unmap函数的具体用法?C++ sys_page_unmap怎么用?C++ sys_page_unmap使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了sys_page_unmap函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: syscall

// Dispatches to the correct kernel function, passing the arguments.int32_tsyscall(uint32_t syscallno, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5){	// Call the function corresponding to the 'syscallno' parameter.	// Return any appropriate return value.	// LAB 3: Your code here.//	panic("syscall not implemented");	switch (syscallno) {	case SYS_cputs:		sys_cputs((char *)a1, a2);		break;	case SYS_cgetc:		return sys_cgetc();	case SYS_env_destroy:		return sys_env_destroy(a1);	case SYS_getenvid:		return sys_getenvid();	case SYS_yield:		sys_yield();		break;	case SYS_page_alloc:		return sys_page_alloc(a1, (void *)a2, a3);	case SYS_page_map:		return sys_page_map(a1, (void *)a2, a3, (void *)a4, a5);	case SYS_page_unmap:		return sys_page_unmap(a1, (void *)a2);	case SYS_env_set_status:		return sys_env_set_status(a1, a2);	case SYS_exofork:		return sys_exofork();	case SYS_env_set_pgfault_upcall:		return sys_env_set_pgfault_upcall(a1, (void *)a2);	case SYS_ipc_try_send:		return sys_ipc_try_send(a1, a2, (void*)a3, a4);	case SYS_ipc_recv:		return sys_ipc_recv((void*)a1);	case SYS_env_set_trapframe:		return sys_env_set_trapframe(a1, (struct Trapframe *)a2);	case SYS_time_msec:		return sys_time_msec();	case SYS_trans_pkt:		return sys_trans_pkt((void*)a1, a2);	case SYS_recv_pkt:		return sys_recv_pkt((void *)a1, (size_t *)a2);	default:		return -E_INVAL;	}	return 0;}
开发者ID:Cai41,项目名称:mit-6.828,代码行数:53,


示例2: syscall

// Dispatches to the correct kernel function, passing the arguments.int32_tsyscall(uint32_t syscallno, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5){	// Call the function corresponding to the 'syscallno' parameter.	// Return any appropriate return value.	// LAB 3: Your code here.	switch (syscallno){		case SYS_getenvid:			return sys_getenvid();		case SYS_cputs:			sys_cputs((const char*)a1, a2);			return 0;		case SYS_cgetc:			return sys_cgetc();		case SYS_env_destroy:			return sys_env_destroy(a1);		case SYS_map_kernel_page:			return sys_map_kernel_page((void*)a1, (void*)a2);		case SYS_sbrk:			return sys_sbrk(a1);		case SYS_yield:			sys_yield();			return 0;		case SYS_exofork:			return sys_exofork();		case SYS_env_set_status:			return sys_env_set_status((envid_t)a1, (int)a2);		case SYS_page_alloc:			return sys_page_alloc((envid_t)a1, (void *)a2, 						(int)a3);		case SYS_page_map:			return sys_page_map((envid_t)*((uint32_t*)a1),					(void*)*((uint32_t*)a1+1), 					(envid_t)*((uint32_t*)a1+2), 					(void*)*((uint32_t*)a1+3), 					(int)*((uint32_t*)a1+4));		case SYS_page_unmap:			return sys_page_unmap((envid_t)a1, (void*)a2);		case SYS_env_set_priority:			return sys_env_set_priority((envid_t)a1, (int) a2);		case SYS_env_set_pgfault_upcall:			return sys_env_set_pgfault_upcall((envid_t)a1,						 (void*)a2);		case SYS_ipc_recv:			return sys_ipc_recv((void*)a1);		case SYS_ipc_try_send:			return sys_ipc_try_send((envid_t)a1, a2, 						(void*)a3, (int)a4);		default:			return -E_INVAL;	}}
开发者ID:yuki252111,项目名称:os,代码行数:53,


示例3: syscall

// Dispatches to the correct kernel function, passing the arguments.int32_tsyscall(uint32_t syscallno, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5){	// Call the function corresponding to the 'syscallno' parameter.	// Return any appropriate return value.	// LAB 3: Your code here.	//panic("syscall not implemented");	int ret = 0;	switch (syscallno) {	case SYS_cputs:		sys_cputs((char*)a1, a2);		ret = 0;		break;	case SYS_cgetc:		ret = sys_cgetc();		break;	case SYS_getenvid:		ret = sys_getenvid();		break;	case SYS_env_destroy:		sys_env_destroy(a1);		ret = 0;		break;	case SYS_yield:		sys_yield();		break;	case SYS_exofork:		return sys_exofork();		break;	case SYS_page_alloc:		return sys_page_alloc(a1, (void*)a2, a3);		break;	case SYS_page_map:		return sys_page_map(a1, (void*)a2, a3, (void*)a4, a5);		break;	case SYS_page_unmap:		return sys_page_unmap(a1, (void*)a2);		break;	case SYS_env_set_status:		return sys_env_set_status(a1, a2);		break;	case SYS_env_set_pgfault_upcall:		return sys_env_set_pgfault_upcall(a1, (void*)a2);		break;	default:		ret = -E_INVAL;	}	return ret;}
开发者ID:rafaroar,项目名称:6.828-labs,代码行数:53,


示例4: syscall

// Dispatches to the correct kernel function, passing the arguments.	int64_tsyscall(uint64_t syscallno, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5){	// Call the function corresponding to the 'syscallno' parameter.	// Return any appropriate return value.	// LAB 3: Your code here.	uint64_t retval = 0;	switch (syscallno) {		case SYS_cputs:			sys_cputs((char *) a1, (size_t) a2);			return retval;		case SYS_cgetc:			return (int64_t) sys_cgetc();		case SYS_getenvid:			return (int64_t) sys_getenvid();		case SYS_env_destroy:			return (int64_t) sys_env_destroy((envid_t) a1);		case SYS_yield:			sys_yield();			return retval;		case SYS_exofork:			return (int64_t)sys_exofork();		case SYS_page_alloc:			return (int64_t)sys_page_alloc((envid_t)a1, (void *)a2, (int)a3);		case SYS_page_map:			return (int64_t)sys_page_map((envid_t)a1, (void *)a2, (envid_t)a3, (void *)a4, (int)a5);		case SYS_page_unmap:			return (int64_t)sys_page_unmap((envid_t)a1, (void *)a2);		case SYS_env_set_status:			return (int64_t)sys_env_set_status((envid_t)a1, (int)a2);		case SYS_env_set_pgfault_upcall:			return (int64_t)sys_env_set_pgfault_upcall((envid_t)a1, (void *)a2);		case SYS_ipc_try_send:			return (int64_t) sys_ipc_try_send((envid_t) a1, (uint32_t) a2, (void *) a3, (unsigned) a4);		case SYS_ipc_recv:			return (int64_t)sys_ipc_recv((void*)a1);		case SYS_env_set_trapframe:			return sys_env_set_trapframe((envid_t)a1, (struct Trapframe*)a2);		case SYS_time_msec:			return sys_time_msec();		case SYS_net_try_send:			return sys_net_try_send((char *) a1, (int) a2);		case SYS_net_try_receive:			return sys_net_try_receive((char *) a1, (int *) a2);		default:			return -E_INVAL;	}	panic("syscall not implemented");}
开发者ID:ajsbu,项目名称:cse506,代码行数:52,


示例5: dup

// Make file descriptor 'newfdnum' a duplicate of file descriptor 'oldfdnum'.// For instance, writing onto either file descriptor will affect the// file and the file offset of the other.// Closes any previously open file descriptor at 'newfdnum'.// This is implemented using virtual memory tricks (of course!).intdup(int oldfdnum, int newfdnum){	int i, r;	char *ova, *nva;	pte_t pte;	struct Fd *oldfd, *newfd;	if ((r = fd_lookup(oldfdnum, &oldfd)) < 0)		return r;	close(newfdnum);	newfd = INDEX2FD(newfdnum);	ova = fd2data(oldfd);	nva = fd2data(newfd);	if (vpd[PDX(ova)]) {		for (i = 0; i < PTSIZE; i += PGSIZE) {			pte = vpt[VPN(ova + i)];			if (pte&PTE_P) {				// should be no error here -- pd is already allocated				if ((r = sys_page_map(0, ova + i, 0, nva + i, pte & PTE_USER)) < 0)					goto err;			}		}	}	if ((r = sys_page_map(0, oldfd, 0, newfd, vpt[VPN(oldfd)] & PTE_USER)) < 0)		goto err;	return newfdnum;err:	sys_page_unmap(0, newfd);	for (i = 0; i < PTSIZE; i += PGSIZE)		sys_page_unmap(0, nva + i);	return r;}
开发者ID:AlexandrSalin,项目名称:mit-jos,代码行数:43,


示例6: fork

//// User-level fork with copy-on-write.// Set up our page fault handler appropriately.// Create a child.// Copy our address space and page fault handler setup to the child.// Then mark the child as runnable and return.//// Returns: child's envid to the parent, 0 to the child, < 0 on error.// It is also OK to panic on error.//// Hint://   Use uvpd, uvpt, and duppage.//   Remember to fix "thisenv" in the child process.//   Neither user exception stack should ever be marked copy-on-write,//   so you must allocate a new page for the child's user exception stack.//envid_tfork(void){	// LAB 4: Your code here.	set_pgfault_handler(pgfault);	envid_t childid = sys_exofork();	if(childid < 0)		panic("Fork Failed/n");	if(childid == 0) {		thisenv = &envs[ENVX(sys_getenvid())];		return 0;	}	int i, j;	for(i = 0; i < PDX(UTOP); i++) {		if (!(uvpd[i] & PTE_P)) continue;		for(j = 0; (j < 1024) && (i*NPDENTRIES + j < PGNUM(UXSTACKTOP - PGSIZE)); j++ ) {			if(!uvpt[i*NPDENTRIES + j] & PTE_P) continue;			if(duppage(childid, i*NPDENTRIES + j) < 0)				panic("dup page failed");		}	}	if ((sys_page_alloc(childid, (void *)(UXSTACKTOP - PGSIZE), PTE_U | PTE_P | PTE_W)) < 0) {          panic("Allocation of page for Exception stack cups!/n");        }        if ((sys_env_set_pgfault_upcall(childid, thisenv->env_pgfault_upcall)) < 0) {          panic("Unable to set child process' upcall");        }	 // Copy own uxstack to temp page        memmove((void *)(UXSTACKTOP - PGSIZE), PFTEMP, PGSIZE);	int r;        // Unmap temp page        if (sys_page_unmap(sys_getenvid(), PFTEMP) < 0) {                return -1;        }                if ((r = sys_env_set_pgfault_upcall(childid, thisenv->env_pgfault_upcall)) < 0)                panic("sys_env_set_pgfault_upcall: error %e/n", r);        if ((r = sys_env_set_status(childid, ENV_RUNNABLE)) < 0) {                cprintf("sys_env_set_status: error %e/n", r);                return -1;        }	return childid;	panic("fork not implemented");}
开发者ID:abhinav2710,项目名称:JOS-MIT6.828,代码行数:66,


示例7: pgfault

//// Custom page fault handler - if faulting page is copy-on-write,// map in our own private writable copy.//static voidpgfault(struct UTrapframe *utf){  void *addr = (void*)utf->utf_fault_va;  uint32_t err = utf->utf_err;  int r;  envid_t e_id = sys_getenvid();  // // Check that the faulting access was (1) a write, and (2) to a  // // copy-on-write page.  If not, panic.  // // Hint:  // //   Use the read-only page table mappings at uvpt  // //   (see <inc/memlayout.h>).  // // LAB 4: Your code here.  //cprintf("Calling pgfault");  if (!(err & FEC_WR)) {    panic("user page fault called on read (should be write)");  }  // if (!(uvpt[PGNUM(addr)] & PTE_COW)) {  //   panic("/n----------------------------------/nuser page fault called on non COW page with: /nAddress %p /nEnvironment=%d", addr, e_id);  // }  // Allocate a new page, map it at a temporary location (PFTEMP),  // copy the data from the old page to the new page, then move the new  // page to the old page's address.  // Hint:  //   You should make three system calls.  // LAB 4: Your code here.  void* page_addr = ROUNDDOWN(addr, PGSIZE);    int alloc_err = sys_page_alloc(e_id, PFTEMP, PTE_P | PTE_U | PTE_W);  if (alloc_err) {    panic("sys_page_alloc failed");  }  memcpy(PFTEMP, page_addr, PGSIZE);  int map_err = sys_page_map(e_id, PFTEMP,                              e_id, page_addr,                              PTE_P | PTE_U | PTE_W);  if (map_err) {    panic("sys_page_map failed");  }  int umap_err = sys_page_unmap(e_id, PFTEMP);  if (umap_err) {    panic("sys_page_unmap failed");  }  return;}
开发者ID:hvpeteet,项目名称:BackupGatech,代码行数:54,


示例8: serve

voidserve(void){	uint32_t req, whom;	int perm;	while (1) {		perm = 0;		req = ipc_recv((int32_t *) &whom, (void *) REQVA, &perm);		if (debug)			cprintf("fs req %d from %08x [page %08x: %s]/n",				req, whom, vpt[VPN(REQVA)], REQVA);		// All requests must contain an argument page		if (!(perm & PTE_P)) {			cprintf("Invalid request from %08x: no argument page/n",				whom);			continue; // just leave it hanging...		}		switch (req) {		case FSREQ_OPEN:			serve_open(whom, (struct Fsreq_open*)REQVA);			break;		case FSREQ_MAP:			serve_map(whom, (struct Fsreq_map*)REQVA);			break;		case FSREQ_SET_SIZE:			serve_set_size(whom, (struct Fsreq_set_size*)REQVA);			break;		case FSREQ_CLOSE:			serve_close(whom, (struct Fsreq_close*)REQVA);			break;		case FSREQ_DIRTY:			serve_dirty(whom, (struct Fsreq_dirty*)REQVA);			break;		case FSREQ_REMOVE:			serve_remove(whom, (struct Fsreq_remove*)REQVA);			break;		case FSREQ_SYNC:			serve_sync(whom);			break;		default:			cprintf("Invalid request code %d from %08x/n",                                whom, req);			break;		}		sys_page_unmap(0, (void*) REQVA);	}}
开发者ID:ichaos,项目名称:jos,代码行数:50,


示例9: pgfault

//// Custom page fault handler - if faulting page is copy-on-write,// map in our own private writable copy.//static voidpgfault(struct UTrapframe *utf){	void *addr = (void *) utf->utf_fault_va;	uint32_t err = utf->utf_err;	int r;	pte_t pte;	envid_t envid;	void *va;	// Check that the faulting access was (1) a write, and (2) to a	// copy-on-write page.  If not, panic.	// Hint:	//   Use the read-only page table mappings at vpt	//   (see <inc/memlayout.h>).	// LAB 4: Your code here.	//check # 1 - ren	 if (!(err & FEC_WR))		panic ("pgfault() - page fault caused not by write!");	//check # 2 - ren	pte = (pte_t)vpt[VPN(addr)];	pte &= 0xF00;	if (pte != PTE_COW)		panic ("pgfault() - access was not to a copy-on-write page!");			// Allocate a new page, map it at a temporary location (PFTEMP),	// copy the data from the old page to the new page, then move the new	// page to the old page's address.	// Hint:	//   You should make three system calls.	//   No need to explicitly delete the old page's mapping.		// LAB 4: Your code here.		envid = sys_getenvid();	va = (void*)ROUNDDOWN(addr, PGSIZE);	if ( (r = sys_page_alloc(envid, PFTEMP, PTE_U | PTE_P | PTE_W)) < 0)		sys_env_destroy(envid);	memcpy(PFTEMP, va, PGSIZE);	if ( (r = sys_page_map(envid, PFTEMP, envid, va, PTE_U | PTE_P | PTE_W)) < 0)		sys_env_destroy(envid);		if ((r = sys_page_unmap(envid, PFTEMP)) < 0)		//fourth system call, hm - ren		sys_env_destroy(envid);}
开发者ID:ren85,项目名称:jos2006,代码行数:54,


示例10: duppage

voidduppage(envid_t dstenv, void *addr){	int r;	// This is NOT what you should do in your fork.	if ((r = sys_page_alloc(dstenv, addr, PTE_P|PTE_U|PTE_W)) < 0)		panic("sys_page_alloc: %e", r);	if ((r = sys_page_map(dstenv, addr, 0, UTEMP, PTE_P|PTE_U|PTE_W)) < 0)		panic("sys_page_map: %e", r);	memmove(UTEMP, addr, PGSIZE);	if ((r = sys_page_unmap(0, UTEMP)) < 0)		panic("sys_page_unmap: %e", r);}
开发者ID:eewayhsu,项目名称:6.828,代码行数:14,


示例11: unmap_block

// Make sure this block is unmapped.voidunmap_block(uint32_t blockno){	int r;	if (!block_is_mapped(blockno))		return;	assert(block_is_free(blockno) || !block_is_dirty(blockno));	if ((r = sys_page_unmap(0, diskaddr(blockno))) < 0)		panic("unmap_block: sys_mem_unmap: %e", r);	assert(!block_is_mapped(blockno));}
开发者ID:ren85,项目名称:jos2006,代码行数:15,


示例12: map_segment

static intmap_segment(envid_t child, uintptr_t va, size_t memsz,	int fd, size_t filesz, off_t fileoffset, int perm){	int i, r;	void *blk;	//cprintf("map_segment %x+%x/n", va, memsz);	if ((i = PGOFF(va))) {		va -= i;		memsz += i;		filesz += i;		fileoffset -= i;	}	for (i = 0; i < memsz; i += PGSIZE) {		if (i >= filesz) {			// allocate a blank page			if ((r = sys_page_alloc(0, UTEMP, perm)) < 0) {				return r;			}                        memset(UTEMP, 0, PGSIZE);			sys_page_map(0, UTEMP, child, (void *)(va+i), perm);			return r;		} else {			// from file			if (perm & PTE_W) {				// must make a copy so it can be writable				if ((r = sys_page_alloc(0, UTEMP, PTE_P|PTE_U|PTE_W)) < 0)					return r;				if ((r = seek(fd, fileoffset + i)) < 0)					return r;				if ((r = read(fd, UTEMP, MIN(PGSIZE, filesz-i))) < 0)					return r;                                memset(UTEMP+MIN(PGSIZE, filesz-i), 0, PGSIZE-MIN(PGSIZE, filesz-i));				if ((r = sys_page_map(0, UTEMP, child, (void*) (va + i), perm)) < 0)					panic("spawn: sys_page_map data: %e", r);				sys_page_unmap(0, UTEMP);			} else {				// can map buffer cache read only				if ((r = read_map(fd, fileoffset + i, &blk)) < 0)					return r;				if ((r = sys_page_map(0, blk, child, (void*) (va + i), perm)) < 0)					panic("spawn: sys_page_map text: %e", r);			}		}	}	return 0;}
开发者ID:ichaos,项目名称:jos,代码行数:50,


示例13: fd_close

// Frees file descriptor 'fd' by closing the corresponding file// and unmapping the file descriptor page.// If 'must_exist' is 0, then fd can be a closed or nonexistent file// descriptor; the function will return 0 and have no other effect.// If 'must_exist' is 1, then fd_close returns -E_INVAL when passed a// closed or nonexistent file descriptor.// Returns 0 on success, < 0 on error.intfd_close(struct Fd *fd, bool must_exist){	struct Fd *fd2;	struct Dev *dev;	int r;	if ((r = fd_lookup(fd2num(fd), &fd2)) < 0	    || fd != fd2)		return (must_exist ? r : 0);	if ((r = dev_lookup(fd->fd_dev_id, &dev)) >= 0)		r = (*dev->dev_close)(fd);	// Make sure fd is unmapped.  Might be a no-op if	// (*dev->dev_close)(fd) already unmapped it.	(void) sys_page_unmap(0, fd);	return r;}
开发者ID:AlexandrSalin,项目名称:mit-jos,代码行数:23,


示例14: send_proof

// Send a proof over IPCvoid send_proof(envid_t to, Proof p) {  // Copy the proof to UTEMP  sys_page_alloc(0, UTEMP, PTE_U | PTE_W);  Heap tempHeap;  init_heap(&tempHeap, UTEMP, PGSIZE);  Heap *oldHeap = set_heap(&tempHeap);  Proof copy = proof_cp(p);  size_t offset = (uintptr_t)copy - (uintptr_t)UTEMP;  // Send the proof  ipc_send(to, offset, UTEMP, PTE_U);  sys_page_unmap(0, UTEMP);  // Reset the heap  set_heap(oldHeap);}
开发者ID:aaandrewww,项目名称:authcontrol,代码行数:17,


示例15: pgfault

//// Custom page fault handler - if faulting page is copy-on-write,// map in our own private writable copy.//static voidpgfault(struct UTrapframe *utf){	void *addr = (void *) utf->utf_fault_va;	uint32_t err = utf->utf_err;	int r;	// Check that the faulting access was (1) a write, and (2) to a	// copy-on-write page.  If not, panic.	// Hint:	//   Use the read-only page table mappings at vpt	//   (see <inc/memlayout.h>).	// LAB 4: Your code here.	//cprintf("In the handler of pgfault with va:%x/n", addr);	cprintf("Entered in pagefault entered. Fault va: %p, err: %d, perm: %d, VPN(addr): %d, addr>>PGSHIFT: %d/n", /			addr, err, PTE_COW, vpt[VPN(addr)], (uint32_t)addr>>PGSHIFT);	if(vpt[VPN(addr)] == 0 || addr == 0)	{		cprintf("In /n");		return;	}	if(!((err & FEC_WR) && (vpt[VPN(addr)] & PTE_COW)))		panic("Incorrectly entered in pagefault entered. Fault va: %p, err: %d, perm: %d, VPN(addr): %d, addr>>PGSHIFT: %d/n", /			addr, err, PTE_COW, vpt[VPN(addr)], (uint32_t)addr>>PGSHIFT);		// Allocate a new page, map it at a temporary location (PFTEMP),	// copy the data from the old page to the new page, then move the new	// page to the old page's address.	// Hint:	//   You should make three system calls.	//   No need to explicitly delete the old page's mapping.	// LAB 4: Your code here.	// Allocate a new page at PFTEMP	//cprintf("Check: %04x %04x/n", env->env_id, sys_getenvid());	sys_page_alloc(0, (void *)PFTEMP, PTE_W | PTE_U | PTE_P);	// Copy the old contents into the new page	memmove((void *)PFTEMP, (void *)ROUNDDOWN((uint32_t)addr, PGSIZE), PGSIZE);		// Now map the page to the 	sys_page_map(0, (void *)PFTEMP, /		0, (void *)ROUNDDOWN((uint32_t)addr,PGSIZE), PTE_W | PTE_U | PTE_P);			sys_page_unmap(0, PFTEMP);	//panic("pgfault not implemented");}
开发者ID:reddragon,项目名称:cse506,代码行数:51,


示例16: pgfault

//// Custom page fault handler - if faulting page is copy-on-write,// map in our own private writable copy.//static voidpgfault(struct UTrapframe *utf){	void *addr = (void *) utf->utf_fault_va;	uint32_t err = utf->utf_err;	int r;    //cprintf("envid: %x, eip: %x, fault_va: %x/n", thisenv->env_id, utf->utf_eip, addr);	// Check that the faulting access was (1) a write, and (2) to a	// copy-on-write page.  If not, panic.	// Hint:	//   Use the read-only page table mappings at uvpt	//   (see <inc/memlayout.h>).	// LAB 4: Your code here.    if (!(err & FEC_WR))    {        panic("pgfault: error is not a write. it is %e with falting addr 0x%x/n", err, addr);    }    if (!(uvpt[PGNUM(addr)] & PTE_COW))    {        panic("pgfault: page not COW/n");    }	// Allocate a new page, map it at a temporary location (PFTEMP),	// copy the data from the old page to the new page, then move the new	// page to the old page's address.	// Hint:	//   You should make three system calls.	// LAB 4: Your code here.    if ((r = sys_page_alloc(0, PFTEMP, PTE_U|PTE_W|PTE_P)) < 0)    {        panic("pgfault: sys_page_alloc fail %e", r);    }    memmove(PFTEMP, ROUNDDOWN(addr, PGSIZE), PGSIZE);    if ((r = sys_page_map(0, PFTEMP, 0, ROUNDDOWN(addr, PGSIZE), PTE_P|PTE_U|PTE_W)) < 0)    {        panic("pgfault: sys_page_map: %e", r);    }    if ((r = sys_page_unmap(0, PFTEMP)) < 0)    {        panic("pgfault: sys_page_unmap: %e", r);    }}
开发者ID:snowbabyjia,项目名称:6.828-JOS,代码行数:51,


示例17: syscall

// Dispatches to the correct kernel function, passing the arguments.int32_tsyscall(uint32_t syscallno, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5){	// Call the function corresponding to the 'syscallno' parameter.	// Return any appropriate return value.	// LAB 3: Your code here.	switch (syscallno) {		case (SYS_cputs):			sys_cputs((const char *) a1, a2);			return 0;		case (SYS_cgetc):			return sys_cgetc();		case (SYS_getenvid):			return sys_getenvid();		case (SYS_env_destroy):			return sys_env_destroy(a1, a2);		case (SYS_yield):			sys_yield();			return 0;		case (SYS_exofork):			return sys_exofork();		case (SYS_env_set_status):			return sys_env_set_status(a1, a2);		case (SYS_page_alloc):			return sys_page_alloc(a1, (void *) a2, a3);		case (SYS_page_map):			return sys_page_map(a1, (void *) a2, a3, (void *) a4, a5);		case (SYS_page_unmap):			return sys_page_unmap(a1, (void *) a2);		case (SYS_env_set_pgfault_upcall):			return sys_env_set_pgfault_upcall(a1, (void *) a2);		case (SYS_ipc_try_send):			return sys_ipc_try_send(a1, a2, (void *) a3, a4);		case (SYS_ipc_recv):			return sys_ipc_recv((void *) a1);		case (SYS_env_set_trapframe):			return sys_env_set_trapframe(a1, (struct Trapframe *) a2);		case (SYS_time_msec):			return sys_time_msec();		case (SYS_e1000_transmit):			return sys_e1000_transmit(a1, (char *) a2, a3);	default:		return -E_INVAL;	}}
开发者ID:bdmalab,项目名称:6.828,代码行数:47,


示例18: sys_env_set_thisenv

intsys_env_set_thisenv(envid_t envid, void *thisenv){	void *pgva = (void *) ROUNDDOWN(thisenv, PGSIZE);	if (sys_page_map(envid, pgva, curenv->env_id, (void *) UTEMP, 			 PTE_P|PTE_U|PTE_W) < 0) 		return -E_INVAL;	*((struct Env **)(UTEMP + PGOFF(thisenv))) = 		&((struct Env *)UENVS)[ENVX(envid)];	if (sys_page_unmap(curenv->env_id, (void *) UTEMP) < 0)		return -E_INVAL;	return 0;}
开发者ID:bosswissam,项目名称:djos,代码行数:17,


示例19: pgfault

//// Custom page fault handler - if faulting page is copy-on-write,// map in our own private writable copy.//static voidpgfault(struct UTrapframe *utf){    void *addr = (void *) utf->utf_fault_va;    uint32_t err = utf->utf_err;    int r;    // Check that the faulting access was (1) a write, and (2) to a    // copy-on-write page.  If not, panic.    // Hint:    //   Use the read-only page table mappings at vpt    //   (see <inc/memlayout.h>).    // LAB 4: Your code here.    // seanyliu    if (!(err & FEC_WR) || !(vpt[VPN(addr)] & PTE_COW)) {        panic("pgfault, err != FEC_WR or not copy-on-write page");    }    // Allocate a new page, map it at a temporary location (PFTEMP),    // copy the data from the old page to the new page, then move the new    // page to the old page's address.    // Hint:    //   You should make three system calls.    //   No need to explicitly delete the old page's mapping.    // LAB 4: Your code here.    // seanyliu    addr = ROUNDDOWN(addr, PGSIZE);    // Allocate a new page, map it at a temporary location (PFTEMP),    if ((r = sys_page_alloc(sys_getenvid(), (void *)PFTEMP, PTE_U | PTE_W | PTE_P)) < 0) {        panic("pgfault: sys_page_alloc %d", r);    }    // copy the data from the old page to the new page    memmove(PFTEMP, addr, PGSIZE);    // move the new page to the old page's address.    if ((r = sys_page_map(sys_getenvid(), PFTEMP, sys_getenvid(), addr, PTE_U | PTE_W | PTE_P)) < 0) {        panic("pgfault: sys_page_map %d", r);    }    if ((r = sys_page_unmap(sys_getenvid(), PFTEMP)) < 0) {        panic("pgfault: sys_page_unmap %d", r);    }    //panic("pgfault not implemented");}
开发者ID:HVNT,项目名称:6.828,代码行数:49,


示例20: pgfault

//// Custom page fault handler - if faulting page is copy-on-write,// map in our own private writable copy.//static voidpgfault(struct UTrapframe *utf){	void *addr = (void *) utf->utf_fault_va;	uint32_t err = utf->utf_err;	pte_t pte;	int r;	// Check that the faulting access was (1) a write, and (2) to a	// copy-on-write page.  If not, panic.	// Hint:	//   Use the read-only page table mappings at vpt	//   (see <inc/memlayout.h>).			// LAB 4: Your code here.	if ((err & FEC_WR) != FEC_WR)	{		if (debug)			cprintf("Error caught = %x/n", err);		panic ("user panic in lib/fork.c - pgfault(): faulting access is not write/n");	}	pte = vpt[VPN(addr)];	if ((pte & PTE_COW) != PTE_COW)		panic ("user panic in lib/fork.c - pgfault(): faulting access is not to a COW page/n");	// Allocate a new page, map it at a temporary location (PFTEMP),	// copy the data from the old page to the new page, then move the new	// page to the old page's address.	// Hint:	//   You should make three system calls.	//   No need to explicitly delete the old page's mapping.	// LAB 4: Your code here.	if ((r = sys_page_alloc(0, (void*)PFTEMP, PTE_P | PTE_U | PTE_W)) < 0)		panic ("user panic in lib/fork.c - pgfault(): sys_page_alloc: %e", r);		memmove((void*)PFTEMP, (void*)ROUNDDOWN(addr,PGSIZE), PGSIZE);			if ((r = sys_page_map(0, (void*)PFTEMP, 0, (void*)ROUNDDOWN(addr,PGSIZE), PTE_P | PTE_U | PTE_W)) < 0)			panic ("user panic in lib/fork.c - pgfault(): sys_page_map: %e", r);	if ((r = sys_page_unmap(0, (void*)PFTEMP)) < 0)		panic ("user panic in lib/fork.c - pgfault(): sys_page_unmap: %e", r);	// panic("pgfault not implemented");}
开发者ID:ksandeep,项目名称:JOS-Labs,代码行数:48,


示例21: pgfault

//// Custom page fault handler - if faulting page is copy-on-write,// map in our own private writable copy.//    static voidpgfault(struct UTrapframe *utf){    void *addr = (void *) utf->utf_fault_va;    uint32_t err = utf->utf_err;    int r;    // Check that the faulting access was (1) a write, and (2) to a    // copy-on-write page.  If not, panic.    // Hint:    //   Use the read-only page table mappings at vpt    //   (see <inc/memlayout.h>).    // LAB 4: Your code here.		pte_t pte = vpt[((uint64_t) addr / PGSIZE)];        if (!(err & FEC_WR))                panic("Faulting access write(FEC_WR) failed = 0x%x: err %x/n/n", (uint64_t) addr, err);        if (!(pte & PTE_COW))                panic("Faulting access copy-on-write(PTE_COW) failed = 0x%x, env_id 0x%x/n", (uint64_t) addr, thisenv->env_id);    // Allocate a new page, map it at a temporary location (PFTEMP),    // copy the data from the old page to the new page, then move the new    // page to the old page's address.    // Hint:    //   You should make three system calls.    //   No need to explicitly delete the old page's mapping.    // LAB 4: Your code here.	if ((r = sys_page_alloc(0, (void *)PFTEMP, PTE_P|PTE_U|PTE_W)) < 0)                panic("sys_page_alloc failed: %e/n", r);        memcpy(PFTEMP, ROUNDDOWN(addr, PGSIZE), PGSIZE);        void *vaTemp = (void *) ROUNDDOWN((uint64_t) addr, PGSIZE);        if ((r = sys_page_map(0, (void *)PFTEMP, 0, vaTemp, PTE_P|PTE_U|PTE_W)) < 0)                panic("sys_page_map failed: %e/n", r);        if ((r = sys_page_unmap(0, (void *)PFTEMP)) < 0)                panic("sys_page_unmap failed: %e/n", r);    //panic("pgfault not implemented");}
开发者ID:sumanthkanuparthi,项目名称:Hypervisor,代码行数:47,


示例22: pgfault

//// Custom page fault handler - if faulting page is copy-on-write,// map in our own private writable copy.//static voidpgfault(struct UTrapframe *utf){	void *addr = (void *) utf->utf_fault_va;	uint32_t err = utf->utf_err;	int r;	// Check that the faulting access was (1) a write, and (2) to a	// copy-on-write page.  If not, panic.	// Hint:	//   Use the read-only page table mappings at uvpt	//   (see <inc/memlayout.h>).	// LAB 4: Your code here.	// Allocate a new page, map it at a temporary location (PFTEMP),	// copy the data from the old page to the new page, then move the new	// page to the old page's address.	// Hint:	//   You should make three system calls.	//   No need to explicitly delete the old page's mapping.	// LAB 4: Your code here.  if (!((err & FEC_WR) && (uvpd[PDX(addr)] & PTE_P) && (uvpt[PGNUM(addr)] & PTE_P) && (uvpt[PGNUM(addr)] & PTE_COW)))      panic("not copy-on-write");  addr = ROUNDDOWN(addr, PGSIZE);    if (sys_page_alloc(0, PFTEMP, PTE_W|PTE_U|PTE_P) < 0)      panic("sys_page_alloc");     memcpy(PFTEMP, addr, PGSIZE);   if (sys_page_map(0, PFTEMP, 0, addr, PTE_W|PTE_U|PTE_P) < 0)      panic("sys_page_map");  if (sys_page_unmap(0, PFTEMP) < 0)      panic("sys_page_unmap");   return;//	panic("pgfault not implemented");}
开发者ID:chenkexin,项目名称:jos,代码行数:47,


示例23: syscall

// Dispatches to the correct kernel function, passing the arguments.uint32_tsyscall(uint32_t syscallno, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5){	// Call the function corresponding to the 'syscallno' parameter.	// Return any appropriate return value.	// LAB 3: Your code here.	switch (syscallno){			case SYS_cputs:			sys_cputs( (const char *)a1, a2);			return 0;		case SYS_cgetc:			return sys_cgetc();		case SYS_getenvid:			return sys_getenvid();		case SYS_env_destroy:			return sys_env_destroy(a1);				case SYS_yield:			sys_yield();			return 0;		case SYS_exofork:			return sys_exofork();		case SYS_env_set_status:			return sys_env_set_status(a1, a2);		case SYS_page_alloc:				return sys_page_alloc(a1, (void *)a2, a3);		case SYS_page_map:			return sys_page_map(a1, (void *)a2, a3, (void *)a4, a5);		case SYS_env_set_trapframe:			return sys_env_set_trapframe(a1, (struct Trapframe *)a2);				case SYS_page_unmap:			return sys_page_unmap(a1, (void *)a2);		case SYS_env_set_pgfault_upcall:			return sys_env_set_pgfault_upcall(a1, (void *)a2);		case SYS_ipc_try_send:			return sys_ipc_try_send(a1, a2, (void *)a3, a4);		case SYS_ipc_recv:			return sys_ipc_recv((void *)a1);		default: panic("this syscall ( %d )is not yet implemented", syscallno); 	}}
开发者ID:ren85,项目名称:jos2006,代码行数:44,


示例24: duppage

voidduppage(envid_t dstenv, void *addr){    int r;    // This is NOT what you should do in your fork.    // 这个实现太trick了:    // 先在dstenv的addr上分配一页,然后将dstenv的addr所在的页面映射到    // 当前进程的UTEMP位置,最后将current的addr的内容copy到current的    // UTEMP, 因为经过sys_page_map()之后,current TEMP和dstenv的addr    // 指向同一实际物理页面,这样就实现了把current'addr -> dstenv's addr    // 的功能。最后还要对current's UTEMP进行umap。    if ((r = sys_page_alloc(dstenv, addr, PTE_P|PTE_U|PTE_W)) < 0)        panic("sys_page_alloc: %e", r);    if ((r = sys_page_map(dstenv, addr, 0, UTEMP, PTE_P|PTE_U|PTE_W)) < 0)        panic("sys_page_map: %e", r);    memmove(UTEMP, addr, PGSIZE);    if ((r = sys_page_unmap(0, UTEMP)) < 0)        panic("sys_page_unmap: %e", r);}
开发者ID:lilialexlee,项目名称:6.828-lab,代码行数:20,


示例25: sys_for_fork

//new added sys_for_fork to //augment the system call interface //so that it is possible to send a batch of system calls at once//because switching into the kernel has non-trivial cost!!!static intsys_for_fork(envid_t envid, void * func, int status){	int r;	int perm = PTE_W|PTE_P|PTE_U;	void * va = (void*)(UXSTACKTOP - PGSIZE);	if((r = sys_page_alloc(envid, va, perm)) < 0)			return r;	if ((r = sys_page_map(envid, va, curenv->env_id, UTEMP, perm)) < 0)			panic("sys_page_map: %e", r);	memmove(UTEMP, va, PGSIZE);	if ((r = sys_page_unmap(curenv->env_id, UTEMP)) < 0)			panic("sys_page_unmap: %e", r);	if ((r = sys_env_set_pgfault_upcall(envid, func)) < 0)		return r;	if ((r = sys_env_set_status(envid, status)) < 0)		return r;	return 0;}
开发者ID:gzs715,项目名称:JOS,代码行数:24,


示例26: duppage

// dstenv is the child's env// addr is the va of the parentvoidduppage(envid_t dstenv, void *addr){	int r;	// This is NOT what you should do in your fork.	// allocate a page starting at addr in child's process space	if ((r = sys_page_alloc(dstenv, addr, PTE_P|PTE_U|PTE_W)) < 0)		panic("sys_page_alloc: %e", r);	// 								    srcenvid  srcva  dstenvid  dstva	if ((r = sys_page_map(dstenv,   addr,      0,    UTEMP, PTE_P|PTE_U|PTE_W)) < 0)		panic("sys_page_map: %e", r);	memmove(UTEMP, addr, PGSIZE);	if ((r = sys_page_unmap(0, UTEMP)) < 0)		panic("sys_page_unmap: %e", r);}
开发者ID:Guitang-Lan,项目名称:OS,代码行数:22,


示例27: sys_migrate

int // user call to lease selfsys_migrate(void *thisenv){	envid_t jdos_client = 0;	struct Env *e;	int i, r;	for (i = 0; i < NENV; i++) {		if (envs[i].env_type == ENV_TYPE_JDOSC) {			jdos_client = envs[i].env_id;			break;		}	}	// jdos client running?	if (!jdos_client) return -E_BAD_ENV; 	if ((r = envid2env(jdos_client, &e, 0)) < 0) return r;	// Mark leased and try to migrate	curenv->env_status = ENV_SUSPENDED; 	sys_page_alloc(curenv->env_id, (void *) IPCSND, PTE_U|PTE_P|PTE_W);	*((envid_t *) IPCSND) = curenv->env_id;	*((void **)(IPCSND + sizeof(envid_t))) = thisenv;	//can't write to page	r = sys_ipc_try_send(jdos_client, CLIENT_LEASE_REQUEST, 			     (void *) IPCSND, PTE_U|PTE_P); 	sys_page_unmap(curenv->env_id, (void *) IPCSND);	// Failed to migrate, back to running!	if (r < 0) {		cprintf("==> sys_migrate: failed to send ipc %d/n", r);		curenv->env_status = ENV_RUNNABLE;		return r;	}	// Migrated! BOOM!	return 0;}
开发者ID:bosswissam,项目名称:djos,代码行数:41,


示例28: pgfault

//// Custom page fault handler - if faulting page is copy-on-write,// map in our own private writable copy.//static voidpgfault(struct UTrapframe *utf){	void *addr = (void *) utf->utf_fault_va;	uint32_t err = utf->utf_err;	int r;	// Check that the faulting access was (1) a write, and (2) to a	// copy-on-write page.  If not, panic.	// Hint:	//   Use the read-only page table mappings at vpt	//   (see <inc/memlayout.h>).	//cprintf("pgfault: do page fault here %x/n",utf->utf_eflags);	// LAB 4: Your code here.	if((err & FEC_WR) == 0)		panic("pgfault: fault is not a write (err: %08x va: %08x ip: %08x)",err, addr, utf->utf_eip);	if ((vpd[PDX(addr)] & PTE_P) == 0 || (vpt[PGNUM(addr)] & PTE_COW) == 0)		panic ("pgfault: not a write or attempting to access a non-COW page");	// Allocate a new page, map it at a temporary location (PFTEMP),	// copy the data from the old page to the new page, then move the new	// page to the old page's address.	// Hint:	//   You should make three system calls.	//   No need to explicitly delete the old page's mapping.	// LAB 4: Your code here.	if ((r = sys_page_alloc (0, (void *)PFTEMP, PTE_U|PTE_P|PTE_W)) < 0)		panic ("pgfault: page allocation failed : %e", r);	addr = ROUNDDOWN (addr, PGSIZE);	memmove (PFTEMP, addr, PGSIZE);	if((r = sys_page_map (0, PFTEMP, 0, addr, PTE_U|PTE_P|PTE_W)) < 0)		panic ("pgfault: page mapping failed : %e", r);	if((r = sys_page_unmap(0,PFTEMP)) < 0)		panic("pgfault: page unmapping failed : %e", r);	//cprintf("pgfault: finish/n");	/* int gaga = 0; */	/* __asm__ volatile("movl %%esp, %0/n/t" */	/* 		 :"=r"(gaga) */	/* 		 ::); */	/* cprintf("gaga----------%x/n", gaga); */	//panic("pgfault not implemented");}
开发者ID:RudoIf,项目名称:J-O-S,代码行数:45,


示例29: check_bc

// Test that the block cache works, by smashing the superblock and// reading it back.static voidcheck_bc(void){    cprintf("Starting../n");    struct Super backup;    // back up super block    memmove(&backup, diskaddr(1), sizeof(backup));    BC_DEBUG("Wrote superblock to disk ram block../n");    BC_DEBUG("in memory magic number: %08x/n", ((struct Super*)diskaddr(1))->s_magic);    // smash it    strcpy(diskaddr(1), "OOPS!/n");    flush_block(diskaddr(1));    assert(va_is_mapped(diskaddr(1)));    assert(!va_is_dirty(diskaddr(1)));    cprintf("Smashed disk superblock../n");    // clear it out    sys_page_unmap(0, diskaddr(1));    assert(!va_is_mapped(diskaddr(1)));    cprintf("Unmapped superblock va../n");    // read it back in    assert(strcmp(diskaddr(1), "OOPS!/n") == 0);    cprintf("re-read superblock va../n");    // fix it    memmove(diskaddr(1), &backup, sizeof(backup));    assert(memcmp(diskaddr(1), &backup, sizeof(backup)) == 0);        flush_block(diskaddr(1));    assert(memcmp(diskaddr(1), &backup, sizeof(backup)) == 0);    BC_DEBUG("backup magic number   : %08x/n", backup.s_magic);    BC_DEBUG("in memory magic number: %08x/n", ((struct Super*)diskaddr(1))->s_magic);    BC_DEBUG("expected magic value  : %08x/n", FS_MAGIC);    cprintf("Fixed superblock../n");    cprintf("block cache is good/n");}
开发者ID:YYmooon,项目名称:439h,代码行数:43,


示例30: serve

voidserve(void){	uint32_t req, whom;	int perm, r;	void *pg;		while (1) {		perm = 0;		req = ipc_recv((int32_t *) &whom, fsreq, &perm);		if (debug)			cprintf("fs req %d from %08x [page %08x: %08x]/n",				req, whom, vpt[VPN(fsreq)], fsreq);				// All requests must contain an argument page		if (!(perm & PTE_P)) {			cprintf("Invalid request from %08x: no argument page/n",				whom);			continue; // just leave it hanging...		}		pg = NULL;		if (req == FSREQ_OPEN) {	//cprintf("/nserv.c 444444/n");//cprintf("/nwhom : 0x%08x fsreq : 0x%08x pg : 0x%08x perm 0x%08x/n", whom, fsreq, &pg, &perm);			r = serve_open(whom, (struct Fsreq_open*)fsreq, &pg, &perm);			//cprintf("serveopen return addr %x /n", pg);//cprintf("/nserv.c 55555/n");		} else if (req < NHANDLERS && handlers[req]) {			r = handlers[req](whom, fsreq);		} else {			cprintf("Invalid request code %d from %08x/n", whom, req);			r = -E_INVAL;		}				ipc_send(whom, r, pg, perm);		sys_page_unmap(0, fsreq);//	cprintf("/nend of serve while loop in serv.c/n");	}}
开发者ID:nitin-aggarwal,项目名称:JOS,代码行数:41,



注:本文中的sys_page_unmap函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ sys_read函数代码示例
C++ sys_page_map函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。