网站html地图怎么做的郑州哪里有做网站

当前位置: 首页 > news >正文

网站html地图怎么做的,郑州哪里有做网站,山东建设厅官方网站李兴军,我要啦免费统计怎么做网站文章目录 什么是用户态与内核态同步与异步、阻塞与非阻塞四种组合方式 什么是用户态与内核态 计算机系统中#xff0c;通常 CPU 执行两种不同性质的程序代码#xff1a;一种是操作系统内核程序#xff08;管理程序#xff09;#xff1b;另一种是用户自编程序#xff08… 文章目录 什么是用户态与内核态同步与异步、阻塞与非阻塞四种组合方式 什么是用户态与内核态 计算机系统中通常 CPU 执行两种不同性质的程序代码一种是操作系统内核程序管理程序另一种是用户自编程序即系统外层的应用程序或简称 “应用程序”。CPU 运行这两种不同性质的程序就是操作系统中最基本的两种运行模式用户态和内核态。 先来说一些废话 程序执行目的就是操作计算机中的各种硬件资源每个程序最终都会编程二进制语言来操作硬件从而实现某种具体功能。这样一说好像可以不用操作系统每个程序自己就是操作系统了。行吗肯定不行啊。应用程序大多是高级语言编写的你会将高级语言编译成二进制语言吗这时你会说“我不会”但有牛人会编写并提供编译工具给大家使用。好即使你的程序已经转换成二进制语言了那你知道接下来如何和硬件进行交互来操作硬件这么多程序都要来使用有限的硬件那到底是给你用还是给他用谁有权力管理这些硬件资源、制定使用规则。这时你又会说“我不会”但总牛人知道怎么和硬件交互有这个能力来编写代码来统一管理资源并制定使用规则我们这些普通人达成共识都遵循他的规则就行。这…我无法反驳了因为这个牛人编写的代码就是操作系统了。 操作系统可以让你编写的应用程序代码与硬件交互同时管理不同应用程序如何有序使用硬件资源所有应用程序都是运行在操作系统之上的。所以一定要保证操作系统安全运行才能确保上层应用程序正常运行。 操作系统经过这么多年的发展由优秀科技人才经过深思熟虑写出来的程序肯定比应用程序代码逻辑要严格。形象化例子既然大家都认同我操作系统我就有权利和责任让大家稳定运行那大家就应该遵循和支持我制定的规则并在我制定的规则内运行。我也想尽最大努力让大家方便快速地使用所需硬件资源但这些资源都是有限的怎么管理和使用各种硬件的使用、内存管理、进程管理等大家都不清楚所以这些资源和功能我不能都对大家开放我需要统一管理起来才能合理分配有什么需求就告诉我我知道怎么使用这些资源并计算得到你想要的结果你只需要在外面等我一会儿我就会把结果返回给你。 什么是用户态和内核态 程序运行其实是CPU处理计算这段程序代码所以更好的理解用户态和内核态可以从CPU的角度去看待。 当CPU在计算用户应用程序代码时此时CPU所处状态就是用户态当CPU在计算操作系统内核代码时此时CPU所处状态就是内核态。 即用户态是普通应用程序运行的模式内核态是操作系统内核运行的模式。 为什么要区分用户态或内核态这两种运行模式 在用户态下程序只能访问自己分配的内存空间不能直接访问操作系统内核提供的资源如硬件设备、内存管理、进程管理等。内核负责管理硬件设备、进程调度、内存管理、文件系统等核心功能内核态就是为了保证系统安全、稳定运行。从下面几个角度对比 安全性和稳定性 如果所有的程序都运行在最高特权级别的内核态一个程序的错误或恶意行为都可能导致整个系统崩溃。 通过将应用程序限制在用户态即使出现错误也不会直接影响到整个操作系统的稳定性。资源访问控制 内核拥有对硬件资源的完全控制权包括CPU、内存、外设等。 如果所有程序都直接访问硬件资源将会造成资源的冲突和安全隐患。 通过用户态和内核态的隔离操作系统可以有效地管理和调度系统资源的访问。系统调用机制 用户态程序需要通过系统调用来请求操作系统内核提供的服务如文件读写、进程管理等。 系统调用是用户态程序与内核交互的主要方式它提供了一个受控的接口保证了系统的安全性。 用户态与内核态切换 前面说了用户态与内核态是CPU执行的两种状态好像CPU可以随意切换去执行用户程序还是应用程序。这当然是可以的但要考虑CPU在这两种状态下切换所带来的开销对系统性能的影响。 当发生用户态到内核态的切换时CPU需要保存当前用户态进程的执行状态如寄存器、程序计数器等这样再切回来时才能知道上次执行到哪里了同时还要加载内核态进程的执行状态。同样从内核态切换回用户态时也需要进行相反的上下文切换操作。上下文切换需要大量的内存读写操作会消耗CPU和内存带宽造成一定的性能损耗。 其次用户态程序和内核态程序访问内存的方式不同用户态程序的内存访问受到限制而内核态程序可以访问全部内存空间。 在切换的过程中CPU需要切换内存管理单元(MMU)的页表设置以适应不同的内存访问模式。这种切换也需要消耗一定的CPU时间和资源。以及指令集切换、系统调用都会造成性能开销。 同步与异步、阻塞与非阻塞 同步与异步、阻塞与非阻塞这两个概念经常看见很容易混淆所以在这里通过对比的方式解释并比较两者的区别 对象 同步与异步是指用户空间程序调用内核空间程序的发起方式针对的是两个对象调用关系阻塞与非阻塞指的是用户空间程序的一种执行状态针对的是用户空间程序的执行状态。 目的 同步与异步的目的是调用方获取被调用方返回的结果但获取方式存在区别 同步A 调用 B由调用方 A 盲目主动询问 B 操作是否完成并获取返回结果的方式异步A 调用 B由被调用方 B 主动回调或通知调用方任务已完成并获取返回结果的方式 阻塞与非阻塞的目的是用户空间程序是否继续执行。 阻塞用户空间程序调用某个耗时操作用户空间程序需要等待这个操作完成才能继续执行非阻塞用户空间程序调用某个耗时操作不需要等待这个操作完成就可以继续执行面的程序。
总结起来同步与异步关注的是调用方获取被调用方响应结果的方式同步调用方主动获取、异步回调或通知即调用方被动接收阻塞与非阻塞关注的是调用方在调用耗时操作被调用方时自己本身的执行情况阻塞操作未完成调用方原地等待不执行后面的程序非阻塞操作未完成调用方先跳过继续执行后面的程序。 四种组合方式 同步与异步、阻塞与非阻塞可以有四种组合方式同步阻塞、同步非阻塞、异步阻塞和异步非阻塞下面已IO操作为例进行简单讲解 同步阻塞(Synchronous Blocking) 特点线程发起I/O操作后线程会被阻塞直到I/O操作完成获取同步结果。 缺点线程在等待I/O期间无法做其他事情系统吞吐量较低。同步非阻塞(Synchronous Non-Blocking) 特点线程发起I/O操作后立即返回线程不阻塞I/O操作未完成期间线程可以继续执行其他任务需要主动轮询检查I/O操作是否完成。 缺点需要自己实现轮询机制增加了编程复杂度。异步阻塞(Asynchronous Blocking) 特点线程发起I/O操作后线程会被阻塞直到I/O操作完成通过IO回调或通知等异步方式告知线程获取结果。 缺点这种毫无意义。线程在IO操作期间已被阻塞异步通知完全是多余直接等待同步获取结果就可以了。异步非阻塞(Asynchronous Non-Blocking) 特点线程发起I/O操作后立即返回线程不阻塞线程可以继续执行其他任务通过IO回调等异步方式通知线程获取结果。不要线程主动轮询减轻了线程的负担。 缺点需要实现异步通知机制编程复杂度较高。