os0proc.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. The interface to the operating system
  3. process control primitives
  4. (c) 1995 Innobase Oy
  5. Created 9/30/1995 Heikki Tuuri
  6. *******************************************************/
  7. #ifndef os0proc_h
  8. #define os0proc_h
  9. #include "univ.i"
  10. typedef void* os_process_t;
  11. typedef unsigned long int os_process_id_t;
  12. /* The cell type in os_awe_allocate_mem page info */
  13. #if defined(__WIN2000__) && defined(ULONG_PTR)
  14. typedef ULONG_PTR os_awe_t;
  15. #else
  16. typedef ulint os_awe_t;
  17. #endif
  18. /* Physical page size when Windows AWE is used. This is the normal
  19. page size of an Intel x86 processor. We cannot use AWE with 2 MB or 4 MB
  20. pages. */
  21. #define OS_AWE_X86_PAGE_SIZE 4096
  22. /********************************************************************
  23. Windows AWE support. Tries to enable the "lock pages in memory" privilege for
  24. the current process so that the current process can allocate memory-locked
  25. virtual address space to act as the window where AWE maps physical memory. */
  26. ibool
  27. os_awe_enable_lock_pages_in_mem(void);
  28. /*=================================*/
  29. /* out: TRUE if success, FALSE if error;
  30. prints error info to stderr if no success */
  31. /********************************************************************
  32. Allocates physical RAM memory up to 64 GB in an Intel 32-bit x86
  33. processor. */
  34. ibool
  35. os_awe_allocate_physical_mem(
  36. /*=========================*/
  37. /* out: TRUE if success */
  38. os_awe_t** page_info, /* out, own: array of opaque data containing
  39. the info for allocated physical memory pages;
  40. each allocated 4 kB physical memory page has
  41. one slot of type os_awe_t in the array */
  42. ulint   n_megabytes); /* in: number of megabytes to allocate */
  43. /********************************************************************
  44. Allocates a window in the virtual address space where we can map then
  45. pages of physical memory. */
  46. byte*
  47. os_awe_allocate_virtual_mem_window(
  48. /*===============================*/
  49. /* out, own: allocated memory, or NULL if did not
  50. succeed */
  51. ulint size); /* in: virtual memory allocation size in bytes, must
  52. be < 2 GB */
  53. /********************************************************************
  54. With this function you can map parts of physical memory allocated with
  55. the ..._allocate_physical_mem to the virtual address space allocated with
  56. the previous function. Intel implements this so that the process page
  57. tables are updated accordingly. A test on a 1.5 GHz AMD processor and XP
  58. showed that this takes < 1 microsecond, much better than the estimated 80 us
  59. for copying a 16 kB page memory to memory. But, the operation will at least
  60. partially invalidate the translation lookaside buffer (TLB) of all
  61. processors. Under a real-world load the performance hit may be bigger. */
  62. ibool
  63. os_awe_map_physical_mem_to_window(
  64. /*==============================*/
  65. /* out: TRUE if success; the function
  66. calls exit(1) in case of an error */
  67. byte* ptr, /* in: a page-aligned pointer to
  68. somewhere in the virtual address
  69. space window; we map the physical mem
  70. pages here */
  71. ulint n_mem_pages, /* in: number of 4 kB mem pages to
  72. map */
  73. os_awe_t* page_info); /* in: array of page infos for those
  74. pages; each page has one slot in the
  75. array */
  76. /********************************************************************
  77. Converts the current process id to a number. It is not guaranteed that the
  78. number is unique. In Linux returns the 'process number' of the current
  79. thread. That number is the same as one sees in 'top', for example. In Linux
  80. the thread id is not the same as one sees in 'top'. */
  81. ulint
  82. os_proc_get_number(void);
  83. /*====================*/
  84. /********************************************************************
  85. Allocates non-cacheable memory. */
  86. void*
  87. os_mem_alloc_nocache(
  88. /*=================*/
  89. /* out: allocated memory */
  90. ulint n); /* in: number of bytes */
  91. /********************************************************************
  92. Sets the priority boost for threads released from waiting within the current
  93. process. */
  94. void
  95. os_process_set_priority_boost(
  96. /*==========================*/
  97. ibool do_boost); /* in: TRUE if priority boost should be done,
  98. FALSE if not */
  99. #ifndef UNIV_NONINL
  100. #include "os0proc.ic"
  101. #endif
  102. #endif