![[Return to Bookshelf]](BOOKSHELF.GIF) 
![[Contents]](TOC.GIF) 
![[Previous Section]](PREV.GIF) 
![[Next Section]](NEXT.GIF) 
![[Index]](INDEX.GIF) 
![[Help]](HELP.GIF) 
There are several interactions with the OpenVMS operating system
that should be noted:
   - Like system service calls, pagefault waits are also
   thread-synchronous. When a thread incurs a "hard" pagefault
   (one which involves reading the page from disk), an upcall is
   performed and the thread is placed in a blocked state. DECthreads
   schedules another thread to run in its place. When the pagefault
   resolution is complete, another upcall occurs and DECthreads
   schedules it to run at its next opportunity. It is possible for
   multiple threads to take faults on the same page at approximately
   the same time. Each of them is blocked in turn, and they are all
   unblocked when the page becomes valid.
   
- Most OpenVMS system services would not be able to tolerate
   being called by multiple threads concurrently. Therefore,
   calls to OpenVMS system services are serialized, by means of a
   mechanism called the inner mode semaphore. If a second
   thread attempts to call a system service while another thread
   is in the middle of calling a system service, the second thread
   will be blocked by an upcall until the first thread completes its
   service call.
   
- DECthreads timeslicing has changed slightly under
   OpenVMS Alpha Version 7.0. Prior to Version 7.0, the DECthreads
   timeslicer was implemented using an OpenVMS timer. This caused
   a DECthreads scheduler AST to be delivered to the process at
   regular wall-clock time intervals. While running on wall-clock
   time was a necessary evil (in order to be able to interrupt
   system service blocks), this timeslice mechanism had several
   drawbacks. In Version 7.0, timeslicing is implemented by means
   of an upcall that is delivered after the thread has consumed a
   sufficient amount of CPU time. Thus, when no threads are running,
   no timeslicing takes place.