1 高级可编程中断控制器-APIC 之前,我们主要考虑的单处理器系统,如果是多处理器系统,主PIC控制器的INTR管脚是如何接到CPU上的?我们接下来讨论这个话题。...x86架构中,每个处理器包含自己的APIC,每个APIC具有32位的寄存器,内部时钟,内部定时器以及2个额外的IRQ线,LINT0和LINT1,用作APIC的中断。...动态分配 IRQ请求被发送给正在运行低优先级进程的处理器的私有APIC中断控制器上。通俗地说,就是哪个处理器正在运行低优先级任务,IRQ请求就发送给谁。...当一个CPU想给另一个CPU发送中断时,它就会把目标CPU的私有APIC的标识符和中断号存储到自己APIC的中断命令寄存器(ICR)中。...如果这些寄存器没有被清除,恶意用户态程序就可以利用它们访问内核地址空间。
Intel的处理器早在8086时代就支持了这一机制。熟悉《微机原理与接口技术》的同学可能会回忆起,Intel使用8259芯片实现可编程中断控制,用8257芯片实现可编程DMA控制。...在多核处理器中,可以视为具有多个CPU,那么,外部中断发生时,将打断哪个CPU程序的执行呢?...对于多核处理器所配套的ICH,就需要将集成的PIC升级为APIC了。南桥上集成的APIC被称为IO APIC,而每个处理器核上还有本地的PIC,被称为Local APIC。...Local APIC可以接收来自IO APIC的中断,并使得所在的CPU进入中断处理程序。...如图,IO APIC和Local APIC在程序看来,是合为一体的,当外设的中断发生时,I/O APIC会将中断送到目标的CPU上,目标CPU上的Local APIC触发真正的中断。
5)进入Guest模式后,CPU将调用Guest IDT中相应的中断服务处理中断。 PIC只能支持单处理器系统,对于多处理器系统,需要APIC支持。...图3 基于APIC的虚拟中断过程 与单处理器情况相比,多处理器的虚拟中断主要有2点不同: 1)在多处理器系统下,不同CPU之间需要收发中断,因此,每个CPU分别需要关联一个独立的中断芯片,这个中断芯片称为...LAPIC使用一个页面大小内存存储寄存器,我们知道,当Guest访问LAPIC这些寄存器时,将导致VM exit,但是事实上,某些访问LAPIC的这些寄存器,并不需要VMM介入,所以也就无需VM exit...在硬件虚拟化的支持下,在Guest模式下有了状态和逻辑,就可以模拟很多中断的行为,比如访问中断寄存器、跟踪中断的状态以及向CPU递交中断等。...当然有些写中断寄存器的操作是具有副作用的,比如通过写icr寄存器发送IPI中断,这时就需要触发VM exit,由本地LAPIC向目标LAPIC发送IPI中断。
CSP 是一种消息传递模型,通过在 goroutine 之间传递数据来传递消息,而不是对数据进行加锁来实现同步访问。...下图展示了一个运行中的应用程序的进程和线程视图 图片 图片 图片 三. 逻辑处理器与本地运行队列 1. 逻辑处理器 Golang 的运行时会在逻辑处理器上调度 goroutine 来运行。...每个逻辑处理器都与一个操作系统线程绑定。在 Golang 1.5 及以后的版本中,运行时默认会为每个可用的物理处理器分配一个逻辑处理器。 2. 本地运行队列 每个逻辑处理器有一个本地运行队列。...之后,调度器会将全局运行队列中的 goroutine 分配给一个逻辑处理器,并放到这个逻辑处理器的本地运行队列中。本地运行队列中的 goroutine 会一直等待直到被分配的逻辑处理器执行。...所以,调度器会创建一个新线程,并将其绑定到该逻辑处理器上。之后,调度器会从本地运行队列里选择另一个 goroutine 来运行。
中断控制器的发展可分为 $PIC$ 和 $APIC$ 两个阶段,前者适用于单处理器,在单处理器的时代叱咤风云,风靡全球,不过到了现代的多处理器时代不行了,渐渐地被更高级的 $APIC$ 所代替。...APIC 上述就是中断控制器 $PIC$ 的内容,PIC 只用于单处理器,对于如今的多核多处理器时代,PIC 无能为力,所以出现了更高级的中断控制器 APIC ,APIC($Advanced$ $Programmable...还有一种是 IO端口映射****,这种映射方式是将外设的** IO端口(外设的一些寄存器)** 看成一个独立的地址空间,访问这片空间不能用访问内存的指令,而需要专门的 in/out 指令来访问。...所以其实 $LAPIC$ 能够收到三个来源的中断: 本地中断:时钟,温度监测等 外部中断:$IOAPIC$ 发来的 $IPI$:处理器间中断,其他 $LAPIC$ 发来的 $inel$ 手册里面做了更精细复杂的分类...要实现处理器间中断,一个处理器想把中断发送给另一个处理器时,就在 $ICR$ 中填写相应的中断向量和目标 $Destination$ $Feild$,然后通过总线向目标 $LAPIC$ 发送消息。
记得以前刚上大学学过一段编程以后总想着网站到底是怎么做的,项目部署以后又怎么让外网的人访问呢! 上学的时候写个网站然后外网让被人访问到处出装逼,现在想想上学的时候还是蛮好玩的。...不过以前刚接触查了一些资料以后,正确的方法是把网站部署到一台购买的服务器上然后在通过域名去访问。...所以可以借助ngrok来实现将本地部署好的项目映射到外网给人访问,接下来介绍下操作,首先先到下面网站上去注册下随便注册就行。...接着:ngrok http 8083 注意这个端口可根据你的需求进行修改,我的项目端口是8083.很可能你的是8080。 这条命令的意思是将本地8083端口对应的服务暴露到外网中。 ?...访问成功大功告成,域名成功访问,发到自己的手机用数据流量测试下也完全正常的访问。 每天 进步一点点
该组件包含两大组成部分:一是“本地 APIC”,主要负责传递中断信号到指定的处理器;举例来说,一台具有三个处理器的机器,则它必须相对的要有三个本地 APIC。...每个本地 APIC 都有 32 位的寄存器,一个内部时钟,一个本地定时设备以及为本地中断保留的两条额外的 IRQ 线 LINT0 和 LINT1。...所有本地 APIC 都连接到 I/O APIC,形成一个多级 APIC 系统,如图下所示。...APIC 目前大部分单处理器系统都包含一个 I/O APIC 芯片,可以通过以下两种方式来对这种芯片进行配置: 作为一种标准的 8259A 工作方式。...本地 APIC 被激活,且所有的外部中断都通过 I/O APIC 接收。
浏览器通过http与localhost 交互的请尽快升级啦。。。 我们的Web系统需要与硬件设备交互,比如读卡器等。...我们在本地跑了一个web程序监听localhost本地端口,然后网站通过http://localhost:port 这种方式交互,上星期突然有人访问不到本地服务器,以为本地程序没有开启。...再三确认后发现是客户装的是Chrome Dev版本,自动升级到了Chrome 92,提示CORS跨域请求被禁止。。我可是访问的本地localhost。。...百度不出来,google发现是 chrome 92升级的新功能。。。...修复:在本地请求头添加header:Reporting-Endpoints,请求成功。 ?
PyPI 是可以在本地计算机上进行配置来访问远程的仓库地址的。...检查配置文件检查配置文件使用的命令为:pip config -v list通过上面的配置文件,我们可以知道 Python 的 PyPI 的配置文件信息。上面图片显示的是配置文件的扫描路径。...在公司内部,通常都会使用私有仓库,这是因为私有仓库的安全性更好:使用私有仓库可以控制访问权限,避免敏感信息泄露,提高镜像的安全性 。...能够离线使用,在没有公共网络或者限制网络访问的场景下,使用私有仓库可以满足本地部署、离线使用的需求。加速部署:私有仓库可以保存常用的镜像,可以加速项目的部署速度,特别是当需要多次部署相同的环境时。...公司内部网络通常是局域网,所以使用私有仓库能在编译的时候加快依赖下载。但,这个优势现在已经不突出了,因为就算是私有仓库,很多公司也会部署在公共网络上,通过 VPN 来进行访问。
大家好,又见面了,我是你们的朋友全栈君。...它是由浏览器的同源策略造成的,是浏览器施加的安全限制。...(2)php接口的脚本中加入 //在thinkphp中设置客跨域访问 if (config('app.environment') == 'local') { // 如果是本地环境就允许跨域访问...请注意,浏览器自身维护了一个最大有效时间,如果该首部字段的值超过了最大有效时间,将不会生效 //预检结果缓存时间,也就是上面说到的缓存啦 //'Access-Control-Max-Age: 86400...这个我们不处理业务逻辑,第二次接收的get或post等才是实质的请求返回我们才处理 } } 在php访问初始化判断该php就如果是本地环境就可以实现跨域访问了。
不过我们可以将Jupyter notebook安装在Linux服务器中,然后通过本地的浏览器来访问Linux服务器中的Jupyter notebook。...这里选择Python3.7版本,X86和Power8 and Power9表示不同的处理器架构,这里选择x86即可。...▲不弹出浏览器 03 SSH端口转发实现本地访问 需要将Linux服务器中的端口转发到本地机器,在本地机器中执行"ssh -N -f -L localhost:8888:localhost:8888 root...▲在XShell监听的jupyter中找到地址 打开本地浏览器直接输入复制的完整地址即可访问Linux服务器中的jupyter notebook。...▲通过本地浏览器访问Linux服务器中的jupyter 下面是我的Linux服务器中的文件,通过对比印证了本地访问的是Linux服务器中的jupyter notebook。
所以,这篇文章,没有什么写作的目的,本来也是作者心血来潮准备普度众生_,从另一个角度上来讲算是一个笔记,所以更新说不定什么时候这腔热血没了也就停了。...只要是可以像内存元件一样工作模式的I/O设备,都可以通过处理器的物理内存地址空间访问。...processors in a system whose local APIC units operate in xAPIC mode that APIC registers are accessed...using memory mapped interface: MOV ESI, APIC_ID; Address of local APIC ID register MOV EAX, [ESI];...作用就是提供一些访问硬件资源的API,能够访问到后来操作系统启动所需的文件,并初始化相关的启动环境,然后加载镜像或压缩镜像到内存中,进行必要的操作(解压缩等)后,将CPU执行权交给操作系统(什么叫执行权
在x86处理器中APIC ID有三种模式,分别为Physical、Logical和Cluster ID模式。...以上这些字段的描述与x86处理器使用的APIC中断控制器相关。...Local APIC,并由Local APIC向处理器提交中断请求。...x86处理器也具有通过中断控制器提交MSI/MSI-X中断请求的方法,在I/O APIC具有一个 “The IRQ Pin Assertion Register”寄存器,该寄存器地址为0xFEC00020...此时这个存储器写请求将数据写入I/O APIC的The IRQ Pin Assertion Register中,并由I/O APIC将这个MSI中断请求最终发向Local APIC,之后再由Local
Linux将中断要执行的操作分为三类: 关键中断 比如响应PIC控制器发送的中断,重新编程设置PIC或者设备控制器,更新设备和处理器访问的数据结构等。...非关键中断 更新只有处理器访问的数据结构的中断请求(比如,读取键盘按键按下后的键码)。这类中断在中断处理程序中也能很快完成处理。...如果发现CPU的中断负载不均衡了,它就会选择将某个IRQ移到另一个负载低的CPU上,或者采用在所有的CPU上循环响应IRQ。...因此软、硬IRQ堆栈与进程的堆栈非常相似,只是thread_info不同,一个是描述CPU,而另一个是描述进程。...这是防止不同CPU之间可能造成的并发访问。因为,在多核系统中,可能会发生同类型的其它CPU关心的中断,它们使用同一个IRQ描述符,所以造成访问冲突。
作者:大江狗 首发:Python Web与Django开发 当你使用Django在本地开发一个网站的时候,你希望转发给别人进行访问,但是又不想正式部署到服务器(毕竟部署也是挺麻烦的)。...除此以外,有时本地测试还需要依赖https,比如OAuth身份验证和第三方支付应用。...今天我要介绍的是一款叫Ngrok的免费软件,它通过本地端口映射轻松实现内网穿透,把localhost上运行的内容重定向到一个公共可用的ngrok URL(支持https), 是不是很帅?...Ngrok的安装 如果你本地使用的是windows系统,首先访问它的官网:https://ngrok.com/download下载.exe客户端并安装。...启动Ngrok 进入ngrok的exe文件所在的目录,使用“ngrok http [port]”启动端口映射。本地django项目默认使用8000端口,所以输入如下命令即可。
最近发现家里宽带支持IPv6了,这里分享三个利用IPv6访问本地地址(内网地址)的方法。 通常来说,我们用localhost来代表本地地址127.0.0.1。...比如,我们可以通过x.1.ip6.name访问::1,也就是本地: 再分享一个Windows下有趣的冷知识吧。...通过这个域名即可访问到对应的IPv6目标: 这就类似于微软官方推出的一个ip6.name服务。...,也就是我本地: 所以在SSRF等漏洞的测试中,我们不妨利用一下上述三个URL技巧,尝试绕过一些限制。...另外,SSRF测试中,即使目标没有连入IPv6网络,但本地系统、内网通常是支持IPv6的,所以不是说没有IPv6外网IP的目标就不能用IPv6的技巧进行测试。
利用SSH反向隧道实现树莓派本地服务的公网访问 在物联网开发中,我们经常需要将本地设备(如树莓派)上运行的服务暴露到公网,方便远程访问和管理。...本文将详细介绍如何使用SSH反向隧道技术,通过一台公网服务器作为跳板,实现从公网访问树莓派本地服务的目的,并补充SSH配置文件的编辑细节,确保操作更清晰可落地。 什么是SSH反向隧道?...与正向隧道(从本地访问远程服务)不同,反向隧道能突破内网无公网IP的限制,让外部网络通过公网服务器间接访问内网中的树莓派服务,且所有数据传输均通过SSH加密,安全性较高。...测试隧道连通性(服务器端验证) 隧道建立后,需先在公网服务器上验证是否能正常访问树莓派的本地服务: 在公网服务器终端输入: curl http://localhost:8082 若返回树莓派80端口服务的内容...配置公网服务器SSH,允许外部访问隧道 默认情况下,SSH反向隧道仅允许公网服务器“本地”(即服务器自身)访问映射端口(如8082),外部设备(如你的电脑)直接通过“服务器IP:8082”访问会失败。
本文介绍如何检测处理器是否支持AES-NI指令集,首先我们先了解一下什么是AES-NI指令集。...AES-NI指令集 高级加密标准指令集(或称英特尔高级加密标准新指令,简称AES-NI)是一个x86指令集架构的扩展,用于Intel和AMD微处理器,由Intel在2008年3月提出。...Linux 使用命令【grep aes /proc/cpuinfo】即可查看,当此命令能返回内容,说明此服务器的处理器是支持AES-NI的。...bmi1 avx2 bmi2 rdseed adx xsaveopt Mac 使用命令【sysctl -n machdep.cpu | grep -i aes】即可查看,当此命令能返回内容,说明此服务器的处理器是支持...SEGLIM64 TSCTMR AVX1.0 RDRAND F16C [【sysctl -n machdep.cpu | grep -i aes】 命令截图] Windows Windows服务器没有命令可以直观的查看当前处理器支持的指令集
具体几个要看CPU型号,寄存器是和CPU强关联的实现,具体可参考: https://github.com/golang/go/tree/master/src/runtime1 三、逻辑处理器与本地运行队列...每个逻辑处理器都与一个操作系统线程绑定。在Golang 1.5及以后的版本中,运行时默认会为每个可用的物理处理器分配一个逻辑处理器。 (二)本地运行队列 每个逻辑处理器有一个本地运行队列。...之后,调度器会将全局运行队列中的goroutine分配给一个逻辑处理器,并放到这个逻辑处理器的本地运行队列中。本地运行队列中的goroutine会一直等待直到被分配的逻辑处理器执行。...下图展示了操作系统线程、逻辑处理器和本地运行队列之间的关系: 有时,正在运行的goroutine需要执行一个阻塞的系统调用,如打开一个文件。...所以,调度器会创建一个新线程,并将其绑定到该逻辑处理器上。之后,调度器会从本地运行队列里选择另一个goroutine来运行。