掌握 binder 机制?别想绕开 binder 驱动源码分析
作者:Android面试官
binder 是 Android 系统的进程间通信机制,是了解 Android 运行机制必须要掌握的一个知识点,更是一线企业面试必问的知识点!比如:
- binder 有什么优势?(字节)
- binder 一次拷贝原理?(腾讯)
- Intent 传递大数据限制?(阿里)
- AIDL 原理?(字节)
- 谈谈你对 binder 驱动的了解?(字节)
你都能回答上来吗!?
到底怎样才能彻底掌握 binder 机制、游刃有余的应对 binder 面试问题,让面试官对你刮目相看,斩获高薪 offer 呢?
没有捷径,「Read The Fucking Source Code!」,这句话绝对是至理名言。
要达到彻底掌握,不能死记别人对 binder 的概括描述,而是要自己深入源码去看它到底是个什么东西,有了自己的理解,才能胸有成竹的应对相关面试问题。
本文主要来分析下 binder 驱动源码中的三个关键函数,binder_open()、binder_mmap() 及 binder_ioctl()。
上层调用陷入内核
分析这三个关键函数前,先来看下它们是如何被上层调用的,这样对 binder 机制有整体的了解,才不至于对 binder 驱动的理解太过孤立。
binder 驱动在系统内核中,从用户空间应用程序到内核空间 binder 驱动,会经过一些 ProcessState、IPCThreadState 等中间的操作封装类,然后通过系统调用陷入系统内核。
在 掌握 binder 机制?先搞懂这几个关键类! 中详细分析过 ProcessState、IPCThreadState、BpBinder 以及 BinderProxy 等 binder 操作封装类源码,不了解的建议前往收藏阅读。
ProcessState 是进程单例,主要负责打开 binder 驱动设备及 mmap。binder 驱动的 binder_open()、binder_mmap() 函数在 ProcessState 的构造函数中被调用,如下:
ProcessState::ProcessState(): mDriverFD(open_driver()) //打开 binder 设备,binder_open(), mVMStart(MAP_FAILED)..., mMaxThreads(DEFAULT_MAX_binder_THREADS), mThreadPoolSeq(1){if (mDriverFD >= 0) {// 将应用进程虚拟内存空间与 binder 驱动映射,binder_mmap()mVMStart = mmap(0, binder_VM_SIZE, PROT_READ,MAP_PRIVATE | MAP_NORESERVE, mDriverFD, 0);if (mVMStart == MAP_FAILED) {close(mDriverFD);mDriverFD = -1;}}
}
IPCThreadState 为线程单例,负责与 binder 驱动进行具体的命令通信。在其 talkWithDriver() 方法中,调用了 binder 驱动的 binder_ioctl() 函数:
// binder_ioctl
ioctl(mProcess->mDriverFD, binder_WRITE_READ, &bwr)
binder 驱动注册
binder 驱动运行在内核态,向上层提供 /dev/binder 设备节点,并不对应真实的硬件设备。binder 驱动的注册逻辑在 Binder.c 中:
//drivers/staging/android/Binder.c
static init __init binder_init(void){...ret = misc_register(&binder_miscdev); //注册为 misc 驱动
}
binder_miscdev 即 Binder 设备描述如下:
static struct miscdevice binder_miscdev = {.minor = MISC_DYNAMIC_MINOR, //自动分配次设备号.name = "binder", //驱动名称.fops = &binder_fops //binder 驱动支持的文件操作
}
binder_fops 为 Binder 设备支持的操作函数,如下:
static const struct file_operations binder_fops = {.owner = THIS_MODULE,.poll = binder_poll,.unlocked_ioctl = binder_ioctl,.mmap = binder_mmap,.open = binder_open,.flush = binder_flush,.release = binder_release,
};
binder_open
用户应用程序通过 Binder 通信时,需先调用 binder_open() 方法打开 binder 驱动,binder_open() 中主要做了两个工作,对应的分为两部分来看:
//binder.c
static int binder_open(struct inode *nodp, struct file *filp)
{struct binder_proc *proc;...proc = kzalloc(sizeof(*proc), GFP_KERNEL); //创建 binder_procif (proc == NULL)return -ENOMEM;get_task_struct(current);proc->tsk = current;INIT_LIST_HEAD(&proc->todo); //初始化 todo 队列init_waitqueue_head(&proc->wait); //初始化 todo 队列proc->default_priority = task_nice(current);
上面代码的主要工作是 「创建及初始化 binder_proc」,binder_proc 就是用来存放 binder 相关数据的结构体,每个进程独有一份。
binder_lock(__func__);binder_stats_created(BINDER_STAT_PROC);hlist_add_head(&proc->proc_node, &binder_procs);proc->pid = current->group_leader->pid;INIT_LIST_HEAD(&proc->delivered_death);filp->private_data = proc;binder_unlock(__func__);...
}
第二个主要工作是 「将 binder_proc 记录起来」,方便后续使用,如上代码所示,通过 hlist_add_head() 方法将 binder_proc 记录到了内核的 binder_procs 表中,另外还将 binder_proc 存放在 filp 的 private_data 域,以便于在后续调用 mmap、ioctl 等方法时获取。
binder_mmap
对于 binder 驱动来说,上层应用调用的 mmap() 最终会执行到 binder_mmap() 方法,binder_mmap() 的主要工作是**「将上层应用的虚拟内存块和 Binder 申请的物理内存块建立映射」**,应用程序和 Binder 就拥有了共享的内存空间,这样不同的应用程序之间可以通过 Binder 实现数据共享。
- Binder 中有一物理内存块 P;B 进程中有一内存块 b
- 将 P 分别与 b 建立映射,这样 P、b 就可以看作同一块内存
- 若 A 进程想要发送数据给 B 进程,只需将数据拷贝到 P 内存,B 进程就能直接读取到了
所以 Binder 只需一次拷贝,binder_mmap() 要做的就是将 P 与 b 建立映射,该方法代码较长,分段看关键部分代码:
static int binder_mmap(struct file *filp, struct vm_area_struct *vma){struct vm_struct *area;struct binder_proc *proc = filp->private_data;const char *failure_string;struct binder_buffer *buffer;//映射空间至多 4Mif ((vma->vm_end - vma->vm_start) > SZ_4M)vma->vm_end = vma->vm_start + SZ_4M;//检查 vma 是否被禁用if (vma->vm_flags & FORBIDDEN_MMAP_FLAGS) {ret = -EPERM;failure_string = "bad vm_flags";goto err_bad_arg;}
- vma(vm_area_struct) 是**「用户态虚拟内存地址空间」**,也就是 b
- area(vm_struct) 是**「内核态虚拟地址空间」**,指向 P
- proc(binder_proc) 即 binder_open() 中创建的、存放 binder 相关数据的结构体
- 另外还做了限制映射空间至多 4M 等映射规则的检查和处理
mutex_lock(&binder_mmap_lock);//检查是否已执行过 binder_mmap 映射过if (proc->buffer) {ret = -EBUSY;failure_string = "already mapped";goto err_already_mapped;}//申请内核虚拟内存地址空间area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP);if (area == NULL) {ret = -ENOMEM;failure_string = "get_vm_area";goto err_get_vm_area_failed;}//将内核虚拟内存地址记录在 proc 中proc->buffer = area->addr;//记录用户态虚拟内存地址和内核态虚拟内存地址的偏移量proc->user_buffer_offset = vma->vm_start - (uintptr_t)proc->buffer;mutex_unlock(&binder_mmap_lock);
- proc->buffer 用于存储最终映射的内核态虚拟地址,并通过此变量控制只能映射一次
- get_vm_area() 方法申请了与用户态空间大小一致的内核态虚拟地址空间,注意此时还没分配实际的物理内存
- proc->user_buffer_offset 记录了用户态虚拟内存和内核态虚拟内存地址的偏移量,这样后续方便获取用户态虚拟内存地址
//分配存放物理页地址的数组proc->pages = kzalloc(sizeof(proc->pages[0]) * ((vma->vm_end - vma->vm_start) / PAGE_SIZE), GFP_KERNEL);proc->buffer_size = vma->vm_end - vma->vm_start;//申请一页物理内存if (binder_update_page_range(proc, 1, proc->buffer, proc->buffer + PAGE_SIZE, vma)) {ret = -ENOMEM;failure_string = "alloc small buf";goto err_alloc_small_buf_failed;}//最后的收尾工作:将内存记录到相应链表中,设置状态等INIT_LIST_HEAD(&proc->buffers);list_add(&buffer->entry, &proc->buffers);buffer->free = 1;binder_insert_free_buffer(proc, buffer);proc->free_async_space = proc->buffer_size / 2;proc->files = get_files_struct(current);proc->vma = vma;
- proc->pages 是一个二维指针,用于存放管理物理页面
- binder_update_page_range() 方法真正的申请物理页面,并分别映射到内核态和用户态的虚拟内存地址空间
至此 binder_mmap 方法执行结束,我们继续分析 **「binder_update_page_range()」**方法,此方法代码非常有助于我们理解页框以及与虚拟内存地址的映射逻辑。先了解此方法的参数:
- proc:申请内存的进程所持有的 binder_proc 对象
- allocate:1 表示申请内存,0 表示释放内存
- start:虚拟内存地址起点
- end:虚拟内存地址终点
- vma:用户态虚拟内存地址空间
static int binder_update_page_range(struct binder_proc *proc, int allocate,void *start, void *end,struct vm_area_struct *vma){if (allocate == 0) //区分是申请还是释放goto free_range;//依据 start、end 循环分配物理页for (page_addr = start; page_addr < end; page_addr += PAGE_SIZE) {//每次分配 1 个页框*/*page = **alloc_page**(GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO);//将页框映射到内核态虚拟内存地址ret = **map_kernel_range_noflush**((unsigned long)page_addr, PAGE_SIZE, PAGE_KERNEL, page);//根据 binder_mmap 方法中记录的偏移量计算出用户态虚拟内存地址user_page_addr = (uintptr_t)page_addr + proc->user_buffer_offset;//将页框映射到用户态虚拟内存地址ret = vm_insert_page(vma, user_page_addr, page[0]);}return 0;
binder_mmap() 的 allocate 参数传入 1 为申请内存,执行上面的代码。若为释放则执行以下代码:
free_range://依据 start、end 从后往前遍历for (page_addr = end - PAGE_SIZE; page_addr >= start; page_addr -= PAGE_SIZE) {page = &proc->pages[(page_addr - proc->buffer) / PAGE_SIZE];if (vma)//解除用户态虚拟地址和物理页框的映射zap_page_range(vma, (uintptr_t)page_addr + proc->user_buffer_offset, PAGE_SIZE, NULL);
err_vm_insert_page_failed://解除内核态虚拟地址和物理页框的映射unmap_kernel_range((unsigned long)page_addr, PAGE_SIZE);
err_map_kernel_failed://释放页框物理内存__free_page(*page);*page = NULL;
}
binder_ioctl
binder 驱动并不提供常规的 read()、write() 等文件操作,全部通过 binder_ioctl() 实现,所以 binder_ioctl() 是 binder 驱动中工作量最大的一个,它承担了 binder 驱动的大部分业务。这里不深入分析源码,只列出 binder_ioctl() 支持的命令列表:
命令 | 说明 |
---|---|
BINDER_WRITE_READ | 向 binder 驱动写入或读取数据 |
BINDER_SET_MAX_THREADS | 设置支持的最大线程数 |
BINDER_SET_CONTEXT_MGR | Service Manager 专用的注册命令 |
BINDER_THREAD_EXIT | 通知 binder 驱动某线程退出,释放相应资源 |
BINDER_VERSION | 获取 Binder 版本号 |
其中 BINDER_WRITE_READ 最为关键,分为若干子命令:
命令 | 说明 |
---|---|
BC_INCREFS、BC_ACQUIRE、BC_RELEASE、BC_DECREFS | 管理 binder_ref 的引用计数 |
BC_INCREFS_DONE、BC_ACQUIRE_NODE | 管理 binder_node 的引用计数 |
BC_FREE_BUFFER | 释放 Binder 内存缓冲区 |
BC_TRANSACTION | 向 binder 驱动发送通信数据(主动调用) |
BC_REPLY | 向 binder 驱动发送通信数据(返回结果) |
BC_REGISTER_LOOPER、BC_ENTER_LOOPER、BC_EXIT_LOOPER | 设置 Binder looper 状态 |
BC_REQUEST_DEATH_NOTIFICATION | 注册 Binder 死亡通知 |
BC_CLEAR_DEATH_NOTIFICATION | 清除 Binder 死亡通知 |
BC_DEAD_BINDER_DONE | 告知 Binder 已处理完 Binder 死亡通知 |
以上均为 binder 驱动作为接收方 binder_ioctl() 方法接收的命令,还有一些与之对应的 BR_ 开头的命令,由 binder 驱动主动发出,比如 BR_TRANSACTION、BR_REPLY,在一次 IPC 调用中是这样应用的:
最后
学习了 binder 源码后,要怎么运用这些知识,应对面试问题呢?贴心的 Android 面试官 已经为你演练过面试问答场景了:
推荐阅读
互联网公司(Android岗)高频面试题一集,看你能答出几题?
Android岗高频面试题二集,看你能答出几题?
Android岗高频面试题三集,看你能答出几题?
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- PLSQLDeveloper10.0.3安装包+汉化包
1,自己保存在百度云盘了 https://pan.baidu.com/s/1koI4OvJf-ku78rdBz-GXKQ 提取码:yydd...
2024/4/13 12:25:32 - C++类和对象——封装
C面向对象的三大特性为:封装、继承、多态 C认为万事万物都皆为对象,对象上有其属性和行为 例如: 人可以作为对象,属性有姓名、年龄、身高、体重...,行为有走、跑、跳、吃饭... 车可以作为对象,属性有轮胎…...
2024/4/5 2:41:00 - Go操作MySQL的一篇垃圾文章
Go操作MySQL一. 下载MySQL驱动二. 使用MySQL驱动连接数据库三. CRUD3.1 插入数据3.2 更新数据3.3 删除数据3.4 查询数据四. 预处理五. 事务六. GORM框架七. GORM的模型九. GORM的插入操作十. GORM查询操作十一. GORM更新操作十二. GORM删除操作十三. GORM的事务一. 下载MySQL驱…...
2024/4/13 12:26:02 - IntelliJ IDEA 中git使用说明书
版权 IDEA中内置的GIT功能已经比较全面,对于同时使用两款软件的同学,其实已无需安装其它软件,本文旨在尽可全面的介绍IDEA中操作git,对此已经很熟悉或是习惯直接操作命令的同学可以略过。 几点说明: 1、本文会尽可能减…...
2024/4/13 12:25:42 - 重学SpringCloud系列七之服务熔断降级hystrix
重学SpringCloud系列七之服务熔断降级hystrix服务降级&熔断&限流一、高并发&高可用二、服务雪崩三、如何解决雪崩的问题之一:服务熔断四、如何解决雪崩的问题之二:服务降级4.1.在服务调用端进行服务降级4.2.在服务提供端进行服务降级五、服务…...
2024/4/7 21:55:23 - Windows 10 到期时间如何查看
1、按Win R 运行输入如下“CMD”命令即可查看 2、WinR 输入 slmgr.vbs -dlv 显示:最为详尽的激活信息,包括:激活ID、安装ID、激活截止日期 3、WinR 输入 slmgr.vbs -dli 显示:操作系统版本、部分产品密钥、许可证状态 4、WinR …...
2024/4/7 21:55:22 - 【lzy学习笔记-dive into deep learning】数学预备 2.5-2.7
2.5 自动微分 深度学习框架通过⾃动计算导数,即⾃动微分(automatic differentiation)来加快求导。实际中,根据我们设计的模型,系统会构建⼀个计算图(computational graph),来跟踪计…...
2024/4/15 2:38:17 - 《自己动手写CPU》第五章--逻辑、移位操作与空指令的实现
5.1流水线数据相关问题 流水线中经常有一些被称为“相关”的情况发生,它使得指令序列中下一条指令无法按照设计的时钟周期执行,这些“相关”会降低流水线的性能。流水线中的线管分为以下三种类型。 (1)结构相关:指的是在指令执行的过程中&a…...
2024/4/16 19:46:16 - Raki的读paper小记:通过教师-学生模型在目标语言上的无标注数据上学习来实现单源/多源跨语言NER任务 from ACL2020
Single-/Multi-Source Cross-Lingual NER via Teacher-Student Learning on Unlabeled Data in Target Language 不要问我为什么改成了中文名,因为标题名字太长了!! Abstract & Introduction & Related Work 研究任务 通过教师-学…...
2024/4/7 21:55:19 - 单片机(ISIS 7 Professional):简易LED警报灯代码项目
这一篇文章主要介绍用C语言制作一个按钮控制的简易LED警报灯。 设计思路:这里主要用到了一个新的东西,就是SOUNDER这个发声元件,它的工作原理是需要节拍表和频率表才能发出想要的音乐,网上可以找到其他的音乐我就不再多说了。还有…...
2024/4/17 23:07:57 - (三)kityMinder如何实现节点间的跳转
本文章系列将会记录在做kityminder二次开发过程中,遇到的问题以及解决方法 有同事反馈需要脑图能够支持类似于xmind中的节点中的跳转的功能,但是实际上节点目前支持的链接方式只是支持跳转到外部的链接上去而已,并不能够支持节点间跳转的功能…...
2024/4/14 17:21:26 - Python其实超简单:只需记住3个、4类、5大、6种即可轻松入门
今天我诶大家分享一些Python的视频教程和基本概念图,以及学习路上最有效的学习方法。 鉴于大多数书籍在编写上都结构混乱,无法体现出知识的系统性、逻辑性和层次性。特整理出学Python最基础的知识学习框架,希望帮助大家快速入门。 要快速学会…...
2024/4/20 12:24:35 - Vue的双向数据绑定原理
vue的双向数据绑定原理 采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter在数据变动时发布消息给订阅者,触发相应的监听回调来渲染视图,实现数据和视图同步。 首先介绍一下Object.defineP…...
2024/4/13 12:26:42 - 重定向和转发的区别
重定向和转发的区别: 重定向的编码是 302; 转发的编码是307; 一:重定向与转发的区别 1.重定向过程: 客户端浏览器发送http请求 → web服务器接收后发送30X状态码响应及对应新的location给客户浏览器 → 客户浏览器发现…...
2024/4/13 12:26:42 - 2022年美容师(中级)考试题库及美容师(中级)报名考试
题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:美容师(中级)考试题库参考答案及美容师(中级)考试试题解析是安全生产模拟考试一点通题库老师及美容师(中级)…...
2024/5/3 18:01:09 - 第13篇 基础(十三)QML 之 定位元素(Row、Column、Grid、Flow)
目录 1、定位器 2、定义组件 3、定位器之Column(列) 4、定位器之Row(行) 5、定位器之Grid(栅格) 6、定位器之Flow(流) 7、重复元素Repeater 1、定位器 有一些QML元素被用于放置元素…...
2024/4/20 9:14:23 - 数据库基础-事务
定义 事务是由一系列对数据的访问与更新操作组成的程序执行逻辑单元 特性 1、原子性:是指事务由原子的操作序列组成,所有操作要么全部成功,要么全部失败回滚。 2、一致性:是指事务的执行不能破坏数据库数据的完整性和一致性&am…...
2024/4/20 13:52:34 - Flowable源码注释(二十三)部署管理器
Flowable源码地址:https://github.com/flowable/flowable-engine Flowable-6.7.2 源码注释地址:https://github.com/solojin/flowable-6.7.2-annotated 包路径 org.flowable.dmn.engine.impl.persistence.deploy DeploymentManager 部署管理器 packa…...
2024/5/3 13:12:14 - 什么是ELK
参考链接 “ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。 Elasticsearch 是一个搜索和分析引擎。它的特点有:分布式,零配置,自动发现,索引自动分片࿰…...
2024/5/3 13:14:14 - MacBook 右键查询英文查词无法翻译成中文
MacBook 右键查询英文查词无法翻译成中文正常MacBook 页面上选中单词点击右键查询即可调用 词典的 英汉汉英词典翻译单词,非常好用,当时系统升级版本后有时会导致不可用,点击查询后,提示:找不到任何结果问题排查解消&a…...
2024/4/13 12:26:37
最新文章
- 在2-3-4树上实现连接与分裂操作的算法与实现
在2-3-4树上实现连接与分裂操作的算法与实现 引言1. 维护2-3-4树结点的高度属性伪代码示例 2. 实现连接操作伪代码示例 3. 证明简单路径p的划分性质4. 实现分裂操作伪代码示例 C代码示例结论 引言 2-3-4树是一种平衡搜索树,它保证了树的高度被有效控制,…...
2024/5/4 6:31:12 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
前言 ASP.NET Core 内置的标识(identity)框架,采用的是 RBAC(role-based access control,基于角色的访问控制)策略,是一个用于管理用户身份验证、授权和安全性的框架。 它提供了一套工具和库&…...
2024/5/1 13:12:26 - 基于8086贪吃蛇游戏系统方恨设计
**单片机设计介绍,基于8086贪吃蛇游戏系统方恨设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086的贪吃蛇游戏系统设计是一个结合了微处理器控制、游戏逻辑以及图形显示技术的综合性项目。该系统旨在通过8086微处理器…...
2024/5/4 0:13:52 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/2 16:16:39 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/3 23:10:03 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/2 15:04:34 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/4 2:59:34 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57