For those who have doubt about P1, when P1 goes to sleep() then it was placed in suspended list so when it will wake up it does not execute the whole down operation again but it will resume from that point of sleep() part and directly enters in critical section.
@@rahuldalal849 yes sir i added this comment after refering different website like stack overflow...i have the same doubt thats why i added here so others also understand
Awesome lec. Btw he forgot to mention one thing that p() and v() are atomic in nature. That is p and v are executed like a sngle statement by the processes; That is p() and v() are indivisible. Hope it makes sense.
thnx for this comment .....after watching the prev video I was wondering why we have multiple lines of code in semaphore wont preemption cause problems ......ty u cleared y doubt
Value of semaphore should be set to 1 in up section, even if the Block list is non empty, otherwise, the waking process won't be able to enter critical section
Alright I might he wrong here but check this: Sleep is a function which stops execution of any process until it is woken up by any other process and wake up is function which wakes up sleeping process So let's say if P1 enters CS it will set S = 0 and when P2 wants to enter CS it will be put to sleep(you might think it is currently in an infinite loop). When P1 executes up code it will check if Suspend queue is empty. Since it's not cause of P2, it will wake up P2 from the point it was put to sleep i.e. from else code(you can also say that it breaks that infinite loop). Now you gotta understand that s is not the only factor that decides if process enters CS. For example, let's say there is no code in down, all processes wanting to enter CS will enter right, since there is no condition which blocks them Now understand that P2 will wake up and start executing from when it was set to sleep i.e. from else state, it will come out of 2 ending paranthesis and enter CS. Hope you understood what I said🤘
I believe in my concentration of learning the concepts of Operating System. Today I wrote my semester exam well with the help of your lectures sir🙏🙏🙏 I believe that I will get some knowledge along with your blessings through your lectures to achieve my goal as GATE TOPPER. Thanks alot !!!🤗
The processes in the suspend queue once tried to enter in the CS but failing to enter into CS were added to the suspend queue. When the current process finishes its execution and comes out of the CS, it does not make the semaphore 1, semaphore remains 0. As a result no new process (which has not tried to enter CS before) will be able to enter in the CS, rather they will get added up in the suspend queue. On the other hand the first process in the suspend queue(FIFO) will be fetched from the suspend queue will be transfered to the ready queue and it will get the chance to enter the CS directly without performing the wait() section. One process at a time should be fetched from the suspend queue so that there will be no conflict to enter in the CS.
As I understood, the code for UP in the video is correct. The state till which the process has been executed is stored while putting it into the block queue So when it is executed after P2 is executed, the process P1 will execute the remaining code , after the down function. Then after executing the critical section it will execute the up() function, that will update the S.value=1 . And the CPU will again reach the starting state
@@super_singing107 what if there are two processes in block state. And in else part you are assigning value = 1, so if some third process will execute down() now then it'll enter into the critical section but according to FIFO 2nd process which was blocked should get chance. Correct me if I am wrong?
this year in barc 2021 exam one question reated to this topic has been asked and that question was - there were four options given and they were as follows -- a)down-v,signal b)up-p,wait c)down -p,wait d)none of these , so sir i learned all the cse subjects with ur videos only and it helps me a lot in my exam thankyou sir for ur great support to all ,,,,.love from patna
In comment section many people are thinking that there should be s.value =1 in the else part before wake up call for the process in up(s) ... just take these case at anytime the suspended list contains process p2,p3,p4 and process p1 is in cs now after execution in the cs it will have to go to the up(s) now in up(s) our process p2 is wake up() now when the p2 is set to sleep till that line all the execution is over so now p2 will directly go to the cs so the value of s should be 0 not 1 and thats why the code doesn't contain s.value=1 in the else part....now when all the p2,p3,p4 process get executed in the similar way the queue will become empty the value of s can be set as 1 and new process can enter into the cs.
Thanks! So will I be correct in saying that here the Down code is not working as an Entry code for critical section? In all previous examples, processes that failed to reach the critical section had to again follow entry code instructions.
In case a process is in the waiting queue, you have mentioned in the Down code that we'll wake it up, and that's all good, but I think after waking it up we also have to set S to 1 so that the newly awakened process could enter the critical section.
considering 2 processes p1 and p2 , suppose p2 enters CS by down operation so it will make s=0 and when p1 executes down code it will go in suspended state , so when p2 executes up operation it will wake up p1 but value of s will be still 0 so how will p1 execute the down code because the value of s=0 still.
The state till which the process has been executed is stored while putting it into the block queue So when it is executed after P2 is executed, the process P1 will execute the remaining code , after the down function. Then after executing the critical section it will execute the up() function, that will update the S.value=1 . And the CPU will again reach the starting state. [I copied this answer from sayanta bhattacharjee, He answered it just perfectly..]
@@upasonabiswas6783 so if p1 was in block list then S=0 and suppose p2 finishes executing then it will goto exit section code it will just wakeup p1 but how is it making s=1 again it's only going to do that if the list was not empty! If you find anything wrong correct me
just because u r HUMBLE and u made it easy for me to understand....i like it & subscried ur channel.......GREAT STUFF........would love to have some lectures on C Programming.
Else block in UP should be updated as follows Select a process and wake up //Chk again If (list is empty) S.value = 1 The only the value of semaphore can be made 1 again To allow other process to enter in CS .
I found these tutorials but then I started to see some similarities in the diagrams that my prof presented. I checked those ppt's and realized my prof had used your examples as screenshots in her ppt
For those who have confusion p1,p2,p3 processes are there imagine p1 enters the CS (critical section ) first so S=0 then p2 and p3 tries to enter into CS but cant bcz s=0 and p2 ,p3 goes to block stage now p1 finished executing its CS then it will execute the UP so acco to fifo p2 is removed from blocked stage and is allowed to enter into its CS ( ie p2 got blocked in the last line of DOWN function so when p2 is wake up it will start executing from the next line (after sleep() ) the next line after DOWN function is CS section ) p2 will start executing from the point it got blocked not from beginning
Sir, please clear my doubt, when a process P1 wake up, then also Semaphore value is 0, then how it will enter into critical section, instead of this, It will again go back to suspend list.
Code is absolutely correct.. sir might forgot to mention that the suspended process will restart from the same point where it got stopped last.. thank you for this series sir.. ❤️❤️
At 7:05 you said if a process is exiting Critical Section and S = 1. How S can be 1 if there is a process in Critical Section in the case of Binary Semaphore ?
In case if you're wondering if the up function is wrong, it is not. Code is correct. Once the suspended process is wakened up, it will directly execute the critical section, it will not execute the down function as it has already been executed.
noh youre wrong, after wake up, it sent to waiting queue means it can again try to get executed, but the code is wrong as the value of s remains 0 in up() code, so its not going to get executed for more information contact your os teacher...
Okay I see people a bit confused regarding the UP code in the comment section. The code is absolutely correct. A process which wakes up after sleep will start its execution from the point it left before the sleep. In the example used in the video, P2 runs the DOWN code and changes value of s from 1 to 0. Now when P1 comes it finds s = 0 and goes to sleep. When P2 runs the UP code it wakes up P1 and s still remains 0. We cannot change s here as P1 is still not inside the critical section but just woke up. Thus, P1 goes to critical section after waking up even though value of s = 0. Now you may wonder when will s become 1, simply when P1 runs its UP code ( i.e. when suspend list is empty) . In a nutshell, you need to understand that s = 1 is not the only condition that can make a process go inside the critical section. Generalize this example for 5 processes and you are good to go.
So why sleep() doesn't perform like it should in the previous video. Bhaiya said the process again waking up are now eligible to try to enter critical section
In binary semaphore only one process can access the Critical section at a time so if that process run the UP code while exiting from Critical section S will be set to 1 again but there won't be another process to overwrite value of S to 1.So at 4.29 we are considering two possibilities that value of S will be 0 or 1 that might be wrong there might be only one possibility and that is value of S is 0.
At up operation, S.value can never be 1. So, no chance of S.value to overwrite/remain 1. But if entry and exit codes are defined differently, eg. Entry = v(mutex) and exit = p(mutex) then you would see mutex = 1 at up operation Reference: next video in playlist
NIT I Introduction: Concept of Operating Systems, Generations of Operating systems, Types of Operating Systems, OS Services, System Calls, Structure of an OS - Layered, Monolithic, Microkernel Operating Systems, Concept of Virtual Machine. Case study on UNIX and WINDOWS Operating System. Processes: Definition, Process Relationship, Different states of a Process, Process State transitions, Process Control Block (PCB), Context switching Thread: Definition, Various states, Benefits of threads, Types of threads, Concept of multithreads, UNIT II Process Scheduling: Foundation and Scheduling objectives, Types of Schedulers, Scheduling criteria: CPU utilization, Throughput, Turnaround Time, Waiting Time, Response Time; Scheduling algorithms: Pre-emptive and Non pre-emptive, FCFS, SJF, RR; Multiprocessor scheduling: Real Time scheduling: RM and EDF. Solution, Inter-process Communication: Critical Section, Race Conditions, Mutual Exclusion, Hardware Solution, Strict Alternation, Peterson‘s The Producer\ Consumer Problem, Semaphores, Event Counters, Monitors, Message Passing, Classical IPC Problems: Reader‘s & Writer Problem, Dinning Philosopher Problem etc. UNIT III Deadlocks: Definition, Necessary and sufficient conditions for Deadlock, Deadlock Prevention, Deadlock Avoidance: Banker‘s algorithm, Deadlock detection and Recovery. Memory Management: Basic Fixed and concept, Logical and Physical address map, Memory allocation: Contiguous Memory allocation variable partition- Internal and Page allocation -Hardware support for External fragmentation and Compaction; Paging: Principleof operation - paging, Protection and sharing, Disadvantages of paging. UNIT IV Virtual Memory: Basics of Virtual Memory - Hardware and control structures - Locality of reference, Page fault , Working Set , Dirty page/Dirty bit - Demand paging, Page Replacement algorithms: Optimal, First in First Out (FIFO), Second Chance (SC), Not recently used (NRU) and Least Recently used (LRU). I/O Hardware: I/O devices, Device controllers, Direct memory access Principles of I/O Software: Goals of Interrupt handlers, Device drivers, Device independent I/O software, Secondary-Storage Structure: Disk structure, Disk scheduling algorithms UNIT V File Management: Concept of File, Access methods, File types, File operation, Directory structure, File System structure, Allocation methods (contiguous, linked, indexed), Free-space management (bit vector, linked list, grouping), directory implementation (linear list, hash table), efficiency and performance. Disk Management: Disk structure, Disk scheduling - FCFS, SSTF, SCAN, C-SCAN, Disk reliability, Disk formatting, Boot-block, Bad blocks
Sir i have a doubt... See if suspended process will wake up and then it will try to be executed but it will blocked again then up process will work then down then up... Yeh to chlta hi rhega😂 agar koi process esa hain to kya hoga agli process ki baari kaise ayegi
If we add in ready queue and we are not setting S.value=1 in else part it will be a deadlock situation right? This code makes sense if we are directly adding from Suspended list to Critical Section else the code should be like this Up( Semaphore S ) { S.value=1; if (!Suspended list is Empty){ Select a process from suspended List; Wake up(); }
no there will be no deadlock situation, in that code when p2 is going to sleep it is executing the last instruction in the down(S), so after it will wake up it will directly enter into the critical section because it will resume it will not execute down(S) again.
@@paulsnehasish5830 Doesnt make sense to me. The s.value was 0 thats why the process went into suspend queue.else part will get executed by the process leaving the cs(still the s.value is 0). One solution is that the program which dequeues the processes from the suspend queue sets the s.value to 1 before dequeing;
@@suryasikharej8116 it doesnt need to set the value to 1 because the blocked processes will get inti the CS upon waken up....once a process executes previous codes it wont execute them again...it will resume from the blocked state and will go to the CS directly
@@paulsnehasish5830 No a process can never get to critical section directly. It needs to get into the ready queue and if another process comes with higher priority than the dequeued one then that process will also get stuck because s.value is still 0;
As explained in previous video, every solution should follow mutual exclusion. And binary semaphore does follow it as only one process get access of the critical section. But what about counting semaphore? Many process where there inside the critical section just because semaphore value was more than 1. How we can say that counting semaphore is a solution when its not following the primary condition?
Counting semaphore only allows mutual exclusion when we initialize semaphore value to 1. If it's more than 1, then mutual exclusion cannot be guaranteed.
For example there are two processes p1 and p2 p1 run down code check the condition s==1 it is true then suddenly it is pre empted now p2 run and check the condition the condition is true and p2 is in critical section now and then p1 is resumed it is also in critical section mutual exclusion is violated here
Many thanks for such beautiful videos sir... Sir I have one doubt.. suppose p1 satisfy condition s.value==1 and before entering in block it get preemptive...and now p2 also satisfies condition and enters in critical section and now p1 comes back...then what would happen??
(To all the people who say code is incorrect) The code int the video is correct. When a process is woke up from Suspend list it goes back into Ready Queue.(Note the P1, P2 shown in ex were at the execution time).Whenever process'es enter from Ready to Run Queue The Semaphore values get initialized.
If you are correct then for the first time when P1 interfere P2 (Ready state to running state) then Semaphore value should have been initialized again as S=1 but since Semaphore is shared resource it did't initialize.
@@sakshijain5503 See the interfering processes first go into suspend list, and then when woke up goes to ready queue. (We assumed the processes coming are of same priority). Let's say p1,p2,p3 came concurrently ,say p2 entered CS, p1,p3 goes to suspend queue, again when cpu goes back to p1 n p3 it puts them in ready queue (pops until list Is empty) now semaphore value is set as 1. //Correct me if I'm wrong.
if there are several processes p1, p2, p3 .......pn then if S = 1 the process p1 will go into critical section to wait queue there will a condition do { if (S
For binary Semaphore it is not possible to enter critical section as no P() is performed but possible in case of counting Semaphore if prior a P() is performed.
First P2 wants to enter in CS, it runs Down code and if stmt is executed and it exits down code and enters CS..., then P1 wants to enter CS (remember here P2 has not executed Up code yet) ...P1 executes Down code and else stmt is executed and it then exits Down code and P1 enters Suspend list (Remember here P1 has executed Down code by going in else stmt....when it wakes up again, it will not execute Down code again) now P2 executes Up code and P1 wakes up again....and it directly enters in CS and then executes Up code...(if in some case there was another process P3 and before P1 was able to execute up code, P3 wants to enter in CS, it will first execute Down code and get suspended and then same process will repeat where P1 executes Up code and P3 wakes up again and enters CS and then P3 executes Up code and then everything is finished!
I watched your 4-5 videos and now I want to ask : by any chance do you teach for UGC net ? If you have paid classes kindly let me know I want to join as soon as possible.....and thanks for the wonderful explanation 🙏
struct semaphore { enum value(0, 1); // q contains all Process Control Blocks (PCBs) // corresponding to processes got blocked // while performing down operation. Queue q; } P(semaphore s) { if (s.value == 1) { s.value = 0; } else { // add the process to the waiting queue q.push(P) sleep(); } } V(Semaphore s) { if (s.q is empty) { s.value = 1; } else { // select a process from waiting queue s.value = 1; Process p=q.pop(); wakeup(p); } } This is geeksforgeeks() binary semaphore code which says that , in function V() if you are going in else part u need to increment the value of semaphore which was missing in the video
In the last example , when P1 is put into the ready queue how it gets executed beacuse then also the value of S=0. When the value of S=0 , the down statement can not be executed. Please explain!
Hi, please improve your video related to Counting Semaphore. I could not understand the need for counting semaphore as it does not allow for mutual exclusion that is the fundamental need for synchronization. However, after reading from Quora, i got to know that Counting Semaphore is useful when a resource needs to be used strictly by only N processes. I hope you will add more to the previous video to clear the confusion.
After a down and up series of operations are carried out and executed. What about resetting semaphore value? from 0 to 1 for next set of processes to be cleared.
For those who have doubt about P1, when P1 goes to sleep() then it was placed in suspended list so when it will wake up it does not execute the whole down operation again but it will resume from that point of sleep() part and directly enters in critical section.
was it a joke or real?
@@omparkashsuna8986 no bro its a joke....just laugh and be happy🤗🤗
I was going to ask the same... Thank you. Because if it started again then it will again be suspended as the semaphore is 0.
Bhai jo tumne explain kiya Comment vo thik h kya?
@@rahuldalal849 yes sir i added this comment after refering different website like stack overflow...i have the same doubt thats why i added here so others also understand
Awesome lec. Btw he forgot to mention one thing that p() and v() are atomic in nature. That is p and v are executed like a sngle statement by the processes; That is p() and v() are indivisible. Hope it makes sense.
I think this is important to know because otherwise it's as good as locking in regards to mutual exclusion.
this is really important comment
thnx for this comment .....after watching the prev video I was wondering why we have multiple lines of code in semaphore wont preemption cause problems ......ty u cleared y doubt
Thank you for the explanation😊
Value of semaphore should be set to 1 in up section, even if the Block list is non empty, otherwise, the waking process won't be able to enter critical section
True
im binge watching ur os videos, they r really well made,i dont know why our college faculty doesnt teach like this.
hatsoff to ur efforts
UA-cam is a competitive platform only the best videos are suggested while searching
Exactly bro 😂
Alright I might he wrong here but check this:
Sleep is a function which stops execution of any process until it is woken up by any other process and wake up is function which wakes up sleeping process
So let's say if P1 enters CS it will set S = 0 and when P2 wants to enter CS it will be put to sleep(you might think it is currently in an infinite loop).
When P1 executes up code it will check if Suspend queue is empty. Since it's not cause of P2, it will wake up P2 from the point it was put to sleep i.e. from else code(you can also say that it breaks that infinite loop).
Now you gotta understand that s is not the only factor that decides if process enters CS. For example, let's say there is no code in down, all processes wanting to enter CS will enter right, since there is no condition which blocks them
Now understand that P2 will wake up and start executing from when it was set to sleep i.e. from else state, it will come out of 2 ending paranthesis and enter CS.
Hope you understood what I said🤘
well explained.. Thanks :)
For this problem see this Solution video on 2x.
ua-cam.com/video/VcVbUbPNIfw/v-deo.html
I believe in my concentration of learning the concepts of Operating System. Today I wrote my semester exam well with the help of your lectures sir🙏🙏🙏 I believe that I will get some knowledge along with your blessings through your lectures to achieve my goal as GATE TOPPER. Thanks alot !!!🤗
did u passed the exam or not?? that is the main question
@@amanahmed6057 I got O grade. I repeat O grade☺️🤗 91-100 marks in JNTUK validation. Tha k you soo much sir
Cool! Would ya like to talk to me on insta? Your goal seems similar to mine and I'm interested in having a talk about gate with you!
The processes in the suspend queue once tried to enter in the CS but failing to enter into CS were added to the suspend queue. When the current process finishes its execution and comes out of the CS, it does not make the semaphore 1, semaphore remains 0. As a result no new process (which has not tried to enter CS before) will be able to enter in the CS, rather they will get added up in the suspend queue. On the other hand the first process in the suspend queue(FIFO) will be fetched from the suspend queue will be transfered to the ready queue and it will get the chance to enter the CS directly without performing the wait() section. One process at a time should be fetched from the suspend queue so that there will be no conflict to enter in the CS.
is it possible?
Thank you so much for the explanation ☺️
As I understood, the code for UP in the video is correct.
The state till which the process has been executed is stored while putting it into the block queue
So when it is executed after P2 is executed, the process P1 will execute the remaining code , after the down function.
Then after executing the critical section it will execute the up() function, that will update the S.value=1 . And the CPU will again reach the starting state
V(Semaphore s)
{
if (s.q is empty) {
s.value = 1;
}
else {
// select a process from waiting queue
s.value = 1;
Process p=q.pop();
wakeup(p);
}
}
@@super_singing107 what if there are two processes in block state. And in else part you are assigning value = 1, so if some third process will execute down() now then it'll enter into the critical section but according to FIFO 2nd process which was blocked should get chance. Correct me if I am wrong?
Best explanation on OS and its sub topics on youtube....Thanks sir....
this year in barc 2021 exam one question reated to this topic has been asked and that question was - there were four options given and they were as follows -- a)down-v,signal b)up-p,wait c)down -p,wait d)none of these , so sir i learned all the cse subjects with ur videos only and it helps me a lot in my exam thankyou sir for ur great support to all ,,,,.love from patna
Hands Down the Best Teacher on YT to learn about theoretical topics
Thank You sir 🙏🙏
I think
up(Semaphore S){
if(Suspended list is empty){
S.value=1;
}
else{
S.value=1;
remove one process from suspended list:wakeUP();
}
}
yes
Exactly
I'm also thinking same
Yes it should be other wise how the blocked process will enter critical section
Yes that is minor mistake otherwise there will again be a deadlock
In comment section many people are thinking that there should be s.value =1 in the else part before wake up call for the process in up(s) ... just take these case
at anytime the suspended list contains process p2,p3,p4 and process p1 is in cs now after execution in the cs it will have to go to the up(s) now in up(s) our process p2 is wake up() now when the p2 is set to sleep till that line all the execution is over so now p2 will directly go to the cs so the value of s should be 0 not 1 and thats why the code doesn't contain s.value=1 in the else part....now when all the p2,p3,p4 process get executed in the similar way the queue will become empty the value of s can be set as 1 and new process can enter into the cs.
Thanks!
So will I be correct in saying that here the Down code is not working as an Entry code for critical section? In all previous examples, processes that failed to reach the critical section had to again follow entry code instructions.
For this problem see this Solution video on 2x.
ua-cam.com/video/VcVbUbPNIfw/v-deo.html
Thank you for the explanation ☺️
Great Work Sir...Huge respect and Love from PAKISTAN.
tum log bhi operating system padhte ho..... 😁😁
OS padhke bomb banaega
In case a process is in the waiting queue, you have mentioned in the Down code that we'll wake it up, and that's all good, but I think after waking it up we also have to set S to 1 so that the newly awakened process could enter the critical section.
The process will wake up and will not repeat what it has already done . it will enter CS and not execute the down code again
tum dono ne same shirt pehna hua hai
@@abhishekmishra8338 😂
You are a good teacher of OS. I am proud of you sir.
considering 2 processes p1 and p2 , suppose p2 enters CS by down operation so it will make s=0 and when p1 executes down code it will go in suspended state , so when p2 executes up operation it will wake up p1 but value of s will be still 0 so how will p1 execute the down code because the value of s=0 still.
Same doubt
@@Kitzey2k same here, have you got any solution for that?
@@abrarulhaqshaik No
The state till which the process has been executed is stored while putting it into the block queue
So when it is executed after P2 is executed, the process P1 will execute the remaining code , after the down function.
Then after executing the critical section it will execute the up() function, that will update the S.value=1 . And the CPU will again reach the starting state. [I copied this answer from sayanta bhattacharjee, He answered it just perfectly..]
@@upasonabiswas6783 so if p1 was in block list then S=0 and suppose p2 finishes executing then it will goto exit section code it will just wakeup p1 but how is it making s=1 again it's only going to do that if the list was not empty! If you find anything wrong correct me
just because u r HUMBLE and u made it easy for me to understand....i like it & subscried ur channel.......GREAT STUFF........would love to have some lectures on C Programming.
Else block in UP should be updated as follows
Select a process and wake up
//Chk again
If (list is empty)
S.value = 1
The only the value of semaphore can be made 1 again
To allow other process to enter in CS .
You afe right bro
I found these tutorials but then I started to see some similarities in the diagrams that my prof presented. I checked those ppt's and realized my prof had used your examples as screenshots in her ppt
lol
@Khushal You are from IT dept?
For those who have confusion
p1,p2,p3 processes are there
imagine p1 enters the CS (critical section ) first so S=0
then p2 and p3 tries to enter into CS but cant bcz s=0 and p2 ,p3 goes to block stage
now p1 finished executing its CS then it will execute the UP so acco to fifo p2 is removed from blocked stage and is allowed to enter into its CS ( ie p2 got blocked in the last line of DOWN function so when p2 is wake up it will start executing from the next line (after sleep() ) the next line after DOWN function is CS section )
p2 will start executing from the point it got blocked not from beginning
Sir, please clear my doubt, when a process P1 wake up, then also Semaphore value is 0, then how it will enter into critical section, instead of this, It will again go back to suspend list.
same doubt!! After semaphore becomes 0 we never update it to 1.
Same is my doubt
@@kamlakalouni1505 same doubt.
sir forgot to update the value of semaphore there
Code is absolutely correct.. sir might forgot to mention that the suspended process will restart from the same point where it got stopped last.. thank you for this series sir.. ❤️❤️
❤❤❤❤❤❤💕
yah but in the previous video sir said after wake up process goes to ready queue and rechecks the condition of entry to enter into cs
Sir ur all vedios we understand very clearly tq sir👍
At 7:05 you said if a process is exiting Critical Section and S = 1. How S can be 1 if there is a process in Critical Section in the case of Binary Semaphore ?
Same doubt. Did you got any solution?
Saras👌👌👌
In case if you're wondering if the up function is wrong, it is not. Code is correct. Once the suspended process is wakened up, it will directly execute the critical section, it will not execute the down function as it has already been executed.
noh youre wrong, after wake up, it sent to waiting queue means it can again try to get executed, but the code is wrong as the value of s remains 0 in up() code, so its not going to get executed for more information contact your os teacher...
@@lucidlynxxx I think he's right because I have checked the code in other sources and it is right.
This was so helpful man, your teaching is amazing keep it up bro!!
literally u teach better than IIT profs!
Thanku sir for all ur video's it's really help me to alot understand the concept 😊😊...
Waooo sir g your lecture awesome 👍👍.mujy pori UA-cam py Sirf ap k hi lecture smj m aty hain
Okay I see people a bit confused regarding the UP code in the comment section. The code is absolutely correct. A process which wakes up after sleep will start its execution from the point it left before the sleep. In the example used in the video, P2 runs the DOWN code and changes value of s from 1 to 0. Now when P1 comes it finds s = 0 and goes to sleep. When P2 runs the UP code it wakes up P1 and s still remains 0. We cannot change s here as P1 is still not inside the critical section but just woke up. Thus, P1 goes to critical section after waking up even though value of s = 0. Now you may wonder when will s become 1, simply when P1 runs its UP code ( i.e. when suspend list is empty) .
In a nutshell, you need to understand that s = 1 is not the only condition that can make a process go inside the critical section. Generalize this example for 5 processes and you are good to go.
So why sleep() doesn't perform like it should in the previous video.
Bhaiya said the process again waking up are now eligible to try to enter critical section
You are great sir
In binary semaphore only one process can access the Critical section at a time so if that process run the UP code while exiting from Critical section S will be set to 1 again but there won't be another process to overwrite value of S to 1.So at 4.29 we are considering two possibilities that value of S will be 0 or 1 that might be wrong there might be only one possibility and that is value of S is 0.
Thanks a lot you have explained binary semaphore perfectly
Thanks bro your video has helped me a lot you have very good teaching skills . Thanks for this
Semaphore requires "lock with condition variable" as well. For Binary semaphore, I think Down only needs "if" part, "else" not required.
At up operation, S.value can never be 1. So, no chance of S.value to overwrite/remain 1.
But if entry and exit codes are defined differently, eg. Entry = v(mutex) and exit = p(mutex) then you would see mutex = 1 at up operation
Reference: next video in playlist
NIT I Introduction: Concept of Operating Systems, Generations of Operating systems, Types of Operating Systems, OS Services, System Calls, Structure of an OS - Layered, Monolithic, Microkernel Operating Systems, Concept of Virtual Machine. Case study on UNIX and WINDOWS Operating System. Processes: Definition, Process Relationship, Different states of a Process, Process State transitions, Process Control Block (PCB), Context switching Thread: Definition, Various states, Benefits of threads, Types of threads, Concept of multithreads, UNIT II Process Scheduling: Foundation and Scheduling objectives, Types of Schedulers, Scheduling criteria: CPU utilization, Throughput, Turnaround Time, Waiting Time, Response Time; Scheduling algorithms: Pre-emptive and Non pre-emptive, FCFS, SJF, RR; Multiprocessor scheduling: Real Time scheduling: RM and EDF. Solution, Inter-process Communication: Critical Section, Race Conditions, Mutual Exclusion, Hardware Solution, Strict Alternation, Peterson‘s The Producer\ Consumer Problem, Semaphores, Event Counters, Monitors, Message Passing, Classical IPC Problems: Reader‘s & Writer Problem, Dinning Philosopher Problem etc. UNIT III Deadlocks: Definition, Necessary and sufficient conditions for Deadlock, Deadlock Prevention, Deadlock Avoidance: Banker‘s algorithm, Deadlock detection and Recovery. Memory Management: Basic Fixed and concept, Logical and Physical address map, Memory allocation: Contiguous Memory allocation variable partition- Internal and Page allocation -Hardware support for External fragmentation and Compaction; Paging: Principleof operation - paging, Protection and sharing, Disadvantages of paging. UNIT IV Virtual Memory: Basics of Virtual Memory - Hardware and control structures - Locality of reference, Page fault , Working Set , Dirty page/Dirty bit - Demand paging, Page Replacement algorithms: Optimal, First in First Out (FIFO), Second Chance (SC), Not recently used (NRU) and Least Recently used (LRU). I/O Hardware: I/O devices, Device controllers, Direct memory access Principles of I/O Software: Goals of Interrupt handlers, Device drivers, Device independent I/O software, Secondary-Storage Structure: Disk structure, Disk scheduling algorithms UNIT V File Management: Concept of File, Access methods, File types, File operation, Directory structure, File System structure, Allocation methods (contiguous, linked, indexed), Free-space management (bit vector, linked list, grouping), directory implementation (linear list, hash table), efficiency and performance.
Disk Management: Disk structure, Disk scheduling - FCFS, SSTF, SCAN, C-SCAN, Disk reliability, Disk formatting, Boot-block, Bad blocks
Syllabus hai college ka....sare points is playlist me hain...thanks a lot sir🙏
hey i am from Pakistan you are the best teacher i ever found. Thank you so much.
Bada mast topic hai binary semaphore **gate smashers**
Sir i have a doubt... See if suspended process will wake up and then it will try to be executed but it will blocked again then up process will work then down then up... Yeh to chlta hi rhega😂 agar koi process esa hain to kya hoga agli process ki baari kaise ayegi
सर में आपका सदा आभारी रहूंगा धन्यवाद 🙏
Your Lectuers Are Helpful for Us...
Thanku sir concept clear krne k liye
If we add in ready queue and we are not setting S.value=1 in else part it will be a deadlock situation right?
This code makes sense if we are directly adding from Suspended list to Critical Section else the code should be like this
Up( Semaphore S )
{
S.value=1;
if (!Suspended list is Empty){
Select a process from suspended List;
Wake up();
}
no there will be no deadlock situation, in that code when p2 is going to sleep it is executing the last instruction in the down(S), so after it will wake up it will directly enter into the critical section because it will resume it will not execute down(S) again.
yes because the previous context was saved in PCB as the process got blocked it was basically looping indefinitely until awakened !
@@paulsnehasish5830 Doesnt make sense to me. The s.value was 0 thats why the process went into suspend queue.else part will get executed by the process leaving the cs(still the s.value is 0). One solution is that the program which dequeues the processes from the suspend queue sets the s.value to 1 before dequeing;
@@suryasikharej8116 it doesnt need to set the value to 1 because the blocked processes will get inti the CS upon waken up....once a process executes previous codes it wont execute them again...it will resume from the blocked state and will go to the CS directly
@@paulsnehasish5830 No a process can never get to critical section directly. It needs to get into the ready queue and if another process comes with higher priority than the dequeued one then that process will also get stuck because s.value is still 0;
As explained in previous video, every solution should follow mutual exclusion. And binary semaphore does follow it as only one process get access of the critical section. But what about counting semaphore? Many process where there inside the critical section just because semaphore value was more than 1. How we can say that counting semaphore is a solution when its not following the primary condition?
Counting semaphore only allows mutual exclusion when we initialize semaphore value to 1. If it's more than 1, then mutual exclusion cannot be guaranteed.
In Up we need to write below logic in else section After wakeup one process ,again check whether suspendlist is empty if so assign s value to 1.
Sir, big thanks from Politechnika Rzeszowska
when the suspend list is not empty and we are waking up a process then also the S should change back to 1 so that next down can be performed
For example there are two processes p1 and p2 p1 run down code check the condition s==1 it is true then suddenly it is pre empted now p2 run and check the condition the condition is true and p2 is in critical section now and then p1 is resumed it is also in critical section mutual exclusion is violated here
Best lecture on binary semaphore..
Many thanks for such beautiful videos sir... Sir I have one doubt.. suppose p1 satisfy condition s.value==1 and before entering in block it get preemptive...and now p2 also satisfies condition and enters in critical section and now p1 comes back...then what would happen??
sir u r great
Great great great sir
After putting p1 in ready queue..how will the semaphore value become to 1 or who will call the up(s)
Sir thanku for the lecture.😊
Sir after the execution of wakeup() when s value will become 1 and how?
yeah i too have the same doubt.
(To all the people who say code is incorrect)
The code int the video is correct. When a process is woke up from Suspend list it goes back into Ready Queue.(Note the P1, P2 shown in ex were
at the execution time).Whenever process'es enter from Ready to Run Queue The Semaphore values get initialized.
If you are correct then for the first time when P1 interfere P2 (Ready state to running state) then Semaphore value should have been initialized again as S=1 but since Semaphore is shared resource it did't initialize.
@@sakshijain5503 See the interfering processes first go into suspend list, and then when woke up goes to ready queue. (We assumed the processes coming are of same priority).
Let's say p1,p2,p3 came concurrently ,say p2 entered CS, p1,p3 goes to suspend queue, again when cpu goes back to p1 n p3 it puts them in ready queue (pops until list Is empty) now semaphore value is set as 1.
//Correct me if I'm wrong.
Best teaching style 👌👌👌
if there are several processes p1, p2, p3 .......pn then if S = 1 the process p1 will go into critical section to wait queue there will a condition do { if (S
GOD BLESS UH SIR G
RESPECT FROM PAK
Nice explaination❤ thanku sir🙏
Thank you sir
Har video pe aapka thank u milta hai...
But sir ka video bahut hi conceptual videos hote hai........
Ek baar. Me concept clear ho jata hai.......
Great
Explanation too good. Very helpful.
For binary Semaphore it is not possible to enter critical section as no P() is performed but possible in case of counting Semaphore if prior a P() is performed.
mindblowing explanation sir!!
First P2 wants to enter in CS, it runs Down code and if stmt is executed and it exits down code and enters CS..., then P1 wants to enter CS (remember here P2 has not executed Up code yet) ...P1 executes Down code and else stmt is executed and it then exits Down code and P1 enters Suspend list (Remember here P1 has executed Down code by going in else stmt....when it wakes up again, it will not execute Down code again) now P2 executes Up code and P1 wakes up again....and it directly enters in CS and then executes Up code...(if in some case there was another process P3 and before P1 was able to execute up code, P3 wants to enter in CS, it will first execute Down code and get suspended and then same process will repeat where P1 executes Up code and P3 wakes up again and enters CS and then P3 executes Up code and then everything is finished!
I watched your 4-5 videos and now I want to ask : by any chance do you teach for UGC net ?
If you have paid classes kindly let me know I want to join as soon as possible.....and thanks for the wonderful explanation 🙏
Thank you Sir!
Amazing sir ❤️❤️
great piece of work....
sir I have a doubt that binary semaphore follow mutual Exclusion but is it follow progress and bounded waiting if yes then explain why?
Your Videos Made my 14 Num Confirm in Just First Try in learning from your video 👏👏👏
I wish you will get full marks along with all the concepts cleared
struct semaphore {
enum value(0, 1);
// q contains all Process Control Blocks (PCBs)
// corresponding to processes got blocked
// while performing down operation.
Queue q;
} P(semaphore s)
{
if (s.value == 1) {
s.value = 0;
}
else {
// add the process to the waiting queue
q.push(P)
sleep();
}
}
V(Semaphore s)
{
if (s.q is empty) {
s.value = 1;
}
else {
// select a process from waiting queue
s.value = 1;
Process p=q.pop();
wakeup(p);
}
}
This is geeksforgeeks() binary semaphore code which says that , in function V() if you are going in else part u need to increment the value of semaphore which was missing in the video
Thank U sir ji 🙏
Make videos on computer organization and architecture please sir...... Please
👍
Thank u so much sir😍😍
Hlo
Thanks Sir.
In up else needs an increment for S also so the next process will enter otherwise its a total block.
For those who are having doubt.
struct semaphore {
enum value(0, 1);
// q contains all Process Control Blocks (PCBs)
// corresponding to processes got blocked
// while performing down operation.
Queue q;
} P(semaphore s)
{
if (s.value == 1) {
s.value = 0;
}
else {
// add the process to the waiting queue
q.push(P)
sleep();
}
}
V(Semaphore s)
{
if (s.q is empty) {
s.value = 1;
}
else {
// select a process from waiting queue
q.pop();
wakeup();
}
}
Take an example for your self and u will automaticaly understand the concept..
Thanks for helping the students 🙂🙂..
Sir, aap itne intelligent kese ho.
Superb
Guruji🙏
Thankyou 🥰❤️ sir.. you are the best❤️
THANKS A LOT ..VERY NICE EXPLANATION
Thanku
Really appreciable🙏🙏🙏
Hlo
Well explained...
But I think this lecture should be just after "semaphore & counting semaphore" Lecture....
Thanks sir ji
In the last example , when P1 is put into the ready queue how it gets executed beacuse then also the value of S=0. When the value of S=0 , the down statement can not be executed.
Please explain!
Thanku so much sir ji
Hi, please improve your video related to Counting Semaphore. I could not understand the need for counting semaphore as it does not allow for mutual exclusion that is the fundamental need for synchronization. However, after reading from Quora, i got to know that Counting Semaphore is useful when a resource needs to be used strictly by only N processes. I hope you will add more to the previous video to clear the confusion.
Well explained
still helps a lot
in the end after down operation, the value of semaphore is 0 so even if P1 wants to execute how will it execute?
Exactly same doubt
Thank you sir....
After a down and up series of operations are carried out and executed. What about resetting semaphore value? from 0 to 1 for next set of processes to be cleared.