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_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
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_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.
Definition: Allocator.h:17

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors