معماری فون نویمان
معماری وُن نویمان ، یک مدل طراحی برای یک رایانهٔ ارقامی است که از یک واحد پردازش مرکزی و یک حافظهٔ مجزا مستقل برای نگه‌داری از اطلاعات و دستورالعمل‌ها استفاده می‌کند. این طراحی به خاطر جان فون نویمان (دانشمند علوم رایانه‌ای) نامگذاری شده‌است. از این قبیل رایانه‌ها، کار یک ماشین تورینگ را انجام می‌دهند و یک معماری ترتیبی دارند.
یک رایانهٔ ارقامی با برنامهٔ ذخیره شده به گونه‌ای است که دستورهای برنامه‌ریزی شده مانند داده‌ها را در حالت خواندنی-نوشتنی در حافظه دسترسی تصادفی (RAM) نگه‌داری می‌کند.
از معماری این مدل استنتاج می‌شود چون گذرگاه‌ها بین واحدها به اشتراک گذاشته شده‌اند بنابراین در هر لحظه فقط یکی از حالت‌های آوردن دستورها یا انجام عملیات روی داده‌ها صورت می‌گیرد که به آن گلوگاه فون نیومن می‌گویند. کامپیوترهای اولیه دارای برنامه های مشخص و ثابتی بوده اند. برخی از کامپیوترهای امروزین برای سادگی و یا اهداف آموزشی هنوز از طراحی این کامپیوترها استفاده می کنند؛ مثلاً ماشین حساب های رومیزی (در اصل) نیز یک کامپیوتر برنامه ثابت محسوب می شود، چرا که تنها می تواند به پردازش اعداد و اِعمال عملگرهای ریاضیاتی بپردازد و از آن نمی توان برای اجرای یک برنامه ی پردازش واژه و یا بازی کردن استفاده کرد. تغییر برنامه چنین کامپیوترهایی نیاز به تغییر مدارهای آن و در کل تغییر ساختار و طراحی جدیدی دارد. کامپیوترهای اولیه آن قدر هم برای کار خاصی برنامه‌ریزی نشده بودند؛ یعنی غالباً طراحی آن ها به گونه ای بود که برای کار خاصی قابل استفاده باشد تا برنامه ی آن ها. برنامه‌ریزی دوباره یک کامپیوتر، اگر اصلاً ممکن هم بود، فرایند بسیار دشواری می طلبید؛ فرایندی که با فلوچارت ها و کاغذهای یادداشت شروع می شد و سپس با طراحی های جزئی و مهندسی-شده و کار طاقت فرسایی چون مداربندی دستی و بازسازی ماشین همراه می شد. نصب و رفع اشکال یک برنامه روی انیاک می توانست سه هفته زمان برد. با پیشنهاد کامپیوتر برنامه-دار، اوضاع دگرگون شد. یک کامپیوتر برنامه-دار، به همراه طراحی فیزیکی خود، مجموعه ای دستورالعمل را شامل می شود و می تواند در حافظه مجموعه ای از دستوراتی (برنامه ها) را برای محاسبات ذخیره کند. طرح برنامه داربودن کامپیوتر قابلیت خودتغییردهندگی یک کد را فراهم می کند. یکی از انگیزه های اولیه داشتن کد خودتغییردهنده نیاز به برنامه ای با توانایی افزایش و یا در غیر این صورت بهبود قسمت آدرس دستورات، بود؛ چرا که در طراحی های اولیه، اپراتورها، خود مجبور به انجام دستی آن ها بودند. البته با گسترش ثبات های شاخص و آدرس دهی غیرمستقیم به عنوان اجزای معماری کامپیوتر، اهمیت این مورد کمرنگ تر شد. فایده دیگر برنامه-داربودن کامپیوتر، نشاندن داده های پراستفاده در جریان دستورات بوسیله آدرس دهی فوری بود. امروزه دیگر کدهای خودتغییردهنده چندان مورد توجه نیستند چرا که فهم و رفع اشکالات آن ها دشوار و همچنین تحت پردازش خط لوله های مدرن و نقشه های حافظه نهان ناکارآمد است.
در مقیاس بزرگ، قابلیت کار با دستورات به عنوان داده، در واقع پدید آمدن اسمبلرها، کامپایلرها، پیونددهنده ها، باردهنده ها و ابزارهای برنامه‌ریزی خودکار را ممکن ساخت و ایده "برنامه هایی که برنامه می نویسند" را واقعیت بخشید. هم چنین منجر به این شد که اکوسیستم پیچیده ی محاسبه کننده ی خودمیزبان در معماری ماشین های فون نویمان شکوفا گردد. برخی از زبان های سطح بالا باعث ارتقای معماری فون نویمان شدند: با فراهم کردن روشی انتزاعی و مستقل ازماشین برای کنترل کد قابل اجرا در زمان اجرا شدن (مانند LISP) و یا با استفاده از اطلاعات زمانِ اجرا برای تنظیم کامپایل درجا (مانند زبان های میزبان در ماشین مجازی جاوا، یا زبان های مورد استفاده در مرورگرهای وب). در مقیاس کوچک، می توان با تکنیک های کامپایل درجا، به بعضی از عملیات های تکرارشونده مانند بیت بلیت یا شیدرهای پیکسلی یا رأسی روی پردازنده های کلی سرعت بخشید. این یکی از قابلیت های کد خودتغییردهنده است که همچنان مورد استفاده قرار گرفته و محبوب می باشد. در رایانه‌های شخصی دو نوع معماری عمده وجود دارد.