
系统编程
文章平均质量分 78
leoufung
Linux Kernel,Virtualization
展开
-
用MMAP分配内存
背景知识 MAP_ANONYMOUS The mapping is not backed by any file; its contents are initialized to zero. The fd and offset arguments are ignored; however, some implementations require fd to be -1 if MAP_ANONYMOUS (or MAP_ANO...原创 2021-05-13 09:39:30 · 1351 阅读 · 0 评论 -
用户态进行PIO读写
在用户态进行设备PIO的读写API接口,原文地址:https://man7.org/linux/man-pages/man2/outl.2.htmlUTB(2) Linux Programmer's Manual OUTB(2)NAME top outb, outw, outl, outsb, outsw, outsl, inb, inw, inl, insb, insw, insl...原创 2020-12-25 17:53:17 · 312 阅读 · 0 评论 -
查看服务器硬件拓扑信息
在CentOS上查看服务器拓扑信息hwloc-ls原创 2020-07-16 10:29:58 · 650 阅读 · 0 评论 -
GLIB库编程之链表 --- GSlist & Glist
用户空间不用自己编写数据结构,使用GLIB的工具是一个非常好的方式,下面的代码展示GLIB的链表的编程示例#include <stdlib.h>#include <stdio.h>#include <glib.h>/* * 需要安装 * yum install glib2-devel.x86_64 * * 编译方法 * gcc glist_eg.c -g -O0 -lglib-2.0 -I /usr/include/glib-2.0.原创 2020-07-15 12:56:07 · 2147 阅读 · 0 评论 -
进程所用内存(包括页表、vma、映射内存)的释放过程 (基于linux2.6.11.12)
又仔细走读了一下代码,是在exit_mmap中释放的页表所用的内存,被ULK带沟里去了,以为在mmdrop里面是否流程如下进程终止 -> do_exit -> exit_mm -> mmput 1. 释放进程映射的内存和vma所用内存mmput -> exit_mmap -> unmap_vmas(&tlb, mm, mm->mmap, 0,~0UL, &原创 2016-04-15 11:21:28 · 2360 阅读 · 0 评论 -
关于进程页表内核部分和内核主页表的关系(Linux 2.6.11)
用户态页表共享内核主页表的PUD表和PMD表,所以可以看到内核态访问进程页表的时候(内核地址部分),PMD和PUD都是直接使用/* * 这里在为pgd分配从slab中页面的时候会调用pgd_ctor对页面进行初始化 * 其中就会把swapper_pg_dir(init进程的内核主页表的内容)的内容复制到新的进程页表的内核页表部分中 */void pgd_ctor(void原创 2016-04-14 15:18:34 · 2034 阅读 · 0 评论 -
关于QEMU中的类型算法
关于ctpoplctpopl用来计算二进制数中有多少个1#if ULONG_MAX == UINT32_MAX# define ctpopl ctpop32 /*计算二进制数中有多少个1*/#elif ULONG_MAX == UINT64_MAX# define ctpopl ctpop64 /*计算二进制数中有多少个1*/le32_to_cpu(原创 2016-04-13 20:11:07 · 445 阅读 · 0 评论 -
Linux内核中断/异常的注册(重要中断函数的查找方法,Linux 2.6.11)
Linux内核中断/异常的注册(重要中断函数的查找方法,Linux 2.6.11)按照下面列出的方式,在trap_init()函数中,可以查找到重点的中断的处理函数有哪些1. 缺页中断start_kernel-> trap_init //注册各种中断和异常-> set_intr_gate(14,&page_fault); //注册缺页中断入口-> ENTRY原创 2016-04-13 11:02:26 · 1472 阅读 · 0 评论 -
ARM64 Linux的启动分析
ARM64 Linux的启动分析 1. 找到Linux启动流程Linux启动,会启动内核编译后的文件vmlinuxvmlinux是一个ELF文件,按照./arch/arm64/kernel/vmlinux.lds设定的规则进行链接的./arch/arm64/kernel/vmlinux.lds 是 ./arch/arm64/kernel/vmlinux.lds.S编译之原创 2016-01-25 19:35:37 · 4210 阅读 · 1 评论 -
ARM64多核CPU启动流程
ARM64多核CPU启动流程ARM64使用ACPI parking protocol specificationBP核:start_kernel//开始初始化内核需要的全局变量,硬件资源等-> setup_arch -> setup_processor-> cpu_init //设定IRQ堆栈-> rest_init //在最后启动其他核原创 2016-01-25 17:25:06 · 5912 阅读 · 0 评论 -
How to debug QEMU
STEP 1: add a gloabcontrol variable before main in vl.c. we will stop on main() if the controlvariable is zero int g_stop_here = 1;int main(int argc, char **argv, char **envp){ ......原创 2015-10-30 17:08:07 · 3063 阅读 · 3 评论 -
KERNEL中MCE处理流程(一) - 关于PR_MCE_KILL_EARLY的处理 (基于Kernel 4.3-rc3)
首先感谢Intel的陈功给予的指导,在其帮助下才梳理里了PR_MCE_KILL_EARLY 的相关流程。这里写的比较粗,是主要流程,主要针对于如何选出要发送SIGBUS的任务的流程,其他的细节以后博客慢慢挖1. 背景描述先讲一下背景,在MCE的处理中,分为SRAO和SRAR两种。对应SRAR来说处理是紧急的,必须要current的上下文完成MCE的纠正处理;但对于SRAO来说,可以原创 2015-10-20 13:57:52 · 3112 阅读 · 3 评论 -
Linux内核进程和线程组织模型 (基于Kernel 4.3-rc3)
在linux内核代码里面,看到有for_each_process()和for_each_process_thread()两个函数,不太明白怎么回事,就做了个代码实验1. 验证代码/****************************************************************** Copyright (C) 2015 Intel Technol原创 2015-10-20 13:48:49 · 1840 阅读 · 0 评论 -
prctl系统函数
Linux下进程重命名的方法:使用系统函数prctl(),声明如下:#include int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);进程重命名代码:prctl(PR_SET_NAME, “process转载 2015-10-19 14:48:58 · 5808 阅读 · 1 评论 -
多线程编程信号处理顺序
线程可以使用sigwait来对信号进行处理。但是如果主线程中已经用sig_handler注册了处理函数,子线程里同时也用sigwait来处理信号,那么谁会先处理呢?APUE上只是写了一下依赖于操作系统,这里我们来做实验,看看linux中哪个会处理。#include #include #include #include #include #include #include原创 2015-10-19 13:55:46 · 1360 阅读 · 0 评论