linux
文章平均质量分 69
Don't_Touch_Me
努力可以改变一切!
展开
-
Linux migrate_type进一步探索
fallbacks是不同迁移类型内存不足时,可从哪个迁移类型中进行fallback操作,对于MIGRATE_UNMOVABLE迁移类型不足时,可以先MIGRATE_RECLAIMABLE迁移类型中偷内存,如果MIGRATE_RECLAIMABLE也没有内存的话,会进一步fallback到MIGRATE_MOVABLE迁移类型。因此对于我们一开始需要MIGRATE_UNMOVABLE类型的页面没有时,最终会fallback到MIGRATE_MOVABLE。原创 2024-05-02 20:30:19 · 708 阅读 · 0 评论 -
Linux migrate_type初步探索
为了更好的管理物理内存,操作系统进一步抽象出页块的概念,通常一个页块的大小是2^(MAX_ORDER-1)个页面(4MB)。每个页块对应一个迁移类型migrate_type,buddy系统中的页面,根据其所在migrate_type链表,可知道该页是属于哪个migrate_type的页块。原创 2024-05-01 21:53:01 · 466 阅读 · 0 评论 -
Linux gettid()系统调用源码分析
gettid() 是一个Linux系统调用,用于获取当前进程的线程ID。原创 2024-04-21 00:16:06 · 459 阅读 · 0 评论 -
Linux 文件页反向映射
用来管理一个文件所有内容页面,一个真实的文件只对应一个address_space结构,其中address_space->i_pages是保存页面的结构,address_space->i_mmap是一个红黑树,红黑树上挂载着映射该文件的所有vma对象。用来描述用户进程的一段虚拟地址空间,其中vma->vm_start表示映射的起始虚拟地址,vma->vm_end表示映射的结束虚拟地址,vma->vm_file指向映射的文件对象,vma->vm_pgoff表示从文件哪里进行映射(以页面为单位)。原创 2024-04-14 23:05:48 · 937 阅读 · 0 评论 -
Linux fork()系统调用流程解析
fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。它不需要参数并返回一个整数值。下面是fork()返回的不同值。负值:创建子进程失败。零:返回到新创建的子进程。正值:返回父进程或调用者。该值包含新创建的子进程的进程ID 。原创 2023-02-11 14:19:57 · 1689 阅读 · 1 评论 -
Linux中open命令实现原理以及源码分析
在阅读该篇文章的前提,最好对mknod有一定的了解,前置知识点:Linux中mknod命令实现原理以及源码分析open 原理我们经常在一个进程中使用open()来获取一个文件描述符fd,然后通过该fd去进行一些write()、read()操作。open()的原理是通过给定的文件路径/dev/hello,从而找到该文件路径所对应的inode信息,最后生成一个struct file结构体,该结构体在进程的打开文件列表中,返回的fd信息就是这个打开文件列表中的下标索引,所以说fd永远不会小于0。open原创 2022-05-21 16:52:54 · 3853 阅读 · 0 评论 -
Linux中mknod命令实现原理以及源码分析
本篇文章以mknod创建字符设备文件进行讲解字符设备驱动的Demo例子可参考该篇文章Linux 编写简单驱动并测试1. mknod 命令mknod /dev/hello c 520 0该命令主要通过制定要创建的设备文件名称/dev/hello,以及设备类型c字符设备,最后的520 0 表示为主设备号和次设备号。当我们使用该命令创建好了/dev/hello设备文件,当我们在用户态对该文件进行open()、write()、read()时,就会调用到/dev/hello设备文件对应的设备驱动的fil原创 2022-05-21 15:51:18 · 5518 阅读 · 0 评论 -
Linux中__setup()实现原理以及源码分析
1. __setup()介绍static __init int dma_debug_cmdline(char *str){ if (!str) return -EINVAL; if (strncmp(str, "off", 3) == 0) { pr_info("debugging disabled on kernel command line\n"); global_disable = true; } return 1;}static __init int dma_deb原创 2022-05-14 16:31:29 · 1889 阅读 · 0 评论 -
shell 递归判断文件夹下文件权限是否为指定权限
shell 脚本#!/bin/bashcheck_permission() { for file in `ls -a $1` do if [ -d $1"/"$file ]; then if [[ $file != "." && $file != ".." && $file != ".git" ]]; then check_permission $1"/"$file fi else if [ `stat -c %a $1"原创 2022-03-04 09:39:07 · 528 阅读 · 0 评论 -
Busybox 制作文件系统并用 Qemu 启动编译的内核镜像
编译内核操作:https://blog.csdn.net/assiduous_me/article/details/120938556安装Busybox操作:https://blog.csdn.net/assiduous_me/article/details/1209393191. 目录结构syz@DESKTOP-B10G93S:~$ ls -ltotal 20drwxr-xr-x 44 syz syz 4096 Oct 26 22:05 busyboxdrwxr-xr-x 31 syz syz原创 2021-10-26 22:43:48 · 708 阅读 · 0 评论 -
Busybox 安装
下载busybox-1.34.1.tar.bz2源代码https://busybox.net/downloads/通过这个网址下载busybox-1.34.1.tar.bz2源代码压缩包解压tar -jxvf busybox-1.34.1.tar.bz2将压缩包进行解压配置make menuconfig选中Settings->Build static binary (no shared libs)项,保存退出安装make && make install结果原创 2021-10-24 19:52:03 · 784 阅读 · 0 评论 -
CentOS7 安装 Nginx
1. 安装 Nginx 所需依赖yum install -y pcre pcre-develyum install -y zlib zlib-develyum install -y openssl openssl-devel2. 下载 Nginx 安装包wget http://nginx.org/download/nginx-1.9.9.tar.gz3. 将安装包解压到 ...原创 2020-02-18 13:50:46 · 350 阅读 · 0 评论 -
Linux 进程控制类命令详解
本文主要讲解 Linux 进程控制类命令,这些命令在工作中十分常用,本博主会给出具体实例和运行截图进行讲解前置知识:1. 程序与进程概念:程序:是一个包含可执行代码的文件,存放在磁盘等介质上,属于静态概念进程:当程序被操作系统装载到内存中并分配给它一定的资源后,此时可称为进程,属于动态概念下面是进程状态转换图:查看进程:1. ps英文原意:report a snaps...原创 2020-01-12 13:05:02 · 2079 阅读 · 0 评论 -
Linux 常用目录及文件操作(压缩、解压缩)等命令
本文主要介绍 Linux 操作系统里的目录及文件操作命令浏览目录:1. ls英文原意:list directory contents(列出目录内容)描述:List information about the FILEs (the current directory by default).列出有关文件的信息(默认情况下为当前目录)语法:ls [OPTION]... [FILE...原创 2020-01-10 20:05:59 · 3291 阅读 · 3 评论 -
Linux C 语言 Socket 通信(多对多)多线程实现
效果图:原创 2019-06-14 19:01:42 · 1745 阅读 · 0 评论 -
Linux C 语言 Socket 聊天程序(一对一)收发消息采用多线程
运行截图:原创 2019-06-13 19:17:04 · 1628 阅读 · 2 评论