The operating system virtualizes resources.

অপারেটিং সিস্টেম সম্পদগুলিকে ভার্চুয়ালাইজ করে।


একটি প্রোগ্রাম নির্দেশাবলী কার্যকর করে।


অপারেটিং সিস্টেম সিস্টেমটিকে ব্যবহার করা সহজ করে তোলে।


ভার্চুয়ালাইজেশন একটি মূল কৌশল।


অপারেটিং সিস্টেম সিস্টেম কল সরবরাহ করে।


অধ্যাপক ছাত্রদের পড়াবেন।


আপনার কোনো প্রশ্ন আছে?


আমি শিখতে প্রস্তুত।


এই বইটি অপারেটিং সিস্টেম সম্পর্কে।


ছাত্রটি কনফুসিয়াসের একজন বড় ভক্ত ছিল।


The operating system is a resource manager.

অপারেটিং সিস্টেম একটি সম্পদ ব্যবস্থাপক।


প্রোগ্রাম মেমরি অ্যাক্সেস করে।


Each process has its own virtual address space.

প্রতিটি প্রক্রিয়ার নিজস্ব ভার্চুয়াল অ্যাড্রেস স্পেস রয়েছে।


Concurrency is a main theme of this book.

কনকারেন্সি এই বইটির একটি প্রধান বিষয়।


অপারেটিং সিস্টেম এই বিভ্রমের জন্য দায়ী।


Understanding the basics is crucial for further study.

আরও অধ্যয়নের জন্য মৌলিক বিষয়গুলি বোঝা অপরিহার্য।


The operating system manages resources efficiently and fairly.

অপারেটিং সিস্টেম দক্ষতার সাথে এবং ন্যায্যভাবে সম্পদ পরিচালনা করে।


Virtualization allows many programs to run concurrently.

ভার্চুয়ালাইজেশন অনেক প্রোগ্রামকে একই সাথে চালানোর অনুমতি দেয়।


The challenges of concurrency are complex and multifaceted.

কনকারেন্সির চ্যালেঞ্জগুলি জটিল এবং বহু-বিষয়ক।


The operating system provides a standard library to applications.

অপারেটিং সিস্টেম অ্যাপ্লিকেশনগুলিতে একটি স্ট্যান্ডার্ড লাইব্রেরি সরবরাহ করে।


Key to fast crash recovery is statelessness.

দ্রুত ক্র্যাশ পুনরুদ্ধারের মূল চাবিকাঠি হল অবস্থা-নিরপেক্ষতা।


The NFSv2 protocol is a foundational element.

NFSv2 প্রোটোকল একটি মৌলিক উপাদান।


From protocol to distributed file system, the journey is complex.

প্রোটোকল থেকে বিতরণকৃত ফাইল সিস্টেমে যাত্রাটি জটিল।


Handling server failure requires idempotent operations.

সার্ভার ব্যর্থতা পরিচালনা করার জন্য আইডেম্পোটেন্ট অপারেশন প্রয়োজন।


Client-side caching can improve performance.

ক্লায়েন্ট-সাইড ক্যাশিং কর্মক্ষমতা উন্নত করতে পারে।


The cache consistency problem is a significant challenge.

ক্যাশে ধারাবাহিকতার সমস্যা একটি গুরুত্বপূর্ণ চ্যালেঞ্জ।


Assessing NFS cache consistency is crucial.

NFS ক্যাশে ধারাবাহিকতা মূল্যায়ন করা অত্যন্ত গুরুত্বপূর্ণ।


Server-side write buffering has implications.

সার্ভার-সাইড রাইট বাফারিং এর প্রভাব রয়েছে।


The Andrew File System (AFS) is another approach.

অ্যান্ড্রু ফাইল সিস্টেম (AFS) আরেকটি পদ্ধতি।


AFS সংস্করণ ১ এর কিছু সমস্যা ছিল।


প্রোটোকল উন্নত করা প্রয়োজন ছিল।


AFS সংস্করণ ২ উন্নতি নিয়ে এসেছিল।


ক্যাশে ধারাবাহিকতা একটি গুরুত্বপূর্ণ দিক।


ক্র্যাশ পুনরুদ্ধার একটি গুরুত্বপূর্ণ বৈশিষ্ট্য।


AFSv2's scale and performance were notable.

AFSv2 এর স্কেল এবং কর্মক্ষমতা উল্লেখযোগ্য ছিল।


AFS-এর আরও কিছু উন্নতি ছিল।


Let's discuss the summary of distribution.

আসুন বিতরণের সারসংক্ষেপ নিয়ে আলোচনা করি।


প্রোগ্রাম মেমরি অ্যাক্সেস করে।


A multi-threaded program can be complex.

একটি মাল্টি-থ্রেডেড প্রোগ্রাম জটিল হতে পারে।


The xv6 context switch code is important.

xv6 কন্টেক্সট সুইচ কোড গুরুত্বপূর্ণ।


Controlling interrupts is crucial for operating systems.

অপারেটিং সিস্টেমের জন্য বাধা নিয়ন্ত্রণ করা অত্যন্ত গুরুত্বপূর্ণ।


টেস্ট এবং সেট অপারেশনটি অ্যাটমিক।


Spin locks can be used to build a working system.

কার্যকরী সিস্টেম তৈরি করতে স্পিন লক ব্যবহার করা যেতে পারে।


Evaluating spin locks helps to understand their performance.

স্পিন লকগুলির মূল্যায়ন তাদের কর্মক্ষমতা বুঝতে সাহায্য করে।


Compare-and-swap is another atomic operation.

তুলনা-এবং-বিনিময় আরেকটি অ্যাটমিক অপারেশন।


Load-linked and store-conditional are important for concurrency.

লোড-লিঙ্কড এবং স্টোর-কন্ডিশনাল সমকালীনতার জন্য গুরুত্বপূর্ণ।


Fetch-and-add is a useful atomic operation.

ফেচ-এন্ড-অ্যাড একটি উপযোগী অ্যাটমিক অপারেশন।


স্পিনিং অনেক বেশি সিপিইউ সময় গ্রাস করতে পারে।


Yielding is a simple approach to avoid spinning.

স্পিনিং এড়াতে ফলন একটি সহজ পদ্ধতি।


Queues can be used for sleeping instead of spinning.

স্পিনিং এর পরিবর্তে ঘুমের জন্য সারি ব্যবহার করা যেতে পারে।


Different operating systems offer different support.

বিভিন্ন অপারেটিং সিস্টেম বিভিন্ন সমর্থন প্রদান করে।


Two-phase locks are a locking mechanism.

দুই-পর্যায়ের লক একটি লকিং প্রক্রিয়া।


Concurrent data structures require careful design.

একই সময়ে কাজ করা ডেটা স্ট্রাকচারের জন্য সতর্ক নকশা প্রয়োজন।


Concurrent counters need to be thread-safe.

একই সময়ে কাজ করা কাউন্টারগুলিকে থ্রেড-সেফ হতে হবে।


সংযুক্ত তালিকাগুলিও একই সময়ে কাজ করতে পারে।


Concurrent queues are essential for many applications.

একই সময়ে কাজ করা সারি অনেক অ্যাপ্লিকেশনের জন্য অপরিহার্য।


হ্যাশ টেবিলগুলি একই সময়ে কাজ করার উপযোগী করা যেতে পারে।


Condition variables help manage concurrency.

শর্তের ভেরিয়েবলগুলি সমকালীনতা পরিচালনা করতে সহায়তা করে।


The producer/consumer problem is a classic example.

প্রযোজক/ভোক্তা সমস্যাটি একটি ক্লাসিক উদাহরণ।


Semaphores are used for synchronization.

সিঙ্ক্রোনাইজেশনের জন্য সেমাফোর ব্যবহার করা হয়।


The operating system manages the computer's resources.

অপারেটিং সিস্টেম কম্পিউটারের সম্পদগুলি পরিচালনা করে।


Scheduling algorithms determine the order in which processes are executed.

শিডিউলিং অ্যালগরিদমগুলি প্রক্রিয়াগুলি কোন ক্রমে কার্যকর করা হবে তা নির্ধারণ করে।


Memory management is crucial for efficient system performance.

দক্ষ সিস্টেম পারফরম্যান্সের জন্য মেমরি ম্যানেজমেন্ট অপরিহার্য।


সিপিইউ হলো কম্পিউটারের মস্তিষ্ক।


Virtual memory allows the system to use more memory than physically available.

ভার্চুয়াল মেমরি সিস্টেমকে ভৌতভাবে উপলব্ধের চেয়ে বেশি মেমরি ব্যবহার করতে দেয়।


I am reading a book about operating systems.

আমি অপারেটিং সিস্টেম নিয়ে একটি বই পড়ছি।


Can you explain the concept of address spaces?

আপনি কি অ্যাড্রেস স্পেসের ধারণাটি ব্যাখ্যা করতে পারেন?


The lecture covered various scheduling techniques.

বক্তৃতায় বিভিন্ন শিডিউলিং কৌশল নিয়ে আলোচনা করা হয়েছিল।


The professor assigned a homework on memory allocation.

অধ্যাপক মেমরি বরাদ্দ নিয়ে একটি বাড়ির কাজ দিয়েছেন।


Understanding concurrency is essential for multi-threaded applications.

মাল্টি-থ্রেডেড অ্যাপ্লিকেশনগুলির জন্য সমকালীনতা বোঝা অপরিহার্য।


The news reported a major breakthrough in technology.

খবরে প্রযুক্তিতে একটি বড় সাফল্যের কথা বলা হয়েছে।


The company is developing a new operating system.

কোম্পানিটি একটি নতুন অপারেটিং সিস্টেম তৈরি করছে।


I need to learn more about file systems.

আমার ফাইল সিস্টেম সম্পর্কে আরও কিছু জানার আছে।


The system crashed due to a memory leak.

মেমরি লিকের কারণে সিস্টেমটি ক্র্যাশ করেছে।


The program uses multiple threads to improve performance.

প্রোগ্রামটি কর্মক্ষমতা উন্নত করতে একাধিক থ্রেড ব্যবহার করে।


আপনি কি এই অ্যাসাইনমেন্টে আমাকে সাহায্য করতে পারেন?


The operating system kernel is the core of the system.

অপারেটিং সিস্টেম কার্নেল হলো সিস্টেমের মূল ভিত্তি।


The discussion focused on the challenges of multiprocessor scheduling.

আলোচনাটি মাল্টিপ্রসেসর শিডিউলিংয়ের চ্যালেঞ্জগুলির উপর কেন্দ্রীভূত ছিল।


The project requires a deep understanding of memory virtualization.

প্রকল্পটির জন্য মেমরি ভার্চুয়ালাইজেশন সম্পর্কে গভীর ধারণা প্রয়োজন।


Let's review the concepts of paging and segmentation.

আসুন পেজিং এবং সেগমেন্টেশনের ধারণাগুলো পর্যালোচনা করি।


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.

বাস্তব সিস্টেমে বাস্তব কোড চালানো অপারেটিং সিস্টেম সম্পর্কে জানার সেরা উপায়।


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

এই বইটির সবচেয়ে গুরুত্বপূর্ণ সংযোজন হল এমন কিছু প্রকল্পের সেট, যেখানে আপনি বাস্তব সিস্টেমগুলি কীভাবে কাজ করে সে সম্পর্কে জানতে পারবেন।


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.

এই কোর্সটি ১৫-সপ্তাহের একটি সেমিস্টারে ভালোভাবে ভাগ করা হয়েছে।


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.

বইটির একটি সামান্য অস্বাভাবিক দিক হল যে সমকালীনতা, যা অনেক অপারেটিং সিস্টেম বইয়ের শুরুতে থাকে, তা এখানে শিক্ষার্থীদের ভার্চুয়ালাইজেশন সম্পর্কে ধারণা তৈরি না হওয়া পর্যন্ত স্থগিত করা হয়েছে।


You may have noticed there are no slides that go hand-in-hand with the book.

আপনি হয়তো লক্ষ্য করেছেন যে বইটির সাথে কোনো স্লাইড নেই।


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

অপারেটিং সিস্টেমের প্রতি আপনার আগ্রহ জাগানোর জন্য আমরা এই নোটগুলি তৈরি করেছি।


It is a great field, full of exciting and wonderful ideas that have shaped computing history.

এটি একটি দুর্দান্ত ক্ষেত্র, যা উত্তেজনাপূর্ণ এবং বিস্ময়কর ধারণা দ্বারা পরিপূর্ণ যা কম্পিউটিংয়ের ইতিহাসকে রূপ দিয়েছে।


The program prints a 'hello world' message.

এই প্রোগ্রামটি একটি 'হ্যালো ওয়ার্ল্ড' বার্তা প্রিন্ট করে।


The operating system provides a way to create a new process.

অপারেটিং সিস্টেম একটি নতুন প্রক্রিয়া তৈরি করার একটি উপায় সরবরাহ করে।


The child process is an almost exact copy of the calling process.

শিশু প্রক্রিয়াটি কলিং প্রক্রিয়ার প্রায় হুবহু অনুলিপি।


The parent process waits for the child process to finish.

পিতামাতা প্রক্রিয়াটি শিশু প্রক্রিয়াটির সমাপ্তির জন্য অপেক্ষা করে।


The exec() system call transforms the currently running program.

exec() সিস্টেম কলটি বর্তমানে চলমান প্রোগ্রামটিকে রূপান্তরিত করে।


শেল আপনাকে কমান্ড চালানোর অনুমতি দেয়।


The output of the program is redirected to a file.

প্রোগ্রামের আউটপুট একটি ফাইলে পুনর্নির্দেশিত হয়।


UNIX pipes are implemented in a similar way.

ইউনিক্স পাইপগুলি একই রকমভাবে প্রয়োগ করা হয়।


আরও বিস্তারিত জানার জন্য ম্যানুয়াল পৃষ্ঠাগুলি পড়ুন।


The kill() system call is used to send signals to a process.

kill() সিস্টেম কলটি একটি প্রক্রিয়ায় সংকেত পাঠাতে ব্যবহৃত হয়।


The top command displays the processes of the system.

টপ কমান্ড সিস্টেমের প্রক্রিয়াগুলি প্রদর্শন করে।


The OS needs to share the CPU among many jobs.

অপারেটিং সিস্টেমকে অনেক কাজের মধ্যে CPU ভাগ করতে হবে।


The OS must virtualize the CPU efficiently.

অপারেটিং সিস্টেমকে দক্ষতার সাথে CPU ভার্চুয়ালাইজ করতে হবে।


The OS loads the program code into memory.

অপারেটিং সিস্টেম প্রোগ্রামের কোড মেমরিতে লোড করে।


Direct execution has the advantage of being fast.

সরাসরি নির্বাহ দ্রুত হওয়ার সুবিধা রয়েছে।


A process may need to perform restricted operations.

একটি প্রক্রিয়ার সীমাবদ্ধ ক্রিয়াকলাপগুলি সম্পাদন করার প্রয়োজন হতে পারে।


User mode restricts what a process can do.

ব্যবহারকারী মোড একটি প্রক্রিয়া কী করতে পারে তা সীমাবদ্ধ করে।


Kernel mode allows privileged operations.

কার্নেল মোড বিশেষাধিকারপ্রাপ্ত ক্রিয়াকলাপের অনুমতি দেয়।


The hardware assists the OS by providing different modes.

হার্ডওয়্যার বিভিন্ন মোড সরবরাহ করে অপারেটিং সিস্টেমকে সহায়তা করে।


The OS uses hardware support to accomplish its work effectively.

অপারেটিং সিস্টেম তার কাজ কার্যকরভাবে সম্পন্ন করতে হার্ডওয়্যার সমর্থন ব্যবহার করে।


The operating system manages the computer's resources.

অপারেটিং সিস্টেম কম্পিউটারের সম্পদগুলি পরিচালনা করে।


অনুগ্রহ করে ফাইলটি খুলুন।


খবরে একটি বড় ভূমিকম্পের খবর প্রকাশ করা হয়েছে।


The system call allows user programs to access the file system.

সিস্টেম কল ব্যবহারকারী প্রোগ্রামগুলিকে ফাইল সিস্টেমে অ্যাক্সেস করার অনুমতি দেয়।


How can the operating system regain control of the CPU?

অপারেটিং সিস্টেম কীভাবে সিপিইউ-এর নিয়ন্ত্রণ ফিরে পেতে পারে?


The hardware needs to save the caller’s register state.

হার্ডওয়্যারকে অবশ্যই কলকারীর রেজিস্টার অবস্থা সংরক্ষণ করতে হবে।


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

টাইমার ইন্টারাপ্ট অপারেটিং সিস্টেমকে আবার চালানোর ক্ষমতা দেয়।


The context switch is conceptually simple.

প্রসঙ্গে পরিবর্তন ধারণাগতভাবে সহজ।


The OS must inform the hardware of which code to run.

অপারেটিং সিস্টেমকে অবশ্যই হার্ডওয়্যারকে জানাতে হবে কোন কোডটি চালাতে হবে।


The process wishes to issue a system call.

প্রসেসটি একটি সিস্টেম কল ইস্যু করতে চায়।


অপারেটিং সিস্টেম পরিষ্কার করে এবং আমাদের কাজ শেষ হয়।


The machine boots up in privileged mode.

মেশিনটি বিশেষ সুবিধাসম্পন্ন মোডে বুট হয়।


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 OS is not running, how can it do anything at all?

অপারেটিং সিস্টেম চলছে না, তাহলে এটি কীভাবে কিছু করতে পারে?


The kernel initializes the trap table, and the CPU remembers its location.

কার্নেল ট্র্যাপ টেবিলটি আরম্ভ করে এবং সিপিইউ তার অবস্থান মনে রাখে।


The OS has to deal with misbehaving processes.

অপারেটিং সিস্টেমকে খারাপ আচরণকারী প্রক্রিয়াগুলির সাথে মোকাবিলা করতে হয়।


The OS must start the timer, which is of course a privileged operation.

অপারেটিং সিস্টেমকে অবশ্যই টাইমার শুরু করতে হবে, যা অবশ্যই একটি বিশেষ সুবিধাসম্পন্ন অপারেশন।


The hardware saves its state and enters the kernel.

হার্ডওয়্যার তার অবস্থা সংরক্ষণ করে এবং কার্নেলে প্রবেশ করে।


The OS decides to switch from running Process A to Process B.

অপারেটিং সিস্টেম প্রক্রিয়া A থেকে প্রক্রিয়া B তে পরিবর্তন করার সিদ্ধান্ত নেয়।


Innovation was already in place in the early 1970’s.

১৯৭০-এর দশকের গোড়ার দিকেই উদ্ভাবন বিদ্যমান ছিল।


A classic text on software engineering; well worth the read.

সফটওয়্যার ইঞ্জিনিয়ারিং-এর উপর একটি ক্লাসিক পাঠ্য; অবশ্যই পড়া উচিত।


Another great intro to how computer systems work.

কম্পিউটার সিস্টেম কিভাবে কাজ করে তার আরেকটি দারুণ পরিচিতি।


After all, one good way to build up your own knowledge is to hear as many other perspectives as possible, and then develop your own opinion and thoughts on the matter.

সবশেষে, নিজের জ্ঞান বাড়ানোর একটি ভালো উপায় হল অন্যান্য দৃষ্টিকোণগুলি শোনা, এবং তারপরে এই বিষয়ে আপনার নিজস্ব মতামত এবং চিন্তা তৈরি করা।


The Atlas pioneered much of what you see in modern systems.

আধুনিক সিস্টেমে আপনি যা দেখেন, অ্যাটলাস তার অনেক কিছুর পথপ্রদর্শক ছিল।


A nice piece of history on the early development of computer systems.

কম্পিউটার সিস্টেমের প্রাথমিক বিকাশের উপর ইতিহাসের একটি সুন্দর অংশ।


মাল্টিক্সের একটি দুর্দান্ত обзор।


One of our favorite intro to computing systems books.

কম্পিউটিং সিস্টেমের উপর আমাদের পছন্দের পরিচিতিমূলক বইগুলির মধ্যে একটি।


A great summary of UNIX written as it was taking over the world of computing, by the people who wrote it.

যাঁরা এটি লিখেছিলেন, তাঁদের দ্বারা কম্পিউটিং জগৎকে জয় করার সময়ে লেখা UNIX-এর একটি দুর্দান্ত সারসংক্ষেপ।


Yes, a technical manual was the best we could find.

হ্যাঁ, একটি প্রযুক্তিগত ম্যানুয়াল ছিল যা আমরা খুঁজে পেতে পেরেছিলাম সেরা।


But it is fascinating to read these old system documents, and see how much was already in place in the late 1960’s.

কিন্তু এই পুরনো সিস্টেমের নথিগুলো পড়াটা আকর্ষণীয়, এবং দেখা যায় ১৯৬০-এর দশকের শেষের দিকে কত কিছুই ছিল।


The great thing about writing your own class notes: you can advertise your own research.

নিজের ক্লাসের নোট লেখার দারুণ দিক হল: আপনি আপনার নিজের গবেষণা প্রচার করতে পারেন।


ধরুন, আমাদের কাছে একটা পীচ আছে।


What we would like to present to each eater is their own peach, so that they can be happy.

আমরা প্রত্যেক ভোজনকারীর কাছে তাদের নিজস্ব পীচ উপস্থাপন করতে চাই, যাতে তারা খুশি হতে পারে।


So you are sharing the peach, but you don’t even know it?

তাহলে, আপনি পীচটি ভাগ করছেন, কিন্তু আপনি তা জানেনও না?


এটা একটা খারাপ প্রচারণার স্লোগানের মতো শোনাচ্ছে।


Let us take the most basic of resources, the CPU.

আসুন, সবচেয়ে মৌলিক সম্পদ, সিপিইউ-এর উদাহরণ নেওয়া যাক।


Wow! That sounds like magic. Tell me more!

আশ্চর্য! এটা তো জাদুর মতো শোনাচ্ছে। আরও কিছু বলুন!


সময় হলে, তরুণ ছাত্র, সঠিক সময়ে।


The program itself is a lifeless thing: it just sits there on the disk, a bunch of instructions (and maybe some static data), waiting to spring into action.

প্রোগ্রামটি নিজেই একটি প্রাণহীন জিনিস: এটি কেবল ডিস্কে বসে থাকে, একগুচ্ছ নির্দেশাবলী (এবং সম্ভবত কিছু স্ট্যাটিক ডেটা), যা সক্রিয় হওয়ার জন্য অপেক্ষা করে।


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.

সুতরাং, আপনি দেখতে পারেন কিভাবে ফাইলগুলি বিভিন্ন প্রক্রিয়ার মধ্যে শেয়ার করা হয়।


To understand this better, let’s look at some code.

এটি আরও ভালভাবে বুঝতে, আসুন কিছু কোড দেখি।


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.

একটি সিস্টেম কলের খরচ পরিমাপ করা তুলনামূলকভাবে সহজ।


The lmbench benchmark does so by running two processes on a single CPU.

lmbench বেঞ্চমার্ক এটি একটি একক CPU তে দুটি প্রক্রিয়া চালিয়ে করে।


By measuring the cost of communicating like this repeatedly, lmbench can make a good estimate of the cost of a context switch.

এইভাবে বারবার যোগাযোগের খরচ পরিমাপ করে, lmbench একটি কন্টেক্সট সুইচের খরচের একটি ভাল অনুমান করতে পারে।


Fortunately, most operating systems have calls to bind a process to a particular processor.

সৌভাগ্যবশত, বেশিরভাগ অপারেটিং সিস্টেমে একটি নির্দিষ্ট প্রসেসরের সাথে একটি প্রক্রিয়াকে আবদ্ধ করার জন্য কল রয়েছে।


By now low-level mechanisms of running processes (e.g., context switching) should be clear.

এতক্ষণে প্রক্রিয়া চালানোর নিম্ন-স্তরের কৌশলগুলি (যেমন, কন্টেক্সট সুইচিং) পরিষ্কার হওয়া উচিত।


We will now do just that, presenting a series of scheduling policies that various smart and hard-working people have developed over the years.

আমরা এখন ঠিক তাই করব, বিভিন্ন স্মার্ট এবং কঠোর পরিশ্রমী লোকেরা বছরের পর বছর ধরে তৈরি করা সময়সূচী নীতিগুলির একটি সিরিজ উপস্থাপন করব।


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

আসলে, সময়সূচীর উৎপত্তিস্থল কম্পিউটার সিস্টেমের আগের।


Determining the workload is a critical part of building policies.

কাজের চাপ নির্ধারণ করা নীতি তৈরির একটি গুরুত্বপূর্ণ অংশ।


Each job runs for the same amount of time.

প্রতিটি কাজ একই সময়ের জন্য চলে।


সমস্ত কাজ একই সময়ে আসে।


প্রতিটি কাজের রানটাইম জানা যায়।


A metric is just something that we use to measure something.

একটি মেট্রিক হল এমন কিছু যা আমরা কিছু পরিমাপ করতে ব্যবহার করি।


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.

একটি কাজের টার্নআরাউন্ড সময়কে সেই সময় হিসাবে সংজ্ঞায়িত করা হয় যখন কাজটি সম্পন্ন হয় বিয়োগ সেই সময় যখন কাজটি সিস্টেমে আসে।


Because we have assumed that all jobs arrive at the same time, for now T arrival = 0 and hence T turnaround = T completion.

যেহেতু আমরা ধরে নিয়েছি যে সমস্ত কাজ একই সময়ে আসে, তাই এখন T arrival = 0 এবং সেইজন্য T turnaround = T completion।


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.

এই সমস্যাটিকে সাধারণত কনভয় প্রভাব হিসাবে উল্লেখ করা হয়।


It turns out that a very simple approach solves this problem.

দেখা যাচ্ছে যে একটি খুব সহজ পদ্ধতি এই সমস্যার সমাধান করে।


এই কাগজ লটারি সময়সূচী নিয়ে আলোচনা করে।


Lottery scheduling uses randomized algorithms.

লটারি সময়সূচী এলোমেলো অ্যালগরিদম ব্যবহার করে।


This is a good example for a Ph.D. dissertation.

এটি একটি পিএইচডি অভিসন্দর্ভের জন্য একটি ভাল উদাহরণ।


The paper is about memory resource management.

কাগজটি মেমরি রিসোর্স ম্যানেজমেন্ট নিয়ে।


The program allows you to see how a lottery scheduler works.

এই প্রোগ্রামটি আপনাকে দেখায় কিভাবে একটি লটারি সময়সূচী কাজ করে।


Compute the solutions for simulations with 3 jobs.

3টি কাজের সাথে সিমুলেশনের সমাধানগুলি গণনা করুন।


What happens when the number of tickets is imbalanced?

টিকিটের সংখ্যা ভারসাম্যহীন হলে কি হয়?


Multi-threaded applications can run faster.

মাল্টি-থ্রেডেড অ্যাপ্লিকেশনগুলি দ্রুত চলতে পারে।


This chapter introduces multiprocessor scheduling.

এই অধ্যায়টি মাল্টিপ্রসেসর সময়সূচী নিয়ে আলোচনা করে।


Multiprocessor systems are increasingly commonplace.

মাল্টিপ্রসেসর সিস্টেমগুলি ক্রমশ সাধারণ হচ্ছে।


ক্যাশে ছোট, দ্রুত মেমরি।


The system fetches the value from main memory.

সিস্টেম প্রধান মেমরি থেকে মানটি নিয়ে আসে।


This general problem is called cache coherence.

এই সাধারণ সমস্যাটিকে ক্যাশে কোহেরেন্স বলা হয়।


Hardware can ensure the right thing happens.

হার্ডওয়্যার নিশ্চিত করতে পারে যে সঠিক জিনিসটি ঘটবে।


Do programs have to worry about shared data?

শেয়ার করা ডেটা নিয়ে প্রোগ্রামগুলিকে চিন্তা করতে হবে?


Mutual exclusion primitives should be used.

মিউচুয়াল এক্সক্লুশন আদিম ব্যবহার করা উচিত।


লক কর্মক্ষমতা ব্যাপকভাবে হ্রাস করতে পারে।


A process builds up state in the caches.

একটি প্রক্রিয়া ক্যাশেগুলিতে অবস্থা তৈরি করে।


The single-queue approach has shortcomings.

একক-সারি পদ্ধতির কিছু দুর্বলতা রয়েছে।


MQMS intrinsically provides cache affinity.

MQMS সহজাতভাবে ক্যাশে আসক্তি প্রদান করে।


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

অপারেটিং সিস্টেমটি খুব কমই জানে যে প্রতিটি প্রক্রিয়ার জন্য কোনটি সেরা।


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

এই ধরনের ইঙ্গিতগুলি অপারেটিং সিস্টেমের অনেক অংশে কার্যকর, যার মধ্যে শিডিউলারও রয়েছে।


If Priority(A) > Priority(B), A runs (B doesn’t).

যদি অগ্রাধিকার(A) > অগ্রাধিকার(B), A চলে (B চলে না)।


When a job enters the system, it is placed at the highest priority.

যখন কোনও কাজ সিস্টেমে প্রবেশ করে, তখন এটিকে সর্বোচ্চ অগ্রাধিকার দেওয়া হয়।


MLFQ is interesting because it observes the execution of a job and prioritizes it accordingly.

MLFQ আকর্ষণীয় কারণ এটি একটি কাজের কার্যকরতা পর্যবেক্ষণ করে এবং সেই অনুযায়ী অগ্রাধিকার দেয়।


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

অনেক সিস্টেম তাদের বেস শিডিউলার হিসাবে MLFQ-এর একটি রূপ ব্যবহার করে।


The basic idea is quite simple: tickets represent the share of a resource.

মূল ধারণাটি বেশ সহজ: টিকিটগুলি একটি সম্পদের অংশকে উপস্থাপন করে।


Imagine two processes, A and B, and further that A has 75 tickets while B has only 25.

ধরুন দুটি প্রক্রিয়া আছে, A এবং B, এবং আরও ধরুন A-এর 75টি টিকিট আছে যেখানে B-এর মাত্র 25টি আছে।


The scheduler then picks a winning ticket, which is a number from 0 to 99.

তারপরে শিডিউলার একটি বিজয়ী টিকিট বাছাই করে, যা 0 থেকে 99 পর্যন্ত একটি সংখ্যা।


The use of randomness in lottery scheduling leads to a probabilistic correctness.

লটারি শিডিউলিংয়ে এলোমেলোতার ব্যবহার একটি সম্ভাব্য নির্ভুলতার দিকে পরিচালিত করে।


One of the most powerful mechanisms is the ticket.

সবচেয়ে শক্তিশালী প্রক্রিয়াগুলির মধ্যে একটি হল টিকিট।


Currency allows a user to allocate tickets among their own jobs.

কারেন্সি ব্যবহারকারীকে তাদের নিজস্ব কাজের মধ্যে টিকিট বরাদ্দ করতে দেয়।


With transfers, a process can temporarily hand off its tickets to another process.

ট্রান্সফারের মাধ্যমে, একটি প্রক্রিয়া অস্থায়ীভাবে তার টিকিট অন্য একটি প্রক্রিয়ার কাছে হস্তান্তর করতে পারে।


Ticket inflation can sometimes be a useful technique.

টিকিট মুদ্রাস্ফীতি কখনও কখনও একটি দরকারী কৌশল হতে পারে।


The code walks the list of processes, adding each ticket value to counter.

কোডটি প্রক্রিয়াগুলির তালিকা ধরে, প্রতিটি টিকিটের মান কাউন্টারে যোগ করে।


To make a scheduling decision, we first have to pick a random number.

একটি শিডিউলিং সিদ্ধান্ত নেওয়ার জন্য, আমাদের প্রথমে একটি এলোমেলো সংখ্যা বাছাই করতে হবে।


The ordering does not affect the correctness of the algorithm.

ক্রমটি অ্যালগরিদমের সঠিকতাকে প্রভাবিত করে না।


We define a simple unfairness metric, U, which is the time the first job completes divided by the time the second job completes.

আমরা একটি সাধারণ অন্যায় মেট্রিক, U সংজ্ঞায়িত করি, যা প্রথম কাজটি সম্পন্ন হওয়ার সময়কে দ্বিতীয় কাজটি সম্পন্ন হওয়ার সময় দ্বারা ভাগ করা হয়।


How to assign tickets is a tough problem.

কিভাবে টিকিট বরাদ্দ করা যায় তা একটি কঠিন সমস্যা।


Stride scheduling gets them exactly right at the end of each scheduling cycle.

স্ট্রাইড শিডিউলিং প্রতিটি শিডিউলিং চক্রের শেষে তাদের একেবারে সঠিক করে তোলে।


When possible, overlap operations to maximize the utilization of systems.

সম্ভব হলে, সিস্টেমের ব্যবহার সর্বাধিক করতে অপারেশনগুলি ওভারল্যাপ করুন।


Overlap is useful in many different domains, including when performing disk I/O or sending messages to remote machines.

ডিস্ক I/O করার সময় বা দূরবর্তী মেশিনে বার্তা পাঠানোর সময় সহ বিভিন্ন ডোমেনে ওভারল্যাপ উপযোগী।


Starting the operation and then switching to other work is a good idea, and improved the overall utilization and efficiency of the system.

অপারেশন শুরু করা এবং তারপর অন্য কাজে যাওয়া একটি ভালো ধারণা, যা সিস্টেমের সামগ্রিক ব্যবহার এবং দক্ষতা উন্নত করে।


সুতরাং, সিস্টেমটি আরও ভালভাবে ব্যবহৃত হয়।


By treating each CPU burst as a job, the scheduler makes sure processes that are “interactive” get run frequently.

প্রতিটি CPU বিস্ফোরণকে একটি কাজ হিসাবে বিবেচনা করে, শিডিউলার নিশ্চিত করে যে “ইন্টারেক্টিভ” প্রক্রিয়াগুলি ঘন ঘন চলে।


While those interactive jobs are performing I/O, other CPU-intensive jobs run, thus better utilizing the processor.

যখন সেই ইন্টারেক্টিভ কাজগুলি I/O সম্পাদন করে, তখন অন্যান্য CPU-ইনটেনসিভ কাজগুলি চলে, এইভাবে প্রসেসরকে আরও ভালভাবে ব্যবহার করে।


The OS usually knows very little about the length of each job.

সাধারণত, OS প্রতিটি কাজের দৈর্ঘ্য সম্পর্কে খুব কমই জানে।


Thus, how can we build an approach that behaves like SJF/STCF without such a priori knowledge?

সুতরাং, এই ধরনের পূর্ব জ্ঞান ছাড়াই আমরা কীভাবে SJF/STCF-এর মতো আচরণ করে এমন একটি পদ্ধতির তৈরি করতে পারি?


We have introduced the basic ideas behind scheduling and developed two families of approaches.

আমরা শিডিউলিংয়ের পেছনের মৌলিক ধারণাগুলি উপস্থাপন করেছি এবং দুই ধরনের পদ্ধতির বিকাশ করেছি।


The first runs the shortest job remaining and thus optimizes turnaround time; the second alternates between all jobs and thus optimizes response time.

প্রথমটি অবশিষ্ট সবচেয়ে ছোট কাজটি চালায় এবং এইভাবে টার্নআউন্ড সময়কে অপটিমাইজ করে; দ্বিতীয়টি সমস্ত কাজের মধ্যে বিকল্পভাবে কাজ করে এবং এইভাবে প্রতিক্রিয়া সময়কে অপটিমাইজ করে।


We have also seen how we might incorporate I/O into the picture, but have still not solved the problem of the fundamental inability of the OS to see into the future.

আমরা আরও দেখেছি কিভাবে আমরা ছবিতে I/O অন্তর্ভুক্ত করতে পারি, কিন্তু OS-এর ভবিষ্যৎ দেখার মৌলিক অক্ষমতার সমস্যাটি এখনও সমাধান করতে পারিনি।


Shortly, we will see how to overcome this problem, by building a scheduler that uses the recent past to predict the future.

শীঘ্রই, আমরা দেখব কিভাবে এই সমস্যাটি কাটিয়ে ওঠা যায়, এমন একটি শিডিউলার তৈরি করে যা ভবিষ্যৎ ভবিষ্যদ্বাণী করতে অতীতের ডেটা ব্যবহার করে।


This scheduler is known as the multi-level feedback queue, and it is the topic of the next chapter.

এই শিডিউলারটি মাল্টি-লেভেল ফিডব্যাক সারি হিসাবে পরিচিত এবং এটি পরবর্তী অধ্যায়ের বিষয়।


The fundamental problem MLFQ tries to address is two-fold.

MLFQ যে মৌলিক সমস্যাটির সমাধান করার চেষ্টা করে তা দ্বিমুখী।


First, it would like to optimize turnaround time, which, as we saw in the previous note, is done by running shorter jobs first.

প্রথমত, এটি টার্নআউন্ড সময়কে অপটিমাইজ করতে চায়, যা, আমরা আগের নোটে দেখেছি, ছোট কাজগুলি প্রথমে চালানোর মাধ্যমে করা হয়।


Second, MLFQ would like to make a system feel responsive to interactive users.

দ্বিতীয়ত, MLFQ একটি সিস্টেমকে ইন্টারেক্টিভ ব্যবহারকারীদের প্রতি প্রতিক্রিয়াশীল করতে চায়।


Thus, our problem: given that we in general do not know anything about a process, how can we build a scheduler to achieve these goals?

সুতরাং, আমাদের সমস্যা: যেহেতু আমরা সাধারণত একটি প্রক্রিয়া সম্পর্কে কিছুই জানি না, কিভাবে আমরা এই লক্ষ্যগুলি অর্জনের জন্য একটি শিডিউলার তৈরি করতে পারি?


How can the scheduler learn, as the system runs, the characteristics of the jobs it is running, and thus make better scheduling decisions?

সিস্টেমটি চলার সাথে সাথে শিডিউলার কীভাবে এটি চলমান কাজগুলির বৈশিষ্ট্যগুলি শিখতে পারে এবং এইভাবে আরও ভাল শিডিউলিং সিদ্ধান্ত নিতে পারে?


The multi-level feedback queue is an excellent example of a system that learns from the past to predict the future.

মাল্টি-লেভেল ফিডব্যাক সারি এমন একটি সিস্টেমের একটি চমৎকার উদাহরণ যা ভবিষ্যৎ ভবিষ্যদ্বাণী করতে অতীত থেকে শেখে।


Such approaches work when jobs have phases of behavior and are thus predictable.

এই ধরনের পদ্ধতি কাজ করে যখন কাজগুলির আচরণের পর্যায় থাকে এবং এইভাবে সেগুলি অনুমানযোগ্য হয়।


অপারেটিং সিস্টেম সিপিইউকে ভার্চুয়ালাইজ করে।


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

আমি অপারেটিং সিস্টেম কীভাবে সিপিইউকে ভার্চুয়ালাইজ করে সে সম্পর্কে সামান্য শিখেছি।


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

অপারেটিং সিস্টেম নিশ্চিত করতে চায় যে এটি মেশিনের দায়িত্বে থাকে।


Paranoia rules the day, and certainly keeps the OS in charge of the machine.

সন্দেহবাদ এখানে প্রধান, এবং অবশ্যই অপারেটিং সিস্টেমকে মেশিনের দায়িত্বে রাখে।


অপারেটিং সিস্টেম বেশ সন্দেহপ্রবণ।


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

এটি নিশ্চিত করতে চায় যে এটি মেশিনের দায়িত্বে থাকে।


The OS will give each program the view that it has its own large and private memory.

অপারেটিং সিস্টেম প্রতিটি প্রোগ্রামকে এই ধারণা দেবে যে এটির নিজস্ব বৃহৎ এবং ব্যক্তিগত মেমরি রয়েছে।


মেমরি ভার্চুয়ালাইজ করা জটিল।


The OS is just providing an illusion to each process.

অপারেটিং সিস্টেম কেবল প্রতিটি প্রক্রিয়ার জন্য একটি বিভ্রম তৈরি করছে।


The OS will turn these pretend virtual addresses into real physical addresses.

অপারেটিং সিস্টেম এই ভান করা ভার্চুয়াল ঠিকানাগুলিকে আসল শারীরিক ঠিকানায় পরিণত করবে।


Every address generated by a user program is a virtual address.

একটি ব্যবহারকারী প্রোগ্রাম দ্বারা তৈরি প্রতিটি ঠিকানা একটি ভার্চুয়াল ঠিকানা।


The OS should implement virtual memory in a way that is invisible to the running program.

অপারেটিং সিস্টেমকে এমনভাবে ভার্চুয়াল মেমরি প্রয়োগ করতে হবে যা চলমান প্রোগ্রামের কাছে অদৃশ্য।


The program really isn’t in memory at physical addresses.

প্রকৃতপক্ষে প্রোগ্রামটি শারীরিক ঠিকানায় মেমরিতে নেই।


The OS should strive to make the virtualization as efficient as possible.

অপারেটিং সিস্টেমকে ভার্চুয়ালাইজেশনকে যথাসম্ভব দক্ষ করার চেষ্টা করতে হবে।


The OS should make sure to protect processes from one another.

অপারেটিং সিস্টেমকে অবশ্যই একটি প্রক্রিয়াকে অন্য প্রক্রিয়া থেকে রক্ষা করতে হবে।


The OS will do this for many processes at once.

অপারেটিং সিস্টেম এটি একবারে অনেক প্রক্রিয়ার জন্য করবে।


The program behaves as if it has its own private physical memory.

প্রোগ্রামটি এমনভাবে আচরণ করে যেন এটির নিজস্ব ব্যক্তিগত শারীরিক মেমরি রয়েছে।


The OS is responsible for providing the illusion of a large, sparse, private address space to programs.

অপারেটিং সিস্টেম প্রোগ্রামগুলিতে একটি বৃহৎ, বিক্ষিপ্ত, ব্যক্তিগত ঠিকানা স্থানের বিভ্রম প্রদানের জন্য দায়ী।


We have seen the introduction of a major OS subsystem: virtual memory.

আমরা একটি প্রধান অপারেটিং সিস্টেম সাবসিস্টেমের প্রবর্তন দেখেছি: ভার্চুয়াল মেমরি।


The entire approach requires a great deal of mechanism as well as some critical policies to work.

পুরো পদ্ধতির জন্য প্রচুর পদ্ধতির পাশাপাশি কিছু গুরুত্বপূর্ণ নীতি প্রয়োজন।


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

ইউনিক্স/সি প্রোগ্রামগুলিতে, শক্তিশালী এবং নির্ভরযোগ্য সফ্টওয়্যার তৈরি করতে মেমরি বরাদ্দ এবং পরিচালনা করা বোঝা অত্যন্ত গুরুত্বপূর্ণ।


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

সংকলক বাকিটা করে, নিশ্চিত করে যে আপনি 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.

দীর্ঘ-জীবন মেমরির এই প্রয়োজনীয়তাই আমাদের দ্বিতীয় প্রকারের মেমরির দিকে নিয়ে যায়, যাকে হিপ মেমরি বলা হয়।


A heavy responsibility, no doubt! And certainly the cause of many bugs.

নিঃসন্দেহে, এটি একটি বিশাল দায়িত্ব! এবং অবশ্যই এটি অনেক বাগ-এর কারণ।


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.

malloc() কলটি বেশ সহজ: আপনি এটিকে একটি আকার দেন যা হিপে কিছু জায়গার জন্য অনুরোধ করে।


The manual page shows what you need to do to use malloc.

ম্যানুয়াল পৃষ্ঠাটি দেখায় যে malloc ব্যবহার করার জন্য আপনার কী করা দরকার।


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

এই তথ্য থেকে, আপনি দেখতে পারেন যে malloc ব্যবহার করার জন্য আপনাকে যা করতে হবে তা হল হেডার ফাইল stdlib.h অন্তর্ভুক্ত করা।


In fact, you don’t really need to even do this, as the C library, which all C programs link with by default, has the code for malloc() inside of it.

আসলে, আপনার এটি করারও দরকার নেই, কারণ সি লাইব্রেরি, যার সাথে ডিফল্টভাবে সমস্ত সি প্রোগ্রাম লিঙ্ক করে, তার ভিতরে malloc() এর কোড রয়েছে।


For example, to allocate space for a double-precision floating point value, you simply do this:

উদাহরণস্বরূপ, একটি ডবল-নির্ভুলতা ফ্লোটিং পয়েন্ট ভ্যালুর জন্য স্থান বরাদ্দ করতে, আপনি কেবল এটি করুন:


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

আপনি যদি নিশ্চিত না হন যে আপনি যে কিছু রুটিন বা অপারেটর ব্যবহার করছেন তা কীভাবে আচরণ করে, তবে এটি ব্যবহার করে দেখার বিকল্প নেই।


কিছু কোড লিখুন এবং এটি পরীক্ষা করুন!


This invocation of malloc() uses the sizeof() operator to request the right amount of space.

malloc() এর এই আহ্বানটি সঠিক পরিমাণ স্থান অনুরোধ করতে sizeof() অপারেটর ব্যবহার করে।


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

প্রথম লাইনে, আমরা 10টি পূর্ণসংখ্যার একটি অ্যারের জন্য স্থান ঘোষণা করেছি, যা চমৎকার।


Another place to be careful is with strings.

স্ট্রিংগুলির সাথে সতর্ক হওয়ার আরেকটি জায়গা রয়েছে।


When declaring space for a string, use the following idiom: malloc(strlen(s) + 1), which gets the length of the string using the function strlen(), and adds 1 to it in order to make room for the end-of-string character.

একটি স্ট্রিংয়ের জন্য স্থান ঘোষণা করার সময়, নিম্নলিখিত বাগধারা ব্যবহার করুন: malloc(strlen(s) + 1), যা strlen() ফাংশন ব্যবহার করে স্ট্রিংটির দৈর্ঘ্য পায় এবং স্ট্রিং-এর শেষ অক্ষরের জন্য স্থান তৈরি করতে এটির সাথে 1 যোগ করে।


The programmer further helps out by using what is called a cast.

প্রোগ্রামার আরও সাহায্য করে একটি কাস্ট ব্যবহার করে।


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 OS must get involved at key points to set up the hardware so that the correct translations take place.

সঠিক অনুবাদগুলি সম্পন্ন করার জন্য, অপারেটিং সিস্টেমকে হার্ডওয়্যার সেট আপ করতে হবে এবং গুরুত্বপূর্ণ বিষয়গুলিতে হস্তক্ষেপ করতে হবে।


Through virtualization, the OS (with the hardware’s help) turns the ugly machine reality into something that is a useful, powerful, and easy to use abstraction.

ভার্চুয়ালাইজেশনের মাধ্যমে, অপারেটিং সিস্টেম (হার্ডওয়্যারের সহায়তায়) একটি কুৎসিত মেশিনের বাস্তবতাকে একটি উপযোগী, শক্তিশালী এবং সহজে ব্যবহারযোগ্য বিমূর্ততায় পরিণত করে।


Don’t like the idea of the OS laughing at you? Well, you may be out of luck then; that’s just how the OS rolls.

অপারেটিং সিস্টেম আপনাকে নিয়ে হাসছে, এটা ভালো লাগছে না? তাহলে আপনার কপাল খারাপ; অপারেটিং সিস্টেম এভাবেই কাজ করে।


We will also assume, for simplicity, that the size of the address space is not too big.

সহজ করার জন্য, আমরা ধরে নেব যে অ্যাড্রেস স্পেসের আকার খুব বড় নয়।


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

ঠিকানা অনুবাদ কিভাবে করতে হয় তা ভালোভাবে বুঝতে এবং কেন আমাদের এই ধরনের পদ্ধতির প্রয়োজন, আসুন একটি সাধারণ উদাহরণ দেখি।


The compiler turns this line of code into assembly, which might look something like this (in x86 assembly).

সংকলক কোডের এই লাইনটিকে অ্যাসেম্বলিতে পরিণত করে, যা এইরকম দেখতে হতে পারে (x86 অ্যাসেম্বলিতে)।


This code snippet is relatively straightforward; it presumes that the address of x has been placed in the register ebx.

এই কোড অংশটি তুলনামূলকভাবে সহজ; এটি ধরে নেয় যে x-এর ঠিকানা ebx রেজিস্টারে স্থাপন করা হয়েছে।


From the program’s perspective, its address space starts at address 0 and grows to a maximum of 16 KB.

প্রোগ্রামের দৃষ্টিকোণ থেকে, এর ঠিকানা স্থান 0 ঠিকানা থেকে শুরু হয় এবং সর্বোচ্চ 16 KB পর্যন্ত বৃদ্ধি পায়।


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 program is written and compiled as if it is loaded at address zero.

প্রতিটি প্রোগ্রাম এমনভাবে লেখা এবং সংকলিত হয় যেন এটি শূন্য ঠিকানায় লোড করা হয়েছে।


Now, when any memory reference is generated by the process, it is translated by the processor in the following manner:

এখন, যখনই প্রক্রিয়া দ্বারা কোনো মেমরি রেফারেন্স তৈরি হয়, তখন এটি নিম্নলিখিত পদ্ধতিতে প্রসেসর দ্বারা অনুবাদ করা হয়:


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.

ডাইনামিক রিলোকেশন-এর মাধ্যমে, আমরা দেখতে পারি সামান্য হার্ডওয়্যার কীভাবে অনেক দূর যেতে পারে।


Namely, a base register is used to transform virtual addresses (generated by the program) into physical addresses.

অর্থাৎ, একটি বেস রেজিস্টার ভার্চুয়াল ঠিকানাগুলিকে (প্রোগ্রাম দ্বারা তৈরি) ভৌত ঠিকানায় রূপান্তর করতে ব্যবহৃত হয়।


If a process generates a virtual address that is greater than the bounds, or one that is negative, the CPU will raise an exception, and the process will likely be terminated.

যদি কোনো প্রক্রিয়া এমন একটি ভার্চুয়াল ঠিকানা তৈরি করে যা সীমার চেয়ে বড়, অথবা ঋণাত্মক হয়, তবে CPU একটি ব্যতিক্রম তৈরি করবে এবং প্রক্রিয়াটি সম্ভবত বন্ধ হয়ে যাবে।


The OS must track which parts of free memory are not in use, so as to be able to allocate memory to processes.

অপারেটিং সিস্টেমকে ট্র্যাক করতে হবে যে মুক্ত মেমরির কোন অংশগুলি ব্যবহার করা হচ্ছে না, যাতে প্রক্রিয়াগুলিতে মেমরি বরাদ্দ করা যায়।


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

একটি প্রক্রিয়া তৈরি হওয়ার সময়, অপারেটিং সিস্টেমকে পদক্ষেপ নিতে হবে, মেমরিতে তার ঠিকানা স্থানের জন্য জায়গা খুঁজে বের করতে হবে।


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

আমরা ভার্চুয়ালাইজেশনের একটি বিশেষ রূপও দেখেছি, যা বেস এবং বাউন্ডস বা ডাইনামিক রিলোকেশন নামে পরিচিত।


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; unfortunately, it is fragmented into two chunks of size 10 each.

এই ক্ষেত্রে, উপলব্ধ মোট খালি স্থান 20 বাইট; দুর্ভাগ্যবশত, এটি 10 বাইটের দুটি অংশে বিভক্ত।


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

ফলস্বরূপ, 15 বাইটের একটি অনুরোধ ব্যর্থ হবে যদিও 20 বাইট খালি আছে।


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

পরিবর্তনশীল আকারের অনুরোধগুলি পূরণ করার সময় কীভাবে খালি স্থান পরিচালনা করা উচিত?


What strategies can be used to minimize fragmentation?

খন্ডবিখন্ডতা কমাতে কি কৌশল ব্যবহার করা যেতে পারে?


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, which is the number of bytes requested by the application.

বিশেষ করে, void * malloc(size t size) একটি একক প্যারামিটার নেয়, size, যা অ্যাপ্লিকেশন দ্বারা অনুরোধ করা বাইটের সংখ্যা।


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.

ইন্টারফেসের প্রভাব লক্ষ্য করুন: ব্যবহারকারী, স্থানটি মুক্ত করার সময়, লাইব্রেরিকে এর আকার সম্পর্কে অবহিত করে না।


The space that this library manages is known historically as the heap, and the generic data structure used to manage free space in the heap is some kind of free list.

এই লাইব্রেরি দ্বারা পরিচালিত স্থানটি ঐতিহাসিকভাবে হিপ হিসাবে পরিচিত, এবং হিপে খালি স্থান পরিচালনা করতে ব্যবহৃত সাধারণ ডেটা কাঠামো হল এক ধরণের মুক্ত তালিকা।


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.

অবশ্যই, বরাদ্দকারীরা অভ্যন্তরীণ খন্ডবিখন্ডতার সমস্যাও পেতে পারে।


We’ll also assume that once memory is handed out to a client, it cannot be relocated to another location in memory.

আমরা আরও ধরে নেব যে একবার মেমরি ক্লায়েন্টের কাছে হস্তান্তর করা হলে, এটি মেমরির অন্য স্থানে স্থানান্তরিত করা যাবে না।


For example, if a program calls malloc() and is given a pointer to some space within the heap, that memory region is essentially “owned” by the program.

উদাহরণস্বরূপ, যদি একটি প্রোগ্রাম malloc() কল করে এবং হিপের মধ্যে কিছু স্থানের একটি পয়েন্টার দেওয়া হয়, তবে সেই মেমরি অঞ্চলটি মূলত প্রোগ্রামের


Compaction could, however, be used in the OS to deal with fragmentation when implementing segmentation.

যাইহোক, সেগমেন্টেশন বাস্তবায়নের সময় খন্ডবিখন্ডতা মোকাবেলা করার জন্য অপারেটিং সিস্টেমে কমপ্যাকশন ব্যবহার করা যেতে পারে।


Finally, we’ll assume that the allocator manages a contiguous region of bytes.

পরিশেষে, আমরা ধরে নেব যে বরাদ্দকারী বাইটের একটি সংলগ্ন অঞ্চল পরিচালনা করে।


First, we’ll discuss the basics of splitting and coalescing, common techniques in most any allocator.

প্রথমত, আমরা বিভাজন এবং একত্রীকরণের মূল বিষয়গুলি নিয়ে আলোচনা করব, যা প্রায় যেকোনো বরাদ্দকারীর সাধারণ কৌশল।


A free list contains a set of elements that describe the free space still remaining in the heap.

একটি মুক্ত তালিকায় এমন উপাদানগুলির একটি সেট রয়েছে যা এখনও হিপে অবশিষ্ট খালি স্থান বর্ণনা করে।


Thus, assume the following 30-byte heap: freeusedfree 0102030

সুতরাং, নিম্নলিখিত 30-বাইট হিপটি ধরুন: freeusedfree 0102030


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?

ধারণাটি সহজ: আমাদের MMU-তে কেবল একটি বেস এবং বাউন্ডস জোড়া রাখার পরিবর্তে, কেন ঠিকানা স্থানের প্রতিটি লজিক্যাল সেগমেন্টের জন্য একটি বেস এবং বাউন্ডস জোড়া থাকবে না?


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, and thus avoid filling physical memory with unused virtual address space.

সেগমেন্টেশন অপারেটিং সিস্টেমকে যা করতে দেয় তা হল ভৌত মেমরির বিভিন্ন অংশে এই সেগমেন্টগুলির প্রত্যেকটিকে স্থাপন করা, এবং এইভাবে অব্যবহৃত ভার্চুয়াল ঠিকানা স্থান দিয়ে ভৌত মেমরি পূরণ করা এড়ানো।


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.

সেগমেন্টেশন সমর্থন করার জন্য আমাদের MMU-তে প্রয়োজনীয় হার্ডওয়্যার কাঠামোটি আপনি যা আশা করবেন ঠিক তেমন।


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-এর (যা কোড সেগমেন্টে রয়েছে) একটি রেফারেন্স তৈরি করা হয়েছে।


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.

আমাদের প্রথমে যা করতে হবে তা হল হিপের মধ্যে অফসেট বের করা, অর্থাৎ, এই সেগমেন্টের কোন বাইট(গুলি) ঠিকানাটিকে নির্দেশ করে।


What if we tried to refer to an illegal address, such as 7KB which is beyond the end of the heap?

যদি আমরা একটি অবৈধ ঠিকানা উল্লেখ করার চেষ্টা করি, যেমন 7KB যা হিপের শেষের বাইরে?


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।


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.

হার্ডওয়্যারটি বুঝতে পারে যে সেগমেন্টগুলি নেতিবাচক দিকে বৃদ্ধি পেতে পারে, হার্ডওয়্যারকে এখন এই ধরনের ভার্চুয়াল ঠিকানাগুলিকে সামান্য ভিন্নভাবে অনুবাদ করতে হবে।


As support for segmentation grew, system designers soon realized that they could realize new types of efficiencies with a little more hardware support.

সেগমেন্টেশনের জন্য সমর্থন বাড়ার সাথে সাথে, সিস্টেম ডিজাইনাররা শীঘ্রই বুঝতে পারলেন যে তারা সামান্য বেশি হার্ডওয়্যার সমর্থন সহ নতুন ধরণের দক্ষতা উপলব্ধি করতে পারে।


Engineers like Jeff Bonwick are the heart of Silicon Valley.

জেফ বনউইকের মতো প্রকৌশলীরা সিলিকন ভ্যালির কেন্দ্রবিন্দু।


Behind almost any great product or technology is a human who is way above average in their talents.

প্রায় যেকোনো মহান পণ্য বা প্রযুক্তির পিছনে এমন একজন মানুষ আছেন যিনি তাদের প্রতিভায় গড়পড়তা থেকে অনেক উপরে।


This is why, still today, one or two people can start a company that changes the face of the world forever.

এজন্যই, আজও, এক বা দুইজন ব্যক্তি এমন একটি সংস্থা শুরু করতে পারে যা চিরকালের জন্য বিশ্বের চেহারা পরিবর্তন করে দেয়।


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

কঠোর পরিশ্রম করুন এবং আপনিও এমন একজন “100x” ব্যক্তি হতে পারেন।


Failing that, work with such a person; you’ll learn more in a day than most learn in a month.

যদি তা না পারেন, তবে এমন একজন ব্যক্তির সাথে কাজ করুন; আপনি একদিনে যা শিখবেন, তা অনেকে এক মাসেও শেখে না।


The slab allocator also goes beyond most segregated list approaches by keeping free objects on the lists in a pre-initialized state.

স্লাব বরাদ্দকারী প্রাক-প্রারম্ভিক অবস্থায় তালিকায় বিনামূল্যে বস্তুগুলি রেখে বেশিরভাগ পৃথকীকৃত তালিকা পদ্ধতির বাইরেও যায়।


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

যখন মেমরির জন্য অনুরোধ করা হয়, তখন বিনামূল্যে স্থানের অনুসন্ধান পুনরাবৃত্তিমূলকভাবে বিনামূল্যে স্থানকে দুই ভাগে ভাগ করে।


At this point, the requested block is returned to the user.

এই সময়ে, অনুরোধ করা ব্লকটি ব্যবহারকারীর কাছে ফেরত দেওয়া হয়।


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

বন্ধু বরাদ্দের সৌন্দর্য্য খুঁজে পাওয়া যায় যখন সেই ব্লকটি মুক্ত হয়।


When returning the 8KB block to the free list, the allocator checks whether the “buddy” 8KB is free.

8KB ব্লকটি বিনামূল্যে তালিকায় ফেরত দেওয়ার সময়, বরাদ্দকারী পরীক্ষা করে যে “বন্ধু” 8KB বিনামূল্যে আছে কিনা।


The reason buddy allocation works so well is that it is simple to determine the buddy of a particular block.

বন্ধু বরাদ্দ এত ভালো কাজ করার কারণ হল একটি নির্দিষ্ট ব্লকের বন্ধু নির্ধারণ করা সহজ।


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.

উপরের বর্ণিত অনেক পদ্ধতির একটি প্রধান সমস্যা হল তাদের স্কেলিংয়ের অভাব।


Given that modern systems often have multiple processors and run multi-threaded workloads, it is not surprising that a lot of effort has been spent making allocators work well on multiprocessor-based systems.

যেহেতু আধুনিক সিস্টেমে প্রায়শই একাধিক প্রসেসর থাকে এবং মাল্টি-থ্রেডেড ওয়ার্কলোড চলে, তাই এতে আশ্চর্যের কিছু নেই যে মাল্টিপ্রসেসর-ভিত্তিক সিস্টেমে বরাদ্দকারীদের ভালোভাবে কাজ করানোর জন্য অনেক প্রচেষ্টা ব্যয় করা হয়েছে।


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

এই অধ্যায়ে, আমরা মেমরি বরাদ্দকারীর সবচেয়ে প্রাথমিক রূপ নিয়ে আলোচনা করেছি।


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

এই ধরনের বরাদ্দকারী সর্বত্র বিদ্যমান, আপনার লেখা প্রতিটি C প্রোগ্রামের সাথে যুক্ত।


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

একটি দ্রুত, স্থান-দক্ষ, স্কেলযোগ্য বরাদ্দকারী তৈরি করা যা বিস্তৃত কর্মপ্রবাহের জন্য ভাল কাজ করে, আধুনিক কম্পিউটার সিস্টেমে একটি চলমান চ্যালেঞ্জ হিসাবে রয়ে গেছে।


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; we sometimes will call each page of physical memory a page frame.

পেজিংয়ের সাথে, ফিজিক্যাল মেমরিও কিছু সংখ্যক পৃষ্ঠায় বিভক্ত; আমরা মাঝে মাঝে ফিজিক্যাল মেমরির প্রতিটি পৃষ্ঠাটিকে একটি পেজ ফ্রেম বলব।


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

পেজ টেবিলের প্রধান ভূমিকা হল অ্যাড্রেস স্পেসের প্রতিটি ভার্চুয়াল পৃষ্ঠার জন্য ঠিকানা অনুবাদ সংরক্ষণ করা।


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

প্রথম নির্দেশটি শূন্য মানকে ভার্চুয়াল মেমরি অ্যাড্রেসে সরিয়ে নেয়।


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 আকারের একটি ভার্চুয়াল ঠিকানা স্থান ধরে নিই।


The array itself. Its size is 4000 bytes (1000 integers), and it lives at virtual addresses 40000 through 44000.

অ্যারে নিজেই। এর আকার 4000 বাইট (1000 পূর্ণসংখ্যা), এবং এটি 40000 থেকে 44000 পর্যন্ত ভার্চুয়াল ঠিকানায় থাকে।


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 divides memory into fixed-sized units.

প্রথমত, এটি বাহ্যিক খণ্ডন ঘটায় না, কারণ পেজিং মেমরিকে নির্দিষ্ট আকারের ইউনিটে বিভক্ত করে।


Second, it is quite flexible, enabling the sparse use of virtual address spaces.

দ্বিতীয়ত, এটি বেশ নমনীয়, ভার্চুয়াল ঠিকানা স্থানগুলির বিরল ব্যবহার সক্ষম করে।


However, implementing paging support without care will lead to a slower machine.

তবে, যত্ন না নিয়ে পেজিং সমর্থন বাস্তবায়ন করলে মেশিনটি ধীর হয়ে যাবে।


We’ll thus have to think a little harder to come up with a paging system that not only works, but works well.

সুতরাং, আমাদের এমন একটি পেজিং সিস্টেম তৈরি করতে একটু বেশি ভাবতে হবে যা কেবল কাজ করে তা নয়, ভালভাবে কাজ করে।


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 (MMU), and is simply a hardware cache of popular virtual-to-physical address translations.

একটি TLB হল চিপের মেমরি-ম্যানেজমেন্ট ইউনিটের (MMU) অংশ, এবং এটি জনপ্রিয় ভার্চুয়াল-থেকে-ফিজিক্যাল ঠিকানা অনুবাদের একটি হার্ডওয়্যার ক্যাশে।


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 অনুবাদটি ধরে রেখেছে।


বিড়ালটি মাদুরের উপর বসেছিল।


আজ আবহাওয়া খুবই মনোরম।


I am going to the market to buy some vegetables.

আমি কিছু সবজি কিনতে বাজারে যাচ্ছি।


Could you please help me with this problem?

আপনি কি দয়া করে আমাকে এই সমস্যাটিতে সাহায্য করতে পারেন?


The company announced a new product launch.

কোম্পানিটি একটি নতুন পণ্য চালু করার ঘোষণা করেছে।


The government is implementing new policies to boost the economy.

সরকার অর্থনীতিকে চাঙ্গা করতে নতুন নীতি গ্রহণ করছে।


The research team is working on a new vaccine.

গবেষণা দল একটি নতুন ভ্যাকসিনের উপর কাজ করছে।


The algorithm efficiently sorts the data.

অ্যালগরিদমটি দক্ষতার সাথে ডেটা সাজায়।


Despite the challenges, they persevered and succeeded.

চ্যালেঞ্জগুলি সত্ত্বেও, তারা অধ্যবসায় করেছে এবং সফল হয়েছে।


The complexities of the situation were difficult to navigate.

পরিস্থিতির জটিলতাগুলি নেভিগেট করা কঠিন ছিল।


The implications of the new technology are far-reaching.

নতুন প্রযুক্তির প্রভাব সুদূরপ্রসারী।


The philosophical debate centered on the nature of consciousness.

দার্শনিক বিতর্ক চেতনার প্রকৃতিকে কেন্দ্র করে আবর্তিত হয়েছিল।


The economic downturn had a significant impact on the global market.

অর্থনৈতিক মন্দা বিশ্ব বাজারে উল্লেখযোগ্য প্রভাব ফেলেছিল।


The intricacies of quantum physics continue to fascinate scientists.

কোয়ান্টাম পদার্থবিদ্যার জটিলতা বিজ্ঞানীরাকে আজও মুগ্ধ করে।


The judge delivered a verdict after a lengthy deliberation.

দীর্ঘ আলোচনার পর বিচারক রায় দিলেন।


The artist's innovative techniques revolutionized the art world.

শিল্পীর উদ্ভাবনী কৌশল শিল্প জগৎকে নতুন রূপ দিয়েছে।


The company's strategic plan involves expanding into new markets.

কোম্পানির কৌশলগত পরিকল্পনা নতুন বাজারে প্রসারিত হওয়ার সাথে জড়িত।


The software update includes several bug fixes and performance improvements.

সফ্টওয়্যার আপডেটে বেশ কয়েকটি বাগ ফিক্স এবং কর্মক্ষমতা উন্নতি অন্তর্ভুক্ত রয়েছে।


The historical significance of the event cannot be overstated.

ঘটনার ঐতিহাসিক গুরুত্বকে অতিমাত্রায় মূল্যায়ন করা যায় না।


The complex interplay of factors contributed to the crisis.

বিভিন্ন কারণের জটিল মিথস্ক্রিয়া সংকটে অবদান রেখেছিল।


The system will issue a request to the memory system.

সিস্টেম মেমরি সিস্টেমে একটি অনুরোধ পাঠাবে।


We need to construct a two-level page table.

আমাদের একটি দ্বি-স্তর পৃষ্ঠা সারণী তৈরি করতে হবে।


Sometimes two levels of page table is not enough!

কখনও কখনও, পৃষ্ঠা সারণীর দুটি স্তর যথেষ্ট নয়!


আসুন একটি সাধারণ উদাহরণ নেওয়া যাক।


Assume we have a 30-bit virtual address space.

ধরুন আমাদের একটি 30-বিট ভার্চুয়াল ঠিকানা স্থান আছে।


What if the page directory gets too big?

যদি পৃষ্ঠা ডিরেক্টরি খুব বড় হয়ে যায়?


আমরা গাছের আরও একটি স্তর তৈরি করি।


হার্ডওয়্যার প্রথমে টিএলবি পরীক্ষা করে।


The physical address is formed directly.

শারীরিক ঠিকানা সরাসরি গঠিত হয়।


Only upon a TLB miss does the hardware need to perform the full multi-level lookup.

কেবল টিএলবি মিস হওয়ার পরেই হার্ডওয়্যারকে সম্পূর্ণ মাল্টি-লেভেল লুকআপ করতে হবে।


Inverted page tables are an even more extreme space savings.

ইনভার্টেড পৃষ্ঠা সারণী আরও বেশি স্থান সাশ্রয় করে।


পৃষ্ঠা সারণী কেবল ডেটা কাঠামো।


We discuss the relaxation of one final assumption.

আমরা একটি চূড়ান্ত অনুমানের শিথিলতা নিয়ে আলোচনা করি।


The trade-offs such tables present are in time and space.

এই ধরনের সারণীগুলির সুবিধা-অসুবিধা সময় এবং স্থানের মধ্যে রয়েছে।


We have now seen how real page tables are built.

আমরা এখন দেখেছি কিভাবে আসল পৃষ্ঠা সারণী তৈরি করা হয়।


We wish to support many concurrently-running large address spaces.

আমরা অনেক সমকালীনভাবে চলমান বৃহৎ ঠিকানা স্থান সমর্থন করতে চাই।


The OS will need a place to stash away portions of address spaces.

অপারেটিং সিস্টেমের ঠিকানা স্থানের অংশগুলি সরিয়ে রাখার জন্য একটি জায়গার প্রয়োজন হবে।


How can the OS make use of a larger, slower device?

কিভাবে অপারেটিং সিস্টেম একটি বৃহত্তর, ধীর গতির ডিভাইস ব্যবহার করতে পারে?


The answer is convenience and ease of use.

উত্তরটি হল সুবিধা এবং ব্যবহারের সহজতা।


We will need to reserve some space on the disk.

আমাদের ডিস্কে কিছু জায়গা সংরক্ষণ করতে হবে।


The operating system manages the computer's resources.

অপারেটিং সিস্টেম কম্পিউটারের সম্পদগুলি পরিচালনা করে।


Please provide the necessary documentation for the application.

অনুগ্রহ করে, অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় নথিপত্র সরবরাহ করুন।


The company announced a new product launch next month.

কোম্পানি আগামী মাসে একটি নতুন পণ্য চালু করার ঘোষণা করেছে।


আজ আপনাকে দেখে আমি খুব খুশি।


The algorithm efficiently sorts the data.

অ্যালগরিদমটি দক্ষতার সাথে ডেটা সাজায়।


Despite the challenges, they succeeded in their mission.

চ্যালেঞ্জগুলি সত্ত্বেও, তারা তাদের মিশনে সফল হয়েছিল।


আপনি কি দয়া করে ওটা আবার বলতে পারবেন?


The research team is investigating the effects of climate change.

গবেষণা দল জলবায়ু পরিবর্তনের প্রভাবগুলি তদন্ত করছে।


This is a complex problem that requires careful consideration.

এটি একটি জটিল সমস্যা যা সতর্ক বিবেচনার দাবি রাখে।


The government implemented new policies to boost the economy.

সরকার অর্থনীতিকে শক্তিশালী করতে নতুন নীতিগুলি কার্যকর করেছে।


The software update includes several bug fixes and performance improvements.

সফ্টওয়্যার আপডেটে বেশ কয়েকটি বাগ ফিক্স এবং কর্মক্ষমতা উন্নতি অন্তর্ভুক্ত রয়েছে।


She is a talented artist with a unique style.

তিনি একজন প্রতিভাবান শিল্পী, যার একটি অনন্য শৈলী রয়েছে।


The meeting will be held at 2 PM tomorrow.

আগামীকাল দুপুর ২টায় মিটিং অনুষ্ঠিত হবে।


The company's profits increased significantly this quarter.

এই ত্রৈমাসিকে কোম্পানির লাভ উল্লেখযোগ্যভাবে বৃদ্ধি পেয়েছে।


The data analysis revealed some interesting patterns.

ডেটা বিশ্লেষণ কিছু আকর্ষণীয় নিদর্শন প্রকাশ করেছে।


তিনি একজন খুব দয়ালু এবং উদার ব্যক্তি।


The project is facing some unexpected delays.

প্রকল্পটি কিছু অপ্রত্যাশিত বিলম্বের সম্মুখীন হচ্ছে।


The new regulations will affect all businesses.

নতুন নিয়মাবলী সমস্ত ব্যবসার উপর প্রভাব ফেলবে।


The complex system requires specialized knowledge to operate.

জটিল সিস্টেমটি পরিচালনা করার জন্য বিশেষ জ্ঞানের প্রয়োজন।


The team worked tirelessly to achieve their goals.

দলটি তাদের লক্ষ্য অর্জনের জন্য অক্লান্ত পরিশ্রম করেছে।


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.

যাইহোক, এই পদ্ধতির প্রধান সমস্যা হল যে বড় পৃষ্ঠাগুলি প্রতিটি পৃষ্ঠার মধ্যে অপচয় ঘটায়, যা অভ্যন্তরীণ ফ্র্যাগমেন্টেশন হিসাবে পরিচিত।


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 page directory thus either can be used to tell you where a page of the page table is, or that the entire page of the page table contains no valid pages.

সুতরাং, পেজ ডিরেক্টরি আপনাকে বলতে পারে যে পেজ টেবিলের একটি পৃষ্ঠা কোথায় আছে, অথবা পেজ টেবিলের সম্পূর্ণ পৃষ্ঠায় কোনো বৈধ পৃষ্ঠা নেই।


The principle of locality suggests that programs often access data and instructions in clustered patterns.

স্থানীয়তার নীতি প্রস্তাব করে যে প্রোগ্রামগুলি প্রায়শই ক্লাস্টার করা প্যাটার্নে ডেটা এবং নির্দেশাবলী অ্যাক্সেস করে।


LRU (Least Recently Used) is a page replacement algorithm that evicts the page that hasn't been used for the longest time.

এলআরইউ (সবচেয়ে সম্প্রতি ব্যবহৃত) একটি পৃষ্ঠা প্রতিস্থাপন অ্যালগরিদম যা সেই পৃষ্ঠাটিকে সরিয়ে দেয় যা দীর্ঘতম সময়ের জন্য ব্যবহৃত হয়নি।


The operating system manages virtual memory to provide each process with its own address space.

অপারেটিং সিস্টেম প্রতিটি প্রক্রিয়াকে তার নিজস্ব ঠিকানা স্থান সরবরাহ করতে ভার্চুয়াল মেমরি পরিচালনা করে।


Thrashing occurs when the system spends too much time swapping pages between memory and disk.

যখন সিস্টেম মেমরি এবং ডিস্কের মধ্যে পৃষ্ঠা অদলবদল করতে খুব বেশি সময় ব্যয় করে, তখন থ্র্যাশিং হয়।


The 80-20 workload exhibits locality, with 80% of accesses to 20% of the pages.

৮০-২০ কর্মপ্রবাহ স্থানীয়তা প্রদর্শন করে, যেখানে ৮০% অ্যাক্সেসগুলি ২০% পৃষ্ঠায় হয়।


Understanding these concepts is crucial for efficient system design.

দক্ষ সিস্টেম ডিজাইনের জন্য এই ধারণাগুলি বোঝা অত্যন্ত গুরুত্বপূর্ণ।


The clock algorithm is an approximation of LRU, using a use bit to track recent page access.

ঘড়ি অ্যালগরিদম হল এলআরইউ-এর একটি অনুমান, যা সাম্প্রতিক পৃষ্ঠা অ্যাক্সেস ট্র্যাক করতে একটি ব্যবহার বিট ব্যবহার করে।


Cache size significantly impacts the hit rate in memory management.

ক্যাশের আকার মেমরি ব্যবস্থাপনায় হিট রেটের উপর উল্লেখযোগ্য প্রভাব ফেলে।


The system needs to decide when to bring a page into memory.

সিস্টেমকে সিদ্ধান্ত নিতে হবে কখন একটি পৃষ্ঠা মেমরিতে আনতে হবে।


Demand paging brings pages into memory only when they are accessed.

ডিমান্ড পেজিং শুধুমাত্র তখনই পৃষ্ঠাগুলিকে মেমরিতে আনে যখন সেগুলিতে অ্যাক্সেস করা হয়।


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

VAX/VMS অপারেটিং সিস্টেম একটি সু-পরিকল্পিত ভার্চুয়াল মেমরি ব্যবস্থাপক।


Modern systems often use approximations of LRU due to the overhead of perfect implementation.

নিখুঁত বাস্তবায়নের ওভারহেডের কারণে আধুনিক সিস্টেমগুলি প্রায়শই এলআরইউ-এর অনুমান ব্যবহার করে।


The goal is to optimize memory usage and minimize disk I/O.

লক্ষ্য হল মেমরি ব্যবহারকে অপটিমাইজ করা এবং ডিস্ক I/O কমানো।


The use bit helps the OS approximate the LRU policy.

ব্যবহার বিট অপারেটিং সিস্টেমকে এলআরইউ নীতিকে আনুমানিক করতে সাহায্য করে।


The clock algorithm clears the use bit of a page if it hasn't been used recently.

যদি কোনো পৃষ্ঠা সম্প্রতি ব্যবহৃত না হয়ে থাকে, তাহলে ক্লক অ্যালগরিদম সেই পৃষ্ঠার ব্যবহার বিটটি সাফ করে দেয়।


The system can prefetch pages, anticipating future needs.

সিস্টেম ভবিষ্যতের চাহিদা অনুমান করে পৃষ্ঠাগুলি প্রিফেচ করতে পারে।


Clustering writes improves disk efficiency.

ক্লাস্টারিং রাইট ডিস্কের কার্যকারিতা উন্নত করে।


Admission control can prevent thrashing by limiting the number of active processes.

অ্যাডমিশন কন্ট্রোল সক্রিয় প্রক্রিয়ার সংখ্যা সীমিত করে থ্র্যাশিং প্রতিরোধ করতে পারে।


Scan resistance is an important feature of modern page replacement algorithms.

স্ক্যান প্রতিরোধ আধুনিক পৃষ্ঠা প্রতিস্থাপন অ্যালগরিদমের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য।


The evolution of page replacement algorithms continues to improve system performance.

পৃষ্ঠা প্রতিস্থাপন অ্যালগরিদমের বিবর্তন সিস্টেমের কর্মক্ষমতা উন্নত করতে থাকে।


Basic policies are kind of obvious, but building a real virtual memory system seems more interesting.

মৌলিক নীতিগুলি সুস্পষ্ট, তবে একটি বাস্তব ভার্চুয়াল মেমরি সিস্টেম তৈরি করা আরও আকর্ষণীয় বলে মনে হয়।


The best solution to policy problems is simple: buy more memory.

নীতির সমস্যাগুলির সেরা সমাধান হল সহজ: আরও মেমরি কিনুন।


My machine is running a little slowly these days.

আমার মেশিন আজকাল একটু ধীরে চলছে।


Go and get yourself some DRAM, cheapskate.

যাও এবং কিছু DRAM কিনে নাও, কৃপণ।


I’ll never swap to disk again – or, if I do, at least I’ll know what’s actually going on!

আমি আর কখনও ডিস্কে অদলবদল করব না – অথবা, যদি করিও, তবে অন্তত আমি জানতে পারব আসলে কি ঘটছে!


And thus we reach the second of our three pillars of operating systems: concurrency.

এবং এইভাবে আমরা অপারেটিং সিস্টেমের তিনটি স্তম্ভের দ্বিতীয়টিতে পৌঁছেছি: সমকালীনতা।


আমি ভেবেছিলাম চারটি স্তম্ভ ছিল...?


আচ্ছা, কল্পনা করুন আমাদের কাছে একটি পীচ আছে।


Ever read T. S. Eliot? The Love Song of J. Alfred Prufrock, “Do I dare to eat a peach”, and all that fun stuff?

টি এস এলিয়ট পড়েছেন? জে আলফ্রেড প্রুফ্রকের প্রেম সঙ্গীত, “আমি কি একটি পীচ খাওয়ার সাহস করি”, এবং সেই মজাদার জিনিসগুলি?


Imagine there are a lot of peaches on a table, and a lot of people who wish to eat them.

কল্পনা করুন একটি টেবিলে অনেক পীচ আছে, এবং অনেক লোক সেগুলি খেতে চায়।


Let’s say we did it this way: 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.

আচ্ছা, সম্ভবত এটি করার একটি ভাল উপায় তৈরি করুন।


Well, we used to have many people grabbing for peaches all at once, which is faster.

আচ্ছা, আমাদের অনেক লোক একসাথে পীচ ধরছিল, যা দ্রুত।


আপনি সত্যিই প্রভাবিত করতে শুরু করেছেন।


In fact, you just told us everything we need to know about concurrency!

আসলে, আপনি এখনই আমাদের সমকালীনতা সম্পর্কে জানার জন্য প্রয়োজনীয় সবকিছু বলেছেন!


কাউকে অবশ্যই বাস্তবতাকে ভুলতে নেই।


Well, as it turns out, there are certain types of programs that we call multi-threaded applications.

আচ্ছা, দেখা যাচ্ছে, এমন কিছু ধরণের প্রোগ্রাম রয়েছে যেগুলিকে আমরা মাল্টি-থ্রেডেড অ্যাপ্লিকেশন বলি।


If we don’t coordinate access to memory between threads, the program won’t work as expected.

যদি আমরা থ্রেডগুলির মধ্যে মেমরির অ্যাক্সেস সমন্বয় না করি তবে প্রোগ্রামটি প্রত্যাশা অনুযায়ী কাজ করবে না।


The OS had to have mechanisms and policies that worked across this huge range of systems.

এই বিশাল সংখ্যক সিস্টেম জুড়ে কাজ করার জন্য অপারেটিং সিস্টেমের প্রক্রিয়া এবং নীতি থাকতে হয়েছিল।


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

অপারেটিং সিস্টেমগুলির প্রায়শই একটি সমস্যা থাকে যা “সাধারণতার অভিশাপ” নামে পরিচিত।


Thus, how can an OS be built so as to run effectively on a wide range of systems?

সুতরাং, কিভাবে একটি অপারেটিং সিস্টেম তৈরি করা যেতে পারে যা বিস্তৃত সিস্টেমের উপর কার্যকরভাবে চলবে?


VMS is an excellent example of software innovations used to hide some of the inherent flaws of the architecture.

VMS হল সফ্টওয়্যার উদ্ভাবনের একটি চমৎকার উদাহরণ যা আর্কিটেকচারের কিছু অন্তর্নিহিত ত্রুটি লুকানোর জন্য ব্যবহৃত হয়।


The VAX-11 provided a 32-bit virtual address space per process, divided into 512-byte pages.

VAX-11 প্রতিটি প্রক্রিয়ার জন্য একটি 32-বিট ভার্চুয়াল ঠিকানা স্থান সরবরাহ করে, যা 512-বাইটের পৃষ্ঠায় বিভক্ত।


The lower-half of the address space was known as “process space” and is unique to each process.

ঠিকানা স্থানের নিচের অর্ধেক “প্রসেস স্পেস” নামে পরিচিত এবং এটি প্রতিটি প্রক্রিয়ার জন্য অনন্য।


Protected OS code and data reside here, and the OS is in this way shared across processes.

সুরক্ষিত অপারেটিং সিস্টেম কোড এবং ডেটা এখানে থাকে এবং এই পদ্ধতিতে অপারেটিং সিস্টেম প্রক্রিয়াগুলির মধ্যে শেয়ার করা হয়।


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

VMS ডিজাইনারদের একটি প্রধান উদ্বেগ ছিল VAX হার্ডওয়্যারের পৃষ্ঠাগুলির অবিশ্বাস্যভাবে ছোট আকার।


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

সিস্টেমটি দুটি উপায়ে মেমরিতে পেজ টেবিলের চাপ কমিয়েছে।


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

কার্নেল ভার্চুয়াল মেমরিতে পেজ টেবিল স্থাপন করার অর্থ হল ঠিকানা অনুবাদ আরও জটিল।


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

এখন আপনার একটি শূন্য-পয়েন্টার ডিফারেন্স-এ ঠিক কী ঘটে সে সম্পর্কে ভালো ধারণা থাকা উচিত।


A process generates a virtual address of 0, by doing something like this:

একটি প্রক্রিয়া এইরকম কিছু করে 0 এর একটি ভার্চুয়াল ঠিকানা তৈরি করে:


The hardware tries to look up the VPN in the TLB, and suffers a TLB miss.

হার্ডওয়্যার TLB-তে VPN সন্ধান করার চেষ্টা করে এবং একটি TLB মিস হয়।


For example, the code segment never begins at page 0.

উদাহরণস্বরূপ, কোড সেগমেন্ট কখনোই পৃষ্ঠা 0 থেকে শুরু হয় না।


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

কয়েকটি কারণে কার্নেল প্রতিটি ঠিকানা স্থানে ম্যাপ করা হয়।


Clearly, the OS does not want user applications reading or writing OS data or code.

স্পষ্টতই, অপারেটিং সিস্টেম ব্যবহারকারী অ্যাপ্লিকেশনগুলিকে অপারেটিং সিস্টেমের ডেটা বা কোড পড়তে বা লিখতে দিতে চায় না।


The VAX did so by specifying, in protection bits in the page table, what privilege level the CPU must be at in order to access a particular page.

VAX পেজ টেবিলের সুরক্ষা বিটগুলিতে উল্লেখ করে এটি করেছে, CPU-কে একটি নির্দিষ্ট পৃষ্ঠা অ্যাক্সেস করার জন্য কোন স্তরের বিশেষাধিকার থাকতে হবে।


The developers were also concerned about memory hogs, programs that use a lot of memory and make it hard for other programs to run.

ডেভেলপাররা মেমরি হগস, এমন প্রোগ্রাম যা প্রচুর মেমরি ব্যবহার করে এবং অন্যান্য প্রোগ্রাম চালানো কঠিন করে তোলে সে সম্পর্কেও উদ্বিগ্ন ছিলেন।


With clustering, VMS groups large batches of pages together from the global dirty list, and writes them to disk in one fell swoop.

ক্লাস্টারিং-এর মাধ্যমে, VMS গ্লোবাল ডার্টি তালিকা থেকে একসাথে বৃহৎ আকারের পৃষ্ঠাগুলিকে একত্রিত করে এবং সেগুলিকে একবারে ডিস্কে লিখে দেয়।


The idea, which goes at least back to the TENEX operating system, is simple.

ধারণাটি, যা অন্তত TENEX অপারেটিং সিস্টেমের সময় থেকে চলে আসছে, তা সহজ।


The operating system manages computer hardware and software resources.

অপারেটিং সিস্টেম কম্পিউটার হার্ডওয়্যার এবং সফ্টওয়্যার সংস্থানগুলি পরিচালনা করে।


Concurrency is a fundamental concept in operating systems.

অপারেটিং সিস্টেমে সমকালীনতা একটি মৌলিক ধারণা।


Threads often need to synchronize access to shared resources.

থ্রেডগুলির প্রায়শই শেয়ার করা সংস্থানগুলিতে অ্যাক্সেস সিঙ্ক্রোনাইজ করতে হয়।


Condition variables are used for thread synchronization.

থ্রেড সিঙ্ক্রোনাইজেশনের জন্য শর্তের ভেরিয়েবল ব্যবহার করা হয়।


The program uses locks to protect critical sections of code.

প্রোগ্রাম কোডের গুরুত্বপূর্ণ অংশগুলি রক্ষা করার জন্য লক ব্যবহার করে।


Understanding concurrency is crucial for writing efficient software.

দক্ষ সফ্টওয়্যার লেখার জন্য সমকালীনতা বোঝা অপরিহার্য।


The operating system schedules processes to share the CPU.

অপারেটিং সিস্টেম সিপিইউ ভাগ করে নেওয়ার জন্য প্রক্রিয়াগুলি নির্ধারণ করে।


Atomic operations ensure data integrity in concurrent environments.

পরমাণু ক্রিয়াকলাপ সমকালীন পরিবেশে ডেটা অখণ্ডতা নিশ্চিত করে।


The programmer must be careful about race conditions.

প্রোগ্রামারকে রেস কন্ডিশন সম্পর্কে সতর্ক থাকতে হবে।


Threads can communicate using shared memory.

থ্রেডগুলি শেয়ার করা মেমরি ব্যবহার করে যোগাযোগ করতে পারে।


The book discusses the challenges of multi-threaded programming.

বইটিতে মাল্টি-থ্রেডেড প্রোগ্রামিংয়ের চ্যালেঞ্জগুলি নিয়ে আলোচনা করা হয়েছে।


Deadlocks can occur when threads wait for each other indefinitely.

যখন থ্রেডগুলি অনির্দিষ্টকালের জন্য একে অপরের জন্য অপেক্ষা করে, তখন অচলাবস্থা দেখা দিতে পারে।


The example code demonstrates the use of mutexes.

উদাহরণস্বরূপ কোডটি মিউটেক্সের ব্যবহার প্রদর্শন করে।


Proper synchronization is essential for correct program behavior.

সঠিক প্রোগ্রাম আচরণের জন্য যথাযথ সিঙ্ক্রোনাইজেশন অপরিহার্য।


The operating system provides APIs for thread management.

অপারেটিং সিস্টেম থ্রেড পরিচালনার জন্য API সরবরাহ করে।


The program's performance can be improved by using multiple threads.

একাধিক থ্রেড ব্যবহার করে প্রোগ্রামের কর্মক্ষমতা উন্নত করা যেতে পারে।


Context switching is a key part of multitasking.

মাল্টিটাস্কিংয়ের একটি মূল অংশ হল কন্টেক্সট স্যুইচিং।


The code uses pthread_create to create a new thread.

কোডটি একটি নতুন থ্রেড তৈরি করতে pthread_create ব্যবহার করে।


The thread waits for another thread to complete its task.

থ্রেডটি অন্য থ্রেডটির কাজ শেষ করার জন্য অপেক্ষা করে।


The use of atomic operations is a powerful technique.

পরমাণু ক্রিয়াকলাপের ব্যবহার একটি শক্তিশালী কৌশল।


When calling either of the above routines, this lock should be held.

উপরের যে কোনও রুটিন কল করার সময়, এই লকটি ধরে রাখতে হবে।


The first routine, pthread condwait(), puts the calling thread to sleep.

প্রথম রুটিন, pthread condwait(), কলিং থ্রেডটিকে ঘুম পাড়িয়ে দেয়।


For example, a typical usage looks like this: pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

উদাহরণস্বরূপ, একটি সাধারণ ব্যবহার এইরকম দেখায়: pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;


In this code, after initialization of the relevant lock and condition, a thread checks to see if the variable initialized has yet been set to something other than zero.

এই কোডে, প্রাসঙ্গিক লক এবং শর্তের আরম্ভের পরে, একটি থ্রেড পরীক্ষা করে যে আরম্ভ করা ভেরিয়েবলটি এখনও শূন্য ছাড়া অন্য কিছুতে সেট করা হয়েছে কিনা।


If not, the thread simply calls the wait routine in order to sleep until some other thread wakes it.

যদি না হয়, তবে থ্রেডটি ঘুমোতে যাওয়ার জন্য অপেক্ষা করার রুটিনটিকে কল করে যতক্ষণ না অন্য কোনও থ্রেড এটিকে জাগিয়ে তোলে।


The code to wake a thread, which would run in some other thread, looks like this: Pthread_mutex_lock(&lock);

একটি থ্রেডকে জাগ্রত করার কোড, যা অন্য কোনও থ্রেডে চলবে, তা এইরকম দেখাচ্ছে: Pthread_mutex_lock(&lock);


First, when signal- ing (as well as when modifying the global variable initialized), we always make sure to have the lock held.

প্রথমত, সংকেত দেওয়ার সময় (এবং গ্লোবাল ভেরিয়েবল আরম্ভ করার সময়), আমরা সর্বদা নিশ্চিত করি যে লকটি ধরে রাখা হয়েছে।


Second, you might notice that the wait call takes a lock as its second parameter, whereas the signal call only takes a condition.

দ্বিতীয়ত, আপনি লক্ষ্য করতে পারেন যে অপেক্ষা কলটি তার দ্বিতীয় প্যারামিটার হিসাবে একটি লক নেয়, যেখানে সংকেত কলটি কেবল একটি শর্ত নেয়।


The reason for this difference is that the wait call, in addition to putting the calling thread to sleep, releases the lock when putting said caller to sleep.

এই পার্থক্যের কারণ হল অপেক্ষা কলটি, কলিং থ্রেডটিকে ঘুম পাড়ানোর পাশাপাশি, উক্ত কলারকে ঘুম পাড়ানোর সময় লকটি ছেড়ে দেয়।


Imagine if it did not: how could the other thread acquire the lock and signal it to wake up?

কল্পনা করুন যদি এটি না করত: অন্য থ্রেডটি কীভাবে লকটি অর্জন করতে এবং এটিকে জাগ্রত করার জন্য সংকেত দিতে পারত?


However, before returning after being woken, the pthread condwait() re-acquires the lock, thus ensuring that any time the waiting thread is running between the lock acquire at the beginning of the wait sequence, and the lock release at the end, it holds the lock.

তবে, জাগ্রত হওয়ার পরে ফিরে আসার আগে, pthread condwait() পুনরায় লকটি অর্জন করে, এইভাবে নিশ্চিত করে যে অপেক্ষারত থ্রেডটি অপেক্ষা ক্রমের শুরুতে লক অর্জনের মধ্যে চলছে এবং শেষে লকটি মুক্তি পাওয়ার মধ্যে, এটি লকটি ধরে রাখে।


One last oddity: the waiting thread re-checks the condition in a while loop, instead of a simple if statement.

শেষ অদ্ভুততা: অপেক্ষারত থ্রেডটি একটি সাধারণ if স্টেটমেন্টের পরিবর্তে একটি while লুপে শর্তটি পুনরায় পরীক্ষা করে।


We’ll discuss this issue in detail when we study condition variables in a future chapter, but in general, using a while loop is the simple and safe thing to do.

আমরা ভবিষ্যতে অধ্যায়ে শর্তের ভেরিয়েবলগুলি অধ্যয়ন করার সময় এই বিষয়টি বিস্তারিতভাবে আলোচনা করব, তবে সাধারণভাবে, একটি while লুপ ব্যবহার করা সহজ এবং নিরাপদ কাজ।


Although it rechecks the condition (perhaps adding a little overhead), there are some pthread implementations that could spuriously wake up a waiting thread; in such a case, without rechecking, the waiting thread will continue thinking that the condition has changed even though it has not.

যদিও এটি শর্তটি পুনরায় পরীক্ষা করে (সম্ভবত সামান্য ওভারহেড যোগ করে), এমন কিছু pthread বাস্তবায়ন রয়েছে যা একটি অপেক্ষারত থ্রেডকে ভুলভাবে জাগিয়ে তুলতে পারে; এই ক্ষেত্রে, পুনরায় পরীক্ষা না করে, অপেক্ষারত থ্রেডটি মনে করতে থাকবে যে শর্তটি পরিবর্তিত হয়েছে যদিও এটি হয়নি।


It is safer thus to view waking up as a hint that something might have changed, rather than an absolute fact.

অতএব, জাগ্রত হওয়াকে একটি পরম সত্যের চেয়ে বরং একটি ইঙ্গিত হিসাবে দেখা নিরাপদ যে কিছু পরিবর্তিত হতে পারে।


Note that sometimes it is tempting to use a simple flag to signal between two threads, instead of a condition variable and associated lock.

লক্ষ্য করুন যে কখনও কখনও একটি শর্তের ভেরিয়েবল এবং সংশ্লিষ্ট লকের পরিবর্তে দুটি থ্রেডের মধ্যে সংকেত দেওয়ার জন্য একটি সাধারণ ফ্ল্যাগ ব্যবহার করার প্রলোভন হয়।


Don’t ever do this, for the following reasons.

নিম্নলিখিত কারণে এটি কখনই করবেন না।


First, it performs poorly in many cases (spinning for a long time just wastes CPU cycles).

প্রথমত, এটি অনেক ক্ষেত্রে খারাপ পারফর্ম করে (দীর্ঘ সময় ধরে স্পিনিং করা কেবল সিপিইউ চক্র নষ্ট করে)।


দ্বিতীয়ত, এটি ত্রুটিপূর্ণ।


As long as main.c includes the pthreads header, you have now successfully compiled a concurrent program.

যতক্ষণ main.c pthreads হেডার অন্তর্ভুক্ত করে, ততক্ষণ আপনি এখন সফলভাবে একটি সমবর্তী প্রোগ্রাম সংকলন করেছেন।


The code uses a test-and-set instruction to implement a simple spin lock.

কোডটি একটি সাধারণ স্পিন লক তৈরি করতে একটি পরীক্ষা-এবং-সেট নির্দেশ ব্যবহার করে।


This ensures that the sequence of operations is performed atomically.

এটি নিশ্চিত করে যে ক্রিয়াকলাপগুলির ক্রমটি পারমাণবিকভাবে সম্পন্ন হয়।


Imagine first the case where a thread calls lock() and no other thread currently holds the lock.

প্রথমে সেই পরিস্থিতি কল্পনা করুন যেখানে একটি থ্রেড লক() কল করে এবং অন্য কোনো থ্রেড বর্তমানে লকটি ধরে নেই।


The thread will also atomically set the value to 1, thus indicating that the lock is now held.

থ্রেডটি স্বয়ংক্রিয়ভাবে মান ১ সেট করবে, এইভাবে নির্দেশ করে যে লকটি এখন ধরে রাখা হয়েছে।


Spin locks are not fair and may lead to starvation.

স্পিন লকগুলি ন্যায্য নয় এবং এর ফলে অনাহার হতে পারে।


On multiple CPUs, spin locks work reasonably well.

একাধিক সিপিইউতে, স্পিন লকগুলি যুক্তিসঙ্গতভাবে ভাল কাজ করে।


The basic idea is for compare-and-swap to test whether the value at the address specified by ptr is equal to expected.

মূল ধারণাটি হল তুলনা-এবং-অদলবদল পরীক্ষা করা যে ptr দ্বারা নির্দিষ্ট করা ঠিকানার মান প্রত্যাশিত মানের সমান কিনা।


If so, update the memory location pointed to by ptr with the new value.

যদি তাই হয়, নতুন মান সহ ptr দ্বারা নির্দেশিত মেমরি লোকেশনটি আপডেট করুন।


With the compare-and-swap instruction, we can build a lock in a manner quite similar to that with test-and-set.

তুলনা-এবং-অদলবদল নির্দেশের মাধ্যমে, আমরা পরীক্ষা-এবং-সেটের মতোই একটি লক তৈরি করতে পারি।


Some platforms provide a pair of instructions that work in concert to help build critical sections.

কিছু প্ল্যাটফর্ম নির্দেশাবলীর একটি জোড়া সরবরাহ করে যা সমালোচনামূলক বিভাগ তৈরি করতে সহায়তা করার জন্য একসাথে কাজ করে।


The key difference comes with the store-conditional, which only succeeds if no intermittent store to the address has taken place.

প্রধান পার্থক্যটি আসে স্টোর-কন্ডিশনালের সাথে, যা শুধুমাত্র তখনই সফল হয় যদি ঠিকানায় কোনো মধ্যবর্তী স্টোর না হয়।


The lock() code is the only interesting piece.

লক() কোডটিই একমাত্র আকর্ষণীয় অংশ।


First, a thread spins waiting for the flag to be set to 0.

প্রথমত, একটি থ্রেড ফ্ল্যাগ ০ তে সেট হওয়ার জন্য অপেক্ষা করে।


Once so, the thread tries to acquire the lock via the store-conditional.

একবার হয়ে গেলে, থ্রেড স্টোর-কন্ডিশনালের মাধ্যমে লকটি অর্জনের চেষ্টা করে।


The fetch-and-add instruction atomically increments a value while returning the old value at a particular address.

ফ্যাচ-এন্ড-অ্যাড নির্দেশাবলী একটি নির্দিষ্ট ঠিকানায় পুরানো মানটি ফেরত দেওয়ার সময় স্বয়ংক্রিয়ভাবে একটি মান বৃদ্ধি করে।


Instead of a single value, this solution uses a ticket and turn variable in combination to build a lock.

একটি একক মানের পরিবর্তে, এই সমাধানটি একটি লক তৈরি করতে একটি টিকিট এবং টার্ন ভেরিয়েবল ব্যবহার করে।


Once a thread is assigned its ticket value, it will be scheduled at some point in the future.

একবার একটি থ্রেড তার টিকিটের মান পেয়ে গেলে, এটি ভবিষ্যতে কোনো এক সময়ে নির্ধারিত হবে।


Our simple hardware-based locks are simple and they work.

আমাদের সাধারণ হার্ডওয়্যার-ভিত্তিক লকগুলি সহজ এবং সেগুলি কাজ করে।


How can we develop a lock that doesn’t needlessly waste time spinning on the CPU?

আমরা কীভাবে এমন একটি লক তৈরি করতে পারি যা অপ্রয়োজনে সিপিইউতে স্পিনিং করে সময় নষ্ট করে না?


Our first try is a simple and friendly approach: when you are going to spin, instead give up the CPU to another thread.

আমাদের প্রথম চেষ্টা একটি সহজ এবং বন্ধুত্বপূর্ণ পদ্ধতি: যখন আপনি স্পিন করতে যাচ্ছেন, তখন পরিবর্তে অন্য থ্রেডের কাছে সিপিইউ ছেড়ে দিন।


প্রোগ্রামটি সফলভাবে সংকলিত হয়েছে।


দয়া করে দরজাটা বন্ধ করুন।


আজ আবহাওয়া খুবই মনোরম।


সে একজন ভালো বন্ধু।


আমার কিছু মুদি জিনিস কিনতে হবে।


The company announced a new product launch.

কোম্পানিটি একটি নতুন পণ্য চালু করার ঘোষণা করেছে।


The algorithm efficiently sorts the data.

অ্যালগরিদমটি দক্ষতার সাথে ডেটা সাজায়।


She is studying for her exams diligently.

সে তার পরীক্ষার জন্য মনোযোগ সহকারে পড়াশোনা করছে।


The government is implementing new policies.

সরকার নতুন নীতিগুলি কার্যকর করছে।


The complex system requires careful analysis.

জটিল সিস্টেমটির জন্য সতর্ক বিশ্লেষণ প্রয়োজন।


Despite the challenges, they persevered.

চ্যালেঞ্জগুলি সত্ত্বেও, তারা অধ্যবসায় চালিয়ে গেছে।


The economic forecast predicts a recession.

অর্থনৈতিক পূর্বাভাসে মন্দা দেখা যাচ্ছে।


The research paper explores the impact of climate change.

গবেষণা পত্রটি জলবায়ু পরিবর্তনের প্রভাব নিয়ে আলোচনা করে।


The philosophical debate centered on the nature of reality.

দার্শনিক বিতর্কটি বাস্তবতার প্রকৃতিকে কেন্দ্র করে ছিল।


The intricate design of the software impressed the experts.

সফ্টওয়্যারের জটিল নকশাটি বিশেষজ্ঞদের মুগ্ধ করেছে।


The negotiations reached an impasse due to conflicting interests.

পরস্পরবিরোধী স্বার্থের কারণে আলোচনা অচলাবস্থায় পৌঁছেছে।


The artist's evocative use of color created a powerful emotional response.

শিল্পীর রঙের উদ্দীপক ব্যবহার একটি শক্তিশালী মানসিক প্রতিক্রিয়া তৈরি করেছে।


The company's strategic restructuring aims to improve market share.

কোম্পানির কৌশলগত পুনর্গঠনের লক্ষ্য হল বাজারের অংশীদারিত্ব বৃদ্ধি করা।


The implications of the new scientific discovery are far-reaching.

নতুন বৈজ্ঞানিক আবিষ্কারের প্রভাব সুদূরপ্রসারী।


The complexities of international relations require careful diplomacy.

আন্তর্জাতিক সম্পর্কের জটিলতাগুলির জন্য সতর্ক কূটনীতির প্রয়োজন।


The Linux approach has the flavor of an old approach.

লিনাক্স পদ্ধতির মধ্যে একটি পুরনো পদ্ধতির আভাস পাওয়া যায়।


A two-phase lock realizes that spinning can be useful.

দ্বি-পর্যায়ের লক বুঝতে পারে যে স্পিনিং উপযোগী হতে পারে।


So in the first phase, the lock spins for a while.

সুতরাং, প্রথম পর্যায়ে, লক কিছুক্ষণ ধরে ঘোরে।


The caller is put to sleep, and only woken up when the lock becomes free later.

কলকারীকে ঘুম পাড়ানো হয়, এবং লকটি পরে মুক্ত হলে তাকে জাগানো হয়।


Two-phase locks are yet another instance of a hybrid approach.

দ্বি-পর্যায়ের লক হলো হাইব্রিড পদ্ধতির আরেকটি উদাহরণ।


Making a single general-purpose lock is quite a challenge.

একটি সাধারণ উদ্দেশ্যে লক তৈরি করা বেশ কঠিন।


The above approach shows how real locks are built these days.

উপরের পদ্ধতিটি দেখায় কিভাবে আজকাল আসল লক তৈরি করা হয়।


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.

এমনকি আল ডেভিসকে নিয়ে নিঃসন্দেহে একটি খারাপ বইও আছে।


One of the early seminal papers in the area.

এই এলাকার প্রথম দিকের গুরুত্বপূর্ণ গবেষণাপত্রগুলির মধ্যে একটি।


A landmark paper introducing a different approach.

একটি গুরুত্বপূর্ণ গবেষণাপত্র যা একটি ভিন্ন পদ্ধতির সূচনা করে।


আনন্দপূর্ণ এবং অন্তর্দৃষ্টিপূর্ণ।


nptl সাবডিরেক্টরিটি দেখুন।


RDLK is thus an early test-and-set primitive.

সুতরাং, RDLK একটি প্রাথমিক পরীক্ষা-এবং-সেট আদিম।


An excellent survey on different locking algorithms.

বিভিন্ন লকিং অ্যালগরিদমের উপর একটি চমৎকার সমীক্ষা।


We’ll first describe how to use locks in some common data structures.

আমরা প্রথমে কিছু সাধারণ ডেটা স্ট্রাকচারে লক কিভাবে ব্যবহার করতে হয় তা বর্ণনা করব।


Adding locks to a data structure makes it thread safe.

একটি ডেটা স্ট্রাকচারে লক যোগ করলে এটি থ্রেড নিরাপদ হয়।


How should we add locks to it, in order to make it work correctly?

এটি সঠিকভাবে কাজ করার জন্য আমরা এতে কিভাবে লক যোগ করব?


One of the simplest data structures is a counter.

সবচেয়ে সহজ ডেটা স্ট্রাকচারগুলির মধ্যে একটি হল কাউন্টার।


This concurrent counter is simple and works correctly.

এই সমকালীন কাউন্টারটি সহজ এবং সঠিকভাবে কাজ করে।


ভোক্তা সহজভাবে আবার ঘুমিয়ে যায়।


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 লুপ ব্যবহার করা সর্বদা সঠিক।


The cost, as we’ve discussed, is that too many threads might be woken.

খরচ, যেমনটি আমরা আলোচনা করেছি, তা হল অনেক বেশি থ্রেড জাগ্রত হতে পারে।


We have seen the introduction of another important synchronization primitive beyond locks: condition variables.

আমরা লকগুলির বাইরে আরেকটি গুরুত্বপূর্ণ সিঙ্ক্রোনাইজেশন আদিম প্রবর্তিত হতে দেখেছি: শর্ত ভেরিয়েবল।


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.

কারণ সেমাফোরের প্রাথমিক মান তার আচরণ নির্ধারণ করে, সেমাফোরের সাথে ইন্টারঅ্যাক্ট করার জন্য অন্য কোনো রুটিন কল করার আগে, আমাদের প্রথমে এটিকে কিছু মান দিতে হবে।


In the figure, we declare a semaphore s and initialize it to the value 1.

চিত্রে, আমরা একটি সেমাফোর s ঘোষণা করি এবং এটিকে 1 মান দিয়ে আরম্ভ করি।