• 1. 虚拟机启动过程
  • 2. KVM API开胃菜
  • 3. 另外一个简单的QEMU emulator demo
  • 4. 总结
  • 5. 参考

1. 虚拟机启动过程

第一步,获取到kvm句柄

kvmfd = open("/dev/kvm", O_RDWR);

第二步,创建虚拟机,获取到虚拟机句柄

vmfd = ioctl(kvmfd, KVM_CREATE_VM, 0);

第三步,为虚拟机映射内存,还有其他的PCI信号处理的初始化

ioctl(kvmfd, KVM_SET_USER_MEMORY_REGION, &mem);

第四步,将虚拟机镜像映射到内存,相当于物理机的boot过程,把镜像映射到内存。

第五步,创建vCPU,并为vCPU分配内存空间。

ioctl(kvmfd, KVM_CREATE_VCPU, vcpuid);vcpu->kvm_run_mmap_size = ioctl(kvm->dev_fd, KVM_GET_VCPU_MMAP_SIZE, 0);

第五步,创建vCPU个数的线程并运行虚拟机。

ioctl(kvm->vcpus->vcpu_fd, KVM_RUN, 0);

第六步,线程进入循环,并捕获虚拟机退出原因,做相应的处理。

这里的退出并不一定是虚拟机关机,虚拟机如果遇到IO操作,访问硬件设备,缺页中断等都会退出执行,退出执行可以理解为将CPU执行上下文返回到QEMU。

在虚机启动之后正常运行的过程中,虚机就是在不断的经历ioctl进入,返回,进入,返回的循环过程,如下面的伪码所示。

open("/dev/kvm")
ioctl(KVM_CREATE_VM)
ioctl(KVM_CREATE_VCPU)
for (;;) {ioctl(KVM_RUN)switch (exit_reason) {case KVM_EXIT_IO:  /* ... */case KVM_EXIT_HLT: /* ... */}
}

上述伪码是在用户空间中QEMU代码的实现模型,在内核中的KVM实现中,相关代码和用户空间类似,也是在进入虚机运行,等待虚机退出之后,会依据退出事件类型调用不同的处理钩子函数。唯一不同的是,如果退出事件内核判断内核层就可以处理完毕,就不需要再退出到用户层处理,而是直接在内核层就直接转入虚机运行态。

关于KVM_CREATE_VM参数的描述,创建的VM是没有cpu和内存的,需要QEMU进程利用mmap系统调用映射一块内存给VM的描述符,其实也就是给VM创建内存的过程。

参见: https://github.com/torvalds/linux/blob/master/Documentation/virt/kvm/api.rst

2. KVM API开胃菜

下面是一个KVM的简单demo,其目的在于加载 code 并使用KVM运行起来.

这是一个at&t的8086汇编,.code16表示他是一个16位的,当然直接运行是运行不起来的,为了让他运行起来,我们可以用KVM提供的API,将这个程序看做一个最简单的操作系统,让其运行起来。

这个汇编的作用是输出al寄存器的值到0x3f8端口。对于x86架构来说,通过IN/OUT指令访问。PC架构一共有65536个8bit的I/O端口,组成64KI/O地址空间,编号从0~0xFFFF。连续两个8bit的端口可以组成一个16bit的端口,连续4个组成一个32bit的端口。I/O地址空间和CPU的物理地址空间是两个不同的概念,例如I/O地址空间为64K,一个32bit的CPU物理地址空间是4G。

最终程序理想的输出应该是,al,bl的值后面KVM初始化的时候有赋值。

4\n (并不直接输出\n,而是换了一行),hlt 指令表示虚拟机退出

.globl _start.code16
_start:mov $0x3f8, %dxadd %bl, %aladd $'0', %alout %al, (%dx)mov $'\n', %alout %al, (%dx)hlt

我们编译一下这个汇编,得到一个 Bin.bin 的二进制文件

as -32 bin.S -o bin.o
ld -m elf_i386 --oformat binary -N -e _start -Ttext 0x10000 -o Bin.bin bin.o

查看一下二进制格式

➜  demo1 hexdump -C bin.bin
00000000  ba f8 03 00 d8 04 30 ee  b0 0a ee f4              |......0.....|
0000000c
对应了下面的code数组,这样直接加载字节码就不需要再从文件加载了const uint8_t code[] = {0xba, 0xf8, 0x03, /* mov $0x3f8, %dx */0x00, 0xd8,       /* add %bl, %al */0x04, '0',        /* add $'0', %al */0xee,             /* out %al, (%dx) */0xb0, '\n',       /* mov $'\n', %al */0xee,             /* out %al, (%dx) */0xf4,             /* hlt */};
#include <err.h>
#include <fcntl.h>
#include <linux/kvm.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>int main(void)
{int kvm, vmfd, vcpufd, ret;const uint8_t code[] = {0xba, 0xf8, 0x03, /* mov $0x3f8, %dx */0x00, 0xd8,       /* add %bl, %al */0x04, '0',        /* add $'0', %al */0xee,             /* out %al, (%dx) */0xb0, '\n',       /* mov $'\n', %al */0xee,             /* out %al, (%dx) */0xf4,             /* hlt */};uint8_t *mem;struct kvm_sregs sregs;size_t mmap_size;struct kvm_run *run;// 获取 kvm 句柄kvm = open("/dev/kvm", O_RDWR | O_CLOEXEC);if (kvm == -1)err(1, "/dev/kvm");// 确保是正确的 API 版本ret = ioctl(kvm, KVM_GET_API_VERSION, NULL);if (ret == -1)err(1, "KVM_GET_API_VERSION");if (ret != 12)errx(1, "KVM_GET_API_VERSION %d, expected 12", ret);// 创建一虚拟机vmfd = ioctl(kvm, KVM_CREATE_VM, (unsigned long)0);if (vmfd == -1)err(1, "KVM_CREATE_VM");// 为这个虚拟机申请内存,并将代码(镜像)加载到虚拟机内存中mem = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);if (!mem)err(1, "allocating guest memory");memcpy(mem, code, sizeof(code));// 为什么从 0x1000 开始呢,因为页表空间的前4K是留给页表目录struct kvm_userspace_memory_region region = {.slot = 0,.guest_phys_addr = 0x1000,.memory_size = 0x1000,.userspace_addr = (uint64_t)mem,};// 设置 KVM 的内存区域ret = ioctl(vmfd, KVM_SET_USER_MEMORY_REGION, &region);if (ret == -1)err(1, "KVM_SET_USER_MEMORY_REGION");// 创建虚拟CPUvcpufd = ioctl(vmfd, KVM_CREATE_VCPU, (unsigned long)0);if (vcpufd == -1)err(1, "KVM_CREATE_VCPU");// 获取 KVM 运行时结构的大小ret = ioctl(kvm, KVM_GET_VCPU_MMAP_SIZE, NULL);if (ret == -1)err(1, "KVM_GET_VCPU_MMAP_SIZE");mmap_size = ret;if (mmap_size < sizeof(*run))errx(1, "KVM_GET_VCPU_MMAP_SIZE unexpectedly small");// 将 kvm run 与 vcpu 做关联,这样能够获取到kvm的运行时信息run = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED, vcpufd, 0);if (!run)err(1, "mmap vcpu");// 获取特殊寄存器ret = ioctl(vcpufd, KVM_GET_SREGS, &sregs);if (ret == -1)err(1, "KVM_GET_SREGS");// 设置代码段为从地址0处开始,我们的代码被加载到了0x0000的起始位置sregs.cs.base = 0;sregs.cs.selector = 0;// KVM_SET_SREGS 设置特殊寄存器ret = ioctl(vcpufd, KVM_SET_SREGS, &sregs);if (ret == -1)err(1, "KVM_SET_SREGS");// 设置代码的入口地址,相当于32位main函数的地址,这里16位汇编都是由0x1000处开始。// 如果是正式的镜像,那么rip的值应该是类似引导扇区加载进来的指令struct kvm_regs regs = {.rip = 0x1000,.rax = 2,    // 设置 ax 寄存器初始值为 2.rbx = 2,    // 同理.rflags = 0x2,   // 初始化flags寄存器,x86架构下需要设置,否则会粗错};ret = ioctl(vcpufd, KVM_SET_REGS, &regs);if (ret == -1)err(1, "KVM_SET_REGS");// 开始运行虚拟机,如果是qemu-kvm,会用一个线程来执行这个vCPU,并加载指令while (1) {// 开始运行虚拟机ret = ioctl(vcpufd, KVM_RUN, NULL);if (ret == -1)err(1, "KVM_RUN");// 获取虚拟机退出原因switch (run->exit_reason) {case KVM_EXIT_HLT:puts("KVM_EXIT_HLT");return 0;// 汇编调用了 out 指令,vmx 模式下不允许执行这个操作,所以// 将操作权切换到了宿主机,切换的时候会将上下文保存到VMCS寄存器// 后面CPU虚拟化会讲到这部分// 因为虚拟机的内存宿主机能够直接读取到,所以直接在宿主机上获取到// 虚拟机的输出(out指令),这也是后面PCI设备虚拟化的一个基础,DMA模式的PCI设备case KVM_EXIT_IO:if (run->io.direction == KVM_EXIT_IO_OUT && run->io.size == 1 && run->io.port == 0x3f8 && run->io.count == 1)putchar(*(((char *)run) + run->io.data_offset));elseerrx(1, "unhandled KVM_EXIT_IO");break;case KVM_EXIT_FAIL_ENTRY:errx(1, "KVM_EXIT_FAIL_ENTRY: hardware_entry_failure_reason = 0x%llx",(unsigned long long)run->fail_entry.hardware_entry_failure_reason);case KVM_EXIT_INTERNAL_ERROR:errx(1, "KVM_EXIT_INTERNAL_ERROR: suberror = 0x%x", run->internal.suberror);default:errx(1, "exit_reason = 0x%x", run->exit_reason);}}
}

编译并运行这个demo

gcc -g demo.c -o demo
➜  demo1 ./demo
4
KVM_EXIT_HLT

3. 另外一个简单的QEMU emulator demo

使用KVM API实现Emulator Demo: http://soulxu.github.io/blog/2014/08/11/use-kvm-api-write-emulator/ , 代码在: https://github.com/haiwei-li/kvmsample

在此基础上我再详细介绍一下qemu-kvm的启动过程。

.globl _start.code16
_start:xorw %ax, %ax   # 将 ax 寄存器清零loop1:out %ax, $0x10  # 像 0x10 的端口输出 ax 的内容,at&t汇编的操作数和Intel的相反。inc %ax         # ax 值加一jmp loop1       # 继续循环

这个汇编的作用就是一直不停的向0x10端口输出一字节的值。

从main函数开始说起

int main(int argc, char **argv) {int ret = 0;// 初始化kvm结构体struct kvm *kvm = kvm_init();if (kvm == NULL) {fprintf(stderr, "kvm init fauilt\n");return -1;}// 创建VM,并分配内存空间if (kvm_create_vm(kvm, RAM_SIZE) < 0) {fprintf(stderr, "create vm fault\n");return -1;}// 加载镜像load_binary(kvm);// only support one vcpu nowkvm->vcpu_number = 1;// 创建执行现场kvm->vcpus = kvm_init_vcpu(kvm, 0, kvm_cpu_thread);// 启动虚拟机kvm_run_vm(kvm);kvm_clean_vm(kvm);kvm_clean_vcpu(kvm->vcpus);kvm_clean(kvm);
}

第一步,调用kvm_init() 初始化了 kvm 结构体。先来看看怎么定义一个简单的kvm。

struct kvm {int dev_fd;	            // /dev/kvm 的句柄int vm_fd;               // GUEST 的句柄__u64 ram_size;          // GUEST 的内存大小__u64 ram_start;         // GUEST 的内存起始地址,// 这个地址是qemu emulator通过mmap映射的地址int kvm_version;         struct kvm_userspace_memory_region mem; // slot 内存结构,由用户空间填充、// 允许对guest的地址做分段。将多个slot组成线性地址struct vcpu *vcpus;      // vcpu 数组int vcpu_number;         // vcpu 个数
};

初始化 kvm 结构体。

struct kvm *kvm_init(void) {struct kvm *kvm = malloc(sizeof(struct kvm));kvm->dev_fd = open(KVM_DEVICE, O_RDWR);  // 打开 /dev/kvm 获取 kvm 句柄if (kvm->dev_fd < 0) {perror("open kvm device fault: ");return NULL;}kvm->kvm_version = ioctl(kvm->dev_fd, KVM_GET_API_VERSION, 0);  // 获取 kvm API 版本return kvm;
}

第二步+第三步,创建虚拟机,获取到虚拟机句柄,并为其分配内存。

int kvm_create_vm(struct kvm *kvm, int ram_size) {int ret = 0;// 调用 KVM_CREATE_KVM 接口获取 vm 句柄kvm->vm_fd = ioctl(kvm->dev_fd, KVM_CREATE_VM, 0);if (kvm->vm_fd < 0) {perror("can not create vm");return -1;}// 为 kvm 分配内存。通过系统调用.kvm->ram_size = ram_size;kvm->ram_start =  (__u64)mmap(NULL, kvm->ram_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0);if ((void *)kvm->ram_start == MAP_FAILED) {perror("can not mmap ram");return -1;}// kvm->mem 结构需要初始化后传递给 KVM_SET_USER_MEMORY_REGION 接口// 只有一个内存槽kvm->mem.slot = 0;// guest 物理内存起始地址kvm->mem.guest_phys_addr = 0;// 虚拟机内存大小kvm->mem.memory_size = kvm->ram_size;// 虚拟机内存在host上的用户空间地址,这里就是绑定内存给guestkvm->mem.userspace_addr = kvm->ram_start;// 调用 KVM_SET_USER_MEMORY_REGION 为虚拟机分配内存。ret = ioctl(kvm->vm_fd, KVM_SET_USER_MEMORY_REGION, &(kvm->mem));if (ret < 0) {perror("can not set user memory region");return ret;}return ret;
}

接下来就是load_binary把二进制文件load到虚拟机的内存中来,在第一个demo中我们是直接把字节码放到了内存中,这里模拟镜像加载步骤,把二进制文件加载到内存中。

void load_binary(struct kvm *kvm) {int fd = open(BINARY_FILE, O_RDONLY);  // 打开这个二进制文件(镜像)if (fd < 0) {fprintf(stderr, "can not open binary file\n");exit(1);}int ret = 0;char *p = (char *)kvm->ram_start;while(1) {ret = read(fd, p, 4096);           // 将镜像内容加载到虚拟机的内存中if (ret <= 0) {break;}printf("read size: %d", ret);p += ret;}
}

加载完镜像后,需要初始化vCPU,以便能够运行镜像内容

struct vcpu {int vcpu_id;                 // vCPU id,vCPUint vcpu_fd;                 // vCPU 句柄pthread_t vcpu_thread;       // vCPU 线程句柄struct kvm_run *kvm_run;     // KVM 运行时结构,也可以看做是上下文int kvm_run_mmap_size;       // 运行时结构大小struct kvm_regs regs;        // vCPU的寄存器struct kvm_sregs sregs;      // vCPU的特殊寄存器void *(*vcpu_thread_func)(void *);  // 线程执行函数
};struct vcpu *kvm_init_vcpu(struct kvm *kvm, int vcpu_id, void *(*fn)(void *)) {// 申请vcpu结构struct vcpu *vcpu = malloc(sizeof(struct vcpu));// 只有一个 vCPU,所以这里只初始化一个vcpu->vcpu_id = 0;// 调用 KVM_CREATE_VCPU 获取 vCPU 句柄,并关联到kvm->vm_fd(由KVM_CREATE_VM返回)vcpu->vcpu_fd = ioctl(kvm->vm_fd, KVM_CREATE_VCPU, vcpu->vcpu_id);if (vcpu->vcpu_fd < 0) {perror("can not create vcpu");return NULL;}// 获取KVM运行时结构大小vcpu->kvm_run_mmap_size = ioctl(kvm->dev_fd, KVM_GET_VCPU_MMAP_SIZE, 0);if (vcpu->kvm_run_mmap_size < 0) {perror("can not get vcpu mmsize");return NULL;}printf("%d\n", vcpu->kvm_run_mmap_size);// 将 vcpu_fd 的内存映射给 vcpu->kvm_run结构。相当于一个关联操作// 以便能够在虚拟机退出的时候获取到vCPU的返回值等信息vcpu->kvm_run = mmap(NULL, vcpu->kvm_run_mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED, vcpu->vcpu_fd, 0);if (vcpu->kvm_run == MAP_FAILED) {perror("can not mmap kvm_run");return NULL;}// 设置线程执行函数vcpu->vcpu_thread_func = fn;return vcpu;
}

最后一步,以上工作就绪后,启动虚拟机.

void kvm_run_vm(struct kvm *kvm) {int i = 0;for (i = 0; i < kvm->vcpu_number; i++) {// 启动线程执行 vcpu_thread_func 并将 kvm 结构作为参数传递给线程if (pthread_create(&(kvm->vcpus->vcpu_thread), (const pthread_attr_t *)NULL, kvm->vcpus[i].vcpu_thread_func, kvm) != 0) {perror("can not create kvm thread");exit(1);}}pthread_join(kvm->vcpus->vcpu_thread, NULL);
}

启动虚拟机其实就是创建线程,并执行相应的线程回调函数。

线程回调函数在kvm_init_vcpu的时候传入

void *kvm_cpu_thread(void *data) {// 获取参数struct kvm *kvm = (struct kvm *)data;int ret = 0;// 设置KVM的参数kvm_reset_vcpu(kvm->vcpus);while (1) {printf("KVM start run\n");// 启动虚拟机,此时的虚拟机已经有内存和CPU了,可以运行起来了。ret = ioctl(kvm->vcpus->vcpu_fd, KVM_RUN, 0);if (ret < 0) {fprintf(stderr, "KVM_RUN failed\n");exit(1);}// 前文 kvm_init_vcpu 函数中,将 kvm_run 关联了 vCPU 结构的内存// 所以这里虚拟机退出的时候,可以获取到 exit_reason,虚拟机退出原因switch (kvm->vcpus->kvm_run->exit_reason) {case KVM_EXIT_UNKNOWN:printf("KVM_EXIT_UNKNOWN\n");break;case KVM_EXIT_DEBUG:printf("KVM_EXIT_DEBUG\n");break;// 虚拟机执行了IO操作,虚拟机模式下的CPU会暂停虚拟机并// 把执行权交给emulatorcase KVM_EXIT_IO:printf("KVM_EXIT_IO\n");printf("out port: %d, data: %d\n", kvm->vcpus->kvm_run->io.port,  *(int *)((char *)(kvm->vcpus->kvm_run) + kvm->vcpus->kvm_run->io.data_offset));sleep(1);break;// 虚拟机执行了memory map IO操作case KVM_EXIT_MMIO:printf("KVM_EXIT_MMIO\n");break;case KVM_EXIT_INTR:printf("KVM_EXIT_INTR\n");break;case KVM_EXIT_SHUTDOWN:printf("KVM_EXIT_SHUTDOWN\n");goto exit_kvm;break;default:printf("KVM PANIC\n");goto exit_kvm;}}exit_kvm:return 0;
}void kvm_reset_vcpu (struct vcpu *vcpu) {if (ioctl(vcpu->vcpu_fd, KVM_GET_SREGS, &(vcpu->sregs)) < 0) {perror("can not get sregs\n");exit(1);}// #define CODE_START 0x1000/* sregs 结构体x86struct kvm_sregs {struct kvm_segment cs, ds, es, fs, gs, ss;struct kvm_segment tr, ldt;struct kvm_dtable gdt, idt;__u64 cr0, cr2, cr3, cr4, cr8;__u64 efer;__u64 apic_base;__u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64];};*/// cs 为code start寄存器,存放了程序的起始地址vcpu->sregs.cs.selector = CODE_START;vcpu->sregs.cs.base = CODE_START * 16;// ss 为堆栈寄存器,存放了堆栈的起始位置vcpu->sregs.ss.selector = CODE_START;vcpu->sregs.ss.base = CODE_START * 16;// ds 为数据段寄存器,存放了数据开始地址vcpu->sregs.ds.selector = CODE_START;vcpu->sregs.ds.base = CODE_START *16;// es 为附加段寄存器vcpu->sregs.es.selector = CODE_START;vcpu->sregs.es.base = CODE_START * 16;// fs, gs 同样为段寄存器vcpu->sregs.fs.selector = CODE_START;vcpu->sregs.fs.base = CODE_START * 16;vcpu->sregs.gs.selector = CODE_START;// 为vCPU设置以上寄存器的值if (ioctl(vcpu->vcpu_fd, KVM_SET_SREGS, &vcpu->sregs) < 0) {perror("can not set sregs");exit(1);}// 设置寄存器标志位vcpu->regs.rflags = 0x0000000000000002ULL;// rip 表示了程序的起始指针,地址为 0x0000000// 在加载镜像的时候,我们直接将binary读取到了虚拟机的内存起始位// 所以虚拟机开始的时候会直接运行binaryvcpu->regs.rip = 0;// rsp 为堆栈顶vcpu->regs.rsp = 0xffffffff;// rbp 为堆栈底部vcpu->regs.rbp= 0;if (ioctl(vcpu->vcpu_fd, KVM_SET_REGS, &(vcpu->regs)) < 0) {perror("KVM SET REGS\n");exit(1);}
}

运行一下结果,可以看到当虚拟机执行了指令 out %ax, $0x10 的时候,会引起虚拟机的退出,这是CPU虚拟化里面将要介绍的特殊机制。

宿主机获取到虚拟机退出的原因后,获取相应的输出。这里的步骤就类似于IO虚拟化,直接读取IO模块的内存,并输出结果。

➜  kvmsample git:(master) ✗ ./kvmsample
read size: 712288
KVM start run
KVM_EXIT_IO
out port: 16, data: 0
KVM start run
KVM_EXIT_IO
out port: 16, data: 1
KVM start run
KVM_EXIT_IO
out port: 16, data: 2
KVM start run
KVM_EXIT_IO
out port: 16, data: 3
KVM start run
KVM_EXIT_IO
out port: 16, data: 4
...

4. 总结

虚拟机的启动过程基本上可以这么总结:

创建kvm句柄 -> 创建vm -> 分配内存 -> 加载镜像到内存 -> 启动线程执行KVM_RUN。

从这个虚拟机的demo可以看出,虚拟机的内存是由宿主机通过mmap调用映射给虚拟机的,而vCPU是宿主机的一个线程,这个线程通过设置相应的vCPU的寄存器指定了虚拟机的程序加载地址后,开始运行虚拟机的指令,当虚拟机执行了IO操作后,CPU捕获到中断并把执行权又交回给宿主机。

当然真实的qemu-kvm比这个复杂的多,包括设置很多IO设备的MMIO,设置信号处理等。

5. 参考

https://www.cnblogs.com/Bozh/p/5753379.html

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 论文阅读笔记《Spot and Learn: A Maximum-Entropy Patch Sampler for Few-Shot Image Classification》

    核心思想本文提出一种基于最大熵图块采样算法的强化学习模型来解决小样本学习问题。作者首先提出常见的目标分类网络都是把一整张图片作为输入,进行特征提取,然后分类。而人类在观察事物的时候通常都会把注意力集中在部分感兴趣的区域,也就是所谓的注意力机制,而且当我们第…...

    2024/4/28 4:04:17
  2. (python) 输入三条边,判断是否可以成为三角形

    提问:假如我输入三个随机数,然后随机判定可否成为三角形 1.首先需要输入三个随机数 a1= int(input (“请输入数字1:”)) a2= int(input (“请输入数字2:”)) a3= int(input (“请输入数字3:”)) 打印三次输入结果 print (a1,a2,a3) 三角形的三边的话都不可能为0 所以要…...

    2024/4/20 3:33:38
  3. 算法学习 2.2 栈

    这节我学习的是栈。 栈的特点与队列的一个特点相反:栈是后进先出。后进先出。 只能在一端进行插入和删除操作 实现栈很简单,仅需要一个一位数组和指向栈顶的变量top就可以了。 什么是栈顶呢? 想象一个盒装的乐事薯片,装薯片的时候,最后一个进去的是不是要被我们第一个吃掉…...

    2024/4/15 6:26:12
  4. codemirror主题效果概览

    codemirror是目前最流行的在线编辑器插件,本文主要是罗列codemirror提供的所有主题效果,如果你需要使用codemirror制作一个在线编辑器,可以参考本文选择一个喜欢的主题。 本文使用的目标对象是vue,其他语言或框架也是类似的。为了减小纵向篇幅,这里使用了三个codemirror,…...

    2024/4/16 12:50:05
  5. 集合覆盖问题-基于贪心思想的近似算法-python实现

    写这篇主要是想与线性规划求解集合覆盖问题做个性能对比,基于后者的实现方法可参考博文。 本文中数据集X及集族生成规则同上一篇,这里不再介绍。整个贪心算法解决集合覆盖问题的实现代码如下。 # 集合覆盖问题-part1-贪心算法 import time import random from itertools impo…...

    2024/4/23 20:04:54
  6. 从输入url到页面展示经历了哪些过程

    这里引用了极客时间浏览器工作原理课程的一个评论用户输入URL,浏览器会根据用户输入的信息判断是搜索还是网址,如果是搜索内容,就将搜索内容+默认搜索引擎合成新的URL;如果用户输入的内容符合URL规则,浏览器就会根据URL协议,在这段内容上加上协议合成合法的URL 用户输入完…...

    2024/4/16 12:50:05
  7. 期末复习:信息安全(三)

    🎯对称密码体制 单密钥系统的加密密钥和解密密钥相同,或实质上等同,即从一个易于得出另一个。 (举例:DES,Triple DES,IDEA,AES,RC5,CAST-2018)分组密码算法 明文被分为固定长度的块,即分组,分组一般为64比特,或者128比特。 对每个分组用相同的算法和密钥加/解密。 密文…...

    2024/4/24 9:04:15
  8. 为什么我们需要去中心化金融?

    去中心化金融已被视为区块链技术在垂直领域的重要应用。 从去中心化交易所到各种新资产的借贷协议,我们见证了区块链在这一领域的巨大想象力和创造力。除了宣传炒作之外,为什么去中心化金融很重要,为什么我们在当今世界需要它?通过分布式账本技术,去中心化金融为传统的金融…...

    2024/4/24 9:04:14
  9. java 网络编程习题

    java 网络编程习题 1、TCP/IP系统中的端口号是一个( )位的数字,它的范围是0到65535。 16 2、在Java编程语言中,TCP/IPsocket连接是用java.net包中的类实现的。其连接步骤和方法是 服务器分配一个端口号。如果客户请求一个连接,服务器使用accept()方法打开socket连接 客…...

    2024/4/28 1:57:04
  10. SpringCloud:Eureka访问权限配置

    一、场景当需要连接eureka server不在同一个内网时,需要通过外网访问,这时为了防止外人看到相关信息,需要对其增加访问限制。即可通过spring security组件进行安全控制。二、实现1.eureka server1.1.引入jar包在eureka server中引入security组件。<dependency> <g…...

    2024/4/24 9:04:12
  11. 个人经验,校招面试

    个人经验,校招面试 本人20届应届生,平时都是在csdn上划划水,第一篇博客想分享一下对校招的一些看法,希望对以后的学弟学妹们有点帮助。 何时开始准备 我的学校是一个比较末流的211,周围的人也都挺咸鱼的,很多人到了大三,发现学校啥都学了,Java,c,c++,c#,游戏等等一…...

    2024/4/24 9:04:12
  12. vue下,使用ElementUI实现首页导航布局

    新建一个首页在登录页面,使用vue-router路由指向首页在index.js配置路由上面就做好了,点击登录,即可进入index....

    2024/4/24 9:04:13
  13. wens Codeforces Round #645 (Div. 2)

    这场cf,我败在了老奶奶身上。就做出来一道题。还上分了。A题,台灯。十分钟就过了吧,470分。但是prime passed(预测试通过)。当时觉得完了,又是一场0题之路。可是上分了。搞搞笑笑。#include <iostream>using namespace std;int main() {int t, n, m;cin >> t…...

    2024/4/28 3:57:06
  14. 设计模式---观察者模式

    前言:观察者模式可以类比于用户订阅某个频道,比如我订阅了一个短信平台,那么首先我需要在该平台上订阅,此时平台存储关于我的信息,然后平台根据存储的用户信息(可能有多个用户信息)给相关用户发送信息。订阅推送消息一、理论核心观察者模式主要用于1:N的通知,当一个对象(…...

    2024/4/27 23:34:33
  15. 【620】【2.1信息交流的基本概念】

    文章目录信息交流的分类信息交流(社会信息过程)信息交流的特征信息交流行为信息交流的条件和要素 信息交流(传播过程) 信息交流是信息管理领域的核心内容。只要事物存在和运动,就有信息产生,就会伴随信息交流传播。 信息交流的分类 自然信息交流:非生物之间、生物之间的…...

    2024/4/24 9:04:07
  16. 翻译:在 React Hooks 中使用 Typescript 小记

    在 React Hooks 中使用 Typescript 小记最近在关注 Typescript 和 react hook 相关的知识,看到了这篇文章,还不错,get 到了。感谢作者的分享。原文:Notes on TypeScript: React Hooks原文作者简介:A. Sharif:专注于质量。软件开发。产品管理。https://twitter.com/sharif…...

    2024/4/24 9:04:08
  17. 34万亿新基建浪潮中,金融行业如何“建”好自家的助推器?

    2020年,“新基建”被提到新的高度。 新基建由信息、融合、创新三大领域组成,强调科技,目的是为数字经济建设提供基础。 从国家到社会各界,都对新基建赋予厚望,认为它既是短期受疫情影响,为稳定增长而寻找的对冲政策增长点,更是中国经济中长期高质量发展的内在需求。 在新…...

    2024/4/27 7:42:47
  18. OCR--发票票据影像识别系统

    发票扫描识别系统是一款扫描仪和OCR识别技术结合的产品,针对增值税专用发票以及常见的表单、票据等纸质文档数据扫描识别的系统,利用OCR识别技术,对增值税专用发票扫描识别,快速完成表单、票据的信息采集。 发票扫描识别系统被广泛应用在企业财务共享、汽车销售DMS系统、电…...

    2024/4/24 9:04:06
  19. SAP 查询没有挂靠到组织单位的岗位

    使用TCODE:S_AHR_61016532,在屏幕上输入数据(如下图所示)执行程序将显示 当前没有分配到组织单位的岗位。同理,修改“对象类型”和“子类型”的输入值可查询其他诸如“没有分配岗位的人员”、“没有下属组织结构的组织结构”等等信息...

    2024/4/18 18:20:26
  20. 【链环科技】关于直播系统开发的灵魂提问

    近年来,直播行业的崛起引起了投资者们和在线用户的注意力。越来越多的人参与到直播的浪潮中,不论是作为主播、开发者、企业、用户依靠直播获取流量曝光的人都越来越多。 而除了大牌的抖音、淘宝、微信、快手、虎牙、斗鱼直播平台等。一些教育平台、电商平台等也尝试开发属于自…...

    2024/4/26 6:26:26

最新文章

  1. Tomcat基本使用与控制台乱码解决方式

    目录 Tomcat简单介绍 Tomcat基本使用 Tomcat控制台乱码解决方式 Tomcat简单介绍 tomcat是apache开源绿色版本的服务器。 Tomcat基本使用 安装&#xff1a;下载zip包解压即可。 卸载&#xff1a;删除解压的tomcat文件夹即可。 启动&#xff1a;双击bin/startup.bat 停止…...

    2024/4/28 7:09:39
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Python语法总结:not(常出现错误)

    0、not是什么 在python中not是逻辑判断词&#xff0c;用于布尔型True和False之前 a not Ture # a False b not False # b True1、not的用法 &#xff08;1&#xff09;判断语句 if not a:# 如果a是False&#xff0c;执行的语句&#xff08;2&#xff09;判断元素是否在…...

    2024/4/26 2:51:31
  4. CrossOver玩游戏会损害电脑吗 CrossOver玩游戏会卡吗 Mac玩游戏 crossover24免费激活

    CrossOver是一款可以在macOS上运行Windows应用程序的软件&#xff0c;它利用了Wine技术&#xff0c;无需安装虚拟机或双系统&#xff0c;可以直接在苹果系统下运行Windows游戏。那么&#xff0c;使用CrossOver玩游戏会损害电脑吗&#xff1f;CrossOver玩游戏会卡吗&#xff1f;…...

    2024/4/26 20:31:33
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; 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
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在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