کام کرنے والا سپن لاک بنانا۔


سپن لاکس کا جائزہ لینا۔


موازنہ اور تبادلہ۔


حاصل کریں اور شامل کریں۔


خلاصہ: بہت زیادہ گھومنا۔


ایک سادہ طریقہ: بس، بچے، چھوڑ دو۔


Using Queues: Sleeping Instead Of Spinning.

قطاروں کا استعمال: گھومنے کے بجائے سونا۔


مختلف OS، مختلف معاونت۔


دو مرحلہ لاکس۔


ہم وقت کاؤنٹرز۔


ہم وقت منسلک فہرستیں۔


ہم وقت قطاریں۔


ہم وقت ہیش ٹیبل۔


تعریف اور معمولات۔


The Producer/Consumer (Bound Buffer) Problem.

پروڈیوسر/کنزیومر (Bound Buffer) مسئلہ۔


شرائط کا احاطہ کرنا۔


سیموفورس: ایک تعریف۔


بائنری سیموفورس (لاکس)۔


شرط متغیرات کے طور پر سیموفورس۔


کھانے والے فلسفی۔


The operating system virtualizes resources.

آپریٹنگ سسٹم وسائل کو ورچوئلائز کرتا ہے۔


Virtualization makes the system easier to use.

ورچوئلائزیشن سسٹم کو استعمال کرنا آسان بناتی ہے۔


آپریٹنگ سسٹم وسائل کو مؤثر طریقے سے منظم کرتا ہے۔


ایک پروگرام ہدایات پر عمل کرتا ہے۔


The processor fetches instructions from memory.

پروسیسر میموری سے ہدایات حاصل کرتا ہے۔


آپریٹنگ سسٹم سسٹم کالز فراہم کرتا ہے۔


Virtualization transforms physical resources.

ورچوئلائزیشن جسمانی وسائل کو تبدیل کرتی ہے۔


آپریٹنگ سسٹم ایک وسیلہ مینیجر ہے۔


Multiple programs can run at the same time.

ایک ہی وقت میں متعدد پروگرام چل سکتے ہیں۔


آپریٹنگ سسٹم ایک معیاری لائبریری فراہم کرتا ہے۔


ہم آہنگی آپریٹنگ سسٹم میں ایک اہم تصور ہے۔


Each process has its own virtual address space.

ہر عمل کی اپنی ورچوئل ایڈریس کی جگہ ہوتی ہے۔


آپریٹنگ سسٹم جسمانی میموری کا انتظام کرتا ہے۔


تھریڈز بیک وقت چل سکتے ہیں۔


The program allocates memory using malloc().

پروگرام malloc() کا استعمال کرتے ہوئے میموری مختص کرتا ہے۔


The operating system is responsible for making the system easy to use.

آپریٹنگ سسٹم سسٹم کو استعمال میں آسان بنانے کا ذمہ دار ہے۔


Understanding virtualization, concurrency, and persistence is crucial.

ورچوئلائزیشن، ہم آہنگی، اور استحکام کو سمجھنا ضروری ہے۔


آپریٹنگ سسٹم پروگراموں کو میموری شیئر کرنے کی اجازت دیتا ہے۔


The OS handles memory overload in a virtual memory system.

آپریٹنگ سسٹم ورچوئل میموری سسٹم میں میموری اوورلوڈ کو سنبھالتا ہے۔


The operating system is sometimes known as a resource manager.

آپریٹنگ سسٹم کو بعض اوقات وسیلہ مینیجر کے طور پر جانا جاتا ہے۔


Key to fast crash recovery is statelessness.

تیز کریش ریکوری کی کلید غیر ریاستی ہونا ہے۔


The NFSv2 protocol is an older protocol.

این ایف ایس وی 2 پروٹوکول ایک پرانا پروٹوکول ہے۔


From protocol to distributed file system, the evolution was significant.

پروٹوکول سے لے کر تقسیم شدہ فائل سسٹم تک، ارتقاء اہم تھا۔


Handling server failure with idempotent operations is crucial.

سرور کی ناکامی کو ایدیپوٹینٹ آپریشنز کے ساتھ سنبھالنا ضروری ہے۔


Client-side caching can improve performance.

کلائنٹ سائیڈ کیشنگ کارکردگی کو بہتر بنا سکتی ہے۔


The cache consistency problem is a challenge.

کیش کی مستقل مزاجی کا مسئلہ ایک چیلنج ہے۔


Assessing NFS cache consistency is important.

این ایف ایس کیش کی مستقل مزاجی کا اندازہ لگانا ضروری ہے۔


Server-side write buffering has implications.

سرور سائیڈ رائٹ بفرنگ کے مضمرات ہیں۔


The Andrew File System (AFS) is another file system.

اینڈریو فائل سسٹم (اے ایف ایس) ایک اور فائل سسٹم ہے۔


اے ایف ایس ورژن 1 میں کچھ مسائل تھے۔


پروٹوکول کو بہتر بنانا ضروری تھا۔


اے ایف ایس ورژن 2 نے بہتری پیش کی۔


کیش کی مستقل مزاجی ایک اہم پہلو ہے۔


کریش ریکوری ایک اہم خصوصیت ہے۔


The scale and performance of AFSv2 were notable.

اے ایف ایس وی 2 کا پیمانہ اور کارکردگی قابل ذکر تھی۔


اے ایف ایس میں دیگر بہتری بھی تھی۔


پروگرام میموری تک رسائی حاصل کرتا ہے۔


Running many programs at once is possible.

ایک ساتھ کئی پروگرام چلانا ممکن ہے۔


یہ ایک ملٹی تھریڈڈ پروگرام ہے۔


xv6 پروسیس ڈھانچہ اہم ہے۔


The operating system manages computer hardware and software resources.

آپریٹنگ سسٹم کمپیوٹر کے ہارڈ ویئر اور سافٹ ویئر وسائل کا انتظام کرتا ہے۔


Scheduling algorithms determine the order in which processes are executed.

شیڈولنگ الگورتھم اس ترتیب کا تعین کرتے ہیں جس میں عملدرآمد کیے جاتے ہیں۔


Memory management is crucial for efficient system performance.

میموری کا انتظام موثر نظام کی کارکردگی کے لیے بہت ضروری ہے۔


Virtual memory allows a system to run programs larger than physical memory.

ورچوئل میموری ایک نظام کو جسمانی میموری سے بڑے پروگرام چلانے کی اجازت دیتی ہے۔


Concurrency and parallelism are important concepts in modern operating systems.

جدید آپریٹنگ سسٹمز میں ہم آہنگی اور متوازی کاری اہم تصورات ہیں۔


The CPU scheduler decides which process gets the CPU next.

سی پی یو شیڈیولر فیصلہ کرتا ہے کہ اگلا سی پی یو کون سا عمل حاصل کرے گا۔


I am reading a book about operating systems.

میں آپریٹنگ سسٹمز کے بارے میں ایک کتاب پڑھ رہا ہوں۔


Can you explain the concept of a process?

کیا آپ عمل کے تصور کی وضاحت کر سکتے ہیں؟


The system uses a multi-level feedback queue for scheduling.

نظام شیڈولنگ کے لیے ایک کثیر سطحی فیڈ بیک قطار استعمال کرتا ہے۔


Understanding memory allocation is key to writing efficient code.

میموری مختص کرنے کو سمجھنا موثر کوڈ لکھنے کی کلید ہے۔


The program crashed due to a segmentation fault.

پروگرام ایک سیگمنٹیشن فالٹ کی وجہ سے کریش ہو گیا۔


How does the operating system handle interrupts?

آپریٹنگ سسٹم مداخلتوں کو کیسے ہینڈل کرتا ہے؟


The lecture covered various scheduling algorithms.

لیکچر میں مختلف شیڈولنگ الگورتھم کا احاطہ کیا گیا۔


The professor explained the concept of virtual memory in detail.

پروفیسر نے ورچوئل میموری کے تصور کی تفصیل سے وضاحت کی۔


The system's performance was improved by optimizing the memory usage.

میموری کے استعمال کو بہتر بنا کر نظام کی کارکردگی کو بہتر بنایا گیا۔


The operating system provides an abstraction of the hardware.

آپریٹنگ سسٹم ہارڈ ویئر کا ایک خلاصہ فراہم کرتا ہے۔


Can you help me with my homework on operating systems?

کیا آپ آپریٹنگ سسٹمز پر میرے ہوم ورک میں میری مدد کر سکتے ہیں؟


The concept of address spaces is fundamental to memory management.

ایڈریس اسپیس کا تصور میموری مینجمنٹ کے لیے بنیادی ہے۔


The system uses paging to manage physical memory efficiently.

نظام جسمانی میموری کو مؤثر طریقے سے منظم کرنے کے لیے پیجنگ کا استعمال کرتا ہے۔


Understanding the principles of concurrency is crucial for multi-threaded applications.

متعدد تھریڈ والے ایپلی کیشنز کے لیے ہم آہنگی کے اصولوں کو سمجھنا بہت ضروری ہے۔


The book is called Operating Systems: Three Easy Pieces.

یہ کتاب آپریٹنگ سسٹمز: تھری ایزی پیسز کے نام سے ہے۔


We hope you’ll enjoy reading it as much as we enjoyed writing it.

ہم امید کرتے ہیں کہ آپ کو اسے پڑھنے میں اتنا ہی مزہ آئے گا جتنا ہمیں اسے لکھنے میں آیا۔


The three easy pieces refer to the three major thematic elements the book is organized around: virtualization, concurrency, and persistence.

تین آسان ٹکڑے ان تین اہم موضوعاتی عناصر کا حوالہ دیتے ہیں جن کے گرد کتاب منظم ہے: ورچوئلائزیشن، ہم وقت سازی، اور استحکام۔


نئی چیزیں سیکھنا مزے کا ہے، ہے نا؟


Each major concept is divided into a set of chapters, most of which present a particular problem and then show how to solve it.

ہر بڑے تصور کو ابواب کے ایک سیٹ میں تقسیم کیا گیا ہے، جن میں سے اکثر ایک خاص مسئلہ پیش کرتے ہیں اور پھر اسے حل کرنے کا طریقہ بتاتے ہیں۔


One of our goals in writing this book is to make the paths of history as clear as possible.

اس کتاب کو لکھنے میں ہمارا ایک مقصد تاریخ کے راستوں کو زیادہ سے زیادہ واضح کرنا ہے۔


There are a couple devices we use throughout the book which are probably worth introducing here.

کتاب میں ہم جن چند آلات کا استعمال کرتے ہیں، ان کا یہاں تعارف کرانا شاید مناسب ہے۔


پہلا مسئلے کا خلاصہ ہے۔


Asides tend to discuss something relevant (but perhaps not essential) to the main text.

ضمنی باتیں بنیادی متن سے متعلق کچھ (لیکن شاید ضروری نہیں) پر بحث کرتی ہیں۔


We use one of the oldest didactic methods, the dialogue, throughout the book.

ہم پوری کتاب میں قدیم ترین تدریسی طریقوں میں سے ایک، مکالمے کا استعمال کرتے ہیں۔


At the beginning of each major section, we’ll first present an abstraction that an operating system provides.

ہر بڑے حصے کے آغاز میں، ہم سب سے پہلے ایک خلاصہ پیش کریں گے جو ایک آپریٹنگ سسٹم فراہم کرتا ہے۔


Throughout the chapters, we try to use real code (not pseudocode) where possible.

ابواب میں، ہم جہاں تک ممکن ہو سکے حقیقی کوڈ (سودوکوڈ نہیں) استعمال کرنے کی کوشش کرتے ہیں۔


Running real code on real systems is the best way to learn about operating systems.

حقیقی نظاموں پر حقیقی کوڈ چلانا آپریٹنگ سسٹمز کے بارے میں جاننے کا بہترین طریقہ ہے۔


In various parts of the text, we have sprinkled in a few homeworks to ensure that you are understanding what is going on.

متن کے مختلف حصوں میں، ہم نے چند ہوم ورکس شامل کیے ہیں تاکہ یہ یقینی بنایا جا سکے کہ آپ سمجھ رہے ہیں کہ کیا ہو رہا ہے۔


The most important addendum to this book is a set of projects in which you learn about how real systems work.

اس کتاب میں سب سے اہم اضافہ ان منصوبوں کا ایک مجموعہ ہے جس میں آپ حقیقی نظاموں کے کام کرنے کے بارے میں سیکھتے ہیں۔


All projects (as well as the code examples, mentioned above) are in the C programming language.

تمام پروجیکٹس (اور ساتھ ہی کوڈ کی مثالیں، جن کا اوپر ذکر کیا گیا ہے) C پروگرامنگ زبان میں ہیں۔


If you are an instructor or professor who wishes to use this book, please feel free to do so.

اگر آپ ایک انسٹرکٹر یا پروفیسر ہیں جو اس کتاب کو استعمال کرنا چاہتے ہیں، تو براہ کرم ایسا کرنے کے لیے آزاد محسوس کریں۔


The course divides fairly well across a 15-week semester.

کورس 15 ہفتوں کے سمسٹر میں کافی اچھی طرح سے تقسیم ہے۔


One slightly unusual aspect of the book is that concurrency, a topic at the front of many OS books, is pushed off herein until the student has built an understanding of virtualization.

کتاب کا ایک قدرے غیر معمولی پہلو یہ ہے کہ ہم وقت سازی، جو کہ بہت سی OS کتابوں کے شروع میں ایک موضوع ہے، یہاں تک ملتوی کر دیا گیا ہے جب تک کہ طالب علم نے ورچوئلائزیشن کی سمجھ پیدا نہیں کر لی۔


We created these notes to spark your interest in operating systems.

ہم نے یہ نوٹس آپریٹنگ سسٹمز میں آپ کی دلچسپی کو بڑھانے کے لیے بنائے ہیں۔


پروگرام چل رہا ہے۔


Please wait for the process to complete.

براہ کرم عمل کے مکمل ہونے کا انتظار کریں۔


سسٹم استعمال کرنے میں آسان ہے۔


یہ مقالہ ایک بہترین جائزہ فراہم کرتا ہے۔


The OS creates this illusion by virtualizing the CPU.

آپریٹنگ سسٹم سی پی یو کو ورچوئلائز کرکے یہ فریب پیدا کرتا ہے۔


The OS will need both some low-level machinery as well as some high-level intelligence.

آپریٹنگ سسٹم کو کچھ کم سطح کی مشینری کے ساتھ ساتھ کچھ اعلیٰ سطح کی ذہانت کی بھی ضرورت ہوگی۔


The abstraction provided by the OS of a running program is something we will call a process.

آپریٹنگ سسٹم کے ذریعہ چلنے والے پروگرام کا خلاصہ وہ ہے جسے ہم عمل کہیں گے۔


پروگرام خود ایک بے جان چیز ہے۔


The OS has created a beautiful illusion.

آپریٹنگ سسٹم نے ایک خوبصورت فریب پیدا کیا ہے۔


The OS will also likely initialize the stack with arguments.

آپریٹنگ سسٹم بھی ممکنہ طور پر دلائل کے ساتھ اسٹیک کو شروع کرے گا۔


It is fascinating to read these old system documents.

ان پرانے سسٹم دستاویزات کو پڑھنا دلچسپ ہے۔


One good way to build up your own knowledge is to hear as many other perspectives as possible.

اپنے علم کو بڑھانے کا ایک اچھا طریقہ یہ ہے کہ زیادہ سے زیادہ دوسرے نقطہ نظر کو سنا جائے۔


The Manchester Mark I and Atlas: A Historical Perspective.

مانچسٹر مارک I اور اٹلس: ایک تاریخی تناظر۔


The heap is needed for data structures such as linked lists, hash tables, trees, and other interesting data structures.

ہیپ کو ڈیٹا ڈھانچے کے لیے درکار ہے جیسے کہ منسلک فہرستیں، ہیش ٹیبل، درخت، اور دیگر دلچسپ ڈیٹا ڈھانچے۔


The OS must also track, in some way, blocked processes.

آپریٹنگ سسٹم کو بھی کسی نہ کسی طرح مسدود عمل کو ٹریک کرنا چاہیے۔


پروگرام اپنا عمل شروع کرتا ہے۔


The OS has now (finally) set the stage for program execution.

آپریٹنگ سسٹم نے اب (آخر کار) پروگرام کے عمل کے لیے اسٹیج ترتیب دے دیا ہے۔


وقت کے ساتھ، نوجوان طالب علم، اچھے وقت میں۔


The operating system manages the computer's resources.

آپریٹنگ سسٹم کمپیوٹر کے وسائل کا انتظام کرتا ہے۔


براہ کرم ایک نیا عمل بنائیں.


بچے کے عمل نے اپنا کام مکمل کر لیا۔


شیل ایک صارف پروگرام ہے۔


میں مین پیجز پڑھ رہا ہوں۔


پروگرام صارف موڈ میں چل رہا ہے۔


The system call fork() creates a new process.

سسٹم کال fork() ایک نیا عمل بناتا ہے۔


The parent process waits for the child to finish.

والدین کا عمل بچے کے ختم ہونے کا انتظار کرتا ہے۔


The exec() system call replaces the current process image.

exec() سسٹم کال موجودہ عمل کی تصویر کو بدل دیتا ہے۔


The shell uses fork() and exec() to run commands.

شیل کمانڈز چلانے کے لیے fork() اور exec() کا استعمال کرتا ہے۔


Understanding the process API is crucial for systems programming.

سسٹمز پروگرامنگ کے لیے عمل API کو سمجھنا ضروری ہے۔


The operating system provides an interface for process creation and control.

آپریٹنگ سسٹم عمل کی تخلیق اور کنٹرول کے لیے ایک انٹرفیس فراہم کرتا ہے۔


The separation of fork() and exec() allows for powerful shell features.

fork() اور exec() کی علیحدگی طاقتور شیل خصوصیات کی اجازت دیتی ہے۔


The CPU scheduler determines which process runs at any given time.

سی پی یو شیڈیولر اس بات کا تعین کرتا ہے کہ کسی بھی وقت کون سا عمل چلتا ہے۔


Limited direct execution is a key technique for CPU virtualization.

محدود براہ راست عمل سی پی یو ورچوئلائزیشن کے لیے ایک اہم تکنیک ہے۔


The hardware assists the OS by providing different modes of execution.

ہارڈ ویئر مختلف طریقوں پر عمل درآمد فراہم کرکے OS کی مدد کرتا ہے۔


The operating system must virtualize the CPU in an efficient manner, but while retaining control over the system.

آپریٹنگ سسٹم کو سی پی یو کو موثر انداز میں ورچوئلائز کرنا چاہیے، لیکن سسٹم پر کنٹرول برقرار رکھتے ہوئے.


The combination of fork() and exec() are simple and immensely powerful.

fork() اور exec() کا امتزاج سادہ اور بے حد طاقتور ہے۔


The shell figures out where in the file system the executable resides.

شیل اس بات کا پتہ لگاتا ہے کہ فائل سسٹم میں ایگزیکیوٹیبل کہاں واقع ہے۔


The OS will often use a judicious bit of hardware support in order to accomplish its work effectively.

OS اکثر اپنے کام کو مؤثر طریقے سے انجام دینے کے لیے ہارڈ ویئر سپورٹ کا ایک مناسب حصہ استعمال کرے گا۔


System calls allow user programs to access kernel functionality.

سسٹم کالز صارف پروگراموں کو کرنل کی فعالیت تک رسائی کی اجازت دیتی ہیں۔


The hardware saves the caller’s register state.

ہارڈ ویئر کال کرنے والے کے رجسٹر کی حالت کو محفوظ کرتا ہے۔


The kernel initializes the trap table at boot time.

کرنل بوٹ کے وقت ٹریپ ٹیبل کو شروع کرتا ہے۔


The OS must inform the hardware of the locations of these trap handlers.

آپریٹنگ سسٹم کو ہارڈ ویئر کو ان ٹریپ ہینڈلرز کے مقامات کے بارے میں مطلع کرنا چاہیے۔


The timer interrupt gives the OS the ability to run again.

ٹائمر انٹربٹ آپریٹنگ سسٹم کو دوبارہ چلانے کی صلاحیت فراہم کرتا ہے۔


A context switch is conceptually simple.

ایک سیاق و سباق کا تبادلہ تصوراتی طور پر آسان ہے۔


The OS decides to stop one process and start another.

آپریٹنگ سسٹم ایک عمل کو روکنے اور دوسرے کو شروع کرنے کا فیصلہ کرتا ہے۔


آپریٹنگ سسٹم سی پی یو پر دوبارہ کنٹرول حاصل کرتا ہے۔


The OS can feel safe in that control will eventually be returned to it.

آپریٹنگ سسٹم محفوظ محسوس کر سکتا ہے کہ بالآخر کنٹرول اسے واپس کر دیا جائے گا۔


The basic idea is straightforward: just run the program you want to run on the CPU.

بنیادی خیال سیدھا ہے: بس وہ پروگرام چلائیں جسے آپ سی پی یو پر چلانا چاہتے ہیں۔


آپریٹنگ سسٹم سی پی یو کو “بچے کے لیے محفوظ” بناتا ہے۔


دوبارہ شروع کرنا خودکار کرنا آسان ہے۔


The news reported a significant economic downturn.

خبروں میں معاشی بدحالی کی اطلاع دی گئی۔


She decided to take a vacation to escape the city.

اس نے شہر سے بچنے کے لیے چھٹی پر جانے کا فیصلہ کیا۔


The company announced a new product launch.

کمپنی نے ایک نئی مصنوعات کے آغاز کا اعلان کیا۔


آج اس کی طبیعت ناساز تھی۔


The team worked collaboratively on the project.

ٹیم نے اس منصوبے پر باہمی تعاون سے کام کیا۔


The government implemented new policies.

حکومت نے نئی پالیسیاں نافذ کیں۔


The artist's work was displayed in the gallery.

فنکار کا کام گیلری میں نمائش کے لیے پیش کیا گیا۔


In this run, when we gave an input value of 100,000, instead of getting a final value of 200,000, we instead first get 143,012.

اس رن میں، جب ہم نے 100,000 کی ان پٹ ویلیو دی، تو 200,000 کی حتمی ویلیو حاصل کرنے کے بجائے، ہمیں پہلے 143,012 ملتا ہے۔


Then, when we run the program a second time, we not only again get the wrong value, but also a different value than the last time.

پھر، جب ہم پروگرام کو دوسری بار چلاتے ہیں، تو نہ صرف ہمیں دوبارہ غلط ویلیو ملتی ہے، بلکہ پچھلی بار سے مختلف ویلیو بھی ملتی ہے۔


In fact, if you run the program over and over with high values of loops, you may find that sometimes you even get the right answer!

درحقیقت، اگر آپ پروگرام کو بار بار زیادہ لوپ ویلیوز کے ساتھ چلاتے ہیں، تو آپ کو معلوم ہو سکتا ہے کہ بعض اوقات آپ کو صحیح جواب بھی مل جاتا ہے!


تو، یہ کیوں ہو رہا ہے؟


As it turns out, the reason for these odd and unusual outcomes relate to how instructions are executed, which is one at a time.

جیسا کہ یہ پتہ چلتا ہے، ان عجیب و غریب نتائج کی وجہ اس بات سے متعلق ہے کہ ہدایات کیسے چلائی جاتی ہیں، جو ایک وقت میں ایک ہے۔


Unfortunately, a key part of the program above, where the shared counter is incremented, takes three instructions: one to load the value of the counter from memory into a register, one to increment it, and one to store it back into memory.

بدقسمتی سے، اوپر والے پروگرام کا ایک اہم حصہ، جہاں مشترکہ کاؤنٹر میں اضافہ کیا جاتا ہے، تین ہدایات لیتا ہے: ایک کاؤنٹر کی ویلیو میموری سے ایک رجسٹر میں لوڈ کرنے کے لیے، ایک اسے بڑھانے کے لیے، اور ایک اسے واپس میموری میں محفوظ کرنے کے لیے۔


Because these three instructions do not execute atomically (all at once), strange things can happen.

کیونکہ یہ تین ہدایات ایک ساتھ (ایک ہی وقت میں) نہیں چلتی ہیں، عجیب و غریب چیزیں ہو سکتی ہیں۔


It is this problem of concurrency that we will address in great detail in the second part of this book.

یہ ہم آہنگی کا مسئلہ ہے جسے ہم اس کتاب کے دوسرے حصے میں بہت تفصیل سے حل کریں گے۔


The third major theme of the course is persistence.

کورس کا تیسرا بڑا موضوع استحکام ہے۔


In system memory, data can be easily lost, as devices such as DRAM store values in a volatile manner; when power goes away or the system crashes, any data in memory is lost.

سسٹم میموری میں، ڈیٹا آسانی سے ضائع ہو سکتا ہے، کیونکہ DRAM جیسے آلات ویلیوز کو غیر مستحکم انداز میں محفوظ کرتے ہیں؛ جب بجلی چلی جاتی ہے یا سسٹم کریش ہو جاتا ہے، تو میموری میں موجود کوئی بھی ڈیٹا ضائع ہو جاتا ہے۔


Thus, we need hardware and software to be able to store data persistently; such storage is thus critical to any system as users care a great deal about their data.

اس طرح، ہمیں ہارڈ ویئر اور سافٹ ویئر کی ضرورت ہے کہ وہ ڈیٹا کو مستقل طور پر محفوظ کر سکیں؛ اس طرح کا اسٹوریج کسی بھی سسٹم کے لیے بہت اہم ہے کیونکہ صارفین اپنے ڈیٹا کی بہت پرواہ کرتے ہیں۔


The hardware comes in the form of some kind of input/output or I/O device; in modern systems, a hard drive is a common repository for long-lived information, although solid-state drives (SSDs) are making headway in this arena as well.

ہارڈ ویئر کسی قسم کے ان پٹ/آؤٹ پٹ یا I/O ڈیوائس کی شکل میں آتا ہے؛ جدید نظاموں میں، ہارڈ ڈرائیو طویل مدتی معلومات کے لیے ایک عام ذخیرہ ہے، حالانکہ سالڈ سٹیٹ ڈرائیوز (SSDs) بھی اس میدان میں ترقی کر رہی ہیں۔


The software in the operating system that usually manages the disk is called the file system; it is thus responsible for storing any files the user creates in a reliable and efficient manner on the disks of the system.

آپریٹنگ سسٹم میں موجود سافٹ ویئر جو عام طور پر ڈسک کا انتظام کرتا ہے اسے فائل سسٹم کہا جاتا ہے؛ اس طرح یہ سسٹم کی ڈسک پر کسی بھی فائل کو قابل اعتماد اور موثر انداز میں محفوظ کرنے کا ذمہ دار ہے۔


Unlike the abstractions provided by the OS for the CPU and memory, the OS does not create a private, virtualized disk for each application.

CPU اور میموری کے لیے OS کے ذریعے فراہم کردہ تجریدات کے برعکس، OS ہر ایپلیکیشن کے لیے ایک نجی، ورچوئلائزڈ ڈسک نہیں بناتا ہے۔


Rather, it is assumed that often times, users will want to share information that is in files.

بلکہ، یہ فرض کیا جاتا ہے کہ اکثر اوقات، صارفین ان فائلوں میں موجود معلومات کا اشتراک کرنا چاہیں گے۔


For example, when writing a C program, you might first use an editor (e.g., Emacs) to create and edit the C file (emacs -nw main.c).

مثال کے طور پر، C پروگرام لکھتے وقت، آپ پہلے ایڈیٹر (جیسے، Emacs) کو C فائل بنانے اور اس میں ترمیم کرنے کے لیے استعمال کر سکتے ہیں (emacs -nw main.c).


Once done, you might use the compiler to turn the source code into an executable (e.g., gcc -o main main.c).

ایک بار ہو جانے کے بعد، آپ سورس کوڈ کو ایک قابل عمل فائل میں تبدیل کرنے کے لیے کمپائلر استعمال کر سکتے ہیں (جیسے، gcc -o main main.c).


When you’re finished, you might run the new executable (e.g., ./main).

جب آپ ختم کر لیں، تو آپ نئی قابل عمل فائل چلا سکتے ہیں (جیسے، ./main).


Thus, you can see how files are shared across different processes.

اس طرح، آپ دیکھ سکتے ہیں کہ مختلف عملوں میں فائلیں کیسے شیئر کی جاتی ہیں۔


The file system is the part of the OS in charge of managing persistent data.

فائل سسٹم OS کا وہ حصہ ہے جو مستقل ڈیٹا کے انتظام کا انچارج ہے۔


The operating system decides whether to remove the current user.

آپریٹنگ سسٹم فیصلہ کرتا ہے کہ موجودہ صارف کو ہٹانا ہے یا نہیں۔


لمبینچ ڈاؤن لوڈ کریں اور اسے آزمائیں۔


This is hard and painful to read, so probably avoid it if you can.

یہ پڑھنے میں مشکل اور تکلیف دہ ہے، لہذا اگر ہو سکے تو اس سے بچیں۔


The author shows that if you can jump into code arbitrarily, you can essentially stitch together any code sequence you like.

مصنف دکھاتا ہے کہ اگر آپ من مانے طریقے سے کوڈ میں چھلانگ لگا سکتے ہیں، تو آپ بنیادی طور پر کسی بھی کوڈ کے تسلسل کو ایک ساتھ جوڑ سکتے ہیں۔


In this homework, you’ll measure the costs of a system call and context switch.

اس ہوم ورک میں، آپ ایک سسٹم کال اور سیاق و سباق کے سوئچ کی لاگت کی پیمائش کریں گے۔


Measuring the cost of a system call is relatively easy.

سسٹم کال کی لاگت کی پیمائش نسبتاً آسان ہے۔


You can try to re-create something similar here, using pipes, or perhaps some other communication mechanism such as UNIX sockets.

آپ یہاں پائپ کا استعمال کرتے ہوئے یا شاید کسی دوسرے مواصلاتی طریقہ کار جیسے UNIX ساکٹ کا استعمال کرتے ہوئے اسی طرح کی چیز کو دوبارہ تخلیق کرنے کی کوشش کر سکتے ہیں۔


By ensuring both processes are on the same processor, you are making sure to measure the cost of the OS stopping one process and restoring another on the same CPU.

اس بات کو یقینی بناتے ہوئے کہ دونوں عمل ایک ہی پروسیسر پر ہیں، آپ اس بات کو یقینی بنا رہے ہیں کہ OS کی ایک عمل کو روکنے اور اسی CPU پر دوسرے کو بحال کرنے کی لاگت کی پیمائش کی جائے۔


By now low-level mechanisms of running processes should be clear.

اب تک عمل چلانے کے کم سطح کے طریقہ کار واضح ہو جانے چاہئیں۔


We will now do just that, presenting a series of scheduling policies.

اب ہم بالکل وہی کریں گے، شیڈولنگ پالیسیوں کا ایک سلسلہ پیش کرتے ہوئے۔


The origins of scheduling, in fact, predate computer systems.

درحقیقت، شیڈولنگ کی ابتدا کمپیوٹر سسٹمز سے پہلے کی ہے۔


How should we develop a basic framework for thinking about scheduling policies?

ہمیں شیڈولنگ پالیسیوں کے بارے میں سوچنے کے لیے ایک بنیادی فریم ورک کیسے تیار کرنا چاہیے؟


اہم مفروضے کیا ہیں؟


کون سے میٹرکس اہم ہیں؟


Each job runs for the same amount of time.

ہر کام ایک ہی وقت کے لیے چلتا ہے۔


تمام کام ایک ہی وقت میں آتے ہیں۔


The turnaround time of a job is defined as the time at which the job completes minus the time at which the job arrived in the system.

کسی کام کا ٹرناراؤنڈ ٹائم اس وقت کے طور پر بیان کیا جاتا ہے جس پر کام مکمل ہوتا ہے منہا وہ وقت جس پر کام سسٹم میں آیا تھا۔


FIFO has a number of positive properties: it is clearly very simple and thus easy to implement.

FIFO میں کئی مثبت خصوصیات ہیں: یہ واضح طور پر بہت آسان ہے اور اس طرح لاگو کرنا آسان ہے۔


Imagine three jobs arrive in the system, A, B, and C, at roughly the same time.

تصور کریں کہ تین کام سسٹم میں آتے ہیں، A، B، اور C، تقریباً ایک ہی وقت میں۔


This problem is generally referred to as the convoy effect.

اس مسئلے کو عام طور پر قافلے کے اثر کے طور پر جانا جاتا ہے۔


The scheduler decides which process gets to use the CPU.

شیڈولر فیصلہ کرتا ہے کہ کون سا عمل سی پی یو استعمال کرے گا۔


Operating systems use schedulers to manage processes.

آپریٹنگ سسٹم عملوں کا انتظام کرنے کے لیے شیڈولرز کا استعمال کرتے ہیں۔


I/O operations can overlap with CPU usage to improve system efficiency.

سسٹم کی کارکردگی کو بہتر بنانے کے لیے I/O آپریشنز CPU کے استعمال کے ساتھ اوورلیپ ہو سکتے ہیں۔


The multi-level feedback queue is a well-known scheduling approach.

ملٹی لیول فیڈ بیک قطار شیڈولنگ کا ایک معروف طریقہ ہے۔


The OS doesn't always know how long a job will run.

آپریٹنگ سسٹم کو ہمیشہ یہ معلوم نہیں ہوتا کہ کوئی کام کتنی دیر چلے گا۔


Interactive jobs should have good response times.

انٹرایکٹو کاموں میں ردعمل کا اچھا وقت ہونا چاہیے۔


The scheduler learns from the past to predict the future.

شیڈولر مستقبل کی پیشین گوئی کرنے کے لیے ماضی سے سیکھتا ہے۔


MLFQ uses priorities to decide which job runs.

MLFQ اس بات کا فیصلہ کرنے کے لیے ترجیحات کا استعمال کرتا ہے کہ کون سا کام چلتا ہے۔


A job's priority changes based on its behavior.

کسی کام کی ترجیح اس کے رویے کی بنیاد پر بدلتی ہے۔


If a job uses an entire time slice, its priority is reduced.

اگر کوئی کام پوری ٹائم سلائس استعمال کرتا ہے، تو اس کی ترجیح کم ہو جاتی ہے۔


If a job gives up the CPU before the time slice is up, it stays at the same priority.

اگر کوئی کام ٹائم سلائس ختم ہونے سے پہلے CPU چھوڑ دیتا ہے، تو یہ اسی ترجیح پر رہتا ہے۔


The system can suffer from starvation if there are too many interactive jobs.

اگر بہت زیادہ انٹرایکٹو کام ہیں تو سسٹم بھوک کا شکار ہو سکتا ہے۔


A priority boost can prevent starvation.

ترجیحی فروغ بھوک کو روک سکتا ہے۔


Gaming the scheduler is a potential problem.

شیڈولر کو گیم کرنا ایک ممکنہ مسئلہ ہے۔


Better accounting of CPU time can prevent gaming.

CPU وقت کا بہتر حساب کتاب گیمنگ کو روک سکتا ہے۔


The time slice length can vary across different queues.

ٹائم سلائس کی لمبائی مختلف قطاروں میں مختلف ہو سکتی ہے۔


The Solaris TS scheduler is easy to configure.

سولارس ٹی ایس شیڈولر کو ترتیب دینا آسان ہے۔


MLFQ is an excellent example of a system that learns from the past.

MLFQ ایک ایسے نظام کی بہترین مثال ہے جو ماضی سے سیکھتا ہے۔


The goal is to minimize response time for interactive jobs.

مقصد انٹرایکٹو کاموں کے لیے ردعمل کے وقت کو کم سے کم کرنا ہے۔


The scheduler should make better scheduling decisions.

شیڈولر کو بہتر شیڈولنگ فیصلے کرنے چاہئیں۔


یہ مقالہ لاٹری شیڈولنگ پر بحث کرتا ہے۔


Lottery scheduling is a flexible method.

لاٹری شیڈولنگ ایک لچکدار طریقہ ہے۔


یہ مقالہ ایک اچھی مثال ہے۔


یہ مقالہ میموری مینجمنٹ کے بارے میں ہے۔


The program lottery.py shows how a lottery scheduler works.

پروگرام lottery.py دکھاتا ہے کہ لاٹری شیڈولر کیسے کام کرتا ہے۔


Compute the solutions for simulations with 3 jobs.

3 نوکریوں کے ساتھ نقلیوں کے حل کا حساب لگائیں۔


What happens when the number of tickets is imbalanced?

کیا ہوتا ہے جب ٹکٹوں کی تعداد غیر متوازن ہو؟


Multi-processor systems are becoming commonplace.

ملٹی پروسیسر سسٹم عام ہوتے جا رہے ہیں۔


Multi-threaded applications can run faster.

ملٹی تھریڈڈ ایپلی کیشنز تیزی سے چل سکتی ہیں۔


This chapter will introduce multiprocessor scheduling.

یہ باب ملٹی پروسیسر شیڈولنگ کا تعارف کرائے گا۔


Caches help the processor run programs faster.

کیشز پروسیسر کو پروگراموں کو تیزی سے چلانے میں مدد کرتے ہیں۔


The system fetches the value from main memory.

سسٹم مرکزی میموری سے ویلیو حاصل کرتا ہے۔


This general problem is called cache coherence.

اس عام مسئلے کو کیش کوہیرنس کہا جاتا ہے۔


Programs have to worry about shared data.

پروگراموں کو مشترکہ ڈیٹا کے بارے میں فکر کرنے کی ضرورت ہے۔


Mutual exclusion primitives should be used.

باہمی اخراج کے ابتدائی عناصر استعمال کیے جانے چاہئیں۔


A multiprocessor scheduler should consider cache affinity.

ملٹی پروسیسر شیڈولر کو کیش افینٹی پر غور کرنا چاہیے۔


SQMS میں اسکیل ایبلٹی کی کمی ہے۔


SQMS does not readily preserve cache affinity.

SQMS آسانی سے کیش افینٹی کو محفوظ نہیں رکھتا ہے۔


MQMS intrinsically provides cache affinity.

MQMS بنیادی طور پر کیش افینٹی فراہم کرتا ہے۔


How should a multi-queue multiprocessor scheduler handle load imbalance?

ملٹی کیو ملٹی پروسیسر شیڈولر کو لوڈ عدم توازن کو کیسے سنبھالنا چاہیے؟


The operating system manages computer hardware and software resources.

آپریٹنگ سسٹم کمپیوٹر کے ہارڈ ویئر اور سافٹ ویئر کے وسائل کا انتظام کرتا ہے۔


Please see the man page for more details about the command.

کمانڈ کے بارے میں مزید تفصیلات کے لیے براہ کرم مین پیج دیکھیں۔


The scheduler determines which process gets to use the CPU.

شیڈیولر اس بات کا تعین کرتا ہے کہ کون سا عمل CPU استعمال کرے گا۔


I am trying to understand the concept of multi-level feedback queues.

میں ملٹی لیول فیڈ بیک قطاروں کے تصور کو سمجھنے کی کوشش کر رہا ہوں۔


The system uses feedback to adjust the priority of each job.

سسٹم ہر کام کی ترجیح کو ایڈجسٹ کرنے کے لیے فیڈ بیک کا استعمال کرتا ہے۔


The operating system rarely knows what is best for each process.

آپریٹنگ سسٹم شاذ و نادر ہی جانتا ہے کہ ہر عمل کے لیے کیا بہتر ہے۔


Such hints are useful in many parts of the OS, including the scheduler.

اس طرح کے اشارے OS کے بہت سے حصوں میں کارآمد ہیں، بشمول شیڈیولر۔


The rules of MLFQ are designed to optimize performance.

MLFQ کے اصول کارکردگی کو بہتر بنانے کے لیے ڈیزائن کیے گئے ہیں۔


MLFQ achieves the best of both worlds: excellent performance and fairness.

MLFQ دونوں جہانوں میں بہترین کارکردگی حاصل کرتا ہے: بہترین کارکردگی اور منصفانہ سلوک۔


Many systems use a form of MLFQ as their base scheduler.

بہت سے نظام MLFQ کی ایک شکل کو اپنے بنیادی شیڈیولر کے طور پر استعمال کرتے ہیں۔


Proportional-share scheduling aims to guarantee each job a percentage of CPU time.

متناسب شیئر شیڈیولنگ کا مقصد ہر کام کو CPU وقت کا ایک فیصد یقینی بنانا ہے۔


Lottery scheduling is a modern example of proportional-share scheduling.

لاٹری شیڈیولنگ متناسب شیئر شیڈیولنگ کی ایک جدید مثال ہے۔


Processes that should run more often are given more chances to win the lottery.

جن عملوں کو زیادہ بار چلنا چاہیے انہیں لاٹری جیتنے کے زیادہ مواقع دیے جاتے ہیں۔


Tickets represent the share of a resource a process should receive.

ٹکٹ اس وسائل کے حصے کی نمائندگی کرتے ہیں جو ایک عمل کو ملنا چاہیے۔


The scheduler picks a winning ticket to determine which process runs next.

شیڈیولر یہ تعین کرنے کے لیے ایک جیتنے والا ٹکٹ منتخب کرتا ہے کہ اگلا کون سا عمل چلے گا۔


Randomness is a robust and simple way of making decisions.

بے ترتیب ہونا فیصلے کرنے کا ایک مضبوط اور آسان طریقہ ہے۔


Random approaches often avoid strange corner-case behaviors.

بے ترتیب طریقے اکثر عجیب و غریب کونے کے کیس کے رویوں سے بچتے ہیں۔


Ticket currency allows users to allocate tickets among their jobs.

ٹکٹ کرنسی صارفین کو اپنے کاموں میں ٹکٹ مختص کرنے کی اجازت دیتی ہے۔


Ticket transfer is useful in client/server settings.

ٹکٹ کی منتقلی کلائنٹ/سرور کی ترتیبات میں کارآمد ہے۔


Stride scheduling is a deterministic fair-share scheduler.

سٹرائڈ شیڈیولنگ ایک قطعی منصفانہ شیئر شیڈیولر ہے۔


A classic paper on how different locking alternatives do and don’t scale.

ایک کلاسک مقالہ جس میں بتایا گیا ہے کہ مختلف لاکنگ کے متبادل کس طرح پیمانہ کرتے ہیں اور نہیں کرتے ہیں۔


A terrific modern paper on the difficulties of scaling Linux to many cores.

کئی کوروں تک لینکس کو پیمانہ کرنے میں دشواریوں پر ایک زبردست جدید مقالہ۔


A treasure filled with details about parallel machines and algorithms.

متوازی مشینوں اور الگورتھم کے بارے میں تفصیلات سے بھرا خزانہ۔


Cilk is a lightweight language and runtime for writing parallel programs, and an excellent example of the work-stealing paradigm.

Cilk متوازی پروگرام لکھنے کے لیے ایک ہلکی پھلکی زبان اور رن ٹائم ہے، اور کام چوری کے نمونے کی ایک بہترین مثال ہے۔


The pioneering paper on how to use bus snooping, i.e., paying attention to requests you see on the bus, to build a cache coherence protocol.

بس سنوپنگ کے استعمال پر ایک اہم مقالہ، یعنی، بس پر آپ کو نظر آنے والی درخواستوں پر توجہ دینا، کیش ہم آہنگی پروٹوکول بنانے کے لیے۔


A dissertation that covers a lot of the details of how modern Linux multiprocessor scheduling works.

ایک مقالہ جو جدید لینکس ملٹی پروسیسر شیڈولنگ کے کام کرنے کی بہت سی تفصیلات کا احاطہ کرتا ہے۔


A definitive overview of memory consistency and multiprocessor caching.

میموری کی مستقل مزاجی اور ملٹی پروسیسر کیشنگ کا ایک حتمی جائزہ۔


A tech report on this cool scheduling idea, from Ion Stoica, now a professor at U. C. Berkeley and world expert in networking, distributed systems, and many other things.

اس ٹھنڈے شیڈولنگ آئیڈیا پر ایک ٹیک رپورٹ، جو اب یو سی برکلے کے پروفیسر اور نیٹ ورکنگ، تقسیم شدہ سسٹمز، اور بہت سی دوسری چیزوں کے عالمی ماہر، آئن سٹوئکا کی طرف سے ہے۔


Student: Well, Professor, that seems like a loaded question.

طالب علم: ٹھیک ہے، پروفیسر، ایسا لگتا ہے کہ یہ ایک بھرا ہوا سوال ہے۔


Professor: That’s true. But it’s also still an honest question.

پروفیسر: یہ سچ ہے۔ لیکن یہ اب بھی ایک ایماندارانہ سوال ہے۔


مجھے لگتا ہے کہ میں نے کچھ چیزیں سیکھی ہیں۔


First, I learned a little about how the OS virtualizes the CPU.

سب سے پہلے، میں نے تھوڑا سا سیکھا کہ OS CPU کو کس طرح ورچوئلائز کرتا ہے۔


All those interactions do seem a little complicated though; how can I learn more?

تاہم، وہ تمام تعاملات تھوڑے پیچیدہ لگتے ہیں؛ میں مزید کیسے سیکھ سکتا ہوں؟


ٹھیک ہے، یہ ایک اچھا سوال ہے۔


I think there is no substitute for doing; just reading about these things doesn’t quite give you the proper sense.

مجھے لگتا ہے کہ کرنے کا کوئی متبادل نہیں ہے۔ ان چیزوں کے بارے میں پڑھنے سے آپ کو صحیح احساس نہیں ہوتا ہے۔


It seems like the OS is fairly paranoid.

ایسا لگتا ہے کہ OS کافی حد تک وہمی ہے۔


It wants to make sure it stays in charge of the machine.

یہ یقینی بنانا چاہتا ہے کہ وہ مشین کا انچارج رہے۔


Perhaps that is why we think of the OS as a resource manager.

شاید یہی وجہ ہے کہ ہم OS کو ایک وسیلہ مینیجر کے طور پر سوچتے ہیں۔


Some lessons to be learned there for sure.

وہاں یقینی طور پر کچھ سبق سیکھنے کو ہیں۔


Like the notion of bumping short jobs to the front of the queue – I knew that was a good idea ever since the one time I was buying some gum at the store, and the guy in front of me had a credit card that wouldn’t work.

جیسے کہ مختصر کاموں کو قطار کے سامنے دھکیلنے کا تصور – میں جانتا تھا کہ یہ ایک اچھا خیال ہے جب سے میں ایک بار اسٹور پر کچھ گم خرید رہا تھا، اور میرے سامنے والے شخص کے پاس ایک کریڈٹ کارڈ تھا جو کام نہیں کرے گا۔


The compiler does the rest, making sure to make space on the stack when you call into func().

کمپائلر باقی کام کرتا ہے، اس بات کو یقینی بناتا ہے کہ جب آپ فنک() میں کال کرتے ہیں تو اسٹیک پر جگہ بنائی جائے۔


When your return from the function, the compiler deallocates the memory for you.

جب آپ فنکشن سے واپس آتے ہیں، تو کمپائلر آپ کے لیے میموری کو ڈیالوکیٹ کرتا ہے۔


It is this need for long-lived memory that gets us to the second type of memory, called heap memory.

یہ طویل مدتی میموری کی ضرورت ہے جو ہمیں میموری کی دوسری قسم تک لے جاتی ہے، جسے ہیپ میموری کہا جاتا ہے۔


In UNIX/C programs, understanding how to allocate and manage memory is critical in building robust and reliable software.

یونیکس/سی پروگراموں میں، میموری کو مختص کرنے اور منظم کرنے کا طریقہ سمجھنا مضبوط اور قابل اعتماد سافٹ ویئر بنانے میں بہت اہم ہے۔


The main problem we address is this: CRUX: HOW TO ALLOCATE AND MANAGE MEMORY.

ہم جس بنیادی مسئلے سے نمٹتے ہیں وہ یہ ہے: CRUX: میموری کو کیسے مختص اور منظم کیا جائے۔


The interfaces provided are quite simple, and hence the chapter is short and to the point.

فراہم کردہ انٹرفیس کافی آسان ہیں، اور اس لیے باب مختصر اور جامع ہے۔


In running a C program, there are two types of memory that are allocated.

سی پروگرام چلاتے وقت، میموری کی دو قسمیں ہیں جو مختص کی جاتی ہیں۔


Declaring memory on the stack in C is easy.

سی میں اسٹیک پر میموری کا اعلان کرنا آسان ہے۔


For example, let’s say you need some space in a function func() for an integer, called x.

مثال کے طور پر، آئیے کہتے ہیں کہ آپ کو ایک فنکشن فنک() میں ایک انٹیجر کے لیے کچھ جگہ کی ضرورت ہے، جسے x کہا جاتا ہے۔


Here is an example of how one might allocate a pointer to an integer on the heap:

یہ ایک مثال ہے کہ کوئی ہیپ پر ایک انٹیجر کی طرف اشارہ کیسے مختص کر سکتا ہے:


The malloc() call is quite simple: you pass it a size asking for some room on the heap.

مالوک() کال کافی آسان ہے: آپ اسے ایک سائز پاس کرتے ہیں جو ہیپ پر کچھ جگہ مانگتا ہے۔


From this information, you can see that all you need to do is include the header file stdlib.h to use malloc.

اس معلومات سے، آپ دیکھ سکتے ہیں کہ آپ کو صرف ہیڈر فائل stdlib.h کو شامل کرنے کی ضرورت ہے تاکہ malloc استعمال کیا جا سکے۔


In C, this is generally thought of as a compile-time operator, meaning that the actual size is known at compile time.

سی میں، اسے عام طور پر ایک کمپائل ٹائم آپریٹر کے طور پر سمجھا جاتا ہے، جس کا مطلب ہے کہ اصل سائز کمپائل ٹائم پر معلوم ہوتا ہے۔


If you aren’t sure how some routine or operator you are using behaves, there is no substitute for simply trying it out.

اگر آپ کو یقین نہیں ہے کہ آپ جس روٹین یا آپریٹر کو استعمال کر رہے ہیں وہ کیسے برتاؤ کرتا ہے، تو اسے آزمانے کا کوئی متبادل نہیں ہے۔


In the first line, we’ve declared space for an array of 10 integers, which is fine and dandy.

پہلی سطر میں، ہم نے 10 انٹیجرز کی ایک صف کے لیے جگہ کا اعلان کیا ہے، جو ٹھیک ہے۔


As it turns out, allocating memory is the easy part of the equation; knowing when, how, and even if to free memory is the hard part.

جیسا کہ یہ پتہ چلتا ہے، میموری مختص کرنا مساوات کا آسان حصہ ہے؛ یہ جاننا کہ کب، کیسے، اور یہاں تک کہ میموری کو آزاد کرنا مشکل حصہ ہے۔


Forgetting To Allocate Memory Many routines expect memory to be allocated before you call them.

میموری مختص کرنا بھول جانا بہت سے معمولات توقع کرتے ہیں کہ آپ انہیں کال کرنے سے پہلے میموری مختص کی جائے۔


The total amount of free space exceeds the size of the request.

مفت جگہ کی کل مقدار درخواست کے سائز سے زیادہ ہے۔


The figure shows an example of this problem.

شکل اس مسئلے کی ایک مثال دکھاتی ہے۔


In this case, the total free space available is 20 bytes.

اس صورت میں، دستیاب کل مفت جگہ 20 بائٹس ہے۔


Unfortunately, it is fragmented into two chunks of size 10 each.

بدقسمتی سے، یہ 10 کے سائز کے دو ٹکڑوں میں منقسم ہے۔


As a result, a request for 15 bytes will fail even though there are 20 bytes free.

نتیجے کے طور پر، 15 بائٹس کی درخواست ناکام ہو جائے گی، حالانکہ 20 بائٹس مفت ہیں۔


And thus we arrive at the problem addressed in this chapter.

اور اس طرح ہم اس باب میں بیان کردہ مسئلے پر پہنچتے ہیں۔


How should free space be managed, when satisfying variable-sized requests?

مختلف سائز کی درخواستوں کو پورا کرتے وقت مفت جگہ کا انتظام کیسے کیا جانا چاہیے؟


What strategies can be used to minimize fragmentation?

فرگمنٹیشن کو کم کرنے کے لیے کیا حکمت عملی استعمال کی جا سکتی ہیں؟


What are the time and space overheads of alternate approaches?

متبادل طریقوں کے وقت اور جگہ کے اخراجات کیا ہیں؟


We assume a basic interface such as that provided by malloc() and free().

ہم ایک بنیادی انٹرفیس فرض کرتے ہیں جیسے کہ malloc() اور free() کے ذریعے فراہم کیا جاتا ہے۔


Specifically, void * malloc(size t size) takes a single parameter, size.

خاص طور پر، void * malloc(size t size) ایک واحد پیرامیٹر، size لیتا ہے۔


It hands back a pointer to a region of that size (or greater).

یہ اس سائز (یا اس سے بڑے) کے علاقے کی طرف ایک اشارہ واپس کرتا ہے۔


The complementary routine void free(void * ptr) takes a pointer and frees the corresponding chunk.

اس کے تکمیلی معمول void free(void * ptr) ایک اشارہ لیتا ہے اور متعلقہ ٹکڑے کو آزاد کرتا ہے۔


Note the implication of the interface: the user, when freeing the space, does not inform the library of its size.

انٹرفیس کے مضمرات پر غور کریں: صارف، جگہ خالی کرتے وقت، لائبریری کو اس کے سائز کے بارے میں مطلع نہیں کرتا ہے۔


Thus, the library must be able to figure out how big a chunk of memory is when handed just a pointer to it.

اس طرح، لائبریری کو یہ معلوم کرنے کے قابل ہونا چاہیے کہ جب اسے صرف اس کی طرف اشارہ کیا جائے تو میموری کا ایک ٹکڑا کتنا بڑا ہے۔


We’ll discuss how to do this a bit later on in the chapter.

ہم اس پر تبادلہ خیال کریں گے کہ باب میں بعد میں یہ کیسے کرنا ہے۔


The space that this library manages is known historically as the heap.

وہ جگہ جس کا یہ لائبریری انتظام کرتی ہے تاریخی طور پر ہیپ کے نام سے جانی جاتی ہے۔


This structure contains references to all of the free chunks of space in the managed region of memory.

اس ڈھانچے میں میموری کے زیر انتظام علاقے میں جگہ کے تمام مفت ٹکڑوں کے حوالہ جات شامل ہیں۔


We further assume that primarily we are concerned with external fragmentation, as described above.

ہم مزید فرض کرتے ہیں کہ بنیادی طور پر ہم بیرونی ٹکڑے ٹکڑے ہونے سے متعلق ہیں، جیسا کہ اوپر بیان کیا گیا ہے۔


Allocators could of course also have the problem of internal fragmentation.

الوکٹرز میں یقیناً اندرونی ٹکڑے ٹکڑے ہونے کا مسئلہ بھی ہو سکتا ہے۔


The OS must manage memory, keeping track of which locations are free and which are in use.

آپریٹنگ سسٹم کو میموری کا انتظام کرنا چاہیے، اس بات کا حساب رکھنا چاہیے کہ کون سی جگہیں خالی ہیں اور کون سی استعمال میں ہیں۔


Through virtualization, the OS turns the ugly machine reality into something that is a useful, powerful, and easy to use abstraction.

ورچوئلائزیشن کے ذریعے، آپریٹنگ سسٹم بدصورت مشین کی حقیقت کو ایسی چیز میں بدل دیتا ہے جو ایک مفید، طاقتور اور استعمال میں آسان خلاصہ ہے۔


We will assume for now that the user’s address space must be placed contiguously in physical memory.

ہم ابھی کے لیے فرض کریں گے کہ صارف کی ایڈریس کی جگہ کو جسمانی میموری میں مسلسل رکھنا چاہیے۔


Don’t worry if these assumptions sound unrealistic; we will relax them as we go.

فکر مت کرو اگر یہ مفروضے غیر حقیقی لگتے ہیں؛ ہم انہیں جیسے جیسے آگے بڑھیں گے نرم کریں گے۔


To understand better what we need to do to implement address translation, let’s look at a simple example.

ایڈریس ٹرانسلیشن کو لاگو کرنے کے لیے ہمیں کیا کرنے کی ضرورت ہے، اسے بہتر طور پر سمجھنے کے لیے، آئیے ایک سادہ سی مثال پر نظر ڈالتے ہیں۔


Imagine there is a process whose address space as indicated in Figure 15.1.

تصور کریں کہ ایک ایسا عمل ہے جس کا ایڈریس اسپیس جیسا کہ شکل 15.1 میں دکھایا گیا ہے۔


The compiler turns this line of code into assembly.

کمپائلر کوڈ کی اس لائن کو اسمبلی میں بدل دیتا ہے۔


This code snippet is relatively straightforward.

کوڈ کا یہ ٹکڑا نسبتاً سیدھا ہے۔


From the program’s perspective, its address space starts at address 0.

پروگرام کے نقطہ نظر سے، اس کا ایڈریس اسپیس ایڈریس 0 سے شروع ہوتا ہے۔


How can we relocate this process in memory in a way that is transparent to the process?

ہم اس عمل کو میموری میں اس طرح کیسے منتقل کر سکتے ہیں جو عمل کے لیے شفاف ہو؟


An example of what physical memory might look like once this process’s address space has been placed in memory is found in Figure 15.2.

جسمانی میموری کی ایک مثال کہ یہ کیسی نظر آ سکتی ہے ایک بار جب اس عمل کی ایڈریس کی جگہ میموری میں رکھی جاتی ہے، شکل 15.2 میں پائی جاتی ہے۔


In the figure, you can see the OS using the first slot of physical memory for itself.

شکل میں، آپ دیکھ سکتے ہیں کہ آپریٹنگ سسٹم اپنے لیے جسمانی میموری کا پہلا سلاٹ استعمال کر رہا ہے۔


Each memory reference generated by the process is a virtual address.

عمل کے ذریعے تیار کردہ ہر میموری حوالہ ایک ورچوئل ایڈریس ہے۔


Transforming a virtual address into a physical address is exactly the technique we refer to as address translation.

ایک ورچوئل ایڈریس کو جسمانی ایڈریس میں تبدیل کرنا بالکل وہی تکنیک ہے جسے ہم ایڈریس ٹرانسلیشن کہتے ہیں۔


With dynamic relocation, we can see how a little hardware goes a long way.

متحرک منتقلی کے ساتھ، ہم دیکھ سکتے ہیں کہ تھوڑا سا ہارڈ ویئر کس طرح ایک طویل راستہ طے کرتا ہے۔


The processor will first check that the memory reference is within bounds to make sure it is legal.

پروسیسر سب سے پہلے چیک کرے گا کہ میموری کا حوالہ حدود میں ہے تاکہ یہ یقینی بنایا جا سکے کہ یہ قانونی ہے۔


The OS must take action when a process is created, finding space for its address space in memory.

جب کوئی عمل تخلیق ہوتا ہے تو آپریٹنگ سسٹم کو کارروائی کرنی چاہیے، میموری میں اس کے ایڈریس کی جگہ کے لیے جگہ تلاش کرنا۔


The OS must also take action when a context switch occurs.

جب سیاق و سباق کا تبادلہ ہوتا ہے تو آپریٹنگ سسٹم کو بھی کارروائی کرنی چاہیے۔


We have also seen one particular form of virtualization, known as base and bounds or dynamic relocation.

ہم نے ورچوئلائزیشن کی ایک خاص شکل بھی دیکھی ہے، جسے بیس اینڈ باؤنڈز یا متحرک منتقلی کے نام سے جانا جاتا ہے۔


Protection is certainly one of the most important goals of the OS.

تحفظ یقینی طور پر آپریٹنگ سسٹم کے سب سے اہم مقاصد میں سے ایک ہے۔


The idea is simple: instead of having just one base and bounds pair in our MMU, why not have a base and bounds pair per logical segment of the address space?

یہ خیال سادہ ہے: ہمارے ایم ایم یو میں صرف ایک بیس اور باؤنڈس جوڑا رکھنے کے بجائے، ایڈریس اسپیس کے ہر منطقی حصے کے لیے ایک بیس اور باؤنڈس جوڑا کیوں نہ ہو؟


A segment is just a contiguous portion of the address space of a particular length.

ایک سیگمنٹ صرف ایک خاص لمبائی کا ایڈریس اسپیس کا مسلسل حصہ ہے۔


What segmentation allows the OS to do is to place each one of those segments in different parts of physical memory.

سیگمنٹیشن آپریٹنگ سسٹم کو یہ کرنے کی اجازت دیتی ہے کہ ان میں سے ہر ایک سیگمنٹ کو فزیکل میموری کے مختلف حصوں میں رکھے۔


Assume we want to place the address space from Figure 16.1 into physical memory.

فرض کریں کہ ہم شکل 16.1 سے ایڈریس اسپیس کو فزیکل میموری میں رکھنا چاہتے ہیں۔


With a base and bounds pair per segment, we can place each segment independently in physical memory.

ہر سیگمنٹ کے لیے ایک بیس اور باؤنڈس جوڑے کے ساتھ، ہم ہر سیگمنٹ کو آزادانہ طور پر فزیکل میموری میں رکھ سکتے ہیں۔


As you can see in the diagram, only used memory is allocated space in physical memory.

جیسا کہ آپ ڈایاگرام میں دیکھ سکتے ہیں، صرف استعمال شدہ میموری کو فزیکل میموری میں جگہ مختص کی گئی ہے۔


The hardware structure in our MMU required to support segmentation is just what you’d expect.

ہمارے ایم ایم یو میں سیگمنٹیشن کو سپورٹ کرنے کے لیے درکار ہارڈ ویئر کا ڈھانچہ وہی ہے جس کی آپ توقع کریں گے۔


You can see from the table that the code segment is placed at physical address 32KB and has a size of 2KB.

آپ جدول سے دیکھ سکتے ہیں کہ کوڈ سیگمنٹ فزیکل ایڈریس 32KB پر رکھا گیا ہے اور اس کا سائز 2KB ہے۔


Let’s do an example translation, using the address space in Figure 16.1.

آئیے ایک مثال کا ترجمہ کرتے ہیں، شکل 16.1 میں ایڈریس اسپیس کا استعمال کرتے ہوئے۔


Assume a reference is made to virtual address 100 (which is in the code segment).

فرض کریں کہ ورچوئل ایڈریس 100 (جو کوڈ سیگمنٹ میں ہے) کا حوالہ دیا گیا ہے۔


When the reference takes place (say, on an instruction fetch), the hardware will add the base value to the offset into this segment.

جب حوالہ ہوتا ہے (مثال کے طور پر، ایک ہدایتی بازیافت پر)، ہارڈ ویئر بیس ویلیو کو اس سیگمنٹ میں آفسیٹ میں شامل کرے گا۔


The term segmentation fault or violation arises from a memory access on a segmented machine to an illegal address.

اصطلاح سیگمنٹیشن فالٹ یا خلاف ورزی ایک سیگمنٹڈ مشین پر غیر قانونی ایڈریس تک میموری تک رسائی سے پیدا ہوتی ہے۔


What we need to first do is extract the offset into the heap, i.e., which byte(s) in this segment the address refers to.

ہمیں سب سے پہلے جو کرنے کی ضرورت ہے وہ ہے ہیپ میں آفسیٹ نکالنا، یعنی، اس سیگمنٹ میں کون سا بائٹ(ز) ایڈریس سے مراد ہے۔


The hardware uses segment registers during translation.

ہارڈ ویئر ترجمے کے دوران سیگمنٹ رجسٹر استعمال کرتا ہے۔


One common approach, sometimes referred to as an explicit approach, is to chop up the address space into segments based on the top few bits of the virtual address.

ایک عام طریقہ، جسے بعض اوقات واضح طریقہ کہا جاتا ہے، ایڈریس اسپیس کو ورچوئل ایڈریس کے اوپر والے چند بٹس کی بنیاد پر حصوں میں کاٹنا ہے۔


In our example, then, if the top two bits are 00, the hardware knows the virtual address is in the code segment.

ہماری مثال میں، اگر اوپر والے دو بٹس 00 ہیں، تو ہارڈ ویئر جانتا ہے کہ ورچوئل ایڈریس کوڈ سیگمنٹ میں ہے۔


The bottom 12 bits are the offset into the segment: 0000 0110 1000, or hex 0x068, or 104 in decimal.

نیچے والے 12 بٹس سیگمنٹ میں آفسیٹ ہیں: 0000 0110 1000، یا ہیکس 0x068، یا اعشاریہ میں 104۔


By adding the base register to the offset, the hardware arrives at the final physical address.

بیس رجسٹر کو آفسیٹ میں شامل کرکے، ہارڈ ویئر حتمی فزیکل ایڈریس پر پہنچتا ہے۔


The stack has been relocated to physical address 28KB in the diagram above, but with one critical difference: it grows backwards.

اسٹیک کو اوپر والے ڈایاگرام میں فزیکل ایڈریس 28KB پر منتقل کر دیا گیا ہے، لیکن ایک اہم فرق کے ساتھ: یہ پیچھے کی طرف بڑھتا ہے۔


With the hardware understanding that segments can grow in the negative direction, the hardware must now translate such virtual addresses slightly differently.

ہارڈ ویئر کے اس بات کو سمجھنے کے ساتھ کہ سیگمنٹ منفی سمت میں بڑھ سکتے ہیں، ہارڈ ویئر کو اب اس طرح کے ورچوئل ایڈریس کا تھوڑا سا مختلف ترجمہ کرنا ہوگا۔


Engineers like Jeff Bonwick are the heart of Silicon Valley.

جیف بونوک جیسے انجینئرز سلیکن ویلی کا دل ہیں۔


Behind almost any great product or technology is a human.

تقریباً کسی بھی عظیم مصنوعات یا ٹیکنالوجی کے پیچھے ایک انسان ہوتا ہے۔


Work hard and you might become such a “100x” person as well.

محنت کریں اور آپ بھی ایسے “100x” شخص بن سکتے ہیں۔


The slab allocator also goes beyond most segregated list approaches.

سلیب ایلوکیٹر زیادہ تر الگ الگ فہرست کے طریقوں سے بھی آگے جاتا ہے۔


When a request for memory is made, the search for free space recursively divides free space by two.

جب میموری کی درخواست کی جاتی ہے، تو مفت جگہ کی تلاش بار بار مفت جگہ کو دو سے تقسیم کرتی ہے۔


In the example, the leftmost 8KB block is allocated.

مثال میں، بائیں طرف کا 8KB بلاک مختص کیا گیا ہے۔


The beauty of buddy allocation is found in what happens when that block is freed.

بڈی مختص کرنے کی خوبصورتی اس میں پائی جاتی ہے کہ جب وہ بلاک آزاد ہوتا ہے۔


Think about the addresses of the blocks in the free space above.

اوپر مفت جگہ میں بلاکس کے پتے کے بارے میں سوچیں۔


One major problem with many of the approaches described above is their lack of scaling.

اوپر بیان کردہ بہت سے طریقوں کے ساتھ ایک بڑا مسئلہ ان کی پیمائش کی کمی ہے۔


In this chapter, we’ve discussed the most rudimentary forms of memory allocators.

اس باب میں، ہم نے میموری ایلوکیٹرز کی سب سے بنیادی شکلوں پر تبادلہ خیال کیا ہے۔


Such allocators exist everywhere, linked into every C program you write.

ایسے ایلوکیٹر ہر جگہ موجود ہیں، آپ کے لکھے ہوئے ہر سی پروگرام سے منسلک ہیں۔


Making a fast, space-efficient, scalable allocator that works well for a broad range of workloads remains an on-going challenge.

ایک تیز، جگہ سے موثر، قابل توسیع ایلوکیٹر بنانا جو کام کے وسیع میدان کے لیے اچھی طرح سے کام کرتا ہے ایک جاری چیلنج ہے۔


Paging goes back to the earliest of computer systems, namely the Atlas.

پیجنگ کمپیوٹر سسٹمز کے ابتدائی دور میں واپس چلی جاتی ہے، یعنی اٹلس۔


Instead of splitting up our address space into three logical segments, we split up our address space into fixed-sized units we call a page.

ہمارے ایڈریس کی جگہ کو تین منطقی حصوں میں تقسیم کرنے کے بجائے، ہم اپنے ایڈریس کی جگہ کو فکسڈ سائز کے یونٹوں میں تقسیم کرتے ہیں جسے ہم ایک صفحہ کہتے ہیں۔


With paging, physical memory is also split into some number of pages as well.

پیجنگ کے ساتھ، جسمانی میموری کو بھی کچھ صفحات میں تقسیم کیا جاتا ہے۔


Another advantage is the simplicity of free-space management that paging affords.

ایک اور فائدہ مفت جگہ کے انتظام کی سادگی ہے جو پیجنگ فراہم کرتی ہے۔


To record where each virtual page of the address space is placed in physical memory, the operating system keeps a per-process data structure known as a page table.

یہ ریکارڈ کرنے کے لیے کہ ایڈریس کی جگہ کا ہر ورچوئل صفحہ جسمانی میموری میں کہاں رکھا گیا ہے، آپریٹنگ سسٹم ایک فی پروسیس ڈیٹا ڈھانچہ رکھتا ہے جسے پیج ٹیبل کہا جاتا ہے۔


The major role of the page table is to store address translations for each of the virtual pages of the address space.

پیج ٹیبل کا اہم کردار ایڈریس کی ترجمانی کو ایڈریس کی جگہ کے ہر ورچوئل صفحے کے لیے محفوظ کرنا ہے۔


Let’s imagine the process with that tiny address space is performing a memory access.

آئیے تصور کریں کہ اس چھوٹے سے ایڈریس کی جگہ والا عمل میموری تک رسائی حاصل کر رہا ہے۔


For every memory reference, paging requires us to perform one extra memory reference.

ہر میموری ریفرنس کے لیے، پیجنگ کے لیے ہمیں ایک اضافی میموری ریفرنس کرنے کی ضرورت ہوتی ہے۔


The first instruction moves the value zero into the virtual memory address.

پہلی ہدایت صفر کی قدر کو ورچوئل میموری ایڈریس میں منتقل کرتی ہے۔


This address is computed by taking the contents of %edi and adding %eax multiplied by four to it.

یہ ایڈریس %edi کے مواد کو لے کر اور اس میں %eax کو چار سے ضرب دے کر شمار کیا جاتا ہے۔


The second instruction increments the array index held in %eax.

دوسری ہدایت %eax میں موجود صف انڈیکس میں اضافہ کرتی ہے۔


If the comparison shows that that two values are not yet equal, the fourth instruction jumps back to the top of the loop.

اگر موازنہ ظاہر کرتا ہے کہ دونوں اقدار ابھی تک برابر نہیں ہیں، تو چوتھی ہدایت لوپ کے اوپری حصے پر واپس چلی جاتی ہے۔


We assume a virtual address space of size 64KB.

ہم 64KB سائز کی ورچوئل ایڈریس اسپیس فرض کرتے ہیں۔


ہم 1 KB کا صفحہ سائز بھی فرض کرتے ہیں۔


Let’s assume we have a linear (array-based) page table and that it is located at physical address 1 KB.

آئیے فرض کریں کہ ہمارے پاس ایک لکیری (صف پر مبنی) صفحہ ٹیبل ہے اور یہ جسمانی ایڈریس 1 KB پر واقع ہے۔


First, there is the virtual page the code lives on.

سب سے پہلے، وہ ورچوئل صفحہ ہے جس پر کوڈ رہتا ہے۔


Let’s assume these virtual-to-physical mappings for the example.

آئیے مثال کے طور پر ان ورچوئل سے جسمانی نقشوں کو فرض کریں۔


When it runs, each instruction fetch will generate two memory references.

جب یہ چلتا ہے، تو ہر ہدایت حاصل کرنے سے دو میموری حوالہ جات پیدا ہوں گے۔


The entire process, for the first five loop iterations, is depicted in Figure 18.7.

پہلے پانچ لوپ تکرار کے لیے، پورے عمل کو شکل 18.7 میں دکھایا گیا ہے۔


See if you can make sense of the patterns that show up in this visualization.

دیکھیں کہ کیا آپ ان نمونوں کا مطلب سمجھ سکتے ہیں جو اس تصور میں ظاہر ہوتے ہیں۔


We have introduced the concept of paging as a solution to our challenge of virtualizing memory.

ہم نے میموری کو ورچوئلائز کرنے کے چیلنج کے حل کے طور پر پیجنگ کے تصور کو متعارف کرایا ہے۔


Paging has many advantages over previous approaches.

پیجنگ کے پچھلے طریقوں پر بہت سے فوائد ہیں۔


First, it does not lead to external fragmentation, as paging (by design) divides memory into fixed-sized units.

سب سے پہلے، یہ بیرونی ٹکڑے ٹکڑے ہونے کا باعث نہیں بنتا، کیونکہ پیجنگ (ڈیزائن کے ذریعے) میموری کو فکسڈ سائز یونٹوں میں تقسیم کرتا ہے۔


How can we speed up address translation, and generally avoid the extra memory reference that paging seems to require?

ہم ایڈریس ترجمہ کو کیسے تیز کر سکتے ہیں، اور عام طور پر اضافی میموری کے حوالے سے گریز کر سکتے ہیں جو پیجنگ کو درکار لگتا ہے؟


To speed address translation, we are going to add what is called a translation-lookaside buffer, or TLB.

ایڈریس ترجمہ کو تیز کرنے کے لیے، ہم ایک ٹرانسلیشن-لوکاسائیڈ بفر، یا TLB شامل کرنے جا رہے ہیں۔


A TLB is part of the chip’s memory-management unit, and is simply a hardware cache of popular virtual-to-physical address translations.

ایک TLB چپ کے میموری مینجمنٹ یونٹ کا حصہ ہے، اور یہ مقبول ورچوئل سے جسمانی ایڈریس ترجمہ کا ایک سادہ ہارڈ ویئر کیش ہے۔


Upon each virtual memory reference, the hardware first checks the TLB to see if the desired translation is held therein.

ہر ورچوئل میموری کے حوالے سے، ہارڈ ویئر سب سے پہلے TLB کو چیک کرتا ہے تاکہ یہ دیکھا جا سکے کہ آیا مطلوبہ ترجمہ اس میں موجود ہے۔


If it does, we have a TLB hit, which means the TLB holds the translation.

اگر ایسا ہوتا ہے، تو ہمارے پاس ایک TLB ہٹ ہے، جس کا مطلب ہے کہ TLB ترجمہ رکھتا ہے۔


The RISC side was spear-headed by David Patterson at Berkeley and John Hennessy at Stanford.

آر آئی ایس سی کی جانب سے برکلے میں ڈیوڈ پیٹرسن اور اسٹینفورڈ میں جان ہینیسی نے قیادت کی۔


CISC instruction sets tend to have a lot of instructions in them, and each instruction is relatively powerful.

سی آئی ایس سی انسٹرکشن سیٹس میں بہت سی ہدایات ہوتی ہیں، اور ہر ہدایت نسبتاً طاقتور ہوتی ہے۔


For example, you might see a string copy, which takes two pointers and a length and copies bytes from source to destination.

مثال کے طور پر، آپ ایک سٹرنگ کاپی دیکھ سکتے ہیں، جو دو پوائنٹرز اور ایک لمبائی لیتا ہے اور سورس سے منزل تک بائٹس کاپی کرتا ہے۔


The idea behind CISC was that instructions should be high-level primitives, to make the assembly language itself easier to use, and to make code more compact.

سی آئی ایس سی کے پیچھے خیال یہ تھا کہ ہدایات اعلیٰ سطحی ابتدائی ہونی چاہئیں، تاکہ اسمبلی زبان کو خود استعمال کرنا آسان ہو جائے، اور کوڈ کو زیادہ کمپیکٹ بنایا جا سکے۔


RISC instruction sets are exactly the opposite.

آر آئی ایس سی انسٹرکشن سیٹس بالکل اس کے برعکس ہیں۔


A key observation behind RISC is that instruction sets are really compiler targets.

آر آئی ایس سی کے پیچھے ایک اہم مشاہدہ یہ ہے کہ انسٹرکشن سیٹس درحقیقت کمپائلر ٹارگٹ ہیں۔


Thus, RISC proponents argued, let’s rip out as much from the hardware as possible.

اس طرح، آر آئی ایس سی کے حامیوں نے دلیل دی، آئیے ہارڈ ویئر سے زیادہ سے زیادہ چیزیں نکال دیں۔


In the early days, RISC chips made a huge impact, as they were noticeably faster.

ابتدائی دنوں میں، آر آئی ایس سی چپس نے بہت بڑا اثر ڈالا، کیونکہ وہ نمایاں طور پر تیز تھے۔


However, as time progressed, CISC manufacturers such as Intel incorporated many RISC techniques into the core of their processors.

تاہم، وقت گزرنے کے ساتھ، سی آئی ایس سی مینوفیکچررز جیسے کہ انٹیل نے بہت سی آر آئی ایس سی تکنیکوں کو اپنے پروسیسرز کے مرکز میں شامل کیا۔


The end result is that the debate died down, and today both types of processors can be made to run fast.

نتیجہ یہ نکلا کہ بحث ختم ہو گئی، اور آج کل دونوں قسم کے پروسیسرز کو تیزی سے چلایا جا سکتا ہے۔


Let’s look at the contents of the hardware TLB in more detail.

آئیے ہارڈ ویئر ٹی ایل بی کے مواد کو مزید تفصیل سے دیکھتے ہیں۔


A typical TLB might have 32, 64, or 128 entries and be what is called fully associative.

ایک عام ٹی ایل بی میں 32، 64، یا 128 اندراجات ہو سکتے ہیں اور اسے مکمل طور پر وابستہ کہا جاتا ہے۔


Basically, this just means that any given translation can be anywhere in the TLB.

بنیادی طور پر، اس کا مطلب ہے کہ کوئی بھی ترجمہ ٹی ایل بی میں کہیں بھی ہو سکتا ہے۔


A common mistake is to confuse the valid bits found in a TLB with those found in a page table.

ایک عام غلطی ٹی ایل بی میں پائے جانے والے درست بٹس کو پیج ٹیبل میں پائے جانے والے بٹس کے ساتھ الجھانا ہے۔


When a system boots, for example, a common initial state for each TLB entry is to be set to invalid.

جب کوئی سسٹم بوٹ ہوتا ہے، مثال کے طور پر، ہر ٹی ایل بی اندراج کے لیے ایک عام ابتدائی حالت کو غلط پر سیٹ کرنا ہے۔


زیادہ دلچسپ “دیگر بٹس” ہیں۔


By setting all TLB entries to invalid, the system can ensure that the about-to-be-run process does not accidentally use a virtual-to-physical translation from a previous process.

تمام ٹی ایل بی اندراجات کو غلط پر سیٹ کرکے، سسٹم اس بات کو یقینی بنا سکتا ہے کہ چلنے والا عمل حادثاتی طور پر پچھلے عمل سے ورچوئل سے فزیکل ترجمہ استعمال نہ کرے۔


With TLBs, some new issues arise when switching between processes.

ٹی ایل بی کے ساتھ، عمل کے درمیان سوئچ کرتے وقت کچھ نئے مسائل پیدا ہوتے ہیں۔


When one process (P1) is running, it assumes the TLB might be caching translations that are valid for it.

جب ایک عمل (P1) چل رہا ہوتا ہے، تو یہ فرض کرتا ہے کہ ٹی ایل بی ان ترجموں کو کیش کر رہا ہو گا جو اس کے لیے درست ہیں۔


The term random-access memory, or RAM, implies that you can access any part of RAM just as quickly as another.

اصطلاح رینڈم-ایکسیس میموری، یا ریم، کا مطلب ہے کہ آپ ریم کے کسی بھی حصے تک اتنی ہی تیزی سے رسائی حاصل کر سکتے ہیں جتنی کہ کسی دوسرے حصے تک۔


Will this affect your code and its timing?

کیا اس سے آپ کے کوڈ اور اس کے وقت پر اثر پڑے گا؟


What can you do to counterbalance these potential costs?

آپ ان ممکنہ اخراجات کا مقابلہ کرنے کے لیے کیا کر سکتے ہیں؟


Assume again a 32-bit address space (2^32 bytes), with 4KB (2^12 byte) pages and a 4-byte page-table entry.

دوبارہ فرض کریں کہ ایک 32 بٹ ایڈریس کی جگہ (2^32 بائٹس) ہے، جس میں 4KB (2^12 بائٹ) صفحات اور 4 بائٹ کا صفحہ ٹیبل اندراج ہے۔


With a hundred active processes (not uncommon on a modern system), we will be allocating hundreds of megabytes of memory just for page tables!

ایک سو فعال عملوں کے ساتھ (جدید نظام پر غیر معمولی نہیں)، ہم صرف صفحہ ٹیبلز کے لیے سینکڑوں میگا بائٹس میموری مختص کریں گے!


Simple array-based page tables (usually called linear pagetables) are too big, taking up far too much memory on typical systems.

سادہ صف پر مبنی صفحہ ٹیبل (عام طور پر لکیری صفحہ ٹیبل کہلاتے ہیں) بہت بڑے ہیں، جو عام نظاموں پر بہت زیادہ میموری استعمال کرتے ہیں۔


We could reduce the size of the page table in one simple way: use bigger pages.

ہم ایک آسان طریقے سے صفحہ ٹیبل کا سائز کم کر سکتے ہیں: بڑے صفحات استعمال کریں۔


The major problem with this approach, however, is that big pages lead to waste within each page, a problem known as internal fragmentation.

تاہم، اس نقطہ نظر کا بڑا مسئلہ یہ ہے کہ بڑے صفحات ہر صفحے کے اندر ضائع ہونے کا باعث بنتے ہیں، یہ مسئلہ اندرونی ٹکڑے ٹکڑے ہونے کے نام سے جانا جاتا ہے۔


Applications thus end up allocating pages but only using little bits and pieces of each, and memory quickly fills up with these overly-large pages.

اس طرح، ایپلی کیشنز صفحات مختص کرنے کا خاتمہ کرتی ہیں لیکن ان میں سے صرف تھوڑے سے حصے استعمال کرتی ہیں، اور میموری تیزی سے ان حد سے زیادہ بڑے صفحات سے بھر جاتی ہے۔


Whenever you have two reasonable but different approaches to something in life, you should always examine the combination of the two to see if you can obtain the best of both worlds.

جب بھی آپ کے پاس زندگی میں کسی چیز کے لیے دو معقول لیکن مختلف طریقے ہوں، تو آپ کو ہمیشہ دونوں کے امتزاج کا جائزہ لینا چاہیے تاکہ یہ دیکھا جا سکے کہ کیا آپ دونوں جہانوں میں بہترین حاصل کر سکتے ہیں۔


ہم اس طرح کے امتزاج کو ہائبرڈ کہتے ہیں۔


Specifically, Dennis had the idea of combining paging and segmentation in order to reduce the memory overhead of page tables.

خاص طور پر، ڈینس کے پاس صفحہ ٹیبلز کے میموری اوور ہیڈ کو کم کرنے کے لیے پیجنگ اور سیگمنٹیشن کو یکجا کرنے کا خیال تھا۔


As you can see from the picture, most of the page table is unused, full of invalid entries.

جیسا کہ آپ تصویر سے دیکھ سکتے ہیں، صفحہ ٹیبل کا بیشتر حصہ غیر استعمال شدہ ہے، جو غیر درست اندراجات سے بھرا ہوا ہے۔


Imagine the page table of a 32-bit address space and all the potential wasted space in there!

ایک 32 بٹ ایڈریس کی جگہ کے صفحہ ٹیبل اور وہاں موجود تمام ممکنہ ضائع شدہ جگہ کا تصور کریں!


Thus, our hybrid approach: instead of having a single page table for the entire address space of the process, why not have one per logical segment?

اس طرح، ہمارا ہائبرڈ طریقہ کار: عمل کی پوری ایڈریس کی جگہ کے لیے ایک ہی صفحہ ٹیبل رکھنے کے بجائے، کیوں نہ ہر منطقی طبقہ کے لیے ایک ہو؟


On a context switch, these registers must be changed to reflect the location of the page tables of the newly-running process.

ایک سیاق و سباق کے سوئچ پر، ان رجسٹروں کو تبدیل کیا جانا چاہیے تاکہ نئے چلنے والے عمل کے صفحہ ٹیبلز کے مقام کی عکاسی کی جا سکے۔


The critical difference in our hybrid scheme is the presence of a bounds register per segment.

ہمارے ہائبرڈ اسکیم میں اہم فرق ہر طبقہ کے لیے ایک حدود رجسٹر کی موجودگی ہے۔


In this manner, our hybrid approach realizes a significant memory savings compared to the linear page table.

اس طرح، ہمارا ہائبرڈ طریقہ کار لکیری صفحہ ٹیبل کے مقابلے میں میموری کی نمایاں بچت کا احساس کرتا ہے۔


First, it still requires us to use segmentation; as we discussed before, segmentation is not quite as flexible as we would like.

سب سے پہلے، اس کے لیے اب بھی ہمیں سیگمنٹیشن استعمال کرنے کی ضرورت ہے؛ جیسا کہ ہم نے پہلے بحث کی ہے، سیگمنٹیشن اتنا لچکدار نہیں ہے جتنا ہم چاہتے ہیں۔


A different approach doesn’t rely on segmentation but attacks the same problem: how to get rid of all those invalid regions in the page table instead of keeping them all in memory?

ایک مختلف طریقہ سیگمنٹیشن پر انحصار نہیں کرتا ہے لیکن اسی مسئلے پر حملہ کرتا ہے: صفحہ ٹیبل میں ان تمام غیر درست علاقوں سے کیسے چھٹکارا حاصل کیا جائے بجائے اس کے کہ ان سب کو میموری میں رکھا جائے؟


We call this approach a multi-level page table, as it turns the linear page table into something like a tree.

ہم اس طریقہ کار کو ایک کثیر سطحی صفحہ ٹیبل کہتے ہیں، کیونکہ یہ لکیری صفحہ ٹیبل کو کسی درخت کی طرح بنا دیتا ہے۔


The system can thus form our desired physical address and issue the request to the memory system.

اس طرح نظام ہماری مطلوبہ جسمانی ایڈریس تشکیل دے سکتا ہے اور میموری سسٹم کو درخواست جاری کر سکتا ہے۔


You should now have some idea of how to construct a two-level page table.

اب آپ کو اس بات کا اندازہ ہو جانا چاہیے کہ دو سطحی صفحہ ٹیبل کیسے بنایا جاتا ہے۔


Unfortunately, however, our work is not done.

بدقسمتی سے، تاہم، ہمارا کام ابھی ختم نہیں ہوا ہے۔


In some cases, a deeper tree is possible (and indeed, needed).

بعض صورتوں میں، ایک گہرا درخت ممکن ہے (اور درحقیقت، ضروری ہے۔)


Let’s take a simple example and use it to show why a deeper multi- level table can be useful.

آئیے ایک سادہ مثال لیتے ہیں اور اس کا استعمال یہ ظاہر کرنے کے لیے کرتے ہیں کہ ایک گہری ملٹی لیول ٹیبل کیوں کارآمد ہو سکتا ہے۔


In this example, assume we have a 30-bit virtual address space, and a small (512 byte) page.

اس مثال میں، فرض کریں کہ ہمارے پاس 30 بٹ کا ورچوئل ایڈریس اسپیس ہے، اور ایک چھوٹا (512 بائٹ) صفحہ ہے۔


Remember our goal in constructing a multi-level page table: to make each piece of the page table fit within a single page.

ملٹی لیول پیج ٹیبل بناتے وقت ہمارا مقصد یاد رکھیں: پیج ٹیبل کے ہر ٹکڑے کو ایک ہی صفحے میں فٹ کرنا۔


Thus far, we’ve only considered the page table itself; however, what if the page directory gets too big?

اب تک، ہم نے صرف صفحہ ٹیبل پر ہی غور کیا ہے؛ تاہم، اگر صفحہ ڈائرکٹری بہت بڑی ہو جائے تو کیا ہوگا؟


To remedy this problem, we build a further level of the tree, by splitting the page directory itself into multiple pages.

اس مسئلے کو حل کرنے کے لیے، ہم درخت کی ایک اور سطح بناتے ہیں، صفحہ ڈائرکٹری کو خود متعدد صفحات میں تقسیم کرکے۔


Now, when indexing the upper-level page directory, we use the very top bits of the virtual address.

اب، جب اعلیٰ سطحی صفحہ ڈائرکٹری کو انڈیکس کرتے ہیں، تو ہم ورچوئل ایڈریس کے سب سے اوپر والے بٹس کا استعمال کرتے ہیں۔


واہ! یہ بہت زیادہ کام ہے۔


And all just to look something up in a multi-level table.

اور یہ سب کچھ صرف ایک ملٹی لیول ٹیبل میں کچھ تلاش کرنے کے لیے ہے۔


To summarize the entire process of address translation using a two-level page table, we once again present the control flow in algorithmic form.

دو سطحی صفحہ ٹیبل کا استعمال کرتے ہوئے ایڈریس ترجمہ کے پورے عمل کا خلاصہ کرنے کے لیے، ہم ایک بار پھر الگورتھمک شکل میں کنٹرول فلو پیش کرتے ہیں۔


ٹی ایل بی کو یاد رکھیں۔


An even more extreme space savings in the world of page tables is found withinverted page tables.

صفحہ ٹیبل کی دنیا میں اس سے بھی زیادہ جگہ کی بچت الٹی صفحہ ٹیبل میں پائی جاتی ہے۔


Here, instead of having many page tables (one per process of the system), we keep a single page table that has an entry for each physical page of the system.

یہاں، بہت سے صفحہ ٹیبل رکھنے کے بجائے (سسٹم کے ہر عمل کے لیے ایک)، ہم ایک واحد صفحہ ٹیبل رکھتے ہیں جس میں سسٹم کے ہر جسمانی صفحے کے لیے ایک اندراج ہوتا ہے۔


Finding the correct entry is now a matter of searching through this data structure.

صحیح اندراج تلاش کرنا اب اس ڈیٹا ڈھانچے کے ذریعے تلاش کرنے کا معاملہ ہے۔


We have now seen how real page tables are built; not necessarily just as linear arrays but as more complex data structures.

اب ہم نے دیکھا ہے کہ حقیقی صفحہ ٹیبل کیسے بنائے جاتے ہیں؛ ضروری نہیں کہ صرف لکیری صفوں کے طور پر بلکہ زیادہ پیچیدہ ڈیٹا ڈھانچے کے طور پر۔


The trade-offs such tables present are in time and space – the bigger the table, the faster a TLB miss can be serviced, as well as the converse.

اس طرح کے ٹیبل جو پیش کرتے ہیں وہ وقت اور جگہ میں ہیں – ٹیبل جتنا بڑا ہوگا، ٹی ایل بی کی کمی کو اتنی ہی تیزی سے سروس دی جا سکتی ہے، اور اس کے برعکس۔


We have yet to find a good first reference to the multi-level page table.

ہمیں ابھی تک ملٹی لیول پیج ٹیبل کا ایک اچھا پہلا حوالہ نہیں ملا ہے۔


The hardware translates virtual addresses to physical addresses.

ہارڈ ویئر ورچوئل ایڈریس کو فزیکل ایڈریس میں ترجمہ کرتا ہے۔


The operating system manages memory efficiently.

آپریٹنگ سسٹم میموری کو مؤثر طریقے سے منظم کرتا ہے۔


براہ کرم اپنا نام اور پتہ بتائیں۔


خبروں میں ایک بڑے زلزلے کی اطلاع دی گئی۔


آج میں بہت خوش محسوس کر رہا ہوں۔


The company announced a new product launch.

کمپنی نے ایک نئی مصنوعات کے آغاز کا اعلان کیا۔


The algorithm optimizes memory access patterns.

الگورتھم میموری تک رسائی کے نمونوں کو بہتر بناتا ہے۔


چیلنجوں کے باوجود، وہ کامیاب ہوئے۔


The government implemented new policies.

حکومت نے نئی پالیسیاں نافذ کیں۔


The research team is working on a new project.

تحقیقی ٹیم ایک نئے منصوبے پر کام کر رہی ہے۔


Virtual memory allows programs to use more memory than is physically available.

ورچوئل میموری پروگراموں کو جسمانی طور پر دستیاب میموری سے زیادہ استعمال کرنے کی اجازت دیتی ہے۔


The complexities of the legal system are often difficult to navigate.

قانونی نظام کی پیچیدگیاں اکثر نیویگیٹ کرنا مشکل ہوتی ہیں۔


The economic forecast predicts a period of growth.

معاشی پیش گوئی ترقی کی مدت کی پیش گوئی کرتی ہے۔


The implications of the new technology are far-reaching.

نئی ٹیکنالوجی کے مضمرات دور رس ہیں۔


The philosophical debate centered on the nature of reality.

فلسفیانہ بحث حقیقت کی نوعیت پر مرکوز تھی۔


The operating system uses page tables to manage virtual memory.

آپریٹنگ سسٹم ورچوئل میموری کو منظم کرنے کے لیے صفحہ میزوں کا استعمال کرتا ہے۔


The company's innovative approach revolutionized the industry.

کمپنی کے جدید انداز نے صنعت میں انقلاب برپا کر دیا۔


The scientists conducted a series of experiments to test their hypothesis.

سائنسدانوں نے اپنے مفروضے کی جانچ کے لیے تجربات کا ایک سلسلہ کیا۔


The intricate details of the plan were carefully considered.

منصوبے کی پیچیدہ تفصیلات پر غور سے غور کیا گیا۔


The complex interplay of factors contributed to the outcome.

عوامل کے پیچیدہ باہمی تعامل نے نتیجے میں حصہ ڈالا۔


The principle of locality suggests that recently accessed pages are likely to be accessed again soon.

مقامییت کا اصول بتاتا ہے کہ حال ہی میں رسائی حاصل کی گئی صفحات کے دوبارہ جلد ہی رسائی حاصل کرنے کا امکان ہے۔


LRU (Least Recently Used) replaces the page that hasn't been used for the longest time.

LRU (کم از کم حال ہی میں استعمال شدہ) اس صفحے کو تبدیل کرتا ہے جو سب سے طویل عرصے سے استعمال نہیں ہوا ہے۔


The operating system uses historical data to make decisions about which pages to keep in memory.

آپریٹنگ سسٹم اس بات کا فیصلہ کرنے کے لیے تاریخی ڈیٹا استعمال کرتا ہے کہ کن صفحات کو میموری میں رکھنا ہے۔


Programs often exhibit two types of locality: spatial and temporal.

پروگرام اکثر دو قسم کی مقامییت کا مظاہرہ کرتے ہیں: مقامی اور وقتی۔


The 80-20 workload shows that LRU performs better than FIFO.

80-20 ورک لوڈ سے پتہ چلتا ہے کہ LRU FIFO سے بہتر کارکردگی کا مظاہرہ کرتا ہے۔


In a looping-sequential workload, LRU and FIFO can perform poorly.

لوپنگ-سیکوینشل ورک لوڈ میں، LRU اور FIFO خراب کارکردگی کا مظاہرہ کر سکتے ہیں۔


Implementing LRU perfectly requires significant overhead.

LRU کو مکمل طور پر نافذ کرنے کے لیے کافی اوور ہیڈ کی ضرورت ہوتی ہے۔


Approximating LRU is a more feasible approach.

LRU کا تخمینہ لگانا ایک زیادہ قابل عمل طریقہ ہے۔


The clock algorithm is a method to approximate LRU.

گھڑی کا الگورتھم LRU کا تخمینہ لگانے کا ایک طریقہ ہے۔


The use bit is set by hardware when a page is accessed.

جب کسی صفحے تک رسائی حاصل کی جاتی ہے تو ہارڈ ویئر کے ذریعے استعمال کا بٹ سیٹ کیا جاتا ہے۔


Dirty pages need to be written back to disk before eviction.

صفحات کو بے دخل کرنے سے پہلے ڈسک پر واپس لکھنا ضروری ہے۔


The OS also decides when to bring a page into memory.

آپریٹنگ سسٹم یہ بھی فیصلہ کرتا ہے کہ کسی صفحے کو کب میموری میں لایا جائے۔


Demand paging brings pages into memory when they are accessed.

ڈیمانڈ پیجنگ صفحات کو میموری میں لاتا ہے جب ان تک رسائی حاصل کی جاتی ہے۔


Prefetching can improve performance by bringing pages in advance.

پیشگی بازیافت صفحات کو پہلے سے لا کر کارکردگی کو بہتر بنا سکتی ہے۔


Clustering writes improves disk efficiency.

کلسترنگ لکھنا ڈسک کی کارکردگی کو بہتر بناتا ہے۔


Thrashing occurs when memory is oversubscribed.

تھریشنگ اس وقت ہوتی ہے جب میموری زیادہ سبسکرائب ہو جاتی ہے۔


Admission control can prevent thrashing.

داخلہ کنٹرول تھریشنگ کو روک سکتا ہے۔


Modern systems use scan-resistant algorithms.

جدید نظام اسکین سے مزاحم الگورتھم استعمال کرتے ہیں۔


The best solution to excessive paging is often to buy more memory.

زیادہ پیجنگ کا بہترین حل اکثر زیادہ میموری خریدنا ہے۔


The VAX/VMS operating system is a well-designed virtual memory manager.

VAX/VMS آپریٹنگ سسٹم ایک اچھی طرح سے ڈیزائن کیا گیا ورچوئل میموری مینیجر ہے۔


The operating system had to have mechanisms and policies that worked across a huge range of systems.

آپریٹنگ سسٹم کو ایسے طریقہ کار اور پالیسیاں رکھنا پڑیں جو بہت وسیع رینج کے سسٹمز پر کام کریں۔


Operating systems often have a problem known as “the curse of generality”.

آپریٹنگ سسٹمز کو اکثر ایک مسئلہ درپیش ہوتا ہے جسے “عمومیت کا عذاب” کہا جاتا ہے۔


The VAX-11 architecture was realized in a number of different implementations.

VAX-11 فن تعمیر کو متعدد مختلف عمل درآمد میں محسوس کیا گیا۔


The VAX-11 provided a 32-bit virtual address space per process.

VAX-11 نے فی عمل 32 بٹ ورچوئل ایڈریس کی جگہ فراہم کی۔


The lower-half of the address space was known as “process space”.

ایڈریس کی جگہ کا نچلا نصف “عمل کی جگہ” کے نام سے جانا جاتا تھا۔


The upper-half of the address space is known as system space.

ایڈریس کی جگہ کا بالائی نصف نظام کی جگہ کے نام سے جانا جاتا ہے۔


محفوظ OS کوڈ اور ڈیٹا یہاں موجود ہیں۔


One major concern of the VMS designers was the incredibly small size of pages.

VMS ڈیزائنرز کی ایک اہم تشویش صفحات کا ناقابل یقین حد تک چھوٹا سائز تھا۔


The system reduced the pressure page tables place on memory in two ways.

سسٹم نے دو طریقوں سے میموری پر پیج ٹیبل کے دباؤ کو کم کیا۔


The kernel allocates space out of its own virtual memory.

کرنل اپنی ورچوئل میموری سے جگہ مختص کرتا ہے۔


Putting page tables in kernel virtual memory means that address translation is even further complicated.

صفحہ ٹیبل کو کرنل ورچوئل میموری میں رکھنے کا مطلب ہے کہ ایڈریس کی ترجمانی مزید پیچیدہ ہے۔


The hardware may first have to consult the system page table.

ہارڈ ویئر کو پہلے سسٹم پیج ٹیبل سے مشورہ کرنا پڑ سکتا ہے۔


You should now have a good understanding of exactly what happens on a null-pointer dereference.

اب آپ کو اس بات کی اچھی سمجھ ہونی چاہیے کہ نل پوائنٹر ڈی ریفرنس پر بالکل کیا ہوتا ہے۔


A process generates a virtual address of 0.

ایک عمل 0 کا ورچوئل ایڈریس تیار کرتا ہے۔


آپریٹنگ سسٹم P0 اور P1 رجسٹروں کو تبدیل کرتا ہے۔


The kernel is mapped into each address space for a number of reasons.

کرنل کو متعدد وجوہات کی بنا پر ہر ایڈریس کی جگہ میں نقشہ کیا جاتا ہے۔


The OS does not want user applications reading or writing OS data or code.

آپریٹنگ سسٹم نہیں چاہتا کہ صارف کی ایپلی کیشنز OS ڈیٹا یا کوڈ کو پڑھیں یا لکھیں۔


The VAX did so by specifying protection bits.

VAX نے تحفظ کے بٹس کی وضاحت کرکے ایسا کیا۔


The VMS replacement algorithm must make do without hardware support.

VMS ریپلیسمنٹ الگورتھم کو ہارڈ ویئر سپورٹ کے بغیر کام کرنا چاہیے۔


The idea is simple: each process has a maximum number of pages it can keep in memory.

خیال سادہ ہے: ہر عمل میں زیادہ سے زیادہ صفحات کی تعداد ہوتی ہے جسے وہ میموری میں رکھ سکتا ہے۔


بنیادی پالیسیاں کسی حد تک واضح ہیں۔


Building a real virtual memory system seems more interesting.

ایک حقیقی ورچوئل میموری سسٹم بنانا زیادہ دلچسپ لگتا ہے۔


The mechanisms are more interesting, and the policies less so.

طریقہ کار زیادہ دلچسپ ہیں، اور پالیسیاں کم۔


My machine is running a little slowly these days.

میری مشین ان دنوں تھوڑی سست چل رہی ہے۔


Go and get yourself some DRAM, cheapskate.

جاؤ اور اپنے لیے کچھ DRAM لے لو، کنجوس۔


میں دوبارہ کبھی ڈسک پر نہیں جاؤں گا۔


We reach the second of our three pillars of operating systems: concurrency.

ہم آپریٹنگ سسٹم کے تین ستونوں میں سے دوسرے پر پہنچتے ہیں: ہم آہنگی۔


تصور کریں کہ ہمارے پاس ایک آڑو ہے۔


تمہیں آڑو سے کیا مسئلہ ہے؟


Imagine there are a lot of peaches on a table, and a lot of people who wish to eat them.

تصور کریں کہ ایک میز پر بہت سارے آڑو ہیں، اور بہت سے لوگ انہیں کھانا چاہتے ہیں۔


Each eater first identifies a peach visually, and then tries to grab it and eat it.

ہر کھانے والا پہلے بصری طور پر ایک آڑو کی شناخت کرتا ہے، اور پھر اسے پکڑنے اور کھانے کی کوشش کرتا ہے۔


Hmmm... seems like you might see a peach that somebody else also sees.

ہممم... ایسا لگتا ہے کہ آپ ایک آڑو دیکھ سکتے ہیں جو کوئی اور بھی دیکھتا ہے۔


If they get there first, when you reach out, no peach for you!

اگر وہ پہلے وہاں پہنچ جاتے ہیں، جب آپ پہنچتے ہیں، تو آپ کے لیے کوئی آڑو نہیں!


تو ہمیں اس کے بارے میں کیا کرنا چاہیے؟


Well, probably develop a better way of going about this.

ٹھیک ہے، شاید اس کے بارے میں جانے کا ایک بہتر طریقہ تیار کریں۔


The best kind of approach would be fast and correct, probably.

بہترین قسم کا طریقہ تیز اور درست ہوگا، شاید۔


آپ واقعی متاثر کرنا شروع کر رہے ہیں۔


In fact, you just told us everything we need to know about concurrency!

درحقیقت، آپ نے ابھی ہمیں وہ سب کچھ بتایا جو ہمیں ہم آہنگی کے بارے میں جاننے کی ضرورت ہے!


کسی کو بھی ٹھوس چیز کو کبھی نہیں بھولنا چاہیے۔


The OS must support multi-threaded applications with primitives such as locks and condition variables.

OS کو ملٹی تھریڈڈ ایپلی کیشنز کو پرائمیٹیوز جیسے لاکس اور کنڈیشن ویری ایبلز کے ساتھ سپورٹ کرنا چاہیے۔


The operating system manages computer hardware and software resources.

آپریٹنگ سسٹم کمپیوٹر کے ہارڈ ویئر اور سافٹ ویئر وسائل کا انتظام کرتا ہے۔


Concurrency allows multiple tasks to appear to run simultaneously.

ہم وقت سازی متعدد کاموں کو ایک ساتھ چلتا ہوا ظاہر کرنے کی اجازت دیتی ہے۔


Threads share the same address space, making communication efficient.

تھریڈز ایک ہی ایڈریس کی جگہ کا اشتراک کرتے ہیں، جس سے مواصلات موثر ہوجاتے ہیں۔


Synchronization primitives are essential for managing shared resources.

شیئرڈ وسائل کے انتظام کے لیے ہم وقت سازی کے ابتدائی عناصر ضروری ہیں۔


Mutexes provide mutual exclusion to prevent race conditions.

میوٹیکس ریس کی حالتوں کو روکنے کے لیے باہمی اخراج فراہم کرتے ہیں۔


Condition variables enable threads to wait for specific conditions.

کنڈیشن متغیرات تھریڈز کو مخصوص حالات کا انتظار کرنے کے قابل بناتے ہیں۔


The pthread_create function creates a new thread.

pthread_create فنکشن ایک نیا تھریڈ بناتا ہے۔


pthread_join waits for a thread to complete its execution.

pthread_join ایک تھریڈ کے اپنی عمل آوری مکمل کرنے کا انتظار کرتا ہے۔


Atomic operations ensure that a series of actions are indivisible.

ایٹمی آپریشنز اس بات کو یقینی بناتے ہیں کہ کارروائیوں کا ایک سلسلہ ناقابل تقسیم ہے۔


File systems use techniques like journaling for data integrity.

فائل سسٹم ڈیٹا کی سالمیت کے لیے جرنلنگ جیسی تکنیکوں کا استعمال کرتے ہیں۔


The book discusses the challenges of concurrent programming.

کتاب ہم وقت سازی پروگرامنگ کے چیلنجوں پر بحث کرتی ہے۔


Understanding thread APIs is crucial for multi-threaded applications.

ملٹی تھریڈڈ ایپلی کیشنز کے لیے تھریڈ APIs کو سمجھنا بہت ضروری ہے۔


The example shows how to pass arguments to a thread.

مثال میں دکھایا گیا ہے کہ کسی تھریڈ کو دلائل کیسے پاس کیے جائیں۔


Care must be taken when returning values from a thread.

تھریڈ سے ویلیوز واپس کرتے وقت احتیاط برتنی چاہیے۔


Locks are used to protect critical sections of code.

لاک کوڈ کے اہم حصوں کی حفاظت کے لیے استعمال ہوتے ہیں۔


Proper initialization of locks is essential for correct behavior.

صحیح رویے کے لیے لاکس کی مناسب ابتدائیہ ضروری ہے۔


Condition variables are used for thread synchronization.

کنڈیشن متغیرات تھریڈ کی ہم وقت سازی کے لیے استعمال ہوتے ہیں۔


The trylock version returns immediately if the lock is unavailable.

اگر لاک دستیاب نہیں ہے تو trylock ورژن فوری طور پر واپس آجاتا ہے۔


The timedlock version allows a timeout for lock acquisition.

timedlock ورژن لاک حاصل کرنے کے لیے ایک ٹائم آؤٹ کی اجازت دیتا ہے۔


Concurrency is a fundamental concept in operating systems.

ہم وقت سازی آپریٹنگ سسٹمز میں ایک بنیادی تصور ہے۔


The code uses a condition variable to synchronize threads.

یہ کوڈ تھریڈز کو ہم آہنگ کرنے کے لیے ایک کنڈیشن ویری ایبل کا استعمال کرتا ہے۔


Condition variables are essential for managing concurrent access to shared resources.

کنڈیشن ویری ایبلز مشترکہ وسائل تک ہم وقت رسائی کے انتظام کے لیے ضروری ہیں۔


A lock must be associated with a condition variable.

ایک لاک کو ایک کنڈیشن ویری ایبل کے ساتھ منسلک ہونا چاہیے۔


The thread waits on the condition variable until signaled.

تھریڈ سگنل ملنے تک کنڈیشن ویری ایبل پر انتظار کرتا ہے۔


The signal call wakes up a waiting thread.

سگنل کال انتظار کرنے والے تھریڈ کو جگاتی ہے۔


Always hold the lock when modifying shared variables.

مشترکہ متغیرات میں ترمیم کرتے وقت ہمیشہ لاک کو تھامیں۔


The while loop re-checks the condition after being woken up.

وائل لوپ جاگنے کے بعد حالت کو دوبارہ چیک کرتا ہے۔


Using a simple flag for synchronization can be error-prone.

ہم وقت سازی کے لیے ایک سادہ فلیگ کا استعمال غلطی کا شکار ہو سکتا ہے۔


Condition variables are preferred over simple flags.

سادہ فلیگز کے مقابلے میں کنڈیشن ویری ایبلز کو ترجیح دی جاتی ہے۔


Compile the code with the -pthread flag.

کوڈ کو -pthread فلیگ کے ساتھ مرتب کریں۔


The pthread library provides tools for multi-threaded programming.

pthread لائبریری ملٹی تھریڈڈ پروگرامنگ کے لیے ٹولز فراہم کرتی ہے۔


Keep thread interactions as simple as possible.

تھریڈ کے تعامل کو ممکن حد تک آسان رکھیں۔


Initialize locks and condition variables properly.

لاکس اور کنڈیشن ویری ایبلز کو مناسب طریقے سے شروع کریں۔


Check return codes to avoid unexpected behavior.

غیر متوقع رویے سے بچنے کے لیے واپسی کے کوڈز کو چیک کریں۔


Be careful when passing arguments to threads.

تھریڈز کو دلائل پاس کرتے وقت محتاط رہیں۔


ہر تھریڈ کا اپنا اسٹیک ہوتا ہے۔


Always use condition variables for signaling between threads.

تھریڈز کے درمیان سگنلنگ کے لیے ہمیشہ کنڈیشن ویری ایبلز کا استعمال کریں۔


Consult the manual pages for detailed information.

تفصیلی معلومات کے لیے دستی صفحات سے رجوع کریں۔


Locks are used to protect critical sections of code.

لاکس کوڈ کے اہم حصوں کی حفاظت کے لیے استعمال ہوتے ہیں۔


The test-and-set instruction is a hardware primitive for building locks.

ٹیسٹ-اینڈ-سیٹ انسٹرکشن لاک بنانے کے لیے ایک ہارڈویئر پرائمیٹو ہے۔


The program compiled without any errors.

پروگرام بغیر کسی غلطی کے مرتب ہو گیا۔


Please provide your name and contact information.

براہ کرم اپنا نام اور رابطہ کی معلومات فراہم کریں۔


The company announced a new product launch.

کمپنی نے ایک نئی مصنوعات کے آغاز کا اعلان کیا۔


He is very knowledgeable about the subject.

وہ اس موضوع پر بہت معلومات رکھتا ہے۔


The algorithm efficiently sorts the data.

الگورتھم ڈیٹا کو مؤثر طریقے سے ترتیب دیتا ہے۔


کیا آپ براہ کرم اسے دہرا سکتے ہیں؟


The meeting was scheduled for tomorrow morning.

میٹنگ کل صبح کے لیے طے کی گئی تھی۔


The research paper was published in a prestigious journal.

تحقیقی مقالہ ایک معتبر جریدے میں شائع ہوا۔


چیلنجوں کے باوجود، وہ کامیاب ہوئے۔


سافٹ ویئر اپ ڈیٹ نے کئی کیڑے ٹھیک کیے۔


The economic forecast predicts a recession.

معاشی پیش گوئی کساد بازاری کی پیشین گوئی کرتی ہے۔


وہ ایک انتہائی ہنر مند پروگرامر ہے۔


The project was completed on time and within budget.

منصوبہ وقت پر اور بجٹ کے اندر مکمل ہوا۔


The government implemented new policies.

حکومت نے نئی پالیسیاں نافذ کیں۔


The complex system requires careful analysis.

پیچیدہ نظام کو محتاط تجزیہ کی ضرورت ہے۔


The artist's work is known for its innovation.

فنکار کا کام اپنی جدت کے لیے جانا جاتا ہے۔


The company is facing financial difficulties.

کمپنی کو مالی مشکلات کا سامنا ہے۔


The data analysis revealed interesting patterns.

ڈیٹا تجزیہ نے دلچسپ نمونے ظاہر کیے۔


The team worked collaboratively to achieve the goal.

ٹیم نے ہدف کو حاصل کرنے کے لیے مل کر کام کیا۔


The new technology has the potential to revolutionize the industry.

نئی ٹیکنالوجی میں صنعت میں انقلاب لانے کی صلاحیت ہے۔


The system uses locks to protect shared data structures.

نظام مشترکہ ڈیٹا ڈھانچوں کی حفاظت کے لیے تالے استعمال کرتا ہے۔


Concurrency control is crucial for the performance of multi-threaded applications.

متعدد تھریڈ والے ایپلی کیشنز کی کارکردگی کے لیے ہم آہنگی کنٹرول بہت ضروری ہے۔


Avoid premature optimization; focus on correctness first.

قبل از وقت اصلاح سے گریز کریں؛ پہلے درستی پر توجہ دیں۔


The hash table uses a lock per bucket to improve concurrency.

ہیش ٹیبل ہم آہنگی کو بہتر بنانے کے لیے ہر بالٹی کے لیے ایک تالا استعمال کرتا ہے۔


Condition variables are used to synchronize threads.

تھریڈز کو ہم آہنگ کرنے کے لیے کنڈیشن متغیرات استعمال کیے جاتے ہیں۔


A thread can wait on a condition variable until the condition is met.

ایک تھریڈ کنڈیشن متغیر پر اس وقت تک انتظار کر سکتا ہے جب تک کہ شرط پوری نہ ہو جائے۔


The producer-consumer problem is a classic concurrency challenge.

پروڈیوسر-کنزیومر کا مسئلہ ایک کلاسک ہم آہنگی کا چیلنج ہے۔


The bounded buffer is a shared resource that requires synchronization.

محدود بفر ایک مشترکہ وسیلہ ہے جس کے لیے ہم وقت سازی کی ضرورت ہوتی ہے۔


The parent thread waits for the child thread to complete.

والدین کا تھریڈ بچے کے تھریڈ کے مکمل ہونے کا انتظار کرتا ہے۔


Spinning is an inefficient way to wait for a condition.

گھومنا کسی شرط کا انتظار کرنے کا ایک غیر موثر طریقہ ہے۔


The operating system provides mechanisms for thread synchronization.

آپریٹنگ سسٹم تھریڈ ہم وقت سازی کے لیے طریقہ کار فراہم کرتا ہے۔


Understanding concurrency is essential for writing robust software.

مضبوط سافٹ ویئر لکھنے کے لیے ہم آہنگی کو سمجھنا ضروری ہے۔


The code uses mutexes to protect critical sections.

کوڈ اہم حصوں کی حفاظت کے لیے میوٹیکس کا استعمال کرتا ہے۔


A signal on a condition variable wakes up a waiting thread.

کنڈیشن متغیر پر ایک سگنل انتظار کرنے والے تھریڈ کو جگاتا ہے۔


The while loop is used to handle spurious wakeups.

غلط بیداریوں کو سنبھالنے کے لیے وائل لوپ کا استعمال کیا جاتا ہے۔


Always hold the lock when signaling a condition variable.

کنڈیشن متغیر کو سگنل دیتے وقت ہمیشہ تالا رکھیں۔


The join operation allows a thread to wait for another thread to finish.

جوائن آپریشن ایک تھریڈ کو دوسرے تھریڈ کے ختم ہونے کا انتظار کرنے کی اجازت دیتا ہے۔


The producer puts items into the buffer, and the consumer takes them out.

پروڈیوسر بفر میں اشیاء ڈالتا ہے، اور صارف انہیں نکالتا ہے۔


Concurrency bugs can be difficult to debug.

ہم آہنگی کی غلطیوں کو ڈیبگ کرنا مشکل ہو سکتا ہے۔


Proper synchronization is critical to avoid race conditions.

ریس کی حالتوں سے بچنے کے لیے مناسب ہم وقت سازی بہت ضروری ہے۔


The lock spins for a while, hoping that it can acquire the lock.

لاک کچھ دیر گھومتا ہے، اس امید پر کہ وہ لاک حاصل کر سکتا ہے۔


Two-phase locks are yet another instance of a hybrid approach.

دو مرحلہ لاک ایک ہائبرڈ نقطہ نظر کی ایک اور مثال ہیں۔


The Linux lock above is a form of such a lock, but it only spins once.

اوپر والا لینکس لاک اس طرح کے لاک کی ایک شکل ہے، لیکن یہ صرف ایک بار گھومتا ہے۔


Making a single general-purpose lock, good for all possible use cases, is quite a challenge.

ایک واحد عام مقصد کا لاک بنانا، جو تمام ممکنہ استعمال کے معاملات کے لیے اچھا ہو، ایک بڑا چیلنج ہے۔


Check out the Solaris or Linux open source code bases if you want to see more details.

اگر آپ مزید تفصیلات دیکھنا چاہتے ہیں تو سولاریس یا لینکس اوپن سورس کوڈ بیس کو دیکھیں۔


There is even an undoubtedly bad book about Al Davis and his famous “just win” quote.

یہاں تک کہ ال ڈیوس اور اس کے مشہور “صرف جیت” کے قول کے بارے میں ایک بلاشبہ بری کتاب بھی ہے۔


One of the early seminal papers in the area.

اس علاقے میں ابتدائی اہم مقالوں میں سے ایک۔


A landmark paper introducing a different approach to building concurrent data structures.

ایک سنگ میل مقالہ جو ہم وقت ڈیٹا ڈھانچے بنانے کے لیے ایک مختلف نقطہ نظر متعارف کراتا ہے۔


مزے دار اور بصیرت سے بھرپور۔


This is also pretty interesting to look at.

یہ بھی دیکھنے کے لیے کافی دلچسپ ہے۔


Can you believe we referenced wikipedia?

کیا آپ یقین کر سکتے ہیں کہ ہم نے ویکیپیڈیا کا حوالہ دیا؟


Adding locks to a data structure to make it usable by threads makes the structure thread safe.

ڈیٹا ڈھانچے میں لاک شامل کرنے سے اسے تھریڈز کے ذریعے قابل استعمال بنانے سے ڈھانچہ تھریڈ محفوظ ہو جاتا ہے۔


When given a particular data structure, how should we add locks to it, in order to make it work correctly?

جب کوئی خاص ڈیٹا ڈھانچہ دیا جاتا ہے، تو ہمیں اسے صحیح طریقے سے کام کرنے کے لیے اس میں لاک کیسے شامل کرنا چاہیے؟


One of the simplest data structures is a counter.

سب سے آسان ڈیٹا ڈھانچوں میں سے ایک کاؤنٹر ہے۔


We now have our next challenge: how can we make this code thread safe?

اب ہمارے پاس اگلا چیلنج ہے: ہم اس کوڈ کو تھریڈ محفوظ کیسے بنا سکتے ہیں؟


This concurrent counter is simple and works correctly.

یہ ہم وقت کاؤنٹر سادہ ہے اور صحیح طریقے سے کام کرتا ہے۔


If your data structure is too slow, you’ll have to do more than just add a single lock.

اگر آپ کا ڈیٹا ڈھانچہ بہت سست ہے، تو آپ کو صرف ایک لاک شامل کرنے سے زیادہ کچھ کرنا پڑے گا۔


Performance is excellent; the time taken to update the counter four million times on four processors is hardly higher than the time taken to update it one million times on one processor.

کارکردگی بہترین ہے؛ چار پروسیسرز پر کاؤنٹر کو چار ملین بار اپ ڈیٹ کرنے میں لگنے والا وقت ایک پروسیسر پر اسے ایک ملین بار اپ ڈیٹ کرنے میں لگنے والے وقت سے بمشکل زیادہ ہے۔


We next examine a more complicated structure, the linked list.

اس کے بعد ہم ایک زیادہ پیچیدہ ڈھانچے، لنکڈ لسٹ کا جائزہ لیتے ہیں۔


For simplicity, we’ll omit some of the obvious routines that such a list would have and just focus on concurrent insert.

آسانی کے لیے، ہم ان واضح معمولات کو چھوڑ دیں گے جو اس طرح کی فہرست میں ہوں گے اور صرف ہم وقت اندراج پر توجہ مرکوز کریں گے۔


The consumer waits for a buffer to become filled before using it.

صارف استعمال کرنے سے پہلے بفر کے بھرنے کا انتظار کرتا ہے۔


Imagine there are two threads, a producer and a consumer.

تصور کریں کہ دو تھریڈز ہیں، ایک پروڈیوسر اور ایک صارف۔


The producer will put a data value into the first entry of buffer.

پروڈیوسر ڈیٹا ویلیو کو بفر کی پہلی اندراج میں ڈالے گا۔


This is a no-no; we don’t want any data from the producer to be lost.

یہ مناسب نہیں ہے؛ ہم نہیں چاہتے کہ پروڈیوسر کا کوئی ڈیٹا ضائع ہو۔


The filling of a buffer and incrementing of the index into the buffer is a critical section.

بفر کو بھرنا اور بفر میں انڈیکس کو بڑھانا ایک اہم حصہ ہے۔


The consumer acquires the mutex and is waiting for someone to signal full.

صارف میوٹیکس حاصل کرتا ہے اور کسی کے مکمل سگنل دینے کا انتظار کر رہا ہے۔


The producer could signal full but is waiting for the mutex.

پروڈیوسر مکمل سگنل دے سکتا ہے لیکن میوٹیکس کا انتظار کر رہا ہے۔


The result is a simple and working bounded buffer, a commonly-used pattern in multi-threaded programs.

نتیجہ ایک سادہ اور کام کرنے والا محدود بفر ہے، جو ملٹی تھریڈڈ پروگراموں میں عام طور پر استعمال ہونے والا نمونہ ہے۔


Reader-writer locks should be used with some caution.

ریڈر-رائٹر لاکس کو کچھ احتیاط کے ساتھ استعمال کیا جانا چاہیے۔


They often add more overhead and thus do not end up speeding up performance.

وہ اکثر زیادہ اوور ہیڈ شامل کرتے ہیں اور اس طرح کارکردگی کو تیز نہیں کرتے ہیں۔


The dining philosopher’s problem is famous because it is fun and somewhat intellectually interesting.

کھانے والے فلسفی کا مسئلہ مشہور ہے کیونکہ یہ تفریحی اور کسی حد تک دانشورانہ طور پر دلچسپ ہے۔


In order to eat, a philosopher needs two forks.

کھانے کے لیے، ایک فلسفی کو دو کانٹوں کی ضرورت ہوتی ہے۔


The key challenge is to write the routines getforks() and putforks() such that there is no deadlock.

بنیادی چیلنج getforks() اور putforks() روٹینز کو اس طرح لکھنا ہے کہ کوئی ڈیڈ لاک نہ ہو۔


If each philosopher happens to grab the fork on their left before any philosopher can grab the fork on their right, each will be stuck.

اگر ہر فلسفی اپنے بائیں طرف کا کانٹا پکڑ لیتا ہے اس سے پہلے کہ کوئی فلسفی اپنے دائیں طرف کا کانٹا پکڑ سکے، تو ہر ایک پھنس جائے گا۔


The simplest way to attack this problem is to change how forks are acquired by at least one of the philosophers.

اس مسئلے پر حملہ کرنے کا سب سے آسان طریقہ یہ ہے کہ کم از کم ایک فلسفی کے ذریعہ کانٹوں کے حاصل کرنے کے طریقے کو تبدیل کیا جائے۔


There are other “famous” problems like this one, e.g., the cigarette smoker’s problem or the sleeping barber problem.

اس طرح کے دوسرے


We use just one lock and one condition variable, plus a state variable to track the value of the semaphore.

ہم صرف ایک لاک اور ایک کنڈیشن ویری ایبل استعمال کرتے ہیں، نیز سیموفور کی قدر کو ٹریک کرنے کے لیے ایک اسٹیٹ ویری ایبل۔


Semaphores are a powerful and flexible primitive for writing concurrent programs.

سیموفور ہم وقت پروگرام لکھنے کے لیے ایک طاقتور اور لچکدار ابتدائیہ ہیں۔


Becoming a real concurrency expert takes years of effort.

حقیقی ہم وقتی ماہر بننے میں برسوں کی محنت لگتی ہے۔


Concurrency bugs tend to come in a variety of common patterns.

ہم وقتی کیڑے عام نمونوں کی ایک قسم میں آتے ہیں۔


صارف آسانی سے دوبارہ سو جاتا ہے۔


Thanks to Mesa semantics, a simple rule to remember with condition variables is to always use while loops.

میسا سیمنٹکس کی بدولت، کنڈیشن متغیرات کے ساتھ یاد رکھنے کا ایک سادہ اصول یہ ہے کہ ہمیشہ while لوپس کا استعمال کریں۔


The problem occurs when two consumers run first.

مسئلہ اس وقت پیش آتا ہے جب دو صارفین پہلے چلتے ہیں۔


A consumer should not wake other consumers, only producers, and vice-versa.

ایک صارف کو دوسرے صارفین کو نہیں جگانا چاہیے، صرف پروڈیوسرز کو، اور اس کے برعکس۔


The solution here is once again a small one: use two condition variables, instead of one.

یہاں حل ایک بار پھر ایک چھوٹا سا ہے: ایک کے بجائے دو کنڈیشن متغیرات استعمال کریں۔


A producer only sleeps if all buffers are currently filled.

ایک پروڈیوسر صرف اس صورت میں سوتا ہے جب تمام بفرز اس وقت بھرے ہوں۔


When checking for a condition in a multi-threaded program, using a while loop is always correct.

ملٹی تھریڈڈ پروگرام میں کسی شرط کی جانچ کرتے وقت، while لوپ کا استعمال ہمیشہ درست ہوتا ہے۔


In some thread packages, it is possible that two threads get woken up though just a single signal has taken place.

کچھ تھریڈ پیکجز میں، یہ ممکن ہے کہ دو تھریڈز جاگ جائیں حالانکہ صرف ایک سگنل ہوا ہے۔


The problem they ran into is best shown via simple example, in this case in a simple multi-threaded memory allocation library.

جس مسئلے کا انہیں سامنا کرنا پڑا وہ ایک سادہ مثال کے ذریعے بہترین طور پر دکھایا گیا ہے، اس معاملے میں ایک سادہ ملٹی تھریڈڈ میموری الیکیشن لائبریری میں۔


The astute reader might also have noticed we could have used this approach earlier.

تیز نظر رکھنے والے قاری نے یہ بھی نوٹ کیا ہوگا کہ ہم اس طریقہ کار کو پہلے استعمال کر سکتے تھے۔


We have seen the introduction of another important synchronization primitive beyond locks: condition variables.

ہم نے تالوں سے آگے ایک اور اہم مطابقت پذیری کی ابتدا دیکھی ہے: کنڈیشن متغیرات۔


One of the first people to realize this years ago was Edsger Dijkstra.

یہ برسوں پہلے سمجھنے والے پہلے لوگوں میں سے ایک ایڈجر ڈائکسترا تھے۔


Indeed, Dijkstra and colleagues invented the semaphore as a single primitive for all things related to synchronization.

درحقیقت، ڈائکسترا اور ساتھیوں نے مطابقت پذیری سے متعلق تمام چیزوں کے لیے ایک واحد ابتدائیہ کے طور پر سیمفور کو ایجاد کیا۔


A semaphore is as an object with an integer value that we can manipulate with two routines.

ایک سیمفور ایک ایسی شے ہے جس کی ایک عددی قدر ہوتی ہے جسے ہم دو معمولات سے جوڑ سکتے ہیں۔


Because the initial value of the semaphore determines its behavior, before calling any other routine to interact with the semaphore, we must first initialize it to some value.

چونکہ سیمفور کی ابتدائی قدر اس کے رویے کا تعین کرتی ہے، سیمفور کے ساتھ تعامل کرنے کے لیے کسی اور معمول کو کال کرنے سے پہلے، ہمیں پہلے اسے کسی قدر پر شروع کرنا ہوگا۔


After a semaphore is initialized, we can call one of two functions to interact with it.

ایک سیمفور کو شروع کرنے کے بعد، ہم اس کے ساتھ تعامل کرنے کے لیے دو میں سے ایک فنکشن کو کال کر سکتے ہیں۔


First, we can see that sem_wait() will either return right away or it will cause the caller to suspend execution waiting for a subsequent post.

سب سے پہلے، ہم دیکھ سکتے ہیں کہ sem_wait() یا تو فوری طور پر واپس آ جائے گا یا یہ کالر کو بعد کے پوسٹ کا انتظار کرتے ہوئے عمل درآمد کو معطل کر دے گا۔


Second, we can see that sem_post() does not wait for some particular condition to hold.

دوم، ہم دیکھ سکتے ہیں کہ sem_post() کسی خاص حالت کے برقرار رہنے کا انتظار نہیں کرتا ہے۔


اب ہم ایک سیمفور استعمال کرنے کے لیے تیار ہیں۔


Because locks only have two states (held and not held), this usage is sometimes known as a binary semaphore.

چونکہ تالوں کی صرف دو حالتیں ہوتی ہیں (منعقد اور غیر منعقد)، اس استعمال کو بعض اوقات بائنری سیمفور کے نام سے جانا جاتا ہے۔


The study focuses on four major open-source applications.

یہ مطالعہ چار اہم اوپن سورس ایپلی کیشنز پر مرکوز ہے۔


Understanding these results can help you understand what types of problems actually occur.

ان نتائج کو سمجھنے سے آپ کو یہ سمجھنے میں مدد مل سکتی ہے کہ کس قسم کے مسائل درحقیقت پیش آتے ہیں۔


Table 32.1 shows a summary of the bugs Lu and colleagues studied.

ٹیبل 32.1 میں لُو اور ساتھیوں کے مطالعہ کردہ کیڑے مکوڑوں کا خلاصہ دکھایا گیا ہے۔


From the table, you can see that there were 105 total bugs.

ٹیبل سے، آپ دیکھ سکتے ہیں کہ کل 105 کیڑے مکوڑے تھے۔


We now dive into these different classes of bugs a bit more deeply.

اب ہم ان مختلف قسم کے کیڑوں پر تھوڑا گہرائی سے غور کرتے ہیں۔


For the first class of non-deadlock bugs, we use examples from the study.

غیر ڈیڈ لاک کیڑے مکوڑوں کی پہلی قسم کے لیے، ہم مطالعہ سے مثالیں استعمال کرتے ہیں۔


The first type of problem encountered is referred to as an atomicity violation.

پہلی قسم کا مسئلہ جو درپیش ہے اسے ایٹمیسیٹی کی خلاف ورزی کہا جاتا ہے۔


Here is a simple example, found in MySQL.

یہاں ایک سادہ سی مثال ہے، جو MySQL میں پائی جاتی ہے۔


The more formal definition of an atomicity violation is this.

ایٹمیسیٹی کی خلاف ورزی کی زیادہ رسمی تعریف یہ ہے۔


Finding a fix for this type of problem is often straightforward.

اس قسم کے مسئلے کا حل تلاش کرنا اکثر سیدھا ہوتا ہے۔


Another common type of non-deadlock bug found is known as an order violation.

ایک اور عام قسم کا غیر ڈیڈ لاک کیڑا جو پایا جاتا ہے اسے آرڈر کی خلاف ورزی کے طور پر جانا جاتا ہے۔


As you probably figured out, the code in Thread 2 seems to assume that the variable mThread has already been initialized.

جیسا کہ آپ نے شاید اندازہ لگایا ہوگا، تھریڈ 2 میں موجود کوڈ یہ فرض کرتا ہے کہ متغیر mThread پہلے ہی شروع ہو چکا ہے۔


The fix to this type of bug is generally to enforce ordering.

اس قسم کے کیڑے کا حل عام طور پر ترتیب کو نافذ کرنا ہے۔


When ordering matters between threads, condition variables can come to the rescue.

جب تھریڈز کے درمیان ترتیب اہمیت رکھتی ہے، تو کنڈیشن متغیرات مدد کر سکتے ہیں۔


A large fraction of non-deadlock bugs studied are either atomicity or order violations.

مطالعہ کیے گئے غیر ڈیڈ لاک کیڑوں کا ایک بڑا حصہ یا تو ایٹمیسیٹی یا آرڈر کی خلاف ورزیاں ہیں۔


Beyond the concurrency bugs mentioned above, a classic problem that arises is known as deadlock.

اوپر ذکر کردہ ہم آہنگی کیڑے مکوڑوں کے علاوہ، ایک کلاسک مسئلہ جو پیدا ہوتا ہے اسے ڈیڈ لاک کے نام سے جانا جاتا ہے۔


Deadlock occurs, for example, when a thread is holding a lock and waiting for another one.

ڈیڈ لاک اس وقت ہوتا ہے، مثال کے طور پر، جب ایک تھریڈ ایک لاک کو تھامے ہوئے ہے اور دوسرے کا انتظار کر رہا ہے۔


How should programmers write code so as to handle deadlock in some way?

پروگرامرز کو ڈیڈ لاک کو کسی نہ کسی طرح ہینڈل کرنے کے لیے کوڈ کیسے لکھنا چاہیے؟


One reason is that in large code bases, complex dependencies arise between components.

ایک وجہ یہ ہے کہ بڑے کوڈ بیس میں، اجزاء کے درمیان پیچیدہ انحصار پیدا ہوتے ہیں۔


The best solution in practice is to be careful and prevent deadlock from occurring in the first place.

عملی طور پر بہترین حل یہ ہے کہ محتاط رہیں اور سب سے پہلے ڈیڈ لاک کو ہونے سے روکیں۔


کتاب میز پر ہے۔


آپ کیسے ہیں؟


میں بازار جا رہا ہوں۔


آج موسم خوشگوار ہے۔


براہ کرم مجھے نمک دیجیے۔


کمپنی نے ایک نئی مصنوعات کا اعلان کیا۔


The government is discussing the new policy.

حکومت نئی پالیسی پر تبادلہ خیال کر رہی ہے۔


وہ ایک بہت باصلاحیت موسیقار ہے۔


The research team is working on a new project.

تحقیقی ٹیم ایک نئے منصوبے پر کام کر رہی ہے۔


The meeting will be held tomorrow morning.

میٹنگ کل صبح منعقد کی جائے گی۔