PagePool.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 #ifndef SQUID_SRC_IPC_MEM_PAGEPOOL_H
10 #define SQUID_SRC_IPC_MEM_PAGEPOOL_H
11 
12 #include "ipc/mem/Page.h"
13 #include "ipc/mem/PageStack.h"
14 #include "ipc/mem/Pointer.h"
15 
16 namespace Ipc
17 {
18 
19 namespace Mem
20 {
21 
25 class PagePool
26 {
27 public:
29 
30  static Owner *Init(const char *const shmId, const Ipc::Mem::PoolId stackId, const unsigned int capacity, const size_t pageSize);
31 
32  PagePool(const char *const id);
33 
34  unsigned int capacity() const { return pageIndex->capacity(); }
35  size_t pageSize() const { return pageIndex->pageSize(); }
37  unsigned int size() const { return pageIndex->size(); }
39  size_t level() const { return capacity() - size(); }
41  size_t level(const int purpose) const;
42 
44  bool get(const PageId::Purpose purpose, PageId &page);
46  void put(PageId &page);
48  char *pagePointer(const PageId &page);
49 
50 private:
53 
56  char *const theBuf;
57 };
58 
59 } // namespace Mem
60 
61 } // namespace Ipc
62 
63 #endif /* SQUID_SRC_IPC_MEM_PAGEPOOL_H */
64 
Ipc::Mem::Owner< PageStack > Owner
Definition: PagePool.h:28
Shared memory page identifier, address, or handler.
Definition: Page.h:23
unsigned int size() const
lower bound for the number of free pages
Definition: PagePool.h:37
std::atomic< size_t > Levels_t
Definition: PageStack.h:111
static Owner * Init(const char *const shmId, const Ipc::Mem::PoolId stackId, const unsigned int capacity, const size_t pageSize)
Definition: PagePool.cc:19
uint32_t PoolId
Definition: forward.h:17
unsigned int capacity() const
Definition: PagePool.h:34
Memory Management.
Definition: Allocator.h:16
char *const theBuf
pages storage
Definition: PagePool.h:56
PageStack::Levels_t Levels_t
Definition: PagePool.h:52
Levels_t *const theLevels
number of shared memory pages used now for each purpose
Definition: PagePool.h:55
size_t pageSize() const
Definition: PagePool.h:35
PagePool(const char *const id)
Definition: PagePool.cc:29
void put(PageId &page)
makes identified page available as a free page to future get() callers
Definition: PagePool.cc:58
char * pagePointer(const PageId &page)
converts page handler into a temporary writeable shared memory pointer
Definition: PagePool.cc:70
bool get(const PageId::Purpose purpose, PageId &page)
sets page ID and returns true unless no free pages are found
Definition: PagePool.cc:46
Ipc::Mem::Pointer< PageStack > pageIndex
free pages index
Definition: PagePool.h:51
size_t level() const
approximate number of shared memory pages used now
Definition: PagePool.h:39
Definition: IpcIoFile.h:23

 

Introduction

Documentation

Support

Miscellaneous