دستیابی مستقیم به حافظه (DMA) یکی از ویژگیهای سیستمهای کامپیوتری است که اجازه میدهد برخی سیستمهای جزئی سختافزاری به حافظه (حافظه دسترسی تصادفی) اصلی سیستم مستقل از واحد پردازش مرکزی (CPU) دسترسی پیدا کنند.
بدون DMA، زمانی که پردازنده از ورودی/خروجی برنامهریزی شده استفاده میکند، بهطور معمول در تمام مدت عملیات خواندن یا نوشتن بهطور کامل مشغول است و در نتیجه برای انجام کارهای دیگر دردسترس نیست. با DMA، پردازنده اول انتقال را آغاز میکند، سپس، در مدتی که انتقال در حال پیشرفت است عملیاتهای دیگری انجام میدهد، در نهایت زمانی که عملیات به پایان رسید یک وقفه از کنترلکننده DMA دریافت میکند. این قابلیت در هر زمان که پردازنده نمیتواند با نرخ انتقال دادهها همگام باشد یا زمانی که پردازنده لازم است محاسبات مفیدی در مدت انتظار برای یک انتقال داده نسبتاً آهسته انجام دهد مفید است. بسیاری از سیستمهای سختافزاری مانند کنترلکنندههای هارد دیسکها، کارتهای گرافیکی، کارتهای شبکه و کارتهای صدا از DMA استفاده میکنند. همچنین DMA برای انتقال اطلاعات داخل تراشهای در پردازندههای چندهستهای نیز استفاده میشود. کامپیوترهایی که کانالهای DMA دارند، نسبت به کامپیوترهای بدون کانالهای DMA، میتواند اطلاعات را به یا از دستگاهها با سربار بسیار کمتری برای پردازنده انتقال دهند. بهطور مشابه، یک عنصر در حال پردازش داخل یک پردازنده چندهستهای میتواند اطلاعات را به یا از حافظه محلی خود بدون اشغال زمان پردازندهاش انتقال دهد، که اجازه میدهد محاسبات و انتقال دادهها به صورت موازی پیشبروند.
DMA همچنین ممکن است برای کپی «حافظه به حافظه» یا انتقالی از دادهها درون حافظه استفاده شود. DMA میتواند عملیاتهای پرهزینه حافظه مانند کپیهای حجیم یا عملیاتهای ورودی خروجی پاشیدنی/انباشتنی را از پردازشگر به یک موتور DMA اختصاصی تخلیه کند. به عنوان یک مثال پیادهسازی میتوان به I/O Acceleration Technology اشاره کرد.
DMA استاندارد، یا به عبارتی DMA شخص ثالث، از یک کنترلکننده DMA استفاده میکند. یک کنترلکننده DMA میتواند آدرسهای حافظه تولید کند و چرخههای نوشتن یا خواندن حافظه را شروع کند. این کنترلکننده شامل چندین ثبات سختافزاری است که میتوانند توسط پردازنده نوشته یا خوانده شوند. این ثباتها شامل یک ثبات آدرس حافظه، یک ثبات شمارش بایت و یک یا چند ثبات کنترلی هستند. ثباتهای کنترلی منبع انتقال، مقصد آن، جهت (خواندن از دستگاه ورودی/خروجی یا نوشتن در آن)، اندازه واحد انتقال و (یا) تعداد بایتها برای انتقال در یک ارسال به نسبت امکاناتی که کنترلکننده DMA فراهم میکند را مشخص میکنند.
برای انتقال یک ورودی، خروجی یا عملیات حافظه-به-حافظه، پردازشگر میزبان کنترلکننده DMA را با تعداد کلمههای انتقال (کوچکترین واحد داده مورد استفاده پردازشگر) و آدرس حافظه برای استفاده مقداردهی اولیه میکند. سپس پردازشگر دستورات را به یک دستگاه ثانویه برای آغاز انتقال اطلاعات میفرستد. سپس کنترلکننده DMA آدرسها و خطوط کنترل خواندن/نوشتن در حافظه را مشخص میکند. هردفعه که یک بایت از اطلاعات آماده جابهجایی بین دستگاه ثانویه و حافظه است، کنترلکننده DMA ثبات آدرس داخلی خود را یک واحد افزایش میدهد تا زمانی که تمام قطعه اطلاعات جابهجا شدهاست.