06 2021 档案
用户态内存映射
摘要:mmap 的原理 每一个进程都有一个列表 vm_area_struct,指向虚拟地址空间的不同的内存块,这个变量的名字叫 mmap。 其实内存映射不仅仅是物理内存和虚拟内存之间的映射,还包括将文件中的内容映射到虚拟内存空间。 这个时候,访问内存空间就能够访问到文件里面的数据。而仅有物理内存和虚拟内存 阅读全文
posted @ 2021-06-30 23:49 jingmojing 阅读(248) 评论(0) 推荐(0)
抢占式调度
摘要:什么情况下会发生抢占呢?最常见的现象就是一个进程执行时间太长了,是时候切换到另一个进程了。 那怎么衡量一个进程的运行时间呢?在计算机里面有一个时钟,会过一段时间触发一次时钟中断,通知操作系统,时间又过去一个时钟周期,这是个很好的方式,可以查看是否是需要抢占的时间点。 时钟中断处理函数会调用 sche 阅读全文
posted @ 2021-06-27 12:22 jingmojing 阅读(1451) 评论(0) 推荐(1)
进程空间管理
摘要:整个虚拟内存空间一分为二,一部分是用户态地址空间,一部分是内核态地址空间,这两部分的分界线由 task_size 来定义。 struct task_struct => struct mm_struct *mm; => unsigned long task_size; /* size of task 阅读全文
posted @ 2021-06-20 22:56 jingmojing 阅读(202) 评论(0) 推荐(0)
进程数据结构
摘要:在 Linux 里面,无论是进程,还是线程,到了内核里面,统一称为任务(Task)。 Linux内核通过一个被称为进程描述符的 task_struct 结构体来管理,这个结构体包含了一个task所需的所有信息。 task_struct 定义在 include/linux/sched.h 文件中。 s 阅读全文
posted @ 2021-06-20 20:41 jingmojing 阅读(431) 评论(0) 推荐(0)
线程
摘要:创建线程 #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #define NUM_OF_TASKS 5 // 1. 定义线程函数 void * 阅读全文
posted @ 2021-06-20 12:59 jingmojing 阅读(104) 评论(0) 推荐(0)
read & write
摘要:read & write SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count) { struct fd f = fdget_pos(fd); ...... loff_t pos = file_pos_re 阅读全文
posted @ 2021-06-16 20:32 jingmojing 阅读(227) 评论(0) 推荐(0)
mount
摘要:如果一种文件系统的类型曾经在内核注册过,这就说明允许挂载并且使用这个文件系统。 register_filesystem(&ext4_fs_type); static struct file_system_type ext4_fs_type = { .owner = THIS_MODULE, .nam 阅读全文
posted @ 2021-06-14 17:12 jingmojing 阅读(202) 评论(0) 推荐(0)