Context Switching
Context Switching & PCB (Process Control Block) — Full Detailed Documentation
1) আগে Basic Foundation: Program, Process, CPU
Program কী?
Program হলো disk-এ থাকা instructions-এর set।
যেমন:
chrome.execode.exeতোমার
a.out
এগুলো এখনো running না, শুধু file আকারে আছে।
Process কী?
যখন Program execute হয়, তখন সেটা Process হয়।
অর্থাৎ:
Program + Running State + Memory + Resources = Process
একটা Process-এর থাকে:
- নিজস্ব PID
নিজস্ব memory space
program counter
register values
stack
heap
open files
scheduling information
CPU কী করে?
CPU একসাথে সাধারণত একটি core-এ একটি instruction stream execute করে।
কিন্তু OS-এ অনেক Process ready থাকে।
তাই CPU-কে এক Process থেকে আরেক Process-এ যেতে হয়।
এই যাওয়া-আসার পুরো প্রক্রিয়াটাই Context Switching।
2) Context কী?
Context মানে হলো কোনো Process/Thread-এর সেই execution state, যেটা save করে রাখলে পরে আবার ঠিক যেখানে থেমেছিল সেখান থেকে চালানো যাবে।
একটা Process-এর Context-এর মধ্যে সাধারণত থাকে:
- Program Counter (PC) → next instruction কোথায়
CPU Registers → current register values
Stack Pointer (SP)
Processor status / flags
Process state
Memory mapping information
Scheduling info
Open file info (broader process state হিসেবে)
সহজ ভাষায়:
“একটা process এখন ঠিক কোন অবস্থায় আছে, CPU-তে কী কী মান loaded আছে, পরের instruction কোথায়—এসবের snapshot-ই context।”
3) Context Switching কী?
Context Switching হলো সেই OS operation যেখানে CPU বর্তমানে চলমান Process/Thread-এর state save করে, তারপর অন্য Process/Thread-এর saved state load করে তাকে execute করতে দেয়।
4) Real-Life Analogy
ধরো তুমি ৩টা কাজ করছো:
Math পড়া
Go শেখা
LinkedIn post লেখা
এখন তুমি Math করতে করতে হঠাৎ Go শেখায় গেলে, তারপর আবার Math-এ ফিরে এলে—Math-এ ঠিক কোথায় ছিলে সেটা মনে রাখতে হবে।
তাই তুমি bookmark রাখলে:
- কোন page-এ ছিলে
কোন line-এ ছিলে
কোন formula solve করছিলে
এটাই OS-এর ভাষায় context save করা।
তারপর Go শেখার bookmark load করলে → Go continue
আবার Math bookmark load করলে → Math continue
এই bookmark switching = Context Switching
5) Context Switching কেন দরকার?
কারণ 1: Multitasking
একটা CPU-তে অনেক Process/Thread চালাতে হয়।
যেমন একসাথে:
- Browser
VS Code
Music player
Terminal
OS background services
CPU যদি শুধু এক Process-কে ধরে রাখে, তাহলে অন্যরা চলতে পারবে না।
কারণ 2: Fair CPU Sharing
OS চায় CPU time সবাই ভাগাভাগি করে পাক।
যেমন Round Robin Scheduling-এ:
P1 → 5 ms
P2 → 5 ms
P3 → 5 ms
এই process switching করতে context switch লাগে।
কারণ 3: Responsiveness
যদি একটা process I/O wait-এ যায় (যেমন disk read, network wait), CPU বসে থাকবে কেন?
OS তখন অন্য ready process-কে চালায়।
কারণ 4: Priority Handling
যদি high priority process ready হয়ে যায়, OS current process suspend করে high priority process চালাতে পারে।
6) PCB কী?
PCB = Process Control Block
PCB হলো Operating System kernel-এর একটি data structure, যেখানে প্রতিটি process সম্পর্কে প্রয়োজনীয় তথ্য রাখা হয়।
সহজ ভাষায়:
PCB হলো Process-এর “identity card + execution snapshot + resource record”।
OS প্রতিটি process-এর জন্য একটি PCB তৈরি করে।
7) PCB কেন দরকার?
OS যদি কোনো process manage করতে চায়, তাহলে তাকে জানতে হবে:
- Process-এর PID কত
Process ready/running/waiting কোন state-এ আছে
CPU registers-এ কী ছিল
Next instruction কোথায়
কোন memory pages process-এর
কোন file open আছে
কত CPU time খরচ করেছে
priority কত
এই সব তথ্য PCB-তে রাখা হয়।
8) PCB কোথায় থাকে?
PCB সাধারণত kernel memory-তে থাকে, user space-এ না। কারণ PCB খুব sensitive তথ্য ধারণ করে—যদি user process ইচ্ছামতো PCB modify করতে পারত, পুরো OS নষ্ট হয়ে যেত।
9) PCB-তে কী কী থাকে?
একটা PCB-তে সাধারণত নিচের তথ্যগুলো থাকে:
9.1 Process ID (PID)
প্রতিটি process-এর একটি unique id থাকে।
উদাহরণ:
Chrome -> PID 101
VSCode -> PID 205
Go App -> PID 310
OS PCB-তে PID রেখে process-কে uniquely identify করে।
9.2 Process State
Process কোন state-এ আছে:
New
Ready
Running
Waiting / Blocked
Terminated
PCB-তে এই state রাখা হয়।
9.3 Program Counter (PC)
Program Counter বলে দেয়:
“পরের কোন instruction execute হবে?”
যদি process মাঝপথে থেমে যায়, পরে resume করতে হলে PC save করা বাধ্যতামূলক।
9.4 CPU Registers
CPU registers-এ current process-এর temporary working data থাকে।
যেমন:
general purpose registers
accumulator / index registers
status register
flags
Process switch হলে এগুলো save না করলে process resume করে ভুল জায়গা থেকে কাজ করবে।
9.5 Stack Pointer (SP)
বর্তমান stack-এর top কোথায় আছে সেটা SP বলে।
Function call, local variables, return address—সব stack-এর সাথে জড়িত।
Process resume করার জন্য stack pointer save করা জরুরি।
9.6 Scheduling Information
OS scheduler-এর জন্য দরকার:
- priority
time quantum
queue pointer
CPU burst estimate
arrival time / waiting time
এসব PCB-তে থাকে।
9.7 Memory Management Information
প্রতিটি process-এর memory map আলাদা হতে পারে।
তাই PCB-তে থাকতে পারে:
base/limit info
page table pointer
segment table info
virtual memory mapping info
9.8 I/O / Open File Information
একটি process কোন কোন file open করেছে, কোন I/O device ব্যবহার করছে, file descriptors কী—এসবও PCB-তে tracked থাকতে পারে।
9.9 Accounting / Statistics
যেমন:
CPU time used
user id / group id
memory usage
job/account info
start time
9.10 Parent / Child / Links
অনেক OS PCB-তে parent process, child process, linked queue pointers ইত্যাদিও রাখে।
10) PCB-এর Structure — Conceptual View
একটা simplified PCB কল্পনা করো:
+----------------------------------+
| Process Control Block (PCB) |
+----------------------------------+
| PID |
| Process State |
| Program Counter |
| CPU Registers |
| Stack Pointer |
| Scheduling Info |
| Memory Management Info |
| Open Files / I/O Status |
| Accounting Info |
| Parent/Child/Queue Pointers |
+----------------------------------+
11) Process Table কী?
OS সাধারণত সব active process-এর PCB-গুলো একটি process table বা related kernel structure-এ maintain করে। (GeeksforGeeks)
অর্থাৎ:
Process Table
├── PCB of Process 1
├── PCB of Process 2
├── PCB of Process 3
└── ...
12) Context Switching এবং PCB-এর সম্পর্ক
এখন সবচেয়ে গুরুত্বপূর্ণ অংশ:
Context Switching করতে PCB কেন দরকার?
কারণ context switch-এর সময় running process-এর state কোথাও save করতে হবে।
সেই জায়গাটাই PCB।
13) Context Switching Step by Step
ধরো 2টা process আছে:
P1
P2
শুরুতে P1 চলছে।
Step 1: P1 Running
CPU এখন P1 execute করছে।
CPU registers-এ আছে P1-এর data:
- PC = next instruction of P1
- SP = stack position of P1
- registers = P1-এর working values
Step 2: Interrupt / Time Slice Expire / I/O Wait
হঠাৎ event হলো:
timer interrupt
higher priority process এসেছে
P1 I/O wait-এ গেছে
scheduler decide করল অন্য process run হবে
এখন context switch দরকার।
Step 3: CPU trap into kernel
CPU OS kernel mode-এ যায়, কারণ user process নিজে নিজে context switch করতে পারে না।
Step 4: Save current process state into PCB of P1
OS P1-এর context save করে:
- current PC
CPU registers
SP
status flags
process state
সব PCB(P1)-এ লিখে রাখে। (GeeksforGeeks)
অর্থাৎ:
CPU ----save----> PCB(P1)
Step 5: Update P1 state
যদি P1 time slice শেষ করে ready queue-তে যায়:
P1 state = READY
যদি I/O wait-এ যায়:
P1 state = WAITING
Step 6: Scheduler chooses next process
Scheduler ready queue থেকে P2 select করল।
Step 7: Load P2 state from PCB(P2)
এখন OS PCB(P2) থেকে P2-এর saved context load করবে:
- PC
registers
SP
flags
PCB(P2) ----load----> CPU
Step 8: Update P2 state = RUNNING
P2 এখন Running।
Step 9: CPU resumes P2
CPU এখন P2-র ঠিক আগের saved instruction থেকে continue করবে।
14) পুরো Flow Diagram
P1 running
|
| (interrupt / quantum expire / I/O wait)
v
Save P1 context into PCB(P1)
|
v
Scheduler selects P2
|
v
Load P2 context from PCB(P2)
|
v
P2 running
15) Example দিয়ে বোঝি
ধরো:
Process P1
কাজ করছে:
x = x + 1
y = y * 2
ধরো CPU registers-এ আছে:
R1 = x
R2 = y
PC = instruction #25
SP = 0xABC
এখন timer interrupt হলো।
OS save করল:
PCB(P1):
- PC = 25
- R1 = x value
- R2 = y value
- SP = 0xABC
- State = READY
তারপর P2 load করল।
পরে আবার P1 run করলে OS PCB(P1) থেকে এই মানগুলো CPU-তে ফেরত দেবে। তখন P1 ঠিক instruction #25 থেকে continue করবে।
16) Context Switch কখন হয়?
সাধারণত কয়েকটি ক্ষেত্রে:
16.1 Time Quantum Expire
Preemptive scheduling-এ একটা process নির্দিষ্ট সময় CPU ব্যবহার করতে পারে। সময় শেষ হলে switch।
উদাহরণ:
- Round Robin
16.2 I/O Request
Process যদি disk/network input-এর জন্য অপেক্ষা করে, CPU অন্য process-এ switch করবে।
16.3 Interrupt
যেমন:
- timer interrupt
device interrupt
16.4 Higher Priority Process Arrives
Low priority process চলছিল, হঠাৎ high priority process ready হলো → preemption।
16.5 System Call / Blocking Event
কিছু system call process-কে block করতে পারে।
17) Context Switching কি শুধু Process-এর মধ্যে হয়?
না। দুইভাবে হতে পারে:
17.1 Process Context Switch
এক process থেকে আরেক process-এ switch।
এখানে সাধারণত বেশি overhead, কারণ:
- different address space
memory mapping change
process-level state বেশি
17.2 Thread Context Switch
একই process-এর thread A থেকে thread B-তে switch।
এটা তুলনামূলক lighter হতে পারে, কারণ threads অনেক resource share করে।
18) Context Switch-এ ঠিক কী কী Save/Restore হয়?
সব OS/architecture-এ exact same না, কিন্তু সাধারণত:
Save হয়
Program Counter
Stack Pointer
CPU registers
Processor status word / flags
scheduling/accounting info updates
sometimes memory context reference
Restore হয়
নতুন process/thread-এর Program Counter
Stack Pointer
Registers
flags/status
memory context if needed
19) Context Switching-এর Overhead কী?
Context switch overhead হলো সেই সময়/কাজ, যেটা CPU useful program work না করে কেবল switch করার জন্য ব্যয় করে।
অর্থাৎ এই সময় CPU আসলে তোমার application-এর business logic execute করছে না; শুধু old state save করছে, new state load করছে।
20) কেন Context Switching Costly?
কারণ এতে অনেক low-level কাজ হয়:
kernel mode-এ যাওয়া
registers save করা
PCB update করা
scheduler চালানো
next process select করা
next PCB থেকে registers load করা
memory context switch হতে পারে
cache/TLB effects হতে পারে
21) Context Switching-এর Performance Cost
21.1 CPU Time Loss
Switch করতে সময় লাগে, কিন্তু এই সময় useful কাজ হয় না।
21.2 Cache Pollution
P1 চলার সময় CPU cache-এ P1-এর data ছিল।
P2 এলে cache-এ নতুন data আসবে।
পরে P1 এলে আবার cache warm করতে হবে।
21.3 TLB Effects
Different process হলে address space change হতে পারে, ফলে TLB flush বা refill cost হতে পারে (architecture/OS dependent)।
21.4 Scheduler Overhead
কোন process run হবে সেটাও compute করতে হয়।
22) Context Switching-এর সুবিধা
22.1 Multitasking সম্ভব করে
এক CPU-তে অনেক process চালানো যায়।
22.2 CPU Utilization বাড়ায়
এক process wait করলে অন্য process run করে।
22.3 Responsiveness বাড়ায়
UI freeze কম হয়, interactive system responsive থাকে।
22.4 Fairness
সব process CPU time পায়।
23) Context Switching-এর অসুবিধা
23.1 Overhead
Useful কাজ ছাড়া সময় খরচ হয়।
23.2 Too Frequent Switching ক্ষতিকর
খুব বেশি switch হলে throughput কমে যায়।
23.3 Cache/TLB penalties
Performance degrade হতে পারে।
24) Process State Diagram-এর সাথে Context Switch
একটা process সাধারণত এই states-এর মধ্যে ঘোরে:
NEW -> READY -> RUNNING -> WAITING -> READY -> RUNNING -> TERMINATED
Context switch মূলত বেশি দেখা যায় যখন:
- RUNNING → READY
RUNNING → WAITING
READY → RUNNING
25) Example: Round Robin Scheduling + Context Switch
ধরো 3টা process আছে:
P1
P2
P3
Time quantum = 4 ms
Execution:
Time 0-4 : P1
Time 4-8 : P2
Time 8-12 : P3
Time 12-16 : P1
এখানে 4 ms পরপর OS context switch করছে।
প্রতিবার:
- current process-এর PCB-তে context save
next process-এর PCB থেকে context load
26) PCB Lifecycle
Process Create হলে কী হয়?
যখন process create হয়:
OS PID assign করে
memory allocate করে
PCB create করে
initial state set করে
ready queue-তে পাঠায়
Process Running হলে
PCB continuously update হতে পারে:
state change
CPU time usage
scheduling info
open resources
Process Terminate হলে
PCB remove/cleanup করা হয়।
27) PCB-র গুরুত্বপূর্ণ Fields — Exam Style Table
| Field | কাজ |
|---|---|
| PID | Process uniquely identify করে |
| Process State | ready/running/waiting/terminated state রাখে |
| Program Counter | next instruction কোথায় execute হবে |
| CPU Registers | resume করার জন্য register values |
| Stack Pointer | stack-এর current top |
| Scheduling Info | priority, queue info, quantum |
| Memory Info | page table/base-limit/memory map |
| Open Files / I/O | file descriptors, device status |
| Accounting Info | CPU time, usage stats |
| Parent/Link Pointers | process relationship / queue linking |
28) Context Switching — Exam Definition
তুমি exam-এ এভাবে লিখতে পারো:
Context Switching হলো Operating System-এর এমন একটি প্রক্রিয়া যেখানে CPU বর্তমানে চলমান process বা thread-এর execution state (যেমন program counter, registers, stack pointer ইত্যাদি) save করে এবং অন্য process/thread-এর saved state load করে তাকে CPU-তে execute করতে দেয়। এই state সাধারণত PCB/TCB-তে সংরক্ষিত থাকে।
29) PCB — Exam Definition
Process Control Block (PCB) হলো Operating System kernel-এর একটি data structure যেখানে একটি process সম্পর্কিত প্রয়োজনীয় তথ্য—যেমন process ID, process state, program counter, CPU registers, stack pointer, scheduling information, memory management information, open files ইত্যাদি—সংরক্ষিত থাকে। Context switching, scheduling এবং process management-এর জন্য PCB অত্যন্ত গুরুত্বপূর্ণ।
30) Context Switching + PCB — একসাথে Short Concept
Running Process-এর state কোথায় save হবে? -> PCB
পরে resume করতে কী লাগবে? -> PCB-তে saved context
OS switch কীভাবে করে? -> old PCB-তে save, new PCB থেকে load
31) Context Switching বনাম Dispatch Latency
এগুলো এক জিনিস না।
Context Switch
পুরনো process-এর state save + নতুন process-এর state load
Dispatch Latency
scheduler process select করার পর actual CPU control handover করতে যত delay হয়, সেই total delay/latency
এদের সম্পর্ক আছে, কিন্তু same না। (GeeksforGeeks)
32) Context Switching বনাম Swapping
Context Switching
CPU execution state switch
Swapping
Process memory-কে RAM ↔ disk move করা
দুটো আলাদা concept।
33) Process Context Switch বনাম Thread Context Switch
| বিষয় | Process Switch | Thread Switch |
|---|---|---|
| Switch between | Different processes | Threads |
| Address space | Different হতে পারে | Same process হলে shared |
| Overhead | বেশি | কম হতে পারে |
| PCB/TCB | PCB heavy role | TCB বেশি relevant |
34) খুব সহজ বাস্তব analogy
ধরো তুমি ৩টা subject পড়ছো:
OS
Go
DBMS
প্রতিটি subject-এর জন্য তুমি একটা notebook page-এ লিখে রাখলে:
কোন topic-এ ছিলে
কোন page-এ ছিলে
next কী পড়বে
এই notebook page = PCB
এক subject থেকে আরেক subject-এ যাওয়ার সময় bookmark save/load = Context Switch
35) Viva / Interview-এর জন্য গুরুত্বপূর্ণ প্রশ্নোত্তর
Q1) PCB কী?
PCB হলো process-এর সমস্ত management ও execution related তথ্য রাখার kernel data structure।
Q2) Context switch কী?
এক process/thread-এর CPU state save করে অন্য process/thread-এর state load করার প্রক্রিয়া।
Q3) Context switch-এর সময় কী save হয়?
Program counter, registers, stack pointer, flags, process state ইত্যাদি।
Q4) Context switch-এর সময় state কোথায় save হয়?
সাধারণত process-এর PCB-তে (thread হলে TCB-তে)।
Q5) PCB কেন দরকার?
Scheduling, process management, resource tracking, context switching, accounting—সবকিছুর জন্য।
Q6) Context switch overhead কেন?
কারণ save/restore, scheduling, kernel transition, cache/TLB impact—এসব useful app work না।
Q7) PCB user space-এ থাকে না কেন?
কারণ PCB sensitive kernel data; user modify করলে OS নিরাপত্তা ও stability নষ্ট হবে।
36) One-shot Revision
PCB মনে রাখো এভাবে:
PCB = Process-এর Full Record
এতে থাকে:
PID
State
PC
Registers
SP
Memory info
Scheduling info
I/O info
Context Switch মনে রাখো এভাবে:
Save old process context → choose next → load next context → resume
37) Final Summary
PCB কী?
PCB হলো OS kernel-এর একটি data structure যেখানে একটি process সম্পর্কিত execution state, scheduling info, memory info, registers, program counter, stack pointer, open files ইত্যাদি সংরক্ষিত থাকে। এটি process management-এর কেন্দ্রবিন্দু।
Context Switching কী?
Context Switching হলো CPU-র control এক process/thread থেকে অন্য process/thread-এ স্থানান্তর করার প্রক্রিয়া। এতে running task-এর context save করা হয় এবং next task-এর saved context load করা হয়। Multitasking, fairness, responsiveness এবং CPU utilization বজায় রাখতে এটি অপরিহার্য।
PCB এবং Context Switching-এর সম্পর্ক
Context switch সম্ভব হয় কারণ OS running process-এর context PCB-তে save করে এবং next process-এর context তার PCB থেকে restore করে।