首先僵尸进程产生的原因是子进程退出了,但是父进程没有回收他的资源(pcb),所以我们从源头开始分析这个过程。那就是子进程退出的时候。进程是通过exit系统调用退...
具体的分析可以看linux0.11系统调用过程和fork源码解析这篇文章。下面贴一下代码。
缺页中断发生在系统对虚拟地址转换成物理地址的过程中。如果对应的页目录或者页表项没有对应有效的物理内存,则会发生缺页中断。
每个进程有一个执行的时间,每次时钟中断会减少一个单位的时间。如果时间用完则直接重新调度,否则进程可以继续执行。进程调度的时候,系统会选择时间最长的进程,防止有的...
进程的睡眠是通过调用sleep_on函数,该函数修改了进程的状态并且通过schedule函数切换到其他进程执行,从而实现进程的挂起,TASK_UNINTERRU...
linux0.11分为中断、系统、陷阱门。系统在启动的时候设置idt。
创建新块就是在文件系统的超级块结构中,根据当前块的使用情况,申请一个新的块,并标记这个块已经使用。然后把超级块的信息回写到硬盘,并且返回新建的块号。 我们回到f...
这一篇大致说一下进程的创建,有兴趣的可以参考之前的一些文章或者直接上代码https://github.com/theanarkh/read-linux-0.11...
写时复制是有一块内存,由多个进程共享,属性是只读的,当有一个进程对这块内存进行写的时候,系统会先申请一块新的内存给他写。比如进程fork的时候,父子进程对应的物...
所以执行fork函数就会执行system_call函数,但是在这之前,还有些事情需要做,就是保存现场。下面是操作系统执行系统调用前,在内核栈里保存的寄存器,这个...
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 源码来展开的,我根据专栏的内容进行二次整理。
我们知道write函数写入的数据不是实时同步硬盘的,系统提供了一个函数让我们的数据可以实时地同步到硬盘,那就是sync。但这个实时也是相对的,毕竟同步数据也需要...
链接: 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。
进程PCB中有一个指针数组,文件描述符是数组索引,每个元素指向一个file结构体,file结构体有一个字段指向文件对应的inode。关闭一个文件主要的步骤是 1...
int sys_exit(int error_code) { return do_exit((error_code&0xff)<<8); } int ...
sys_link是创建硬链接的函数,从这个函数的代码中我们看到,硬链接的原理。文件查找和操作函数见之前的文章。这里就不贴了。
进程通过系统调用,从而进入中断处理,中断处理从系统调用表里找到sys_read函数执行。
sys_unlink是删除硬链接的系统调用,引用数为0时底层的文件会被删除sys_unlink是删除硬链接的系统调用,引用数为0时底层的文件会被删除
我们看到中断的时候执行了do_timer函数,该函数就是处理定时器和进程调度的。在此之前我们先看看怎么新增一个定时器。
linux0.11版本里是1秒触发100次,即10毫秒一次。加入新增一个定时器的jiffies值是2,那经过两次定时中断后就会被执行。jiffies值在每次定时中断时会加一。
领取专属 10元无门槛券
手把手带您无忧上云