在回答这个问题之前,你可能会首先想:为什么操作系统需要保护自己呢?操作系统其实就是一个大管家,负责给应用程序搭建舞台,好让程序们过好自己的一生,但偏偏有不听话的程序可能想抢操作系统的戏,显然这会影响所有其它正在程序,因此操作系统必须要有能力保护自己。在上一篇文章《彻底理解操作系统:CPU与实模式》中,我们从历史的角度了解了x86最开始是没有任何保护机制的,应用程序竟然可以与操作系统平起平坐,操作系统能读写的内存区域应用程序也一样可以读写,操作系统可以控制的硬件应用程序一样不在话下。应用程序和操作系统这么平等还何谈保护?其实从某种程度讲,保护自己就是限制别人,那么操作系统该怎样限制应用程序呢?
大家好,我是轩辕。我们知道,我们平时编程写的高级语言,是经过编译器编译以后,变成了CPU可以执行的机器指令:而CPU能支持的指令,都在它的指令集里面了。很久以来,我都在思考一个问题:CPU有没有未公开的指令?或者说:CPU有没有隐藏的指令?为什么会有这个问题?平常我们谈论网络安全问题的时候,大多数时候都是在软件层面。谈应用程序的漏洞、后端服务的漏洞、第三方开源组件的漏洞乃至操作系统的漏洞。但很少有机会去触及硬件,前几年爆发的熔断和幽灵系列漏洞,就告诉我们,CPU也不是可信任的。要是CPU隐藏有某些不为人知的指令,这是一件非常可怕的事情。如果某一天,某些国家或者某些团体组织出于某种需要,利用这些
一、更新显示适配器驱动程序修复出现故障的显示适配器驱动程序的一种方法是将其更新到可用的最新稳定版本。1.按Win+X打开WinX菜单。2.单击设备管理器打开设备管理工具。3.在设备管理器中,展开显示适配器部分。4.右键单击显卡驱动程序(NVIDIA、AMD、IntelUHDGraphics)并选择“更新驱动程序”。5.选择自动搜索驱动程序。Windows将扫描新的驱动程序并自动安装它们。重新启动PC并检查错误是否已解决。如果设备管理器找不到新的驱动程序,还有其他方法可以解决。根据使用的是AMD、NVIDIA还是Intel高清显卡,可以使用配套应用程序或制造商网站下载最新的驱动程序更新。二、卸载
大家好,我是渔夫子。今天聊聊在项目中通过优化redis写入而降低cpu使用率的一次经历。1.背景本文是项目中基于redis记录实时请求量的一个功能,因流量上涨造成redis服务器的CPU高于80%而触发了自动报警机制,经分析将实时写入redis的方式变更成批量写入的方式,从而将CPU使用率降低了30%左右的经历。具体业务需求是这样的:我们会将接受到的请求按地域属性进行划分。目标是针对具体的国家请求进行总数的控制。当达到预设的最大请求数时,就不再处理该流量,直接给客户端返回204响应。如果没有达到最大请求数,则需要对实时请求数+1。如下图所示:2.现版本一第一个版本很简单,就是将最大值存放在re
介绍早在2020年,我们就拥有了在SwiftUI(LazyVGrid和LazyHGrid)中绘制网格的新视图控件。两年后,我们又获得了另一种在网格(Grid)中显示视图的视图控件。但是,这些新增功能非常不同,不仅在您使用它的方式上,而且在它内部的行为方式上。2020年的观点很懒惰。这些新人很热心。lazygrids不会渲染甚至实例化屏幕外的视图。单元格视图仅在它们被滚动时创建,并且在它们滚动时停止计算。这篇文章的主题EagerGrids正好相反。SwiftUI不在乎它们是在屏幕上还是在屏幕外。所有视图都被同等对待。这可能会出现大量单元的性能问题。然而,多少是一个很大的数字是一个不可能回答的问题
前言Android音频采集android音频采集一般两种方式:AudioRecord和MediaRecorder两种都可以录制音频,MediaRecorder已实现大量的封装,操作起来更加简单,而AudioRecord使用起来更加灵活,能实现更多的功能一、Android音频采集1.AudioRecord基于字节流录音;可以实现语音的实时处理,进行边录边播,对音频的实时处理;AudioRecord是一个比较偏底层的API,它可以获取到一帧帧PCM数据,之后可以对这些数据进行处理;输出的是PCM的语音数据,如果保存成音频文件是不能被播放器播放的。要用到AudioTrack这个去进行处理;2.Med
前言这几天做系统声音录制,通过改源码编译后成功的;那就详细介绍下内置声源的录制方案。Android中可以通过使用MediaRecorder.AudioSource.REMOTE_SUBMIX来实现系统声音的录制,这个属性只有系统应用能够使用。而且这个属性会截掉耳机和扬声器的声音,听不到手机中播放音乐或者视频时的声音。这个时候我们就要来改系统源码。一、录音的简单实现AudioRecordaudioRecord=newAudioRecord(MediaRecorder.AudioSource.REMOTE_SUBMIX,captureSampleRate,captureChannel,AudioF
前言不久前,我正在工作中开发一项新服务,该服务由SwiftPackage组成,该Package公开了一个类似于Decodable协议,供我们应用程序的其余部分使用。事实上,该协议是从Decodable本身继承下来的,看起来像这样:Fetchable.switprotocolFetchable:Decodable,Equatable{}新的package将采用符合Fetchable的类型来尝试从远程或缓存的JSON数据块中解码它们。由于这项服务对应用程序的正确运行至关重要,作为这项工作的一部分,我们希望确保始终存在故障安全(fail-safe)。因此,我们让该应用程序附带了一个备用的JSON文
背景如果你的Flutter版本号小于等于2.5.3或大于等于3.0.5,以下描述的问题将不会发生在你的应用中,但是我相信大部分应用都会命中此区间。事情发生在最近,我们的应用(稿定设计)新上线的iOS版本崩溃数据飙升。根据崩溃日志和用户反馈,大部分新增崩溃都来自于同一个原因:内存不足。有的直接变成OOM,不易排查。有的则是申请内存失败,导致后续逻辑错误的崩溃。结合「处处开花,多点爆破」的情况来看,应该是某种偏底层的内存管理问题。这就有点挠头了,因为这个版本并没有做什么内存相关的改动。于是我采取了二分法,花了两个小时试了版本中所有PR,发现罪魁祸首是Flutter版本升级:2.5.3→2.10.。
引言最近时间做的android开发板上控制电机,都是通过串口进行对接和通讯。对串口接触下来,发现真的可以做很多有意思的东西,很多硬件设备都可以通过串口进行通讯,比如:打印机、ATM吐卡机、IC/ID卡读卡等,以及物联网相关的设备;一、串口简介串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口;串行接口(SerialInterface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢;1.串口-波特率串口传输速率,用来衡量数据