服务器大多都采用Linux系统,所以主要研究Linux系统。
用户应用如果要使用硬件资源,必须要经过Linux内核,通过内核去与硬件交互。可以看为分为三层 用户层 、 内核层 、 硬件层 。内核是会去使用到CPU、内存等硬件资源的,如果我们对 用户应用 不加以任何的限制,让它也可以随意地去使用硬件资源的话,那么内核空间是感知不到用户空间用了哪些资源,不利于管理,很有可能出现死锁等问题。所以使用硬件资源我们统一放到内核空间来管理,用户空间如果要使用硬件资源也得通过内核来申请使用。所有硬件访问必须经过内核,内核统一分配和管理资源,用户程序只能通过系统调用接口来申请和使用硬件。不然的话,如果用户可以独立访问硬件资源,那么内核就不知道这些信息,不利于硬件资源分配的全局可见性。
所以 用户应用 和 内核 要隔离开,避免硬件使用的冲突:
Linux系统为了提高IO效率,会在用户空间和内核空间都加入缓冲区:
举一个例子,用户空间想要读取另外一个服务通过网络传送过来的数据。用户空间缓冲区 会向 内核空间 发起读请求,内核空间会等待网卡的数据准备完成,完成后会把数据 拷贝 到 内核缓冲区 ,然后会将数据从 内核缓冲区 拷贝到 用户缓冲区 。至此,读数据完成。比较耗时的操作就是等待网络IO,网卡数据准备完成和拷贝数据的操作。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。