每个进程有一个执行的时间,每次时钟中断会减少一个单位的时间。如果时间用完则直接重新调度,否则进程可以继续执行。进程调度的时候,系统会选择时间最长的进程,防止有的...
缺页中断发生在系统对虚拟地址转换成物理地址的过程中。如果对应的页目录或者页表项没有对应有效的物理内存,则会发生缺页中断。
linux的信号处理时机在系统调用结束后。这里以fork系统调用函数为例子讲解这个过程。下面是fork函数的定义。...具体的分析可以看linux0.11系统调用过程和fork源码解析这篇文章。下面贴一下代码。...popl %ebx popl %ecx popl %edx pop %fs pop %es pop %ds iret 我们直接从call _do_signal这里开始分析
下面我们分析这个过程,首先,在系统初始化的时候,注册了14号中断异常处理程序为page_fault。
linux0.11分为中断、系统、陷阱门。系统在启动的时候设置idt。...具体的处理可以见内存管理分析那篇文件。
我们知道write函数写入的数据不是实时同步硬盘的,系统提供了一个函数让我们的数据可以实时地同步到硬盘,那就是sync。但这个实时也是相对的,毕竟同步数据也需要...
然后设置了eip,这一篇分析一下开始执行第一条指令的时候。会发生什么。 我们先看一下这时候的内存布局。 ? 在这里插入图片描述 当cpu通过cs:eip执行第一条指令的时候。
file,buf,count); printk("(Write)inode->i_mode=%06o\n\r",inode->i_mode); return -EINVAL; } 这里我们只分析一般文件的写...其中bread函数的逻辑可以参考read函数分析那篇文章。内容读进来后,存在buffer中,我们就可以把用户的数据写进去了,然后标记这个buffer是脏的,等待回写到硬盘。
进程的睡眠是通过调用sleep_on函数,该函数修改了进程的状态并且通过schedule函数切换到其他进程执行,从而实现进程的挂起,TASK_UNINTERRU...
之前分析过系统调用的过程。这里就不详细说了。直接从sys_execve函数开始。...在这里插入图片描述 下面开始分析do_execve的实现。...eip, magic happens :-) */ // p成为栈指针即esp eip[3] = p; /* stack pointer */ 至此加载可执行文件的分析就完毕了...下篇分析执行第一条指令后会发生什么。
,count); } printk("(Read)inode->i_mode=%06o\n\r",inode->i_mode); return -EINVAL; } 我们这里只分析普通文件的读写
%eax popl %ebx popl %ecx popl %edx pop %fs pop %es pop %ds iret 函数比较长,分段分析...信号另外分析,这里假设没有信号,则直接跳转到标签3。
首先僵尸进程产生的原因是子进程退出了,但是父进程没有回收他的资源(pcb),所以我们从源头开始分析这个过程。那就是子进程退出的时候。进程是通过exit系统调用退出的。 我们看一下exit函数的代码。
linux0.11版本里是1秒触发100次,即10毫秒一次。加入新增一个定时器的jiffies值是2,那经过两次定时中断后就会被执行。jiffies值在每次定时中断时会加一。
https://blog.csdn.net/u014688145/article/details/50608829 备注:本文通过三个问题,引出Linux 内核0.11的系统调用。...Linux内核通过建立段级保护机制来完成上述区分核心与用户态区域的功能。好,请看下图: ?...timer_interrupt); outb(inb_p(0x21)&~0x01,0x21); set_system_gate(0x80,&system_call); } 这段代码位于/linux...再看(linux/include/asm/system.h): #define set_system_gate(n,addr) \ _set_gate(&idt[n],15,3,addr); #define
实验:在Linux 0.11上添加两个系统调用,并编写两个简单的应用程序测试它们。...等等,linux 0.11内核源码的编写与编译,需要在虚拟机模拟x86环境的情况下进行,这在我的Windows下用Bochs编译运行Linux-0.11有详细阐述,不再赘述。...重新编译下Linux内核。.../include/linux/sched.h \ ../include/linux/head.h ../include/linux/fs.h ...../include/linux/sched.h \ ../include/linux/head.h ../include/linux/fs.h ..
不知道大家有没有产生过一个疑问:从给 Linux 服务器按下开机电源按钮后到启动成功的一段时间里,在这中间 Linux 操作系统都做了哪些事情?...在 Linux 服务器没有通电的时候,操作系统还只是躺在硬盘启动区中的一段程序,CPU 没有工作,内存也没有启动。但是在你按下开机键后,Linux 服务器内部就开始变得热闹了起来。...经过几十秒或者几分钟的等待,Linux 服务器就可以使用了。 但这中间操作系统都干了啥呢?我有一位朋友叫闪客,就是因为对这个问题的好奇,花了两年时间写了 50 多篇文章,并还总结成了一本书。...叫做《Linux 源码趣读》。这周,这本新书正式印刷出炉了。 对于 Linux 启动过程,代码的运行在书中总结成下面一张图来表示。但分了 50 小节来讲述每一个步骤中的细节。...全书共 400 多页,250 多张精美的图解,五大部分,从头到尾把 Linux 0.11 全部核心代码讲述的一清二楚 当你按下电源后,在主板上提前写死的固件程序 BIOS 会将硬盘启动区中的 512
在上一篇文章 Linux epoll 源码分析 2 中,我们分析了 epoll_ctl 的 ep_insert 方法,在这里我们继续看下 ep_remove 和 ep_modify 方法。
上一篇文章我们分析了shutdown方法的实现,这里我们再看下close方法。
// net/socket.c SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr...
领取专属 10元无门槛券
手把手带您无忧上云