linux系统
文章平均质量分 63
北方南方
阿里云PolarDB数据库研发部门,有兴趣的小伙伴可以私信我~
展开
-
在Xshell中使用sz、rz进行本机和远程主机(或虚拟机)之间文件的传输
借助XShell,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器。 其中,对于sz和rz的理解与记忆我用了如下的方法(很多时候容易搞混): sz中的s意为send(发送),告诉客户端,我(服务器)要发送文件 send to cilent,就等同于客户端在下载。 rz中的r意转载 2016-07-15 18:44:40 · 7687 阅读 · 0 评论 -
malloc()函数有始有终
1 malloc()malloc()函数是申请一块堆区内存的常用函数,简单应用如下:#include<stdio.h>#include<stdlib.h>int main(int argc, char *argv[]){ char *test = (char *)malloc(100); te原创 2018-07-05 19:43:10 · 2753 阅读 · 0 评论 -
linux线程栈与进程栈
1 线程使用方法pthread_create用于创建一个线程,pthread_join用于等待线程执行完毕,简单应用如下:#include<stdio.h>#include<pthread.h>#include&原创 2018-07-07 17:09:00 · 3669 阅读 · 0 评论 -
KVM/QEMU2.3.0 虚拟机动态迁移分析(二)
QEMU的函数处理流程图原创 2018-07-28 17:27:00 · 2762 阅读 · 0 评论 -
KVM/QEMU2.3.0 虚拟机动态迁移分析(三)
QEMU的函数处理流程图动态迁移的接收方原创 2018-07-30 11:40:50 · 2866 阅读 · 0 评论 -
KVM/QEMU2.3.0 虚拟机动态迁移分析(一)
1 迁移源端QEMUmigrate命令 –> hmp_migrate –> qmp_migrate –> qemu_savevm_state_blocked判断当前虚拟机状态适不适合迁移 –> migrate_init迁移初始化 –> 根据uri来选择迁移函数,如表1所示。 Uri 跳转函数 Tcp: tcp_start_outgoi...原创 2018-07-27 12:20:27 · 4703 阅读 · 3 评论 -
数组越界如何产生段错误
数组越界VS段错误1 栈中数组越界访问1.1 示例代码#include<stdio.h>int main(int argc, char *argv[]){ printf("0x%x\n", (unsigned int)(-2)); int a[5] = {0}; int i; printf("%d\n"...原创 2018-08-10 14:32:14 · 5146 阅读 · 0 评论 -
QEMU/seaBIOS启动流程分析
1 QEMU函数执行流程 machine_init(pc_machine_init) –&amp;gt; pc_machine_init(void) –&amp;gt; 注册QEMUMachine结构体变量pc_i440fx_machine_v2_3 –&amp;gt; pc_init_pci –&amp;gt; pc_init1 –&amp;gt; pc_memory_init –&amp;gt; pc_原创 2018-08-06 17:27:44 · 8649 阅读 · 0 评论 -
QEMU内部:整体架构和线程模型
HOST将qemu当做一个普通的进程和其他进程统一调度,可以使用资源对qemu进行资源预留隔离(cpuset)和优先级提升(chrt)。qemu进程包含多个线程,分配给GUEST的每个vcpu都对应一个vcpu线程,另外qemu还有一个线程循环执行select专门处理I/O事件。 QEMU的主要线程: 主线程(main_loop),一个 vCPU线程,一个或者多个...翻译 2018-08-07 11:47:35 · 7471 阅读 · 0 评论 -
qemu多线程技术的实现
1 qemy_mutex_* qemu_mutex_init –&amp;gt; pthread_mutex_init、qemu_mutex_destroy –&amp;gt; pthread_mutex_destroy、qemu_mutex_lock –&amp;gt; pthread_mutex_lock(如果锁被占据,则阻塞当前线程)、qemu_mutex_trylock –&amp;gt; pthread_mute...原创 2018-08-03 11:00:08 · 6104 阅读 · 0 评论 -
fork()之父子进程页表权限的设置
1 fork()系统调用fork()系统调用用来生成子进程,而现有Linux系统运行在写时拷贝的机制下,于是fork()函数在为子进程建立内核中各种管理结构的时候,并没有将真实的物理资源分配给子进程,而只是将父进程的物理资源共享给子进程,比如:fork()函数会将父进程的物理内存共享给子进程,即将父进程多级页表的内容复制到子进程新建立的多级页表中。然而在这种机制下,对于父进程中那些原本可读可写...原创 2018-07-05 15:02:57 · 3870 阅读 · 0 评论 -
从程序员角度来看ELF文件(二)
接上篇从程序员角度来看ELF文件 5 GCC、GNU链接器和Linux对于ELF的支持5.1 共享C库文件首先使用gcc -fPIC -O -c libbar.c来生成位置无关的中间代码,然后使用gcc -shared -o libbar.so libbar.o来根据上述位置无关的代码生成共享链接库。 使用共享链接库的方式如下: # gcc -O -c baz.c ...原创 2018-07-09 10:05:56 · 2393 阅读 · 0 评论 -
linux系统编程之signal信号处理程序
1 信号处理程序1.1 概述信号,软中断信号,用来通知进程发生了某些事件,是一种软件层面上对中断机制的一种模拟。信号本身是一段非常小的信息,一般都只是一个整数。信号的目的有两个:(1)通知进程一个特定的事件发生了;(2)让进程执行一个信号处理函数。 使用kill -l查看系统支持的信号类型如下:其中,1-31是定期信号,32-64是实时信号。两者的区别在于:内核不支持定期信号的...原创 2018-07-01 19:04:50 · 5217 阅读 · 0 评论 -
在忘记原密码无法登录桌面的情况下,修改centos7的用户密码
修改centos7的用户(包含root)的密码 (1)非常规启动,进入编辑启动菜单、a) 在系统启动的选择界面,选择要修改的系统的启动项,然后点击’e’进入该系统的启动菜单中去。b) 找到linux16开头的一行,在该行中寻找’ro’的所在地点,改为’rw init=sysroot/bin/sh’,然后Ctrl+x开始执行,进入单用户界面。(2)在单用户界面执行用户的密原创 2016-07-11 21:29:33 · 7353 阅读 · 0 评论 -
libvirt问题解决
问题一:libvirt error: permission denied一般出现此种错误是因为libvirt的所属用户或者用户组的权限不足或者selinux服务开启的原因,解决方法如下:(1)修改libvirt所属用户以及用户组:修改/etc/libvirt/qemu.conf,修改内容为:user='root' cgroup='root',然后保存退出编辑;重启libvirtd服务:原创 2016-07-19 15:26:57 · 13293 阅读 · 2 评论 -
linux文件的普通权限和特殊权限
linux文件的权限一般是读(r)、写(w)和执行(x),其次还有两个特殊的权限,使用字母表示分别是r和t。 普通权限:rwx r:读权限,4,表示该用户可对文件进行读取 w:写权限,2,表示该用户可对文件进行写入 x:执行权限,1,表示该用户可执行该文件 特殊权限:rt r:该种特殊权限的意思是:让一般原创 2016-07-20 20:17:02 · 1101 阅读 · 0 评论 -
&符号取出的地址到底是什么
&,取地址符号,可以获得一个变量在内存中的存储地址,但是获得的地址有异同,有的是偏移地址,有的是全局虚拟地址。1、对于栈中的变量来说,&地址取得的是变量的偏移地址:测试程序:test.c 编译后运行,结果如下: 查看test的maps文件得: 计算得到变量test的真实虚拟地址为:0x7ffd8c365000 & 0xffff00000000 | 0x8c383bc原创 2017-07-14 16:50:48 · 18989 阅读 · 0 评论 -
libvmi在qemu上的patch解读—kvm-qemu-v2.8-libvmi.patch
(1)打开一个UNIX socket,用于对客户机物理内存的访问。具体做法:创建在固定的端口上建立本地通信的监听服务,服务程序设置为函数memory_access_thread(……)。(2)accept连接请求,调用函数connection_handler(...)来处理请求,最后关闭连接。(3)解析请求中的数据,并根据请求数据选择具体的处理函数,一般有两个主要的任务—内存读、内存写,然后调用内...原创 2018-03-29 19:38:41 · 813 阅读 · 0 评论 -
CPU cache的读写机制
cache,高速缓存,其原始意义是指访问速度比一般随机存取内存(RAM)快的一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。cache的读写一般遵循两种机制:cache-through和cache-back。cache-through:数据更新时,在写入缓存之后,立即也将数据写入内存,如果此时请求指定的地址没有对应的缓存,那么直接写入内存。cache-back...原创 2018-03-29 20:35:16 · 10564 阅读 · 9 评论 -
Linux系统编程之daemon进程创建
1 umask 1.1 对应系统调用sys_umask,源码实现在/kernel/sys.c中,SYSCALL_DEFINE1(umask, int, mask) 利用传进来的参数mask对当前进程的文件结构体掩码进行赋值:xchg(&amp;current-&gt;fs-&gt;umask, mask &amp; S_IRWXUGO); task_struct结构体中fs的...原创 2018-06-30 12:27:39 · 2401 阅读 · 0 评论 -
libvirt问题之virbr0虚拟网卡启动出错
1、错误提示 root@sunshine:~/libvirt# virsh net-start default 错误:开始网络 default 失败 错误:内部错误:Failed to apply firewall rules /sbin/iptables -w –table nat –insert POSTROUTING –source 192.168.122.0/24 ‘!...原创 2018-06-19 11:16:31 · 5680 阅读 · 0 评论 -
从程序员角度来看ELF文件
1 介绍 ELF文件是一种linux/unix上通用的可执行文件格式,其比a.out和COFF二进制格式有更多的灵活性和功能。 2 类型 三种类型: (1)可执行文件,包含代码和数据,指定了进程的地址空间分布; (2)可重定位文件,包含代码和数据,用于被其他的可重定位文件或者共享库文件链接使用; (3)共享库文件,包含代码和数据,在静态链接和动态...原创 2018-06-26 11:55:19 · 2669 阅读 · 0 评论 -
QEMU是如何以后台进程运行的?
当使用libvirt启动QEMU后,QEMU进程便成为后台进程在运行,刚刚分析了QEMU启动的代码,将其转换为daemon进程的过程简单解释如下(QEMU-2.3.0):1 概述 QEMU在被libvirt启动的时候,可以传入一些参数来设置QEMU进程的运行状态,主要参数有:-runas指定以某个用户的权限运行虚拟机、-chroot改变当前QEMU的工作根目录、-daemoniz...原创 2018-08-23 00:17:34 · 6192 阅读 · 0 评论