自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 arm64架构kvm情景分析 - type1型和type2型虚拟机管理器

介绍并分析type1型和type2型虚拟机管理器,并通过情景进行理解。

2024-07-07 03:17:43 792

原创 Linux虚拟内存管理中的active_mm、匿名用户、mm_users和mm_count深入理解

问题:Linux虚拟内存管理中mm_struct为什么有active_mm?问题的提出:阅读Linux虚拟内存管理源码时,看到复制一个mm,里面赋值了tsk->mm和tsk->active_mm,于是回忆这两者的作用。static int copy_mm(unsigned long clone_flags, struct task_struct * tsk){ struct mm_struct * mm, *oldmm; int retval; tsk->min_flt =

2022-02-17 17:53:18 1242 1

原创 Linux虚拟内存管理源码分析 - 初始化管理区

文章目录1、初始化管理区1.1、函数:setup_memory()1.2、函数:zone_sizes_init()1.3、函数:free_area_init()1.4、函数:free_area_init_node()1.5、函数:free_area_init_core()综合图示内核版本:linux-2.4.221、初始化管理区1.1、函数:setup_memory()初始化低端内存PFN的起点和终点,高端内存PFN的起点和终点,以及系统最后一页的PFN。初始化bootmem_data结构以

2022-02-11 19:08:24 833

原创 Linux虚拟内存管理 - Swap Management(交换管理)

Swap Management(交换管理)Linux所维护的每个活动交换区的结构以及如何在磁盘上组织交换区信息Linux如何在页面换出后的交换区定位该页,以及如何分配交换槽交换高速缓存(swap cache)如何激活和禁止交换区,内存的页面如何换出道交换区又如何换入到内存,以及如何读写交换区1、描述交换区每一个活跃的交换区,无论是一个文件或是一个分区,都由swap_info_struct结构描述。系统中该结构存储在一个静态声明的swap_info数组中,它有MAX_AWAPFILES(一般被

2022-02-10 13:45:07 1146

原创 Linux虚拟内存管理 - Slab Allocator

Slab Allocatorslab分配器基本思想:将内核中经常使用的对象放到高速缓存中,并且由系统保持为初始的可利用状态。slab分配器目的:缓存空闲的对象,保留基本结构,从而能够重复使用它们。每一个高速缓存包括若干slab,slab由连续的页面帧组成,他们被划分成许多小的块以存放由高速缓存所管理的数据结构和对象。不同数据结构之间的关系如下图所示(slab分配器布局)。slab分配器三个基本目标:减少伙伴系统分配小块内存时产生的内部碎片。把经常使用的对象缓存起来,减少分配、初.

2022-02-09 12:04:06 1269

原创 Linux虚拟内存管理 - 非连续内存分配

读书笔记非连续内存分配(Noncontiguous Memory Allocation)Linux中虚拟地址空间VMALLOC_START和VMALLOC_END之间保留了一块区域,VMALLOC_START的位置取决于可访问的物理内存大小,大小至少VMALLOC_RESERV(x86上位127MB)。该区域的页表可以按照请求修改,指向物理页分配器分配的物理页。意味着分配的大小必须是硬件页面大小的整数倍。分配器需要修改内核页表,且只有VMALLOC_START到VMALLOC_END之间的虚拟内存可.

2022-01-22 21:53:08 1164

原创 Linux下qemu网络配置(不使用en网络接口)

qemu网络配置安装docker。sudo apt install docker.io建立docker。systemctl start docker这时使用ifconfig,可以看到docker0。下载安装网桥有关工具。sudo apt-get install bridge-utils # 虚拟网桥工具sudo apt-get install uml-utilities # UML(User-mode linux)工具确定是否支持tun/tap。创建ta

2020-07-27 12:28:13 1504

原创 千兆网卡驱动的设计

1 影响数据传输的因素数据传输方式中断开销内存拷贝开销2 解决上述问题的方法减少中断开销。接收到中断请求后关闭中断,将数据处理完成后再打开中断。具体采用NAPI技术,结合关中断和合中断技术。网卡硬件在接受多个数据包后,触发接受中断,网卡驱动在中断处理程序中调度接收线程,并关闭设备中断,然后从硬中断中返回。返回后并不打开中断,所以系统不会被后来的接受或发送中断打扰,直到接收线程处理了所有待处理的数据包后激活设备的接收中断。减少内存拷贝。基本思想是实现内存共享,在不同对象对数据处理时要注意同步

2020-07-17 11:47:36 589

原创 文件系统简介及简单实现

1. 磁盘分区文件系统是建立在已经给磁盘分好区的基础之上的。分过区后磁盘的分布情况如下图,具体内容不展开。使用的分区工具是fdisk,之前已经完成的内核是在一个裸盘上,所以这里新加了一个硬盘用来创建文件系统。硬盘2有一个MBR扇区剩余都是拓展分区,拓展分区下有5个子拓展分区。2. inodeUNIX文件系统是以索引结构组织的,好处是可以直接访问要访问的块不需要从头遍历。文件系统为每个文件建立一个索引表,索引表就是块地址数据,每个数组元素就是块的地址,数组元素的下标是文件块的索引。包含此索引

2020-07-09 00:40:00 417

原创 线程的原理及线程和线程调度的简单实现

执行流这里先说一说执行流,有助于线程的理解。程序计数器中的下一条指令地址组成的轨迹称为程序的执行流。执行流是逻辑上独立的指令区域,是人为给处理器安排的处理单元。指令指导处理器的执行方向,从处理器的角度看,执行的指令形成一条路径,称为执行流。执行流可大可小,可以是整个程序文件,也可以是一个函数。线程本质上是一个函数。有一点汇编基础的就会知道,一个代码段想要突然去执行另外一个代码段的指令,比如c...

2020-04-18 00:29:37 1656 1

原创 浅析elf格式的二进制文件

elf格式的二进制文件elf指的是executable and linkable format,可执行链接格式。最初由UNIX系统实验室作为应用程序二进制接口(ABI)而开发的。后来发展成了二进制文件格式标准,Linux操作系统下的可执行程序使用的就是该标准。elf格式文件的产生在Linux下代码的编译链接后的生成文件都要符合elf文件格式。将c代码编译链接后生成的二进制可执行文件,该文件可...

2020-03-05 17:20:54 1287

原创 x86-从实模式到保护模式(总结)

x86这本书相当于看了两遍,第一遍知识看了书的内容但没有去实现代码,第二遍主要是实现书中的程序,在实现程序的时候补充了很多之前没有注意的知识点。用了两周的时间把书上的程序实现了一遍,实现代码的过程也是跟着书的分析同时进行的,确实比之前只看书有更多的认识。尤其是对硬件的访问,在代码实现的过程中才弄懂的。下面是我对x86的总结:总结主要针对最后一章的内容,最后一张的程序使用的是平坦模式。代码段和...

2020-02-09 23:10:52 982

原创 安装centos7后,启动引导没有Windows

安装centos7后Windows启动引导消失安装的电脑牌子是联想,安装过程没有什么问题,但在重启后发现原先的Windows7的引导没有了。原因:Windows的引导使用的是NTFS分区,安装centos7后会将mbr(main boot record)改写为grub2。默认的centos7无法识别Windows的分区,所以启动程序中没有Windows。个人解决的步骤:刚安装的cento...

2020-01-22 19:50:14 1794

原创 objdump -S,readelf -h浅析

使用objdump和readelf可以对目标文件进行详细的分析,这里只说objdump -S和readelf -h的内容。当然它们还有其他很多的选项,其他的选项可以查看它们的man文档。因为接触的不久,这里以很简单的程序hello.c进行简单的分析。#include <stdio.h>int main(){ printf("hello world!\n"); return...

2019-12-15 21:52:43 1173 1

原创 中断和中断的应用

什么是中断?一个程序只会做自己的事情,当需要输入或者输出时就要用到外部设备,而外部设备相比于处理器要慢得多。在等待的时候,处理器只能不停的观察外部设备的状态变化。为了能够更加高效的运用硬件资源,处理器应该能够为多用户多任务提供一级硬件支持。在单系统的系统中,允许同事由多个程序在内存中等待被处理器执行。例如当一个程序等待输入输出时,允许另一个程序从处理器那里得到执行权。当一个程序正在执行的时候...

2019-12-01 23:03:31 3332

原创 x86学习小结

加载程序(器)的工作流程1 初始化和决定加载位置加载器要加载一个用户程序大致要做两件事情。第一件事是看内存中的什么地方是空闲的,加载器将用户程序加载到这个空闲的内存中;第二件事是用户程序位于硬盘中的什么位置,它的起始扇区号是多少。nasm汇编知识声明一个常数:app_lab_start equ 100常数是用equ声明的,它的意思是“等于”。用标号app_lab_start来代表数值...

2019-10-27 19:32:47 249

原创 任务的隔离和特权级保护

保护模式保护模式是将内存分成不同的段,用描述符对每个段的用途、类型、长度进行指定。在实模式下,段地址直接存放在寄存器中。而在保护模式下,寄存中存放的是段选择子,段地址则存放在高速缓存器中。选择子段选择子如上图所示,下面对上图中内容做大概的介绍:①描述符索引:用来在描述符表中选择描述符。②TI:描述符指示器。当TI=0时,在GDT中选择段描述符;当TI=1时,在LDT中选择段描述符。...

2019-10-18 22:18:50 507

原创 汇编语言---基础+寄存器(CPU工作原理)

学习汇编语言是为了对计算机的工作原理和计算机操作系统有更深入的认识。日后能够站在计算机CPU的角度编写程序。我学习汇编语言选用的教材是王爽老师的《汇编语言》。下面总结一下这两天所学到的知识,也是复习计算机导论所学的知识。机器语言与汇编语言机器语言是比汇编语言更底层的语言,也就是计算机直接识别的01语言,机器语言是机器指令的集合。机器语言由于只有0和1,记忆困难、书写困难、检查困难,设想...

2019-09-01 01:54:05 1401 1

原创 网络编程入门

1.协议1.1 网络的概念在计算机网络中协议是个很重要的概念,是数据传输和数据解释的规则。1.2 典型的协议有TCP/UDP、HTTP、FTP、IP、ARP。2.分层模型2.1 OSI 7层模型:物数网传会表应物 - 物理层数 - 数据链路层网 - 网络层传 - 传输层会 - 会话层表 - 表示层应 - 应用层2.2TCP/IP 4层模型:网络接口层,网络层,传输层,应...

2019-08-11 23:34:25 146

原创 线程及线程同步

线程线程是计算机中独立运行的最小单位。对用户来说的线程在linux内核看来就是的进程(轻量级进程),主线程和子线程共享内存空间,但是他们的pcb(内存控制块)是不同的。线程被创建之后,地址空间没有发生生变化,主线程与子线程共享地址空间,但有独立的pcb主线程与子线程不共享栈区,其他的区域共享。所以线程间通信可以使用全局变量,或者使用堆空间进行通信。创建子线程时不复制内存空间,所以线程...

2019-08-04 22:50:40 147

原创 信号及信号处理

1. 信号的初步认识1.1 信号的特点信号所携带的信息量少,操作简单1.2 信号的状态1.产生①由键盘产生:例如Ctrl+c,Ctrl+②命令:kill③系统函数:kil④软条件:定时器⑤硬件:段错误,除0错误由键盘和和硬件产生的信号统称为硬件方式,其余的为软件方式2.未决状态处在该状态的信号没有被处理。3.递达状态信号被处理。处理信号的方式如下:忽略捕捉执...

2019-08-03 10:30:09 339

原创 进程间通信 - 管道

进程间通信进程间通信的方式:管道:进行有血缘关系的进程间通信信号 - 系统开销小共享映射区 - 有无血缘关系的进程间通信都可以本地套接字 - 稳定IPC(InterProcess Communication):进程间通信1. 管道管道是内核缓冲区,可以叫做伪文件(不占用磁盘文件)管道的特点:①管道有读端和写端。数据从写端流入,读端流出。读端和写端是两个文件描述符。②...

2019-07-28 23:07:53 452

原创 进程控制

重点:进程的概念进程的内存映像进程控制操作进程控制在进程之前首先有并发与并行的答题概念:①并发:在一个时间段上,CPU处理不同的进程。并发是一个时间段上的概念②并行:在一个时间点,CPU做同一个事情多进程的实现:这里假设为单核,这要讨论并发。CPU在一个时间段内,处理不同的进程,由于CPU处理的速度非常快,在用户看来就是连续的画面,所以就实现了多进程。可以想象为很多人要喝水...

2019-07-26 15:11:03 174

原创 linux 目录信息

函数 opendir 用来打开一个目录,readdir 用来读取目录中的内容,closedir 关闭一个已经打开的目录。1.opendir#include <sys/types.h> #include <dirent.h> DIR *opendir(const char *name); DIR *fdopendir(int f...

2019-05-31 20:37:05 132

原创 linux 文件属性

在 shell 下直接使用 ls 就可获得文件的属性在程序中,用 stat/ fstat/ lstat 函数,获取文件的属性函数可通过命令:man 2 stat 查看 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int ...

2019-05-31 19:03:21 195

原创 linuxC--makefile使用变量

使用变量定义变量的一般形式:变量名 赋值符 变量值变量名:由字母、数字和下划线组成赋值符:主要有=、:=、+=、?= 不同的赋值符有不同的意义变量值:文本字符串在含有变量的 makefile 中,make 执行是吧变量名出现的地方用对应的变量值来替换。makefile中的变量类型类似于C语言中的宏。makefile中的变量是区分大小写的,也就是说比那辆"varl" 和 “Varl” ...

2019-05-26 17:51:54 379

原创 linux 使用命令测试网速

使用Linux终端测试网速 命令:speedtest-cli~$ speedtest-cliRetrieving speedtest.net configuration...Testing from China Telecom Shanxi(SN) (117.32.216.86)...Retrieving speedtest.net server list...Selecting b...

2019-05-24 01:41:58 4927 2

原创 C++ 静态数据成员初始化及静态函数成员

1.定义静态数据成员后要对静态数据成员进行初始化!静态数据成员的初始化:<数据类型><类名>::静态数据成员 = <值>2.静态数据成员往往数私有的,静态数据成员不能直接访问,要通过定义为公有的静态函数成员来访问静态数据成员。部分代码描述:定义货物类,私有成员有货物重量,货物总重量(静态数据成员),初始化静态数据成员。#include <i...

2019-04-26 01:11:39 14609 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除