Squid Web Cache master
Loading...
Searching...
No Matches
PagePool.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 1996-2025 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
16namespace Ipc
17{
18
19namespace Mem
20{
21
26{
27public:
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
50private:
53
56 char *const theBuf;
57};
58
59} // namespace Mem
60
61} // namespace Ipc
62
63#endif /* SQUID_SRC_IPC_MEM_PAGEPOOL_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
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
Memory Management.
Definition Allocator.h:17