用户态内存映射
摘要:mmap 的原理 每一个进程都有一个列表 vm_area_struct,指向虚拟地址空间的不同的内存块,这个变量的名字叫 mmap。 其实内存映射不仅仅是物理内存和虚拟内存之间的映射,还包括将文件中的内容映射到虚拟内存空间。 这个时候,访问内存空间就能够访问到文件里面的数据。而仅有物理内存和虚拟内存
阅读全文
posted @
2021-06-30 23:49
jingmojing
阅读(248)
推荐(0)
抢占式调度
摘要:什么情况下会发生抢占呢?最常见的现象就是一个进程执行时间太长了,是时候切换到另一个进程了。 那怎么衡量一个进程的运行时间呢?在计算机里面有一个时钟,会过一段时间触发一次时钟中断,通知操作系统,时间又过去一个时钟周期,这是个很好的方式,可以查看是否是需要抢占的时间点。 时钟中断处理函数会调用 sche
阅读全文
posted @
2021-06-27 12:22
jingmojing
阅读(1451)
推荐(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)
进程数据结构
摘要:在 Linux 里面,无论是进程,还是线程,到了内核里面,统一称为任务(Task)。 Linux内核通过一个被称为进程描述符的 task_struct 结构体来管理,这个结构体包含了一个task所需的所有信息。 task_struct 定义在 include/linux/sched.h 文件中。 s
阅读全文
posted @
2021-06-20 20:41
jingmojing
阅读(431)
推荐(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)
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)
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)