Linux 内核
2021-03-08 20:51:11 62 举报
Linux 内核
作者其他创作
大纲/内容
I/O事件
未初始化的数(bss)
v 节点指针
文件对象(进程打开的文件)
文件表项
writefd
等待的事件发生后任务被唤醒并且被重新置入运行队列
顺序访问
就绪态
栈顶
v_data
readfd
执行其他任务
VFS
栈(向下增长)
Ox00000000
用户进程
虚拟地址增长方向
堆(向上增长)
用户态
调用 printf()
接收数据
fd 0
TASK_RUNNING(正在运行)
TASK_RUNNING(准备就绪)
内核态
信号处理程序
OxC0000000
write() 系统调用
闪存
文件长度
阻塞态
内存块长度 L
当前文件偏移量
应用程序
随机访问
主版本号
#2 MMU失败MMU在地址映射表中无法找到与ptr相对应的物理地址,产生缺页中断
len
索引节点对象(文件)
进程表项二
fd 3
复制数据
内核
#1 建立内存映射mmap() 返回 *ptr(指向进程逻辑地址空间)
TASK_INTERRUPTIBLE/TASK_UNINTERRUPTIBLE
I/O操作就绪
fd 1
块设备
超级块对象(已安装文件系统)
系统调用
批量判断 fd
文件指针
v节点表项
数据已备好
供调用者使用的内存
物理内存
文件所有者
文件
进程表项一
程序中断
设备
ext2
读取数据
修订版本号
稳定版本号
初始化的数据
Time
end
ext3
缓冲区
键盘
文件的存储映射部分
等待数据
Ox08480000
fd标志
打印机
立即返回
ext4
SWAP
数据拷贝
SIGIO
I/O多路复用
off
2 .6 .26 .1
C库
字符设备
Kernel映射到进程虚拟内存,但程序无法访问
用户空间
i 节点
C库中的 printf() C库中的 write()
安装信号处理例程
(未分配的内存)
文本(程序代码)
TASK_STOPPED
MMU
一次 malloc() 调用所分配的内存空间
系统调用select
硬盘
指向磁盘指针
edata
do_exit()
#3 缺页中断响应要swap中寻找相对应页面,如果找不到通过 mmap()建立的映射关系从硬盘上将文件读取到物理内存中
从版本号
文件状态标志
etext
阻塞 I/O
1. 每个进程拥有各自的文件表项2. 进程共享一个V节点表项
文件本身
fork()
目录项对象(目录项)
调度程序将任务投入运行 schedule()函数调用 context_switch() 函数
元数据文件相关信息索引节点(inode)
收藏
0 条评论
下一页