PagePool.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2022 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_IPC_MEM_PAGE_POOL_H
10 #define SQUID_IPC_MEM_PAGE_POOL_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_IPC_MEM_PAGE_POOL_H
64 
Shared memory page identifier, address, or handler.
Definition: Page.h:24
char * pagePointer(const PageId &page)
converts page handler into a temporary writeable shared memory pointer
Definition: PagePool.cc:70
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
PageStack::Levels_t Levels_t
Definition: PagePool.h:52
PagePool(const char *const id)
Definition: PagePool.cc:29
char *const theBuf
pages storage
Definition: PagePool.h:56
Ipc::Mem::Pointer< PageStack > pageIndex
free pages index
Definition: PagePool.h:51
unsigned int capacity() const
Definition: PagePool.h:34
static Owner * Init(const char *const shmId, const Ipc::Mem::PoolId stackId, const unsigned int capacity, const size_t pageSize)
Definition: PagePool.cc:19
size_t level() const
approximate number of shared memory pages used now
Definition: PagePool.h:39
void put(PageId &page)
makes identified page available as a free page to future get() callers
Definition: PagePool.cc:58
Ipc::Mem::Owner< PageStack > Owner
Definition: PagePool.h:28
unsigned int size() const
lower bound for the number of free pages
Definition: PagePool.h:37
bool get(const PageId::Purpose purpose, PageId &page)
sets page ID and returns true unless no free pages are found
Definition: PagePool.cc:46
std::atomic< size_t > Levels_t
Definition: PageStack.h:111
uint32_t PoolId
Definition: forward.h:17
Definition: IpcIoFile.h:24
Memory Management.

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors