随笔分类 -  linux kernel

摘要:schedule.c 是关于进程调度的。schedule 函数是核心,先检查task列表中,有没有收到信号的,有的话处理之。/* check alarm, wake up any interruptible tasks that have got a signal */ for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) if (*p) { if ((*p)->alarm && (*p)->alarm < jiffies) { (*p)->signal |= (1<<(SIGALRM- 阅读全文

posted @ 2012-02-24 11:10 Teddy Yan 阅读(769) 评论(0) 推荐(0) |

摘要:Linux 系统包含了一大堆的中断,是所有操作的基础。中断中的开闭中断cli(close interrupt)指令用来复位CPU标志寄存器中的中断标志,使系统不响应外部中断。sti(start interrupt)指令用来复位,使系统响应中断。asm.s 设置了一堆底层中断,进入中断前要压入eax等寄存器,执行完要pop 出一些寄存器。这种统一的工作在 no_error_code里trap.c 里面是真正的中断处理C函数。set_trap_gate 就是设置IDT, 把asm.s中的函数地址加载到IDT表中。这个函数里内嵌汇编,内嵌汇编的语法讲了一些system_call.s 是系统调用的处理 阅读全文

posted @ 2012-02-16 16:00 Teddy Yan 阅读(388) 评论(0) 推荐(0) |

摘要:Linux 内存管理主要是32保护模式下,段页式内存管理。如何处理内存相关的寄存器,使得程序可以读写超过4G的内存。x86这个CPU框架,会根据寄存器的值和段页式规则来进行地址变换,进行内存访问。其中,也会进行权限验证等附加判断。几个概念:保护模式vs实模式保护模式下的:虚地址:程序产生的段选择符,段内偏移地址两部分组成。要经过分段地址变换处理后,才对应到屋里地址。逻辑地址:在Intel86保护模式下,就是指程序执行代码段限长内的偏移地址。线性地址:虚拟地址到物理地址变换的中间层。如果没有启用分页机制,线性地址就是物理地址。在保护模式下,读取内存很费周章。如下图,需要先找到GDT,然后找到LD 阅读全文

posted @ 2012-02-13 19:30 Teddy Yan 阅读(303) 评论(0) 推荐(0) |

摘要:bootsect.s 我们实验环境中,Image 就是一个软盘镜像,bootsect.s就在软盘的第一个扇区中(引导扇区,0磁道,0磁头,第一个扇区)硬盘有一个单独的镜像文件BIOS ROM如果设置成软盘启动,就把引导扇区的代码加载到0x7C00开始处执行。因为前面的内存保存有有用的信息。如果是从硬盘启动系统,就不执行bootsect.s。LILO, Grub等多操作系统引导程序来完成bootsect.s的任务。setup.s利用BIOS ROM中断读取硬件的系统数据,并将保存在0x90000的内存,覆盖掉bootsect.s 并将system模块(不超过512K)移动到0x00000处,加载 阅读全文

posted @ 2012-02-13 19:30 Teddy Yan 阅读(730) 评论(0) 推荐(0) |

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3