Memory management

Memory management is a form of resource management applied to computer memory. The essential requirement of memory management is to provide ways to dynamically allocate portions of memory to programs at their request, free it for reuse when no longer needed; this is critical to any advanced computer system where more than a single process might be underway at any time. Several methods have been devised that increase the effectiveness of memory management. Virtual memory systems separate the memory addresses used by a process from actual physical addresses, allowing separation of processes and increasing the size of the virtual address space beyond the available amount of RAM using paging or swapping to secondary storage; the quality of the virtual memory manager can have an extensive effect on overall system performance. In some operation systems, e.g. DOS/360 and successors, OS/360 and successors, allocation of storage within an address space is handled by the operating system.. Memory management within an address space is categorized as either automatic memory management involving garbage collection, or manual memory management.

The task of fulfilling an allocation request consists of locating a block of unused memory of sufficient size. Memory requests are satisfied by allocating portions from a large pool of memory called the heap or free store. At any given time, some parts of the heap are in use, while some are "free" and thus available for future allocations. Several issues complicate the implementation, such as external fragmentation, which arises when there are many small gaps between allocated memory blocks, which invalidates their use for an allocation request; the allocator's metadata can inflate the size of small allocations. This is managed by chunking; the memory management system must track outstanding allocations to ensure that they do not overlap and that no memory is "lost". The specific dynamic memory allocation algorithm implemented can impact performance significantly. A study conducted in 1994 by Digital Equipment Corporation illustrates the overheads involved for a variety of allocators; the lowest average instruction path length required to allocate a single memory slot was 52.

Since the precise location of the allocation is not known in advance, the memory is accessed indirectly through a pointer reference. The specific algorithm used to organize the memory area and allocate and deallocate chunks is interlinked with the kernel, may use any of the following methods: Fixed-size blocks allocation called memory pool allocation, uses a free list of fixed-size blocks of memory; this works well for simple embedded systems where no large objects need to be allocated, but suffers from fragmentation with long memory addresses. However, due to the reduced overhead this method can improve performance for objects that need frequent allocation / de-allocation and is used in video games. In this system, memory is allocated into several pools of memory instead of just one, where each pool represents blocks of memory of a certain power of two in size, or blocks of some other convenient size progression. All blocks of a particular size are kept in a sorted linked list or tree and all new blocks that are formed during allocation are added to their respective memory pools for use.

If a smaller size is requested than is available, the smallest available size is split. One of the resulting parts is selected, the process repeats until the request is complete; when a block is allocated, the allocator will start with the smallest sufficiently large block to avoid needlessly breaking blocks. When a block is freed, it is compared to its buddy. If they are both free, they are combined and placed in the correspondingly larger-sized buddy-block list; this memory allocation mechanism preallocates memory chunks suitable to fit objects of a certain type or size. These chunks are called caches and the allocator only has to keep track of a list of free cache slots. Constructing an object will use any one of the free cache slots and destructing an object will add a slot back to the free cache slot list; this technique alleviates memory fragmentation and is efficient as there is no need to search for a suitable portion of memory, as any open slot will suffice. Many Unix-like systems as well as Microsoft Windows implement a function called alloca for dynamically allocating stack memory in a way similar to the heap-based malloc.

A compiler translates it to inlined instructions manipulating the stack pointer. Although there is no need of manually freeing memory allocated this way as it is automatically freed when the function that called alloca returns, there exists a risk of overflow, and since alloca is a ad hoc expansion seen in many systems but never in POSIX or the C standard, its behavior in case of a stack overflow is undefined. A safer version of alloca called, it requires the use of _freea. Gnulib provides an equivalent interface, albeit instead of throwing an SEH exception on overflow, it delegates to malloc when an overlarge size is detected. A similar feature can be emulated using manual accounting and size-checking, such as in the uses of alloca_account in glibc. In many programming language implementations, all variables declared within a procedure are local to that function.


The AERMOD atmospheric dispersion modeling system is an integrated system that includes three modules: A steady-state dispersion model designed for short-range dispersion of air pollutant emissions from stationary industrial sources. A meteorological data preprocessor that accepts surface meteorological data, upper air soundings, optionally, data from on-site instrument towers, it calculates atmospheric parameters needed by the dispersion model, such as atmospheric turbulence characteristics, mixing heights, friction velocity, Monin-Obukov length and surface heat flux. A terrain preprocessor whose main purpose is to provide a physical relationship between terrain features and the behavior of air pollution plumes, it generates height data for each receptor location. It provides information that allows the dispersion model to simulate the effects of air flowing over hills or splitting to flow around hills. AERMOD includes PRIME, an algorithm for modeling the effects of downwash created by the pollution plume flowing over nearby buildings.

AERMOD was developed by the AERMIC, a collaborative working group of scientists from the AMS and the EPA. The AERMIC was formed in 1991; the AERMIC developed AERMOD in seven steps: Initial model formulation Developmental evaluation Internal peer review and beta testing Revised model formulation Performance evaluation and sensitivity testing External peer review Submission to the EPA for consideration as a regulatory model. On April 21 of 2000, the EPA proposed that AERMOD be adopted as the EPA's preferred regulatory model for both simple and complex terrain. On November 9 of 2005, AERMOD was adopted by the EPA and promulgated as their preferred regulatory model, effective as of December 9 of 2005; the entire developmental and adoption process took 14 years. Some of the primary features and capabilities of AERMOD are: Source types: Multiple point and volume sources Source releases: Surface, near surface and elevated sources Source locations: Urban or rural locations. Urban effects are scaled by population.

Plume types: Continuous, buoyant plumes Plume deposition: Dry or wet deposition of particulates and/or gases Plume dispersion treatment: Gaussian model treatment in horizontal and in vertical for stable atmospheres. Non-Gaussian treatment in vertical for unstable atmospheres Terrain types: Simple or complex terrain Building effects: Handled by PRIME downwash algorithms Meteorology data height levels: Accepts meteorology data from multiple heights Meteorological data profiles: Vertical profiles of wind and temperature are created Air pollution dispersion terminology Atmospheric dispersion modeling Bibliography of atmospheric dispersion modeling List of atmospheric dispersion models Useful conversions and formulas for air dispersion modeling For those who are unfamiliar with air pollution dispersion modelling and would like to learn more about the subject, it is suggested that either one of the following books be read: Turner, D. B.. Workbook of atmospheric dispersion estimates: an introduction to dispersion modeling.

CRC Press. ISBN 1-56670-023-X. Beychok, M. R.. Fundamentals Of Stack Gas Dispersion. Self-published. ISBN 0-9644588-0-2. De Visscher, Alex. Air Dispersion Modeling and applications. Wiley. ISBN 978-1-118-07859-4; the EPA's download site for AERMOD Brode, R. W. Implementation and Evaluation of the AERMOD-PRIME Model

Studeničani Municipality

Studeničani Municipality is a municipality in central North Macedonia. Studeničani is the name of the village, it is located in the Skopje Statistical Region. The municipality borders the City of Skopje to the north, Sopište Municipality to the northwest and west, Čaška Municipality to the south, Zelenikovo Municipality to the east and Petrovec Municipality to the northeast. According to the 2002 Macedonians census, this municipality has 17,246 inhabitants. Ethnic groups in the municipality: Albanians = 11,793 Turks = 3,285 Bosniaks = 1,662 Macedonians = 309 others = 197 Official website