UNIX not implementing this is the example given by RPG in his first <i>Worse is Better</i> paper[1]:<p>> The MIT guy did not see any code that handled this case and asked the New Jersey guy how the problem was handled. The New Jersey guy said that the Unix folks were aware of the problem, but the solution was for the system routine to always finish, but sometimes an error code would be returned that signaled that the system routine had failed to complete its action. A correct user program, then, had to check the error code to determine whether to simply try the system routine again. The MIT guy did not like this solution because it was not the right thing.<p>1: <a href="https://www.dreamsongs.com/WIB.html" rel="nofollow">https://www.dreamsongs.com/WIB.html</a>
In the modern, multicore world, it might make sense to make all system calls asynchronous, sort of like io_uring: you make one userspace call (which might or might not switch to kernel mode) to "start" the operation and then later you can wait for one or more to finish. You can construct a blocking call by doing these operations sequentially, batch calls by starting several operations and then waiting, or write an event loop for async programming. And in many cases another core could handle the system calls eliminating context switches. But in this model the only blocking operation is waiting, so "PCLSR-ing" is trivial.