用户态与内核态

用户态与内核态,第1张

在计算机的指令中,引入了指令级别的概念,Window下分为0~3级,Linux下分为0、3两级;

分级主要是为了区分不同的程序有不同的指令执行权限;

在搞清楚用户态与内核态之前,首先需要搞清楚,用户态和内核态是针对谁描述的?

也看了网上不少资源,很多博客会直接对用户态与内核态的区别直接上手做分析,但实际上了解这两者是针对谁而言,对之后的学习也非常有效果。

这里用户态与内核态是针对CPU而言的,是CPU的两种运行状态,也就是说再任意时刻CPU要么处于内核态要么处于用户态。

这里的原因主要处于 *** 作系统的安全性考虑;

设想一下,如果CPU没有内核态与用户态的概念,完全是一视同仁,所有用户编写的程序可以访问一切硬件资源包括内存。这种情况下写个病毒程序就太容易了,只要运行起来之后把内存的数据随便迁移,这样的场景对于整个系统安全性来说绝对是极其糟糕的。

因此来说,计算机所有硬件资源的使用权应该仅仅收回给 *** 作系统,用户态的程序无权进行访问,如果用户态的程序需要调用硬件资源如读取网卡的数据,必须通过 *** 作系统层面进行 *** 作。

内核态程序执行完毕

我们都知道程序在执行的过程中是离不开栈的数据结构, *** 作系统在创建程序进程的同时会创建与该程序对应的两个栈结构,分别用于用户态程序执行与内核态程序执行。

当用户态与内核态相互切换的时候,CPU要切换到不同的栈去执行程序,至于为什么不能共用一个栈结构,多半也是为了安全考虑,分为两个栈也就是两片内存区域天然就有了隔离性,自然也就安全了。

本文大体描述了内核态与用户态之间的联系,但创作背景是在没有完全看完权威的 *** 作系统相关书籍情况下编写。上述知识大多数来源于网络上的博客或B站视频,可能其中存在不严谨的语句甚至错误,还请大家勘误。

指向用户区指针的用户区指针:argv,

linux把 *** 作系统内存和用户区内存隔离开,

用户程序只能通过系统调用访问系统功能,

内核态可以访问用户内存,但是要做检查,因为用户区内存是不可靠的,甚至是危险的。

_user就表示这个意思。

所谓隔离用户,指的是该用户登录ftp后,不能任意跳转这个用户对应的家目录。比如ftp有个test1和test2账号,对应centos系统里实际的路径是/home/test1和/home/test2。那个隔离的意思是,你用客户端登陆test1账号,是不能通过向上翻页等 *** 作,跑到/home/test2家目录下 *** 作。即:test1用户这个 *** 作只能在/home/test1这个跟路径下 *** 作,例如访问/home/test1/user路径等。而隔离和非隔离的实现,是通过ftp配置文件中的chroot来实现的,具体的是chroot_list_enable和chroot_list_file这两个参数。我就不深入讲下去了,希望你能理解。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8555839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存