看完文件系统的基础数据结构。我们接着解析的根文件系统的挂载,因为这是文件系统被使用的起点。根文件系统的挂载是在操作系统初始化的时候进行的。对应的函数是mount_root。...// 系统初始化时挂载根文件系统 void mount_root(void) { int i,free; struct super_block * p; struct m_inode * mi...(p=read_super(ROOT_DEV))) panic("Unable to mount root"); // 获取根文件系统的第一个inode节点,里面存的是根目录的数据 if...it is logically used 4 times, not 1 */ // 超级块挂载到了mi对应的inode节点,p->s_isup设置根文件系统的根节点 p->s_isup = p-...后续的对文件系统的使用都是基于这个根文件系统的根节点的。
这篇文章讲的是文件系统树,我们知道,文件系统的数据是存在硬盘里的,这里来看一下,这些数据是怎么组织成一棵树,又是怎么进行遍历的。下面就是这棵树。 ?
想写一个系列的文章,逐步介绍文件系统的实现原理。采用的是linux0.11版本。这是第一篇文章。首先介绍一下文件系统的基础数据结构。这是后面的基础,需要先熟悉。所谓数据结构决定算法。...下面是文件系统在硬盘的结构图。 ?...#define NR_SUPER 8 #define NR_HASH 307 // 缓存文件系统数据的buffer个数,操作系统启动的时候初始化该变量 #define NR_BUFFERS nr_buffers..., 每个文件系统占据一部分,所以要记录开始的块号和总块数 */ unsigned short s_firstdatazone; /* 用于计算文件系统块等于多少个硬盘块,硬盘块大小乘以...2 的s_log_zone_size次方等于文件系统的块大小(硬盘块的 大小和文件系统块的大小不是一回事,比如硬盘块的大小是1kb, 文件系统是4kb) */ unsigned
首先僵尸进程产生的原因是子进程退出了,但是父进程没有回收他的资源(pcb),所以我们从源头开始分析这个过程。那就是子进程退出的时候。进程是通过exit系统调用退...
链接: https://pan.baidu.com/s/1wtec1_UlBA1wxwNeMyFBOw 密码: 7j1l 另外,为了编译Linux0.11源码,我们需要GCC3.4编译器(只能在低版本编译器上编译...Linux0.11)。...编译Linux0.11源码 首先解压下载下来的hit-oslab-linux-20110823.tar.gz,命令如下: tar -zxvf hit-oslab-linux-20110823.tar.gz.../run,就会看到bochs加载Linux0.11成功,界面如下: ? Ubuntu与Linux-0.11之间的文件交换 在oslab目录下,运行mount-hdc脚本,挂载linux0.11。...不要在0.11内核运行的时候mount镜像文件,否则可能会损坏文件系统。
每个进程有一个执行的时间,每次时钟中断会减少一个单位的时间。如果时间用完则直接重新调度,否则进程可以继续执行。进程调度的时候,系统会选择时间最长的进程,防止有的...
具体的分析可以看linux0.11系统调用过程和fork源码解析这篇文章。下面贴一下代码。
缺页中断发生在系统对虚拟地址转换成物理地址的过程中。如果对应的页目录或者页表项没有对应有效的物理内存,则会发生缺页中断。
进程的睡眠是通过调用sleep_on函数,该函数修改了进程的状态并且通过schedule函数切换到其他进程执行,从而实现进程的挂起,TASK_UNINTERRU...
linux0.11分为中断、系统、陷阱门。系统在启动的时候设置idt。
new_block(int dev) { struct buffer_head * bh; struct super_block * sb; int i,j; // 获取文件系统的超级块信息...b_uptodate = 1; // 需要回写硬盘,因为新建的内容在硬盘还没有 bh->b_dirt = 1; brelse(bh); return j; } 创建新块就是在文件系统的超级块结构中
这一篇大致说一下进程的创建,有兴趣的可以参考之前的一些文章或者直接上代码https://github.com/theanarkh/read-linux-0.11...
物理文件系统由定义在NuGet包“Microsoft.Extensions.FileProviders.Physical”中的PhysicalFileProvider来构建。...这是一个公共类型,如果我们具有监控物理文件系统变化的需要,可以直接使用这个类型。...六、小结 我们借助下图所示的UML来对由PhysicalFileProvider构建物理文件系统的整体设计做一个简单的总结。...[ASP.NET Core 3框架揭秘] 文件系统[1]:抽象的“文件系统” [ASP.NET Core 3框架揭秘] 文件系统[2]:总体设计 [ASP.NET Core 3框架揭秘] 文件系统[3]...:物理文件系统 [ASP.NET Core 3框架揭秘] 文件系统[4]:程序集内嵌文件系统
所以执行fork函数就会执行system_call函数,但是在这之前,还有些事情需要做,就是保存现场。下面是操作系统执行系统调用前,在内核栈里保存的寄存器,这个...
写时复制是有一块内存,由多个进程共享,属性是只读的,当有一个进程对这块内存进行写的时候,系统会先申请一块新的内存给他写。比如进程fork的时候,父子进程对应的物...
一、树形层次结构 IFileProvider对象为我们构建了一个具有层次化目录结构的文件系统。...由于IFileProvider是一个接口,所以由它构建的是一个抽象化的文件系统,这里所谓的目录和文件都是一个抽象的概念。...为了让读者朋友们对这个文件系统有一个大体认识,我们先来演示几个简单的实例。 文件系统管理的所有文件以目录的形式进行组织,一个IFileProvider对象可以视为针对一个根目录的映射。...该方法具有一个类型为Action的参数负责将文件系统的节点(目录或者文件)名称呈现出来。...对文件系统实施监控并在其发生改变时发送通知也是IFileProvider对象提供的核心功能之一。
我们知道write函数写入的数据不是实时同步硬盘的,系统提供了一个函数让我们的数据可以实时地同步到硬盘,那就是sync。但这个实时也是相对的,毕竟同步数据也需要...
2 流程分析 2.1 引导内核阶段 2.2 内核启动阶段 2.3 init 进程启动 2.4 shell 命令执行 Linux0.11 考古笔记 最近读完《Linux 内核完全注释》和《品读 Linux0.11...核心代码》,大致理解下 Linux0.11 内核的全貌。...从硬件的视角,PC 机使用可编程定时芯片 Intel 8253 时钟源;从软件的角度,在 Linux0.11 中设定这个定时芯片每隔 10ms 发出一个时钟中断信号,通过时钟中断处理程序,来累积系统滴答数...关于 Linux0.11 操作系统的进程设计,这里仅侧重理解几个比较重要的概念。...2 流程分析 根据《品读 Linux0.11 核心代码》这个专栏,它是按照系统启动到运行的时间顺序结合 Linux0.11 源码来展开的,我根据专栏的内容进行二次整理。
int sys_exit(int error_code) { return do_exit((error_code&0xff)<<8); } int ...
namelen) { iput(oldinode); iput(dir); return -EPERM; } // 不能跨文件系统创建硬链接
领取专属 10元无门槛券
手把手带您无忧上云