用户态和内核态
概念
也叫用户空间、内核空间
用户态指非特权的执行状态,不能执行越权的操作,一般我们编写的程序、APP、客户端软件等都运行在用户态
内核态指特权的执行状态,可以操作硬件,一般是指操作系统
这是为了系统的安全和稳定
当需要操作系统帮助完成一些用户态自己没有特权的操作时就会切换到内核态,如
read()、write()
等,这种切换最常见的形式就是系统调用
系统调用
系统调用是操作系统的最小功能单位。根据不同的应用场景,不同的Linux发行版本提供的系统调用数量也不尽相同,大致在240-350之间。这些系统调用组成了用户态跟内核态交互的基本接口。
例如:用户态想要申请一块20K大小的动态内存,就需要系统调用,将数据段指针向下偏移,如果用户态多处申请20K动态内存,同时又释放呢?这个内存的管理就变得非常的复杂。
库函数
库函数就是屏蔽这些复杂的底层实现细节,减轻程序员的负担,从而更加关注上层的逻辑实现。它对系统调用进行封装,提供简单的基本接口给用户,这样增强了程序的灵活性,当然对于简单的接口,也可以直接使用系统调用访问资源,例如:open,write,read等等。
库函数根据不同的标准也有不同的版本,例如:glibc库,posix库等。
shell
shell顾名思义,就是外壳的意思。就好像把内核包裹起来的外壳。它是一种特殊的应用程序,俗称命令行。为了方便用户和系统交互,一般一个shell对应一个终端,呈现给用户交互窗口。
当然shell也是编程的,它有标准的shell语法,符合其语法的文本叫shell脚本。
很多人都会用shell脚本实现一些常用的功能,可以提高工作效率。