指的是程序的运行状态,操作系统为了保护自己,不允许用户程序直接访问外部资源,只能通过内核来进行访问。当用户程序需要访问外部资源的时候就需要从用户态切换到内核态,当资源使用完毕又会退回到用户态。
外部资源比较笼统,其实所有的硬件如ram/ssd/显卡声卡/USB都是外部资源。
三种情况会导致这个切换:
例如读文件是对外部资源磁盘的使用,是通过open/read系统调用进入的内核态;再比如申请内存malloc是对外部资源堆内存的使用,是通过brk/mmap系统调用进入的内核态。
系统调用绝大多数都是c语言可以直接使用的函数,分为5类
select/poll/epoll
以及accept/bind
等都是系统调用。在linux下可以通过man syscalls
查看当前内核支持的所有系统调用。