小知识点记录:内核态与用户态
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小知识点记录:内核态与用户态相关的知识,希望对你有一定的参考价值。
我们使用的程序在内核态
– 用户态
之间飘忽不定;
用户态 申请外部资源
时就会 转换到内核态; 申请外部资源可以分为三种基本情况:(1) 中断; (2) 异常;(3)系统调用;
当
内核态
的数据返回时即可转换回用户态
.
外部资源是啥呢?
比如说内存条 , 网卡,磁盘, 声卡,usb外设,LED… 都属于外部资源;
比如说读写文件的操作就会触发从 用户态–>内核态的转换;
先 open 打开文件, read读操作, write写操作; [系统调用]
比如申请堆内存的操作, 使用malloc()函数
操作; 这里呢又可以回想之前的brk
操作 或者 mmap
操作;
小于128K的申请内存时采用brk
操作;在_edate
游标下申请空间;
大于128K的申请内存使用mmap
操作;从_edate
游标 到 栈的最小内存地址之间申请内存;
***这里申请的是逻辑上的虚拟内存空间
,在第一次使用时,注意到虚拟内存地址并未映射找到物理内存地址,便会触发缺页中断
;
对于用户态转->内核态;主要学习系统调用;
那么系统调用的话又分为几种不同的案例;
(1)进程控制;
(2)文件管理操作;
(3)设备管理操作;
(4)信息操作;
(5)通信调用操作;
打开我们的linux环境;输入命令:
man syscalls
向下可以看到一个系统调用表;
accept()
方法 比如之前学习IO多路复用的知识时,就在select()函数的源码中看到过这个方法;属于socket套接字的链接使用;
bind()
即socket的服务端监听采用的事件;
chmod() , chown() ,open(),read(),write() …对于文件的操作
open(),read(),write() 也可以操作磁盘设备;
exit()进程退出控制; fork()在当前进程下创建一个子进程;
这几个函数都可操作信息;
关于open()函数,作为系统调用时使用的;
C语言中使用的fopen()
函数只是一个库函数,其中封装了open()函数;
以上是关于小知识点记录:内核态与用户态的主要内容,如果未能解决你的问题,请参考以下文章