小知识点记录:内核态与用户态

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()函数;


以上是关于小知识点记录:内核态与用户态的主要内容,如果未能解决你的问题,请参考以下文章

Linux:用户态与内核态

Linux 操作系统原理 — 内核态与用户态

用户态与内核态的理解

用户态与内核态

用户态与内核态

linux用户态与内核态