随笔分类 -  linux0.1x

RTFSC
白话/图示 信号处理流程
摘要:信号的处理是当前进程在中断时,从内核态返回到用户态时要处理的第一件事,进程在从内核态返回用户态时,先检查进程是否有需要处理的信号(就是判断当前进程的进程控制块中的signal信号位图,和blocked阻止位图的相与),如果信号位图与阻止位图相与后,发现有置位的位,就说明当前进程有信号需要处理。此时,先判断是32种信号中的哪种,然后内核会把这个信号的处理函数的地址,作为内核返回用户态时的EIP,因此,当返回用户态后,用户态的执行流程就从信号处理函数开始执行,当执行完了信号处理函数后,再转到发生中断时所保留的下一条语句开始执行。而进程也许没有其他的中断,但是总会有时钟中断产生,因此,当有信号需要处 阅读全文
posted @ 2011-07-28 10:33 image eye 阅读(1297) 评论(0) 推荐(0)
图示/白话 ll_rw_blk.c
摘要: 阅读全文
posted @ 2011-07-26 22:22 image eye 阅读(253) 评论(0) 推荐(0)
白话 ramdisk
摘要:ramdisk 既是内存磁盘,就是利用物理内存的指定的容量,模仿磁盘的存储格式来存储文件,既然是模仿磁盘的存储格式来存储文件,那自然需要有磁盘的存储格式作为基础了。对于linux0.1x系统,支持的文件系统只有minix1.0,因此,要把指定的内存划分成可以存储文件,并能被minix1.0文件系统所能访问,就是按照minix1.0的格式来划分,存储了,亦即ramdisk也必须有引导块,超级块,逻辑块位图,I节点位图,I节点,逻辑块这些内容,而查找一个文件,也需要通过路径名,得到I节点号,再通过I节点号得到I节点,再通过I节点得到文件的存储在磁盘数据区(就是逻辑块)的内容,也就是说,内存磁盘就是 阅读全文
posted @ 2011-07-24 22:39 image eye 阅读(3189) 评论(0) 推荐(0)
白话/图解 FIFO(有名管道)的执行流程
摘要:打开两个终端,在第一个终端先执行fifo_read,创建有名管道,并且等待输入端输入之后,再在第二个终端执行fifo_write,之后,fifo_write将向管道写入数据,此时,输出管道将有数据可读,因此被唤醒,从管道中读出数据,并显示出来。/*fifo_read.c*/#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <string.h>#include <fcntl.h>#include <errno.h>#include &l 阅读全文
posted @ 2011-07-20 23:44 image eye 阅读(2232) 评论(0) 推荐(0)
图示/白话 container_of处理流程
摘要:container_of()宏定义的执行,可以通过结构体成员的地址而得到结构体的首地址,它需要三个参数,第一个参数是一个结构体成员的地址,第二个参数是结构体类型,第三个参数是结构体的成员,其推算的总思路是,获得一个结构体成员的地址,和这个结构体成员相对于首地址的偏移,然后使用结构体成员的地址,减去成员对首地址的偏移,即可得到结构体的首地址。如此,需要解决两个问题,一是如何得到一个结构体成员的地址,二是如何算出这个成员相对于首地址的偏移。对于第二个问题,使用了0地址,先把0地址强制转换成指定的结构体类型,即0地址是指定的结构体类型,那么相对于0地址的成员地址就是相对于0地址的偏移地址,因此可以得 阅读全文
posted @ 2011-07-17 22:36 image eye 阅读(666) 评论(0) 推荐(0)
白话/图示 select函数的执行流程
摘要:linux0.12实现的sys_select()系统调用,用来管理指定的文件句柄(即文件I节点,亦即文件)是否准备好,如果有准备好的文件句柄,则返回准备好的文件句柄数到调用select()函数的进程,继续执行后面的被阻塞的指令,如果没有准备好,则返回-1(表示错误),或者0,表示正常情况下没有就绪的文件可以用。此时,只要对select返回的值进行判断,就知道是否有文件已经准备好了。在linux0.12中,只实现了tty和pipe的select()阻塞功能,对tty的阻塞是在当需要读取键盘的输入数据而此时数据队列是空时,对pipe的阻塞是在当读端要读取数据但是管道是空的,或者写端要写数据,而管道 阅读全文
posted @ 2011-07-16 14:25 image eye 阅读(880) 评论(0) 推荐(1)
白话/图示 可变参数的函数执行流程
摘要:#include <stdio.h>#include <stdarg.h>void pp(char *fmt,...){char *arg;int i;double d;char c;char *s;printf("%s",fmt);arg=(char *)&fmt+4;i=*(int *)arg;printf("%d",i);arg+=sizeof(int);d=*(double *)arg;printf("%f",d);arg+=sizeof(double);c=*(char *)arg;print 阅读全文
posted @ 2011-07-14 18:26 image eye 阅读(364) 评论(0) 推荐(0)
图示 缓冲头的管理图示
摘要:高速缓冲区主要用于解决块设备的慢速度跟CPU的快速度的速度矛盾问题。当进程要读、写块设备时,不是直接写到块设备上的,而是先读写到高速缓冲区,而后就去处理其他事情了,而缓冲区什么时候会把数据写到块设备中(就是数据同步),缓冲区有针对数据块,I节点等的写盘函数,在特定时刻会把缓冲区中的数据写回指定的块设备中 阅读全文
posted @ 2011-07-13 23:14 image eye 阅读(313) 评论(0) 推荐(0)
图示 进程的执行流程
摘要: 阅读全文
posted @ 2011-07-13 23:14 image eye 阅读(320) 评论(0) 推荐(0)
图示 跟I节点相关的系统调用
摘要:有一些系统调用是通过获得I节点的信息而产生的。画一张图,让自己看的更清楚。 阅读全文
posted @ 2011-07-13 23:03 image eye 阅读(264) 评论(0) 推荐(0)
白话/图示 sleep_on/wake_up的执行流程
摘要:sleep_on函数用在当进程因等待某个资源,而把自己挂起的函数,wake_up函数则是用于当资源释放后,把最后等待这个资源进程唤醒,但是能否执行,则要看这个进程的优先级是否足够高而得到CPU的执行。sleep_on/wake_up在执行时会形成等会,唤醒的队列,这个队列是隐式的,画出图来才比较好理解。 阅读全文
posted @ 2011-07-13 23:01 image eye 阅读(1299) 评论(0) 推荐(0)
白话/图示 从逻辑地址到线性地址的转换流程
摘要:逻辑地址是程序源码编译后所形成的跟实际内存没有直接联系的地址,即在不同的机器上,使用相同的编译器来编译同一个源程序,则其逻辑地址是相同的,但是相同的逻辑地址,在不同的机器上运行,其生成的线性地址又不相同,因为把逻辑地址转换成线性地址的公式是线性地址=段基址*16+偏移的逻辑地址,而段基址由于不同的机器其任务不同,其所分配的段基址(线性地址)也会不相同,因此,其线性地址会不同。即使,对于转换后线性地址相同的逻辑地址,也因为在不同的任务中,而不同的任务有不同的页目录表和页表把线性地址转换成物理地址,因此,也不会有相同的物理地址冲突。注意的是,源码编译后生成的地址,只是偏移的地址,而形成逻辑地址的[ 阅读全文
posted @ 2011-07-13 22:44 image eye 阅读(4348) 评论(0) 推荐(0)
白话/图示 从路径名获得文件I节点流程
摘要:从路径名获得文件I节点的流程 阅读全文
posted @ 2011-07-13 22:26 image eye 阅读(242) 评论(0) 推荐(0)
图示/白话 execve执行流程
摘要: 阅读全文
posted @ 2011-07-13 16:03 image eye 阅读(624) 评论(0) 推荐(0)
白话/图示 系统调用过程
摘要:描述系统调用过程,发生系统调用时,会出现特权级的转换,因此需要更换堆栈,保存各寄存器,及把CS,DS指向内核代码段 阅读全文
posted @ 2011-07-13 11:37 image eye 阅读(208) 评论(0) 推荐(0)
白话/图示 fork系统调用过程
摘要:fork是创建新进程时的系统调用,它会遵循系统调用的流程,只是这个系统调用的是系统调用表中的sys_fork() 阅读全文
posted @ 2011-07-13 11:37 image eye 阅读(767) 评论(0) 推荐(0)
白话/图示 根文件系统
摘要:根文件系统,就是根的文件系统,首先它必须先是一个文件系统,之后才是根的文件系统,比如男人之于人。文件系统,就是用来组织文件的系统,其实反过来理解更容易,就是操作系统按照什么样的格式去访问,获取存储在磁盘中的文件(即必须按照文件系统规定的格式去访问磁盘文件)。文件系统按照一种格式存储文件,那么操作系统也只能按照这种格式的去访问,获取文件。比如,linux0.11中的minix1.0文件系统,它按照引导块/超级块/I节点位图/逻辑块位图/I节点表/逻辑块的格式来组织磁盘的,当你需要获得一个文件存储在磁盘中的某个位置,你必须先要找到这个文件的I节点,再通过I节点中的i_zone[]所记录的文件在逻辑 阅读全文
posted @ 2011-07-13 11:24 image eye 阅读(754) 评论(0) 推荐(0)
图示main函数的执行流程
摘要:执行main主函数的流程 阅读全文
posted @ 2011-07-13 10:03 image eye 阅读(577) 评论(0) 推荐(0)
图解从上电到执行main函数的处理
摘要:图解linux0.1x 从上电到执行main函数的处理 阅读全文
posted @ 2011-07-12 18:03 image eye 阅读(531) 评论(0) 推荐(0)