minix/servers/vm/vmproc.h

68 lines
1.7 KiB
C
Raw Normal View History

#ifndef _VMPROC_H
#define _VMPROC_H 1
#include <pagetable.h>
#include <arch_vmproc.h>
#include <minix/bitmap.h>
#include <machine/archtypes.h>
#include "vm.h"
#include "physravl.h"
#include "yieldedavl.h"
struct vmproc;
typedef void (*callback_t)(struct vmproc *who, message *m);
struct vmproc {
struct vm_arch vm_arch; /* architecture-specific data */
int vm_flags;
endpoint_t vm_endpoint;
pt_t vm_pt; /* page table data, if VMF_HASPT is set */
vir_bytes vm_stacktop; /* top of stack as seen from process */
vir_bytes vm_offset; /* offset of addr 0 for process */
/* File identification for cs sharing. */
ino_t vm_ino; /* inode number of file */
dev_t vm_dev; /* device number of file system */
time_t vm_ctime; /* inode changed time */
/* Regions in virtual address space. */
struct vir_region *vm_regions;
yielded_avl vm_yielded_blocks; /* avl of yielded physblocks */
/* Heap for brk() to extend. */
struct vir_region *vm_heap;
Initialization protocol for system services. SYSLIB CHANGES: - SEF framework now supports a new SEF Init request type from RS. 3 different callbacks are available (init_fresh, init_lu, init_restart) to specify initialization code when a service starts fresh, starts after a live update, or restarts. SYSTEM SERVICE CHANGES: - Initialization code for system services is now enclosed in a callback SEF will automatically call at init time. The return code of the callback will tell RS whether the initialization completed successfully. - Each init callback can access information passed by RS to initialize. As of now, each system service has access to the public entries of RS's system process table to gather all the information required to initialize. This design eliminates many existing or potential races at boot time and provides a uniform initialization interface to system services. The same interface will be reused for the upcoming publish/subscribe model to handle dynamic registration / deregistration of system services. VM CHANGES: - Uniform privilege management for all system services. Every service uses the same call mask format. For boot services, VM copies the call mask from init data. For dynamic services, VM still receives the call mask via rs_set_priv call that will be soon replaced by the upcoming publish/subscribe model. RS CHANGES: - The system process table has been reorganized and split into private entries and public entries. Only the latter ones are exposed to system services. - VM call masks are now entirely configured in rs/table.c - RS has now its own slot in the system process table. Only kernel tasks and user processes not included in the boot image are now left out from the system process table. - RS implements the initialization protocol for system services. - For services in the boot image, RS blocks till initialization is complete and panics when failure is reported back. Services are initialized in their order of appearance in the boot image priv table and RS blocks to implements synchronous initialization for every system service having the flag SF_SYNCH_BOOT set. - For services started dynamically, the initialization protocol is implemented as though it were the first ping for the service. In this case, if the system service fails to report back (or reports failure), RS brings the service down rather than trying to restart it.
2010-01-08 02:20:42 +01:00
bitchunk_t vm_call_mask[VM_CALL_MASK_SIZE];
/* State for requests pending to be done to vfs on behalf of
* this process.
*/
callback_t vm_callback; /* function to call on vfs reply */
int vm_callback_type; /* expected message type */
int vm_slot; /* process table slot */
union {
struct {
cp_grant_id_t gid;
} open; /* VM_VFS_OPEN */
} vm_state; /* Callback state. */
#if VMSTATS
int vm_bytecopies;
#endif
};
/* Bits for vm_flags */
#define VMF_INUSE 0x001 /* slot contains a process */
#define VMF_SEPARATE 0x002 /* separate i&d */
#define VMF_HASPT 0x004 /* has private page table */
#define VMF_EXITING 0x008 /* PM is cleaning up this process */
#define VMF_HAS_DMA 0x010 /* Process directly or indirectly granted
* DMA buffers.
*/
#endif