一、Linux 内核态,用户态
Linux 内核态,用户态,以及如何从内核态到用户态,我来说下我的理解
很多面试官,面试也是照搬照套,网上找的八股文面试题,面试的人也是背八股文,刚好背到了,就过了
运气不好,就不记得了。
开发过程,很多是暂时用不到,面试官考量的,在于理解,如果那种没水平的领导面试喜欢听你背八股文,别去也好,技术没什么长进
,考虑去一个公司,考虑更多是,技术成长,项目经验积累,职业发展,打工打不了一辈子,中国环境决定的,不是我们个人决定的。
进入正题,什么是内核态,什么是用户态?
工作在linux内核源码,就叫内核态,工作在内核上面,和内核无关的,就叫用户态,这个无关,并不是和内核一点关系没有,用户态工作
是需要内核态上面,才能工作的。或者这么理解,内核态离开用户态可以工作,不需要用户态,但是用户态需要借助内核态,才能工作。
很多八股文说,内核态是工作在0-4g空间的,就完了。
什么是用户态呢,比如写个应用程序,这个应用有算法,有qt图形界面,或串口输出的交互界面,有业务逻辑功能,这个功能,可以播放视频,音频,操控各种外设,读写存取文件等等。这个应用程序,还可以是个ls,cat,cd,mv,等等shell命令。简单说就是个用户程序,在内核之上。
什么是内核态,就是工作在linux空间的,包括(进程管理,进程调度,内存管理,文件管理,驱动管理),linux提供的所以核心功能
他们是运行在0-1g空间的。
二、用户空间和内核空间的交互方式,有哪些
这是面试最喜欢问的,我认为这么问的意义是什么
先来回想一下,内核启动时,是如何进入到用户空间的,linux启动最后,会调用start_kernel,这个函数,会调用一个kernel_init,这个就是init进程,所有用户空间的祖宗,所有进程,都是由它而创建,或它的子孙,间接创建,他是个守护进程,不会死掉,除非系统退出。
ps命令,查看到init进程,ps是工作在用固态下,所以看到的是sbin/init,用户态下一个应用程序
1、系统调用
用户空间,通过系统调用,陷入到内核代码工作的空间,比如(fork,pthread,创建进程,线程,read,write,open,打开读写驱动,调用了内核提供的api,就叫系统调用)
2、shell命令
cat命令读取信息,算不算,当然算,从内核空间,获取内核的状态,信息等
设置内核算不算,也算设置内核系统参数
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1
echo "net.ipv4.tcp_tw_reuse=1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle=1" >> /etc/sysctl.conf
内核从console控制台,提供一个交互界面,就是用户空间和内核空间,访问的一种方式。