How does Windows switch to supervisor mode during a system call? I heard something about a "trap 0", but that doesn't even seem like an x86 instruction. I stepped through some system calls, but I can't find any. Do a lot of Windows system calls run in user mode? Which DO run in supervisor mode?
How does Windows switch to supervisor mode during a system call?
1.9k Views Asked by Jens Björnhager At
2
There are 2 best solutions below
1

x86 CPUs provide the SYSENTER
and SYSEXIT
instructions. These instructions execute a very fast switch from user mode to kernel mode and back, and modern OSes running on modern CPUs most likely use these instead of very costly interrupts or far calls.
You can see more details in Intel's Software Developer's Manuals, specifically volume 2B
Related Questions in WINDOWS
- Missing Header (Feature Title and Toolbar) on some Feature Work Items in TFS Web Access
- Upgrading separate Project Collection Database to new TFS Version
- OpsHub Visual Studio Online Migration Utility Hangs on Creating Configuration
- The merge tool is not showing when call Workspace.ResolveConflict method in TFS 2012
- HowTo: change a project's status from `Invalid` to `Valid`?
- TFS 2013 Object reference not set to an instance of an object in Team Explorer
- Release Management for Visual Studio 2013 - Release Exception
- Visual studio 2013 team project has been deleted
- TFS version control does not show conflicts
- include typescript file in output result build with TFS
Related Questions in WINAPI
- Missing Header (Feature Title and Toolbar) on some Feature Work Items in TFS Web Access
- Upgrading separate Project Collection Database to new TFS Version
- OpsHub Visual Studio Online Migration Utility Hangs on Creating Configuration
- The merge tool is not showing when call Workspace.ResolveConflict method in TFS 2012
- HowTo: change a project's status from `Invalid` to `Valid`?
- TFS 2013 Object reference not set to an instance of an object in Team Explorer
- Release Management for Visual Studio 2013 - Release Exception
- Visual studio 2013 team project has been deleted
- TFS version control does not show conflicts
- include typescript file in output result build with TFS
Related Questions in X86
- Missing Header (Feature Title and Toolbar) on some Feature Work Items in TFS Web Access
- Upgrading separate Project Collection Database to new TFS Version
- OpsHub Visual Studio Online Migration Utility Hangs on Creating Configuration
- The merge tool is not showing when call Workspace.ResolveConflict method in TFS 2012
- HowTo: change a project's status from `Invalid` to `Valid`?
- TFS 2013 Object reference not set to an instance of an object in Team Explorer
- Release Management for Visual Studio 2013 - Release Exception
- Visual studio 2013 team project has been deleted
- TFS version control does not show conflicts
- include typescript file in output result build with TFS
Related Questions in SYSTEM-CALLS
- Missing Header (Feature Title and Toolbar) on some Feature Work Items in TFS Web Access
- Upgrading separate Project Collection Database to new TFS Version
- OpsHub Visual Studio Online Migration Utility Hangs on Creating Configuration
- The merge tool is not showing when call Workspace.ResolveConflict method in TFS 2012
- HowTo: change a project's status from `Invalid` to `Valid`?
- TFS 2013 Object reference not set to an instance of an object in Team Explorer
- Release Management for Visual Studio 2013 - Release Exception
- Visual studio 2013 team project has been deleted
- TFS version control does not show conflicts
- include typescript file in output result build with TFS
Related Questions in SUPERVISOR-MODE
- Missing Header (Feature Title and Toolbar) on some Feature Work Items in TFS Web Access
- Upgrading separate Project Collection Database to new TFS Version
- OpsHub Visual Studio Online Migration Utility Hangs on Creating Configuration
- The merge tool is not showing when call Workspace.ResolveConflict method in TFS 2012
- HowTo: change a project's status from `Invalid` to `Valid`?
- TFS 2013 Object reference not set to an instance of an object in Team Explorer
- Release Management for Visual Studio 2013 - Release Exception
- Visual studio 2013 team project has been deleted
- TFS version control does not show conflicts
- include typescript file in output result build with TFS
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
A system call is also known as a software interrupt. The x86 instruction which calls a software interrupt has the mnemonic INT. How data is passed to the operative system is defined by the operative system ABI. As far as I know, Windows uses the immediate 0x80 for all its routines and sends additional data via registers, but I'm not sure. 0x20 is the first available immediate, since the range 0 through 31 is reserved and used for general exceptions like integer division by zero and memory faults.
What basically happens is that the CPU changes to privileged mode and reads the IDTR (Interupt Descriptor Table Register). There it finds the physical memory address for the IDT (Interupt Descriptor Table) and does a lookup into the IDT, based on the 8-bit immediate baked into the software interrupt instruction. The IDT can be stored wherever in memory. The IDTR can be read/written by the instructions LIDT and SIDT. The IDT can store a variety of information, but for interrupts it stores the address to the service routine associated with the INT immediate.
Examples of win32-functions which fires a software interrupt.. hm. printf and friends sure does, as does EnterCriticalSection. In Windows Vista and Windows 7, some OpenGL and DirectX API calls now require a roundtrip into kernel land due to the new composite manager. For OpenGL, that applies for all functions who reads the current backbuffer, like glReadPixels, glCopy(Sub)TexImage2D, etc.
P.S: Take this post with a pinch of salt. It's been a while since I messed around with Windows this way, and I didn't perform a lot of fact checking. Edits and comments are welcome.
And here is a link to the original Intel 386 manual (which I quoted anyway)