用户态与内核态

用户态、内核态指的是我们的程序所处于的一个状态。

通俗点说,我们写了一段程序,它在运行过程中有可能处于内核态或用户态。假如当前处于内核态,下一时刻就可能切换为用户态。


用户态与内核态的切换:

切换的触发条件:

  • 程序需要去申请外部资源。【系统调用、中断、异常】这里说的是用户态切换到内核态,当内核态相关操作执行完毕后就会退回用户态。

外部资源:

  • 内存条
  • 网卡
  • 磁盘
  • 声卡
  • 网卡
  • usb
  • LED

e.g:

1.读写文件就会触发用户态到内核态。

这个时候会进行系统调用:open/read/write

2.申请堆内存:c语言中的malloc()本身不是系统调用,其分为2种实现方式:

  • brk
  • mmap(小于128k的内存申请的时候会调用)

brk和mmap申请的是虚拟内存空间,并没有申请到主存上的物理内存空间。

想要拿到主存上的物理内存空间还要在第一次访问的时候,它会发现虚拟内存地址没有映射到物理内存地址,于是触发“缺页中断/缺页异常”。


触发条件系统调用、中断、异常中最常见的就是:系统调用

系统调用System Call:分5大类型:

  1. 进程控制相关
  2. 文件管理相关
  3. 设备相关
  4. 信息相关(获取操作系统、CPU信息等)
  5. 通信相关【进程间的通信,例如管道pip等】

每一种类型中的系统调用都有哪些?

打开一台机器,看当前linux机器的内核中到底有多少个系统调用:

Ubuntu默认是没有完全安装man手册的:

apt-get install manpages-de  manpages-de-dev  manpages-dev glibc-doc manpages-posix-dev manpages-posix

为了显示中文手册,还需要下载manpages-zh包:

sudo apt-get install  manpages-zh

然后输入man syscalls,会出现系统调用表格:

按↓键可以看见表格:

以上就是内核中所具有的所有的系统调用了。

比如上面的accept就是套接字的客户端去连接套接字。

通过表格就可查看系统调用的5大类别的具体调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒不了的星期八

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值