📄 cma_stack_int.h
字号:
/* * (c) Copyright 1990-1996 OPEN SOFTWARE FOUNDATION, INC. * (c) Copyright 1990-1996 HEWLETT-PACKARD COMPANY * (c) Copyright 1990-1996 DIGITAL EQUIPMENT CORPORATION * (c) Copyright 1991, 1992 Siemens-Nixdorf Information Systems * To anyone who acknowledges that this file is provided "AS IS" without * any express or implied warranty: permission to use, copy, modify, and * distribute this file for any purpose is hereby granted without fee, * provided that the above copyright notices and this notice appears in * all source code copies, and that none of the names listed above be used * in advertising or publicity pertaining to distribution of the software * without specific, written prior permission. None of these organizations * makes any representations about the suitability of this software for * any purpose. *//* * Header file for stack management (internal to cma_stack.c, but * separate for convenience, and unit testing). */#ifndef CMA_STACK_INT#define CMA_STACK_INT/* * INCLUDE FILES */#include <cma.h>#include <cma_queue.h>#include <cma_list.h>#include <cma_tcb_defs.h>/* * CONSTANTS AND MACROS */#define cma___c_first_free_chunk 0#define cma___c_min_count 2 /* Smallest number of chunks to leave */#define cma___c_end (-1) /* End of free list (flag) */#define cma__c_yellow_size 0/* * Cluster types */#define cma___c_cluster 0 /* Default cluster */#define cma___c_bigstack 1 /* Looks like a cluster, but it's a stack */#define cma___c_null_cluster (cma___t_cluster *)cma_c_null_ptr/* * TYPEDEFS */#ifndef __STDC__struct CMA__T_INT_STACK;#endiftypedef cma_t_natural cma___t_index; /* Type for chunk index */typedef struct CMA___T_CLU_DESC { cma__t_list list; /* Queue element for cluster list */ cma_t_integer type; /* Type of cluster */ cma_t_address stacks; cma_t_address limit; } cma___t_clu_desc;typedef union CMA___T_MAP_ENTRY { struct { cma__t_int_tcb *tcb; /* TCB associated with stack chunk */ struct CMA__T_INT_STACK *stack; /* Stack desc. ass. with stack chunk */ } mapped; struct { cma___t_index size; /* Number of chunks in block */ cma___t_index next; /* Next free block */ } free; } cma___t_map_entry;/* * NOTE: It is VERY IMPORTANT that both cma___t_cluster and cma___t_bigstack * begin with the cma___t_clu_desc structure, as there is some code in the * stack manager that relies on being able to treat both as equivalent! */typedef struct CMA___T_CLUSTER { cma___t_clu_desc desc; /* Describe this cluster */ cma___t_map_entry map[cma__c_chunk_count]; /* thread map */ cma___t_index free; /* First free chunk index */ } cma___t_cluster;/* * NOTE: It is VERY IMPORTANT that both cma___t_cluster and cma___t_bigstack * begin with the cma___t_clu_desc structure, as there is some code in the * stack manager that relies on being able to treat both as equivalent! */typedef struct CMA___T_BIGSTACK { cma___t_clu_desc desc; /* Describe this cluster */ cma__t_int_tcb *tcb; /* TCB associated with stack */ struct CMA__T_INT_STACK *stack; /* Stack desc. ass. with stack */ cma_t_natural size; /* Size of big stack */ cma_t_boolean in_use; /* Set if allocated */ } cma___t_bigstack;#if _CMA_PROTECT_MEMORY_typedef struct CMA___T_INT_HOLE { cma__t_queue link; /* Link holes together */ cma_t_boolean protected; /* Set when pages are protected */ cma_t_address first; /* First protected byte */ cma_t_address last; /* Last protected byte */ } cma___t_int_hole;#endiftypedef struct CMA__T_INT_STACK { cma__t_object header; /* Common header (sequence, type info */ cma__t_int_attr *attributes; /* Backpointer to attr obj */ cma___t_cluster *cluster; /* Stack's cluster */ cma_t_address stack_base; /* base address of stack */ cma_t_address yellow_zone; /* first address of yellow zone */ cma_t_address last_guard; /* last address of guard pages */ cma_t_natural first_chunk; /* First chunk allocated */ cma_t_natural chunk_count; /* Count of chunks allocated */ cma__t_int_tcb *tcb; /* TCB backpointer */#if _CMA_PROTECT_MEMORY_ cma___t_int_hole hole; /* Description of hole */#endif } cma__t_int_stack;/* * GLOBAL DATA *//* * INTERNAL INTERFACES */#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -