Linux用户态切换内核态方式详解
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202311/2023110308383809.jpg" /></p><h3>用户态切内核态</h3>
<p>是用户程序在运行中的状态切换;</p>
<p>用户程序在运行中遇到<code>申请外部资源</code>, 比如程序执行中需要访问: <code>磁盘</code>、<code>内存分配</code>、<code>网卡</code>、<code>声卡</code>, 甚至<code>主板LED指示灯</code>时, 就会发生用户态到内核态的切换.</p>
<p>比如读写文件: open/read/write 就会从用户态切换到内核态;</p>
<p>比如申请内存: C语言的: malloc/ java语言 new 一个对象 都需要申请内存空间;</p>
<p>包括select/poll/epoll 都是系统调用;</p>
<h3>切换方式</h3>
<p>用户态到内核态的切换, 一般有三种方式: <code>系统调用</code>、<code>异常</code>、<code>中断</code>; <code>系统调用</code> 又有 <code>进程</code>、<code>文件</code>、<code>设备</code>、<code>信息</code>、<code>通信</code>等的调用;</p>
<p>查看内核提供的可用系统调用可以用: <code>man syscalls</code>可以把<code>syscalls</code>导出来看下:<br /><code>man syscalls|col -b >syscalls.txt</code></p>
<h3>系统调用大体分类如下:</h3>
<p>进程调用: 终端命令<code>exit</code> <code>fork</code>;</p>
<p>文件调用: <code>chmod</code> <code>chown</code>;</p>
<p>设备调用: <code>read</code> <code>write</code>;</p>
<p>信息读取: 比如cpu信息 <code>getcpu</code>;</p>
<p>通信: <code>pipe</code> <code>mmap</code>(文件内存映射)</p>
<p>以上就是Linux用户态切换内核态方式详解的详细内容,更多关于Linux用户态切换内核态的资料请关注琼殿技术社区其它相关文章!</p>
頁:
[1]