内核
ATM006
风之积也不厚 其负大翼也无力
展开
-
Orchid poll 剖析
可以看到,poll 的参数中,直接列出了要监视的文件描述符的信息,而不像 select 一样要列出从 0 开始到 nfds-1 的所有文件描述符。这样的好处是,poll 不需要查询很多无 关的文件描述符的信息,在一定场合下效率会有所提高。原创 2017-02-28 12:27:53 · 247 阅读 · 0 评论 -
init进程如何从内核态切换到用户态
init进程如何从内核态切换到用户态 . 大家都知道如何产生一个新的进程。 通过sys_fork,之后再调用sys_execve 系统初启后(核心态)的第一个用户态进程是init。 这要涉及到内层(特权级高)向外层(特权级低)转移的问题。 通常情况下,内核是不会调用用户层的代码,要想实现这逆向的转移,一般做法是在用户进程的核心栈(tss->esp0)压入用原创 2017-02-25 00:16:28 · 908 阅读 · 0 评论 -
进程从用户态到内核态
1.读取tr寄存器,访问(任务状态段)TSS 2.从TSS中的esp0获取内核栈顶指针 3.保存用户态上下文 esp寄存器是cpu栈指针,存放内核栈栈顶指针. 栈开始于末端,朝内存开始方向增长. 进程从用户态切到内核态,内核栈为空. 1.进程在进入内核态之前通过(任务状态段)TSS获得 内核栈栈顶指针. Linux为每个cpu提供一个TSS段,保存于tr寄存器原创 2017-02-25 00:24:25 · 1169 阅读 · 0 评论 -
Linux操作系统的启动
Linux操作系统的启动 2012-09-07 16:23:10 分类: LINUX Power on -->系统自检 -->将主引导程序 MBR 装入内存并把控制权交给它 MBR(master boot recond 主引导扇区:可以看作硬盘的第一个扇区) -->在 MBR 控制下,系统继续引导核心装入内存 -->系统进一步初始化过程: (1)首先初始化系统内转载 2017-03-29 23:40:17 · 198 阅读 · 0 评论 -
Orchid select 剖析
select 系统调用的功能是对多个文件描述符进行监视,当有文件描述符的文件读写操作完成,发生异常或者超时,该调用会返回这些文件描述符。原创 2017-02-28 12:25:22 · 226 阅读 · 0 评论 -
IO复用之epoll
1.每次调用时要重复地从用户态读入参数。 2.每次调用时要重复地扫描文件描述符。 3.每次在调用开始时,要把当前进程放入各个文件描述符的等待队列。在调用结束后, 又把进程从各个等待队列中删除。原创 2017-02-28 12:29:01 · 269 阅读 · 0 评论 -
do_brk()剖析
就像在注释中所提到的,do_brk()是一个简化版的do_mmap(),因为在这里只需要考虑匿名映射,与文件无关。do_brk()有两个参数,addr是要扩展到的目标区域的开始地址,len是目标区域的长度。 与mm/mmap.c文件中其它大多数函数的一样,do_brk()函数所做的是处理vm area,目标是在这个函数完成的时候,在进程空间中有一个匿名vm area能映射 error原创 2017-10-04 16:53:25 · 437 阅读 · 0 评论