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

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

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

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

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

示例1: do_mmap

/*===========================================================================* *				do_mmap			     		     * *===========================================================================*/int do_mmap(message *m){	int r, n;	struct vmproc *vmp;	vir_bytes addr = m->VMM_ADDR;	struct vir_region *vr = NULL;	int execpriv = 0;	size_t len = (vir_bytes) m->VMM_LEN;	/* RS and VFS can do slightly more special mmap() things */	if(m->m_source == VFS_PROC_NR || m->m_source == RS_PROC_NR)		execpriv = 1;	if(m->VMM_FLAGS & MAP_THIRDPARTY) {		if(!execpriv) return EPERM;		if((r=vm_isokendpt(m->VMM_FORWHOM, &n)) != OK)			return ESRCH;	} else {		/* regular mmap, i.e. for caller */		if((r=vm_isokendpt(m->m_source, &n)) != OK) {			panic("do_mmap: message from strange source: %d",				m->m_source);		}	}	vmp = &vmproc[n];	if(m->VMM_FD == -1 || (m->VMM_FLAGS & MAP_ANON)) {		/* actual memory in some form */		mem_type_t *mt = NULL;		if(m->VMM_FD != -1 || len <= 0) {			printf("VM: mmap: fd %d, len 0x%x/n", m->VMM_FD, len);			return EINVAL;		}		/* Contiguous phys memory has to be preallocated. */		if((m->VMM_FLAGS & (MAP_CONTIG|MAP_PREALLOC)) == MAP_CONTIG) {			return EINVAL;		}		if(m->VMM_FLAGS & MAP_CONTIG) {			mt = &mem_type_anon_contig;		} else	mt = &mem_type_anon;		if(!(vr = mmap_region(vmp, addr, m->VMM_FLAGS, len,			VR_WRITABLE | VR_ANON, mt, execpriv))) {			return ENOMEM;		}	} else {		return ENXIO;	}	/* Return mapping, as seen from process. */	m->VMM_RETADDR = vr->vaddr;	return OK;}
开发者ID:AjeyBohare,项目名称:minix,代码行数:61,


示例2: do_remap

/*===========================================================================* *				do_remap		     		     * *===========================================================================*/PUBLIC int do_remap(message *m){	int dn, sn;	vir_bytes da, sa, startv;	size_t size;	struct vir_region *vr, *region;	struct vmproc *dvmp, *svmp;	int r;	da = (vir_bytes) m->VMRE_DA;	sa = (vir_bytes) m->VMRE_SA;	size = m->VMRE_SIZE;	if ((r = vm_isokendpt((endpoint_t) m->VMRE_D, &dn)) != OK)		return EINVAL;	if ((r = vm_isokendpt((endpoint_t) m->VMRE_S, &sn)) != OK)		return EINVAL;	dvmp = &vmproc[dn];	svmp = &vmproc[sn];	/* da is not translated by arch_vir2map(),	 * it's handled a little differently,	 * since in map_remap(), we have to know	 * about whether the user needs to bind to	 * THAT address or be chosen by the system.	 */	sa = arch_vir2map(svmp, sa);	if (!(region = map_lookup(svmp, sa)))		return EINVAL;	if(region->vaddr != sa) {		printf("VM: do_remap: not start of region./n");		return EFAULT;	}	if(!(region->flags & VR_SHARED)) {		printf("VM: do_remap: not shared./n");		return EFAULT;	}	if (size % VM_PAGE_SIZE)  		size += VM_PAGE_SIZE - size % VM_PAGE_SIZE;	if(size != region->length) {		printf("VM: do_remap: not size of region./n");		return EFAULT;	}	if ((r = map_remap(dvmp, da, size, region, &startv)) != OK)		return r;	m->VMRE_RETA = (char *) arch_map2vir(dvmp, startv);	return OK;}
开发者ID:mwilbur,项目名称:minix,代码行数:59,


示例3: do_rs_update

/*===========================================================================* *				do_rs_update	     			     * *===========================================================================*/int do_rs_update(message *m_ptr){	endpoint_t src_e, dst_e, reply_e;	int src_p, dst_p;	struct vmproc *src_vmp, *dst_vmp;	int r;	src_e = m_ptr->VM_RS_SRC_ENDPT;	dst_e = m_ptr->VM_RS_DST_ENDPT;	/* Lookup slots for source and destination process. */	if(vm_isokendpt(src_e, &src_p) != OK) {		printf("do_rs_update: bad src endpoint %d/n", src_e);		return EINVAL;	}	src_vmp = &vmproc[src_p];	if(vm_isokendpt(dst_e, &dst_p) != OK) {		printf("do_rs_update: bad dst endpoint %d/n", dst_e);		return EINVAL;	}	dst_vmp = &vmproc[dst_p];	/* Let the kernel do the update first. */	r = sys_update(src_e, dst_e);	if(r != OK) {		return r;	}	/* Do the update in VM now. */	r = swap_proc_slot(src_vmp, dst_vmp);	if(r != OK) {		return r;	}	r = swap_proc_dyn_data(src_vmp, dst_vmp);	if(r != OK) {		return r;	}	pt_bind(&src_vmp->vm_pt, src_vmp);	pt_bind(&dst_vmp->vm_pt, dst_vmp);	/* Reply, update-aware. */	reply_e = m_ptr->m_source;	if(reply_e == src_e) reply_e = dst_e;	else if(reply_e == dst_e) reply_e = src_e;	m_ptr->m_type = OK;	r = send(reply_e, m_ptr);	if(r != OK) {		panic("send() error");	}	return SUSPEND;}
开发者ID:0xenvision,项目名称:minix,代码行数:55,


示例4: do_rs_set_priv

/*===========================================================================* *				do_rs_set_priv				     * *===========================================================================*/int do_rs_set_priv(message *m){	int r, n, nr;	struct vmproc *vmp;	bitchunk_t call_mask[VM_CALL_MASK_SIZE], *call_mask_p;	nr = m->VM_RS_NR;	if ((r = vm_isokendpt(nr, &n)) != OK) {		printf("do_rs_set_priv: bad endpoint %d/n", nr);		return EINVAL;	}	vmp = &vmproc[n];	if (m->VM_RS_BUF) {		r = sys_datacopy(m->m_source, (vir_bytes) m->VM_RS_BUF, SELF,			(vir_bytes) call_mask, sizeof(call_mask));		if (r != OK)			return r;		call_mask_p = call_mask;	} else {		if (m->VM_RS_SYS) {			printf("VM: do_rs_set_priv: sys procs don't share!/n");			return EINVAL;		}		call_mask_p = NULL;	}	acl_set(vmp, call_mask_p, m->VM_RS_SYS);	return OK;}
开发者ID:Stichting-MINIX-Research-Foundation,项目名称:minix,代码行数:36,


示例5: do_push_sig

/*===========================================================================* *				do_push_sig				     * *===========================================================================*/PUBLIC int do_push_sig(message *msg){	int r, n;	endpoint_t ep;	vir_bytes sp;	struct vmproc *vmp;	ep = msg->VMPS_ENDPOINT;	if((r=vm_isokendpt(ep, &n)) != OK) {		printf("VM: bogus endpoint %d from %d/n", ep, msg->m_source);		return r;	}	vmp = &vmproc[n];        if ((r=get_stack_ptr(ep, &sp)) != OK)                vm_panic("couldn't get new stack pointer (for sig)",r);		/* Save old SP for caller */	msg->VMPS_OLD_SP = (char *) sp;           /* Make room for the sigcontext and sigframe struct. */        sp -= sizeof(struct sigcontext)                                 + 3 * sizeof(char *) + 2 * sizeof(int);        if ((r=adjust(vmp, vmp->vm_arch.vm_seg[D].mem_len, sp)) != OK) {		printf("VM: do_push_sig: adjust() failed: %d/n", r);		return r;	}	return OK;}
开发者ID:boostsup,项目名称:minix3,代码行数:35,


示例6: do_procctl

int do_procctl(message *msg){	endpoint_t proc;	struct vmproc *vmp;	if(vm_isokendpt(msg->VMPCTL_WHO, &proc) != OK) {		printf("VM: bogus endpoint VM_PROCCTL %d/n",			msg->VMPCTL_WHO);		return EINVAL;	}	vmp = &vmproc[proc];	switch(msg->VMPCTL_PARAM) {		case VMPPARAM_CLEAR:			if(msg->m_source != RS_PROC_NR				&& msg->m_source != VFS_PROC_NR)				return EPERM;			free_proc(vmp);			if(pt_new(&vmp->vm_pt) != OK)				panic("VMPPARAM_CLEAR: pt_new failed");			pt_bind(&vmp->vm_pt, vmp);			return OK;		default:			return EINVAL;	}	return OK;}
开发者ID:kl07,项目名称:minix-course,代码行数:29,


示例7: do_exit

/*===========================================================================* *				do_exit					     * *===========================================================================*/int do_exit(message *msg){	int proc;	struct vmproc *vmp;SANITYCHECK(SCL_FUNCTIONS);	if(vm_isokendpt(msg->VME_ENDPOINT, &proc) != OK) {		printf("VM: bogus endpoint VM_EXIT %d/n", msg->VME_ENDPOINT);		return EINVAL;	}	vmp = &vmproc[proc];	if(!(vmp->vm_flags & VMF_EXITING)) {		printf("VM: unannounced VM_EXIT %d/n", msg->VME_ENDPOINT);		return EINVAL;	}	{		/* Free pagetable and pages allocated by pt code. */SANITYCHECK(SCL_DETAIL);		free_proc(vmp);SANITYCHECK(SCL_DETAIL);	} SANITYCHECK(SCL_DETAIL);	/* Reset process slot fields. */	clear_proc(vmp);SANITYCHECK(SCL_FUNCTIONS);	return OK;}
开发者ID:kl07,项目名称:minix-course,代码行数:35,


示例8: do_unmap_phys

/*===========================================================================* *				do_unmap_phys		     		     * *===========================================================================*/PUBLIC int do_unmap_phys(message *m){	int r, n;	struct vmproc *vmp;	endpoint_t target;	struct vir_region *region;	target = m->VMUP_EP;	if(target == SELF)		target = m->m_source;	if((r=vm_isokendpt(target, &n)) != OK)		return EINVAL;	vmp = &vmproc[n];	if(!(region = map_lookup(vmp,	  arch_vir2map(vmp, (vir_bytes) m->VMUM_ADDR)))) {		return EINVAL;	}	if(!(region->flags & VR_DIRECT)) {		return EINVAL;	}	if(map_unmap_region(vmp, region, region->length) != OK) {		return EINVAL;	}	return OK;}
开发者ID:CesarBallardini,项目名称:minix3,代码行数:34,


示例9: do_vfs_reply

/*===========================================================================* *                              do_vfs_reply                                 * *===========================================================================*/int do_vfs_reply(message *m){/* VFS has handled a VM request and VFS has replied. It must be the * active request. */ 	struct vfs_request_node *orignode = active; 	vfs_callback_t req_callback;	void *cbarg;	int n;	struct vmproc *vmp;	assert(active);	assert(active->req_id == m->VMV_REQID);	/* the endpoint may have exited */	if(vm_isokendpt(m->VMV_ENDPOINT, &n) != OK)		vmp = NULL;	else	vmp = &vmproc[n];	req_callback = active->callback;	cbarg = active->opaque;	active = NULL;	/* Invoke requested reply-callback within VM. */	if(req_callback) req_callback(vmp, m, cbarg, orignode->reqstate);	SLABFREE(orignode);	/* Send the next request message if any and not re-activated. */	if(first_queued && !active)		activate();	return SUSPEND;	/* don't reply to the reply */}
开发者ID:anuragpeshne,项目名称:minix,代码行数:37,


示例10: do_mmap

/*===========================================================================* *				do_mmap			     		     * *===========================================================================*/PUBLIC int do_mmap(message *m){	int r, n;	struct vmproc *vmp;	int mfflags = 0;	struct vir_region *vr = NULL;	if((r=vm_isokendpt(m->m_source, &n)) != OK) {		panic("do_mmap: message from strange source: %d", m->m_source);	}	vmp = &vmproc[n];	if(!(vmp->vm_flags & VMF_HASPT))		return ENXIO;	if(m->VMM_FD == -1 || (m->VMM_FLAGS & MAP_ANON)) {		int s;		vir_bytes v;		u32_t vrflags = VR_ANON | VR_WRITABLE;		size_t len = (vir_bytes) m->VMM_LEN;		if(m->VMM_FD != -1) {			return EINVAL;		}		/* Contiguous phys memory has to be preallocated. */		if((m->VMM_FLAGS & (MAP_CONTIG|MAP_PREALLOC)) == MAP_CONTIG) {			return EINVAL;		}		if(m->VMM_FLAGS & MAP_PREALLOC) mfflags |= MF_PREALLOC;		if(m->VMM_FLAGS & MAP_LOWER16M) vrflags |= VR_LOWER16MB;		if(m->VMM_FLAGS & MAP_LOWER1M)  vrflags |= VR_LOWER1MB;		if(m->VMM_FLAGS & MAP_ALIGN64K) vrflags |= VR_PHYS64K;		if(m->VMM_FLAGS & MAP_SHARED) vrflags |= VR_SHARED;		if(m->VMM_FLAGS & MAP_CONTIG) vrflags |= VR_CONTIG;		if(len % VM_PAGE_SIZE)			len += VM_PAGE_SIZE - (len % VM_PAGE_SIZE);		if(!(vr = map_page_region(vmp,			arch_vir2map(vmp,				m->VMM_ADDR ? m->VMM_ADDR : vmp->vm_stacktop),			VM_DATATOP, len, MAP_NONE, vrflags, mfflags))) {			return ENOMEM;		}	} else {		return ENOSYS;	}	/* Return mapping, as seen from process. */	assert(vr);	m->VMM_RETADDR = arch_map2vir(vmp, vr->vaddr);	return OK;}
开发者ID:mwilbur,项目名称:minix,代码行数:61,


示例11: do_munmap

/*===========================================================================* *                              do_munmap                                    * *===========================================================================*/int do_munmap(message *m){        int r, n;        struct vmproc *vmp;        vir_bytes addr, len, offset;	struct vir_region *vr;	endpoint_t target = SELF;	if(m->m_type == VM_UNMAP_PHYS) {		target = m->VMUP_EP;	} else if(m->m_type == VM_SHM_UNMAP) {		target = m->VMUN_ENDPT;	}	if(target == SELF)		target = m->m_source;        if((r=vm_isokendpt(target, &n)) != OK) {                panic("do_mmap: message from strange source: %d", m->m_source);        }         vmp = &vmproc[n];	if(m->m_type == VM_UNMAP_PHYS) {		addr = (vir_bytes) m->VMUP_VADDR;	} else if(m->m_type == VM_SHM_UNMAP) {		addr = (vir_bytes) m->VMUN_ADDR;	} else	addr = (vir_bytes) m->VMUM_ADDR;        if(!(vr = map_lookup(vmp, addr, NULL))) {                printf("VM: unmap: virtual address 0x%lx not found in %d/n",                        addr, target);                return EFAULT;        }	if(addr % VM_PAGE_SIZE)		return EFAULT; 	if(m->m_type == VM_UNMAP_PHYS || m->m_type == VM_SHM_UNMAP) {		len = vr->length;	} else len = roundup(m->VMUM_LEN, VM_PAGE_SIZE);	offset = addr - vr->vaddr;	if(offset + len > vr->length) {		printf("munmap: addr 0x%lx len 0x%lx spills out of region/n",			addr, len);		return EFAULT;	}	if(map_unmap_region(vmp, vr, offset, len) != OK)		panic("do_munmap: map_unmap_region failed");	return OK;}
开发者ID:AgamAgarwal,项目名称:minix,代码行数:58,


示例12: do_watch_exit

/*===========================================================================* *				do_watch_exit				     * *===========================================================================*/PUBLIC int do_watch_exit(message *m){	endpoint_t e = m->VM_WE_EP;	struct vmproc *vmp;	int p;	if(vm_isokendpt(e, &p) != OK) return ESRCH;	vmp = &vmproc[p];	vmp->vm_flags |= VMF_WATCHEXIT;	return OK;}
开发者ID:DragonQuan,项目名称:minix3,代码行数:14,


示例13: do_map_phys

/*===========================================================================* *				do_map_phys		     		     * *===========================================================================*/PUBLIC int do_map_phys(message *m){	int r, n;	struct vmproc *vmp;	endpoint_t target;	struct vir_region *vr;	vir_bytes len;	phys_bytes startaddr;	size_t offset;	target = m->VMMP_EP;	len = m->VMMP_LEN;	if (len <= 0) return EINVAL;	if(target == SELF)		target = m->m_source;	if((r=vm_isokendpt(target, &n)) != OK)		return EINVAL;	startaddr = (vir_bytes)m->VMMP_PHADDR;	/* First check permission, then round range down/up. Caller can't	 * help it if we can't map in lower than page granularity.	 */	if(map_perm_check(m->m_source, target, startaddr, len) != OK) {		printf("VM: unauthorized mapping of 0x%lx by %d/n",			startaddr, m->m_source);		return EPERM;	}	vmp = &vmproc[n];	if(!(vmp->vm_flags & VMF_HASPT))		return ENXIO;	offset = startaddr % VM_PAGE_SIZE;	len += offset;	startaddr -= offset;	if(len % VM_PAGE_SIZE)		len += VM_PAGE_SIZE - (len % VM_PAGE_SIZE);	if(!(vr = map_page_region(vmp, arch_vir2map(vmp, vmp->vm_stacktop),		VM_DATATOP, len, startaddr,		VR_DIRECT | VR_NOPF | VR_WRITABLE, 0))) {		return ENOMEM;	}	m->VMMP_VADDR_REPLY = (void *) (arch_map2vir(vmp, vr->vaddr) + offset);	return OK;}
开发者ID:CesarBallardini,项目名称:minix3,代码行数:57,


示例14: do_remap

/*===========================================================================* *				do_remap		     		     * *===========================================================================*/int do_remap(kipc_msg_t *m){	int d, dn, s, sn;	vir_bytes da, sa, startv;	size_t size;	struct vir_region *vr, *region;	struct vmproc *dvmp, *svmp;	int r;	d = m->VMRE_D;	s = m->VMRE_S;	da = (vir_bytes) m->VMRE_DA;	sa = (vir_bytes) m->VMRE_SA;	size = m->VMRE_SIZE;	if ((r = vm_isokendpt(d, &dn)) != 0)		return -EINVAL;	if ((r = vm_isokendpt(s, &sn)) != 0)		return -EINVAL;	dvmp = &vmproc[dn];	svmp = &vmproc[sn];	/* da is not translated by arch_vir2map(),	 * it's handled a little differently,	 * since in map_remap(), we have to know	 * about whether the user needs to bind to	 * THAT address or be chosen by the system.	 */	sa = arch_vir2map(svmp, sa);	if (!(region = map_lookup(svmp, sa)))		return -EINVAL;	if ((r = map_remap(dvmp, da, size, region, &startv)) != 0)		return r;	m->VMRE_RETA = (char *) arch_map2vir(dvmp, startv);	return 0;}
开发者ID:locosoft1986,项目名称:nucleos,代码行数:43,


示例15: scall_mmap

int scall_mmap(kipc_msg_t *m){	int err, n;	struct vmproc *vmp;	int mfflags = 0;	struct vir_region *vr = NULL;	if((err = vm_isokendpt(m->m_source, &n)) != 0) {		vm_panic("do_mmap: message from strange source", m->m_source);	}	vmp = &vmproc[n];	if(!(vmp->vm_flags & VMF_HASPT))		return -ENXIO;	if(m->VMM_FD == -1 || (m->VMM_FLAGS & MAP_ANONYMOUS)) {		int s;		vir_bytes v;		u32_t vrflags = VR_ANON | VR_WRITABLE;		size_t len = (vir_bytes) m->VMM_LEN;		if(m->VMM_FD != -1) {			return -EINVAL;		}		if(m->VMM_FLAGS & MAP_CONTIG) mfflags |= MF_CONTIG;		if(m->VMM_FLAGS & MAP_PREALLOC) mfflags |= MF_PREALLOC;		if(m->VMM_FLAGS & MAP_LOWER16M) vrflags |= VR_LOWER16MB;		if(m->VMM_FLAGS & MAP_LOWER1M)  vrflags |= VR_LOWER1MB;		if(m->VMM_FLAGS & MAP_ALIGN64K) vrflags |= VR_PHYS64K;		if(m->VMM_FLAGS & MAP_SHARED) vrflags |= VR_SHARED;		if(len % VM_PAGE_SIZE)			len += VM_PAGE_SIZE - (len % VM_PAGE_SIZE);		if(!(vr = map_page_region(vmp,			arch_vir2map(vmp, m->VMM_ADDR ? m->VMM_ADDR : vmp->vm_stacktop),			VM_DATATOP, len, MAP_NONE, vrflags, mfflags))) {			return -ENOMEM;		}	} else {		return -ENOSYS;	}	/* Return mapping, as seen from process. */	vm_assert(vr);	m->VMM_RETADDR = arch_map2vir(vmp, vr->vaddr);	return m->VMM_RETADDR;}
开发者ID:locosoft1986,项目名称:nucleos,代码行数:51,


示例16: do_brk

/*===========================================================================* *				do_brk					     * *===========================================================================*/int do_brk(message *msg){/* Perform the brk(addr) system call. * The parameter, 'addr' is the new virtual address in D space. */	int proc;	if(vm_isokendpt(msg->VMB_ENDPOINT, &proc) != OK) {		printf("VM: bogus endpoint VM_BRK %d/n", msg->VMB_ENDPOINT);		return EINVAL;	}	return real_brk(&vmproc[proc], (vir_bytes) msg->VMB_ADDR);}
开发者ID:AgamAgarwal,项目名称:minix,代码行数:17,


示例17: do_notify_sig

/*===========================================================================* *				do_notify_sig				     * *===========================================================================*/PUBLIC int do_notify_sig(message *m){	int i, avails = 0;	endpoint_t ep = m->VM_NOTIFY_SIG_ENDPOINT;	endpoint_t ipc_ep = m->VM_NOTIFY_SIG_IPC;	int r;	struct vmproc *vmp;	int pslot;	if(vm_isokendpt(ep, &pslot) != OK) return ESRCH;	vmp = &vmproc[pslot];	/* Only record the event if we've been asked to report it. */	if(!(vmp->vm_flags & VMF_WATCHEXIT))		return OK;	for (i = 0; i < NR_PROCS; i++) {		/* its signal is already here */		if (!array[i].avail && array[i].ep == ep)			goto out;		if (array[i].avail)			avails++;	}	if (!avails) {		/* no slot for signals, unlikely */		printf("VM: no slot for signals!/n");		return ENOMEM;	}	for (i = 0; i < NR_PROCS; i++) {		if (array[i].avail) {			array[i].avail = 0;			array[i].ep = ep;			break;		}	}out:	/* only care when IPC server starts up,	 * and bypass the process to be signal is IPC itself.	 */	if (ipc_ep != 0 && ep != ipc_ep) {		r = notify(ipc_ep);		if (r != OK)			printf("VM: notify IPC error!/n");	}	return OK;}
开发者ID:DragonQuan,项目名称:minix3,代码行数:52,


示例18: do_willexit

/*===========================================================================* *				do_willexit				     * *===========================================================================*/int do_willexit(message *msg){	int proc;	struct vmproc *vmp;	if(vm_isokendpt(msg->VMWE_ENDPOINT, &proc) != OK) {		printf("VM: bogus endpoint VM_EXITING %d/n",			msg->VMWE_ENDPOINT);		return EINVAL;	}	vmp = &vmproc[proc];	vmp->vm_flags |= VMF_EXITING;	return OK;}
开发者ID:kl07,项目名称:minix-course,代码行数:19,


示例19: do_getrusage

/*===========================================================================* *				do_getrusage		     		     * *===========================================================================*/int do_getrusage(message *m){	int res, slot;	struct vmproc *vmp;	struct rusage r_usage;	/* If the request is not from PM, it is coming directly from userland.	 * This is an obsolete construction. In the future, userland programs	 * should no longer be allowed to call vm_getrusage(2) directly at all.	 * For backward compatibility, we simply return success for now.	 */	if (m->m_source != PM_PROC_NR)		return OK;	/* Get the process for which resource usage is requested. */	if ((res = vm_isokendpt(m->m_lsys_vm_rusage.endpt, &slot)) != OK)		return ESRCH;	vmp = &vmproc[slot];	/* We are going to change only a few fields, so copy in the rusage	 * structure first. The structure is still in PM's address space at	 * this point, so use the message source.	 */	if ((res = sys_datacopy(m->m_source, m->m_lsys_vm_rusage.addr,		SELF, (vir_bytes) &r_usage, (vir_bytes) sizeof(r_usage))) < 0)		return res;	if (!m->m_lsys_vm_rusage.children) {		r_usage.ru_maxrss = vmp->vm_total_max / 1024L; /* unit is KB */		r_usage.ru_minflt = vmp->vm_minor_page_fault;		r_usage.ru_majflt = vmp->vm_major_page_fault;	} else {		/* XXX TODO: return the fields for terminated, waited-for		 * children of the given process. We currently do not have this		 * information! In the future, rather than teaching VM about		 * the process hierarchy, PM should probably tell VM at process		 * exit time which other process should inherit its resource		 * usage fields. For now, we assume PM clears the fields before		 * making this call, so we don't zero the fields explicitly.		 */	}	/* Copy out the resulting structure back to PM. */	return sys_datacopy(SELF, (vir_bytes) &r_usage, m->m_source,		m->m_lsys_vm_rusage.addr, (vir_bytes) sizeof(r_usage));}
开发者ID:Stichting-MINIX-Research-Foundation,项目名称:minix,代码行数:50,


示例20: do_vfs_reply

/*===========================================================================* *				do_vfs_reply			     	* *===========================================================================*/PUBLIC int do_vfs_reply(message *m){/* Reply to a request has been received from vfs. Handle it. First verify * and look up which process, identified by endpoint, this is about. * Then call the callback function that was registered when the request * was done. Return result to vfs. */	endpoint_t ep;	struct vmproc *vmp;	int procno;	callback_t cb;	ep = m->VMV_ENDPOINT;	if(vm_isokendpt(ep, &procno) != OK) {		printf("VM:do_vfs_reply: reply %d about invalid endpoint %d/n",			m->m_type, ep);		vm_panic("do_vfs_reply: invalid endpoint from vfs", NO_NUM);	}	vmp = &vmproc[procno];	if(!vmp->vm_callback) {		printf("VM:do_vfs_reply: reply %d: endpoint %d not waiting/n",			m->m_type, ep);		vm_panic("do_vfs_reply: invalid endpoint from vfs", NO_NUM);	}	if(vmp->vm_callback_type != m->m_type) {		printf("VM:do_vfs_reply: reply %d unexpected for endpoint %d/n"		  " (expecting %d)/n", m->m_type, ep, vmp->vm_callback_type);		vm_panic("do_vfs_reply: invalid reply from vfs", NO_NUM);	}	if(vmp->vm_flags & VMF_EXITING) {		/* This is not fatal or impossible, but the callback		 * function has to realize it shouldn't do any PM or		 * VFS calls for this process.		 */		printf("VM:do_vfs_reply: reply %d for EXITING endpoint %d/n",		  m->m_type, ep);	}	/* All desired callback state has been used, so save and reset	 * the callback. This allows the callback to register another	 * one.	 */	cb = vmp->vm_callback;	vmp->vm_callback = NULL;	cb(vmp, m);	return SUSPEND;}
开发者ID:boostsup,项目名称:minix3,代码行数:49,


示例21: getsrc

static int getsrc(struct vir_region *region,	struct vmproc **vmp, struct vir_region **r){	int srcproc;	if(region->def_memtype != &mem_type_shared) {		printf("shared region hasn't shared type but %s./n",			region->def_memtype->name);		return EINVAL;	}	if(!region->param.shared.ep || !region->param.shared.vaddr) {		printf("shared region has not defined source region./n");		util_stacktrace();		return EINVAL;	}        if(vm_isokendpt((endpoint_t) region->param.shared.ep, &srcproc) != OK) {		printf("VM: shared memory with missing source process./n");		util_stacktrace();                return EINVAL;	}	*vmp = &vmproc[srcproc];	if(!(*r=map_lookup(*vmp, region->param.shared.vaddr, NULL))) {		printf("VM: shared memory with missing vaddr 0x%lx./n",			region->param.shared.vaddr);                return EINVAL;	}	if((*r)->def_memtype != &mem_type_anon) {		printf("source region hasn't anon type but %s./n",			(*r)->def_memtype->name);		return EINVAL;	}	if(region->param.shared.id != (*r)->id) {		printf("source region has no matching id/n");		return EINVAL;	}	return OK;}
开发者ID:anuragpeshne,项目名称:minix,代码行数:44,


示例22: do_munmap

/*===========================================================================* *                              do_munmap                                    * *===========================================================================*/PUBLIC int do_munmap(message *m){        int r, n;        struct vmproc *vmp;        vir_bytes addr, len;	struct vir_region *vr;                if((r=vm_isokendpt(m->m_source, &n)) != OK) {                panic("do_mmap: message from strange source: %d", m->m_source);        }         vmp = &vmproc[n];	if(!(vmp->vm_flags & VMF_HASPT))		return ENXIO;	if(m->m_type == VM_MUNMAP) {	        addr = (vir_bytes) arch_vir2map(vmp, (vir_bytes) m->VMUM_ADDR);	} else if(m->m_type == VM_MUNMAP_TEXT) {	        addr = (vir_bytes) arch_vir2map_text(vmp, (vir_bytes) m->VMUM_ADDR);	} else {		panic("do_munmap: strange type");	}        if(!(vr = map_lookup(vmp, addr))) {                printf("VM: unmap: virtual address %p not found in %d/n",                        m->VMUM_ADDR, vmp->vm_endpoint);                return EFAULT;        } 	len = m->VMUM_LEN;	if (len % VM_PAGE_SIZE)		len += VM_PAGE_SIZE - (len % VM_PAGE_SIZE);        if(addr != vr->vaddr || len > vr->length || len < VM_PAGE_SIZE) {                return EFAULT;        }       	if(map_unmap_region(vmp, vr, len) != OK)		panic("do_munmap: map_unmap_region failed");	return OK;}
开发者ID:CesarBallardini,项目名称:minix3,代码行数:46,


示例23: scall_munmap

int scall_munmap(kipc_msg_t *m){	int r, n;	struct vmproc *vmp;	vir_bytes addr, len;	struct vir_region *vr;	if((r = vm_isokendpt(m->m_source, &n)) != 0) {		vm_panic("do_mmap: message from strange source", m->m_source);	}	vmp = &vmproc[n];	if (!(vmp->vm_flags & VMF_HASPT))		return -ENXIO;	if (m->m_type == NNR_VM_MUNMAP) {		addr = (vir_bytes) arch_vir2map(vmp, (vir_bytes) m->VMUM_ADDR);	} else if(m->m_type == NNR_VM_MUNMAP_TEXT) {		addr = (vir_bytes) arch_vir2map_text(vmp, (vir_bytes) m->VMUM_ADDR);	} else {		vm_panic("do_munmap: strange type", NO_NUM);	}	if (!(vr = map_lookup(vmp, addr))) {		printk("VM: unmap: virtual address 0x%lx not found in %d/n",			m->VMUM_ADDR, vmp->vm_endpoint);		return -EFAULT;	}	len = m->VMUM_LEN;	if (len % VM_PAGE_SIZE)		len += VM_PAGE_SIZE - (len % VM_PAGE_SIZE);	if (addr != vr->vaddr || len > vr->length || len < VM_PAGE_SIZE) {		return -EFAULT;	}	if (map_unmap_region(vmp, vr, len) != 0)		vm_panic("do_munmap: map_unmap_region failed", NO_NUM);	return 0;}
开发者ID:locosoft1986,项目名称:nucleos,代码行数:43,


示例24: do_rs_memctl

/*===========================================================================* *				do_rs_memctl	     			     * *===========================================================================*/int do_rs_memctl(message *m_ptr){	endpoint_t ep;	int req, r, proc_nr;	struct vmproc *vmp;	ep = m_ptr->VM_RS_CTL_ENDPT;	req = m_ptr->VM_RS_CTL_REQ;	/* Lookup endpoint. */	if ((r = vm_isokendpt(ep, &proc_nr)) != OK) {		printf("do_rs_memctl: bad endpoint %d/n", ep);		return EINVAL;	}	vmp = &vmproc[proc_nr];	/* Process request. */	switch(req)	{	case VM_RS_MEM_PIN:		/* Do not perform VM_RS_MEM_PIN yet - it costs the full		 * size of the RS stack (64MB by default) in memory,		 * and it's needed for functionality that isn't complete /		 * merged in current Minix (surviving VM crashes).		 */#if 0		r = map_pin_memory(vmp);		return r;#else		return OK;#endif	case VM_RS_MEM_MAKE_VM:		r = rs_memctl_make_vm_instance(vmp);		return r;	default:		printf("do_rs_memctl: bad request %d/n", req);		return EINVAL;	}}
开发者ID:0xenvision,项目名称:minix,代码行数:45,


示例25: do_rs_memctl

/*===========================================================================* *				do_rs_memctl	     			     * *===========================================================================*/int do_rs_memctl(message *m_ptr){	endpoint_t ep;	int req, r, proc_nr;	struct vmproc *vmp;	ep = m_ptr->VM_RS_CTL_ENDPT;	req = m_ptr->VM_RS_CTL_REQ;	/* Lookup endpoint. */	if ((r = vm_isokendpt(ep, &proc_nr)) != OK) {		printf("do_rs_memctl: bad endpoint %d/n", ep);		return EINVAL;	}	vmp = &vmproc[proc_nr];	/* Process request. */	switch(req)	{	case VM_RS_MEM_PIN:		/* Only actually pin RS memory if VM can recover from crashes (saves memory). */		if (num_vm_instances <= 1)			return OK;		r = map_pin_memory(vmp);		return r;	case VM_RS_MEM_MAKE_VM:		r = rs_memctl_make_vm_instance(vmp);		return r;	case VM_RS_MEM_HEAP_PREALLOC:		r = rs_memctl_heap_prealloc(vmp, (vir_bytes*) &m_ptr->VM_RS_CTL_ADDR, (size_t*) &m_ptr->VM_RS_CTL_LEN);		return r;	case VM_RS_MEM_MAP_PREALLOC:		r = rs_memctl_map_prealloc(vmp, (vir_bytes*) &m_ptr->VM_RS_CTL_ADDR, (size_t*) &m_ptr->VM_RS_CTL_LEN);		return r;	case VM_RS_MEM_GET_PREALLOC_MAP:		r = rs_memctl_get_prealloc_map(vmp, (vir_bytes*) &m_ptr->VM_RS_CTL_ADDR, (size_t*) &m_ptr->VM_RS_CTL_LEN);		return r;	default:		printf("do_rs_memctl: bad request %d/n", req);		return EINVAL;	}}
开发者ID:Stichting-MINIX-Research-Foundation,项目名称:minix,代码行数:45,


示例26: do_get_refcount

/*===========================================================================* *				do_get_refcount		     		     * *===========================================================================*/int do_get_refcount(message *m){	int r, n;	struct vmproc *vmp;	endpoint_t target;	u8_t cnt;	vir_bytes addr;	target = m->VMREFCNT_ENDPT;	addr = m->VMREFCNT_ADDR;	if ((r = vm_isokendpt(target, &n)) != OK)		return EINVAL;	vmp = &vmproc[n];	r = map_get_ref(vmp, addr, &cnt);	m->VMREFCNT_RETC = cnt;	return r;}
开发者ID:AjeyBohare,项目名称:minix,代码行数:24,



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


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